torutkのブログ

ソフトウェア・エンジニアのブログ

CentOS 7.1のネットワーク設定でDHCPで配布されるゲートウェイを無視するには

問題発生

このゴールデンウィーク連休の前に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があり、DHCPIPアドレスを割り当てる場合で、その割り当てで配布されるゲートウェイデフォルトゲートウェイとしたくない場合は、先のnever-defaultではなく、ignore-auto-routes をyesにします。

# nmcli connection modify br0 ipv4.ignore-auto-routes yes