ふとした機会から複数のインタフェース、インターネット経路を持つLinuxマシンのルーティングの制御をする必要がでてきました。その際に調べたことをメモしておきます。
現状のカーネルのルーティングテーブルを表示する。
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 aaa.bbb.ccc.241 0.0.0.0 UG 0 0 0 enp3s0
0.0.0.0 192.168.1.254 0.0.0.0 UG 100 0 0 enx0000deafbeaf
0.0.0.0 192.168.10.1 0.0.0.0 UG 100 0 0 enp2s0
aaa.bbb.ccc.240 0.0.0.0 255.255.255.248 U 0 0 0 enp3s0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 enx0000deafbeaf
192.168.1.254 0.0.0.0 255.255.255.255 UH 100 0 0 enx0000deafbeaf
192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 enp2s0
192.168.10.1 0.0.0.0 255.255.255.255 UH 100 0 0 enp2s0
特定のインタフェースの優先度(Metric)を下げる。(注:マッチするマスク長の長さが長いほうが最初に優先されるので、通常はmetricには注意しなくてよさそう)
$ sudo apt install ifmetric
でifmetricコマンドをインストールして、
$ sudo ifmetric enp3s0 50
でインタフェースの優先度を変更する。変更後は、
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 aaa.bbb.ccc.241 0.0.0.0 UG 50 0 0 enp3s0
0.0.0.0 192.168.1.254 0.0.0.0 UG 100 0 0 enx0000deafbeaf
0.0.0.0 192.168.10.1 0.0.0.0 UG 100 0 0 enp2s0
aaa.bbb.ccc.240 0.0.0.0 255.255.255.248 U 50 0 0 enp3s0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 enx0000deafbeaf
192.168.1.254 0.0.0.0 255.255.255.255 UH 100 0 0 enx0000deafbeaf
192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 enp2s0
192.168.10.1 0.0.0.0 255.255.255.255 UH 100 0 0 enp2s0
特定のIPアドレスへの通信を特定のインタフェースから送信するため、ルーティングテーブルを追加する。
$ sudo route add -host 8.8.8.8 gw 192.168.10.1
または
$ sudo ip route add 8.8.8.8/32 via 192.168.10.1 dev enp2s0
変更後のルーティングテーブルは、
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 aaa.bbb.ccc.241 0.0.0.0 UG 50 0 0 enp3s0
0.0.0.0 192.168.1.254 0.0.0.0 UG 100 0 0 enx0000deafbeaf
0.0.0.0 192.168.10.1 0.0.0.0 UG 100 0 0 enp2s0
8.8.8.8 192.168.10.1 255.255.255.255 UGH 0 0 0 enp2s0
aaa.bbb.ccc.240 0.0.0.0 255.255.255.248 U 50 0 0 enp3s0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 enx0000deafbeaf
192.168.1.254 0.0.0.0 255.255.255.255 UH 100 0 0 enx0000deafbeaf
192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 enp2s0
192.168.10.1 0.0.0.0 255.255.255.255 UH 100 0 0 enp2s0
追加したテーブルを削除する場合は、
$ sudo route del -host 8.8.8.8
で操作できる。
既存のインタフェースにIPアドレスを一時的に追加
調査のために一時的にIPアドレスを追加で付与しました。その方法です。
$ sudo ip addr add aaa.bbb.ccc.244/29 dev enp3s0