PBR(Policy-Based Routing)
ルータがルーティングする際、宛先 IP アドレスを見て判断する、ということを書いてきましたが、宛先 IP だけじゃなく、 送信元 IP アドレスや TCP/UDP ポートも見てルーティングを決めたい!というような場合、PBR (ポリシーベースルーティング)という機能で実現することができます。
この PBR は、まず制御したい通信対象を定義するのにアクセスリストを使います。
例えば『ssh の通信だけを NextHop を変えたい!』というときは、宛先ポート TCP/22 を許可するアクセスリストを作ります。
(config)# ip access-list 100 (config)# permit tcp any any eq 22
そしてポリシーマップという、ポリシーベースルーティングのルールを作ります。ここでは、SSH (TCP/22) 通信を NextHop: 10.2.2.254 に振り向けます。
(config)# route-map PBR1 permit 10 (config-route-map)# match ip address 100 (config-route-map)# set ip next-hop 10.2.2.254
最後に、この route-map をインタフェースに設定します。ここでは例えば gigabitEthernet 0/0 とします。
(config)# interface gigabitEthernet 0/0 (config-if)# ip policy route-map PBR1
すると、そのインタフェースに入ってきたパケットの中でアクセスリスト 100 に 引っかかった通信 (つまり宛先ポートが TCP/22 の通信) だけ、行き先を 10.2.2.254 に変えることができます。
アクセスリストは自由に設定可能ですので、送信元/宛先の IP および TCP/UDP ポートの如何なる組合せでもルーティングを変えることができます。
PBRとルーティングの優先順位
PBR はルーティングよりも優先されます。
PBR の範囲の中でも一部通信だけを除外したい場合は route-map で deny のルールを作ります。
例えば先程のルールの中でも、10.1.1.10 からの通信だけは SSH 通信をベストエフォート回線で利用させる場合は、以下の config を追加します。
(config)# ip access-list 101 (config-ext-nacl)# permit ip host 10.1.1.10 any (config)# route-map PBR1 deny 5 (config-route-map)# match ip address 101
これにより、アクセスリスト 101 に引っ掛かる通信を PBR 対象から外し、通常のルーティングによるルート選択をさせることができます。
IPROUTE2
ルータのポリシーベースルーティングの機能を、Linux で実現できるのが IPROUTE2 です。
IPROUTE2 は Linux のパッケージとして提供されています。
PBR のアクセスリストの代わりに、/etc/sysconfig/network-scripts ディレクトリ配下に route-[インタフェース名] ファイルと rule-[インタフェース名] ファイルを使うことができます。
先ほどの例で、First Hop ルータが無い場合にでも
IPROUTE2 で対応できます。
IPROUTE2 は Windows では提供されていないようです。
コメント