問題発生
このゴールデンウィーク連休の前にCentOS 7のサーバーを停止し、連休が明けたのでサーバーを起動したところ、ネットワークが不通になるという問題が発生しました。
2つのNICを持つデュアルホームな構成で、片方がDHCPでアドレスを取得する系です。起動したところ、DHCP側のネットワークは通じていますが、固定IPアドレス設定側のネットワークが不通になるという状況でした。
固定IPアドレス側については、自身のNICのアドレスへのpingと、デフォルトゲートウェイのルーターへのpingは通じていますが、ゲートウェイ越しのpingが不通という状況です。
そこで、ip routeコマンドでルーティング設定を確認したところ、デフォルトゲートウェイが2つ設定され、意図するNICとは違う側(DHCP)のゲートウェイが優先的に設定されていました。
$ ip route default via 192.168.1.254 dev br0 proto static metric 100 default via 172.16.1.254 dev br1 proto static metric 425 192.168.1.0/24 dev br0 proto kernel scope link src 192.168.1.11 metric 100 172.16.1.0/24 dev br1 proto kernel scope link src 172.16.1.11 metric 425
なぜ停止前は問題なかったかは分かりませんが、困った自体です。
デフォルトゲートウェイの設定
デフォルトゲートウェイの設定箇所は次の2箇所が可能です。
# /etc/sysconfig/network に記述
@GATEWAY=172.16.1.254@
# /etc/sysconfig/network-scripts/ifcfg-xxx に記述(xxxはデバイス名)
@GATEWAY=172.16.1.254@
1.と2.の設定が両方ある場合、2.が優先されます。
2.が複数あるときは、先勝ち(ルーティングテーブルの上に定義)
通常の設定方針としては、1.には記述せず、2.に記述するようにし、2.が複数あるときは、デフォルトゲートウェイにしたいNICの設定でnever-defaultをnoにし、それ以外のNICの設定でnever-defaultをyesにします。
# nmcli connection modify br0 ipv4.never-default yes # nmcli connection modify br1 ipv4.never-default no
このコマンドは、/etc/sysconfig/network-scripts/ifcfg-br0とifcfg-br1のDEFROUTEを設定します。br0のゲートウェイはデフォルトゲートウェイにせず、br1のゲートウェイをデフォルトゲートウェイに設定します。
この設定は、IPアドレスを固定で割り当てる場合はうまくいきますが、IPアドレスをDHCPで割り当てる場合(ゲートウェイアドレスをDHCPで配布)はうまくいきません。
デフォルトゲートウェイの設定(DHCP編)
複数NICがあり、DHCPでIPアドレスを割り当てる場合で、その割り当てで配布されるゲートウェイをデフォルトゲートウェイとしたくない場合は、先のnever-defaultではなく、ignore-auto-routes をyesにします。
# nmcli connection modify br0 ipv4.ignore-auto-routes yes