PBR(Policy-Based Routing)
ルータがルーティングする際、宛先IPアドレスを見て判断する、ということを書いてきましたが、宛先IPだけじゃなく、 送信元IPアドレスやTCP/UDPポートも見てルーティングを決めたい!というような場合、PBR(ポリシーベースルーティング)という機能で実現することができます。
このPBRは、まず制御したい通信対象を定義するのにアクセスリストを使います。例えば『sshの通信だけをNextHopを変えたい!』というときは、宛先ポートTCP:22を許可するアクセスリストを作ります。
permit tcp any any eq 22
そしてポリシーマップという、ポリシーベースルーティングのルールを作ります。ここでは、SSH(tcp:22)通信をNextHop: 10.2.2.254に振り向けます。
match ip address 100
set ip next-hop 10.2.2.254
最後に、このroute-mapをインタフェースに設定します。ここでは例えばgigabitEthernet 0/0とします。
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を追加します。
route-map PBR1 deny 5
match ip address 101
IPROUTE2
ルータのポリシーベースルーティングの機能を、Linuxで実現できるのがIPROUTE2です。IPROUTE2はLinuxのパッケージとして提供されています。
PBRのアクセスリストの代わりに、/etc/sysconfig/network-scripts ディレクトリ配下にroute-[インタフェース名]ファイルとrule-[インタフェース名]ファイルを使うことができます。先ほどの例で、First Hopルータが無い場合にでも IPROUTE2で対応できます。
IPROUTE2 は Windows では提供されていないようです。