CentOS7で同一セグメント上に2枚のNICを挿した場合に
2枚目のNICの疎通ができなくなるので対処法を記しました。
原因:同一セグメントに2枚のNICがあると、送信する際に
1枚目のNICからパケットが出て行ってしまう為。
対応方法:ポリシーベースルーティング設定を行い、
2枚目のNICからも送信できるようにします。
環境
Linuxホスト(CentOS7)
1枚目NIC:192.168.0.40/24
2枚目NIC:192.168.0.45/24
ストレージ(NetApp)
IP1:192.168.0.55
IP2:192.168.0.56
一時的に設定する場合(再起動すると設定が消える)
1枚目のNICの経路テーブルIDの登録
(192.168.0.40からのパケットはテーブルID:99、プライオリティー100のルールに従う)
ip rule add from 192.168.0.40 table 99 prio 100
1枚目のNICのルーティングの登録
(192.168.0.0宛てで送信元IP:192.168.0.40のパケットは1枚目のNIC(ens160)から送信する テーブルID:99に登録)
ip route add 192.168.0.0/24 dev ens160 src 192.168.0.40 table 99
(0.0.0.0宛てのパケットは1枚目のNIC(ens160)からGW:192.168.0.1宛てに送信する テーブルID:99に登録)
ip route add 0.0.0.0 via 192.168.0.1 dev ens160 table 99
2枚目のNICの経路テーブルIDの登録
(192.168.0.45からのパケットはテーブルID:100、プライオリティー200のルールに従う)
ip rule add from 192.168.0.45 table 100 prio 200
2枚目のNICのルーティングの登録
(192.168.0.0宛てで送信元IP:192.168.0.45のパケットは2枚目のNIC(ens192)から送信する テーブルID:100に登録)
ip route add 192.168.0.0/24 dev ens192 src 192.168.0.45 table 100
(0.0.0.0宛てのパケットは2枚目のNIC(ens192)からGW:192.168.0.1宛てに送信する テーブルID:100に登録)
ip route add 0.0.0.0 via 192.168.0.1 dev ens192 table 100
ルーティングルールの確認
ip route ではポリシーベースルーティングの情報は確認できない。
ip rule
0: from all lookup local
100: from 192.168.0.40 lookup 99
200: from 192.168.0.45 lookup 100
32766: from all lookup main
32767: from all lookup default
ip route show table 99
0.0.0.0 via 192.168.0.1 dev ens160
192.168.0.0/24 dev ens160 scope link src 192.168.0.40
ip route show table 100
0.0.0.0 via 192.168.0.1 dev ens192
192.168.0.0/24 dev ens192 scope link src 192.168.0.45
永続設定するには、設定ファイルを編集の必要があります(再起動しても設定が残る)
経路テーブルIDの登録
vi /etc/iproute2/rt_tables
以下を追記
99 rule40
100 rule45
ルールファイルの作成
vi /etc/sysconfig/network-scripts/rule-ens160
from 192.168.0.40 table rule40 priority 100
「送信元IPが192.168.0.40ならrule40に従う、優先度は100」というルールを定義
vi /etc/sysconfig/network-scripts/rule-ens192
from 192.168.0.45 table rule45 priority 200
「送信元IPが192.168.0.45ならrule45に従う、優先度は200」というルールを定義
ルーティングファイルの修正
vi /etc/sysconfig/network-scripts/route-ens160
192.168.0.0/24 dev ens160 src 192.168.0.40 table rule40 …(1)
0.0.0.0 via 192.168.0.1 dev ens160 table rule40 …(2)
(1) 「192.168.0.0/24宛てでホストがens160の192.168.0.40だったらrule40に従う」
(2) 「rule40のデフォルトゲートウェイは192.168.0.1」
vi /etc/sysconfig/network-scripts/route-ens192
192.168.0.0/24 dev ens192 src 192.168.0.45 table rule45
0.0.0.0 via 192.168.0.1 dev ens192 table rule45
ネットワークの再起動
systemctl restart network
ルーティングルールの確認
ip rule
0: from all lookup local
100: from 192.168.0.40 lookup rule40
200: from 192.168.0.45 lookup rule45
32766: from all lookup main
32767: from all lookup default
ip route show table rule40
0.0.0.0 via 192.168.0.1 dev ens160
192.168.0.0/24 dev ens160 scope link src 192.168.0.40
ip route show table rule45
0.0.0.0 via 192.168.0.1 dev ens192
192.168.0.0/24 dev ens192 scope link src 192.168.0.45
疎通確認
ping -I ens160 192.168.0.55
ping -I ens192 192.168.0.56
両方のNICからNetAppに疎通できることを確認して下さい。
障害テスト
ip l set ens160 down
ip l set ens160 up
↑だとポリシールーティングルールがNICダウン時に消えて、アップ時に戻らない
ifdown ens160
ifup ens160
↑だとNIC再開時にポリシールーティング設定ファイルが反映されて、復帰する。