ip コマンドで rule を使う。
テーブル100を作って、指定のマークが有るパケットだけを、別のルーティングテーブルへ掛ける
iptablesでパケットにマークング(フラグ)設定しておいて、マーク済みパケット対象のルーティングテーブルを作る。通称がポリシールーティング。
ルーティング・マークの設定
ip rule add fwmark 0x1 lookup 100 ip route add local 0.0.0.0/0 dev lo table 100
0x1 = 1
にマークされたパケットが届いたら、100
のテーブルを参照するように、ルールを作っている。
コマンドip rule add
でルーティングのポリシを追加している。
さらに、100のテーブルに独自のルーティング・テーブルを追加している。
テーブルの参照・確認
作成したテーブルtable 100
に含まれるルールを表示する。
ip route show table 100
テーブルの一覧
デフォルト設定も含め、登録されている、テーブル一覧を出す。
ip rule list
テーブルの削除
テーブルに入れているルールの削除
ip rule del fwmark 0x1 lookup 100
ルールテーブルに含まれるルーティング要素の削除
ip route del local 0.0.0.0/0 dev lo table 100
例 1.1.1.1 宛の ping をIPSec経由にする
# ポリシールーティングのために ruleとマーキング(フラグ設定) を作成 ip rule add fwmark 101 table 101 ip route add default via 10.200.0.1 table 101 iptables -I PREROUTING -t mangle -p icmp -d 1.1.1.1/32 -j MARK --set-mark 101 # ポリシールーティングのチェック。 ip route show table 101 ip route get fibmatch 1.1.1.1 mark 101 ## 実働テスト ping 1.1.1.1 ## ポリシールーティングの削除 iptables -D PREROUTING -t mangle -p icmp -d 1.1.1.1/32 -j MARK --set-mark 101 ip route del default via 10.200.0.1 table 101
特定の通信だけGWを変更する
上記の例は、特定通信のみIPSecを通し、対象外の通信は平常通りのDefault GWを通す。
つまり、条件にマッチしたパケットだけを、別のGWへ転送している。
ポリシールーティングでデフォルトゲートウェイを複数持つような状況を作れてとても便利。IPSecで使うポート・IPを限定できる。
パケットを管理するときや疎通確認のときには、別経路でSSHを先に通しておくなど、いくつかの場面でデフォルトのルーティングを「意図的な別経路」を作るときに便利である。
ip rule で作成・確認する。
ip rule
と iptable --set-mark
を組み合わせて、指定パケットの疎通に、ポリシールーティングを使う。このときに使う ip ruke
で作成したテーブルやルール、またその中に含まれるルーティング・テーブルを確認するコマンドをまとめた。
ただし、調べるときは、フラグを付けるルール(set mark)が iptablesにある。iptables
とip rule
はペアになっている。なので、調べるときは iptables / nftables も合わせて確認する。