それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ip コマンドで rule を使う。(ポリシールーティング)

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 宛の pingIPSec経由にする

  • icmp to 1.1.1.1 をIPSec経由にする
  • 10.200.0.1 がIPSec先のGW
# ポリシールーティングのために 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 ruleiptable --set-markを組み合わせて、指定パケットの疎通に、ポリシールーティングを使う。このときに使う ip rukeで作成したテーブルやルール、またその中に含まれるルーティング・テーブルを確認するコマンドをまとめた。

ただし、調べるときは、フラグを付けるルール(set mark)が iptablesにある。iptablesip ruleはペアになっている。なので、調べるときは iptables / nftables も合わせて確認する。