Linuxカーネルのルーティング制御

ふとした機会から複数のインタフェース、インターネット経路を持つ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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)