ip ruleコマンドで、ポリシーベースルーティングの設定ができる。
見るには、下記のように打つ
ip rule show
sudo ip rule show
出力例
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
10000: to 100.64.0.0/10 lookup 100
読み方
この例では、10000: という番号がついたルールが 100.64.0.0/10 に適用され、lookup 100(ルーティングテーブル 100 を参照)となっている。
ポリシールーティングとは
ポリシールーティング(Policy-Based Routing, PBR)は、通常のルーティングテーブル(main)とは異なるルールを適用し、パケットの送信先や経路を柔軟に制御する仕組み。
通常のルーティング(デスティネーションベースのルーティング)は「宛先 IP アドレス」に基づいてルートを決定するが、ポリシールーティングでは送信元 IP や特定のプロトコル、インターフェース、ポートなどに基づいて異なるルートを適用可能。
用途例
- マルチホーム環境(複数のインターネット接続)
例: あるサブネット (192.168.1.0/24) のトラフィックは ISP1 を使い、別のサブネット (192.168.2.0/24) は ISP2 を使う
- ip rule add from 192.168.1.0/24 table 100
- ip route add default via ISP1_GW dev eth0 table 100
- VPN や特定ネットワークへのトラフィック制御
特定の宛先(例: 100.64.0.0/10)への通信は VPN(Tailscale, WireGuard, OpenVPN)を経由させる
- ip rule add to 100.64.0.0/10 table 200
- ip route add 100.64.0.0/10 dev vpn0 table 200
VPN 経由で特定のネットワークにアクセスさせることで、セキュリティやプライバシーを確保
- 送信元 IP ベースのルーティング
複数の IP アドレスを持つサーバーで、送信元 IP に応じて異なるルートを設定
例: 192.168.1.100 からのパケットは eth0 を、192.168.2.100 からのパケットは eth1 を使う
- ip rule add from 192.168.1.100 table 101
- ip rule add from 192.168.2.100 table 102
- ip route add default via 192.168.1.1 dev eth0 table 101
- ip route add default via 192.168.2.1 dev eth1 table 102
- ロードバランシング
複数のネットワークインターフェース(NIC)を持つサーバーで負荷分散
例: eth0 と eth1 を使い、一定の条件でパケットを分散させる
- ip rule add fwmark 1 table 103
- ip route add default via 192.168.1.1 dev eth0 table 103
- iptables -t mangle -A PREROUTING -m statistic --mode random --probability 0.5 -j MARK --set-mark 1
- iptables -t mangle -A PREROUTING -j MARK --set-mark 2
これにより、パケットの 50% を eth0、残りを eth1 に分ける