2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

CentOSでNICが複数ある場合のデフォルトゲートウェイを設定する

Posted at

今回、OSのアップデート(クリーンインストール)したCentOS 8でデフォルトゲートウェイを設定するのに手こずった(主に私の勉強不足で)ので、記録として残しておこうと思います。

概要

今回、対象のサーバはCentOS 8.2を導入しました。このサーバはNICが2つあり、それぞれデバイス名はeno1, eno2が振られています。

NIC2はルータ10.32.2.254に繋がっていて、このルータが外のネットワークに繋がっています。
NIC1はルータには繋がっておらず、このサーバがDHCPサーバとなり、各端末にIPを振るようにします。

10.32.2.254をデフォルトゲートウェイにしたいです。

失敗例

成功例は最終形態にあります。

## 何も考えずに過去の設定をぶち込む

本サーバをアップデート前に/etcを含めてバックアップを取っていました。そこで、そのバックアップから拾い出して来た設定を以下のようにそのまま書き写します。これで動いていた筈ですから……。

/etc/sysconfig/network-scripts/ifcfg-eno1
DEVICE=eno1
BOOTPROTO=none
HWADDR=XX:XX:XX:XX:XX:XX
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
IPV6INIT=no
PEERDNS=no
IPADDR=192.168.10.1
NETMASK=255.255.255.0
GATEWAY=192.168.10.254
/etc/sysconfig/network-scripts/ifcfg-eno2
DEVICE=eno2
BOOTPROTO=none
HWADDR=YY:YY:YY:YY:YY:YY
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
IPV6INIT=no
PEERDNS=yes
NETMASK=255.255.255.0
IPADDR=10.32.2.1
GATEWAY=10.32.2.254

これでサーバを再起動し、10.32.2.0/24のネットワークにいるサーバfoogoogle.comにpingを通してみると…

# ping foo
ping: foo: Name or service not known
# ping google.com
ping: google.com: Name or service not known

繋がりません。routeの設定を見てみると

# ip route
default via 192.168.10.254 dev eno1 proto static metric 100
default via 10.32.2.254 dev eno2 proto static metric 101
10.32.2.0/24 dev eno2 proto kernel scope link src 10.32.2.1 metric 101
192.168.10.0/24 dev eno1 proto kernel scope link src 192.168.10.1 metric 100
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown

となり、デフォルトゲートウェイが正しくない。それもそうで、本来いくつNICがあろうともデフォルトゲートウェイは1つでなければならない筈。で、ifconfigGATEWAYの値がバラバラに設定されている。しかも、192.168.10.254はルータとして存在していないもの。これでは繋がりません。

ここでデフォルトゲートウェイを設定する以下のコマンドを打ちます。

# route add default gw 10.32.2.254

すると、routeの設定は以下のようになり、接続出来るようになります。

# ip route
default via 10.32.2.254 dev eno2
default via 192.168.10.254 dev eno1 proto static metric 100
default via 10.32.2.254 dev eno2 proto static metric 101
10.32.2.0/24 dev eno2 proto kernel scope link src 10.32.2.1 metric 101
192.168.10.0/24 dev eno1 proto kernel scope link src 192.168.10.1 metric 100
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown

でも、これでめでたしとはならず、この設定が恒久的に適用されることはなく再起動するたびにこれを打たないといけません。
rcに書いて起動時に実行するでも良いのですが、ネットワークの設定が書ければそもそもそんなことしなくて良いし、何よりダサい
ここはカッコよくバシッとキメたいところです。

/etc/sysconfig/networkGATEWAY属性を加える。

このように設定します。

/etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=yes
HOSTNAME=hoge
GATEWAY=10.32.2.254

これでサーバを再起動させ、10.32.2.0/24のネットワークにいるサーバfoogoogle.comにpingを通してみると…

# ping foo
ping: foo: Name or service not known
# ping google.com
ping: google.com: Name or service not known

これでは繋がらず…。routeを見てみますと

# ip route
default via 10.32.2.254 dev eno1 proto static metric 100
default via 10.32.2.254 dev eno2 proto static metric 101
10.32.2.0/24 dev eno2 proto kernel scope link src 10.32.2.1 metric 101
10.32.2.254 dev eno1 proto static scope link metric 100
192.168.10.0/24 dev eno1 proto kernel scope link src 192.168.10.1 metric 100
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown

と、デフォルトゲートウェイが2つもいらっしゃる。ルータ(デフォルトゲートウェイ)にpingを飛ばしてみると

# ping 10.32.2.254
PING 10.32.2.254 (10.32.2.254) 56(84) bytes of data.
From 192.168.10.1 icmp_seq=1 Destination Host Unreachable
... ...

と、NIC1の方(ルータと直接繋がっていない)ものがデフォルトゲートウェイと通信しようとしてコケていることが分かります。
その理由は、routeのmetricがeno1に対しては100, eno2に対しては101になっている(優先度がeno1の方が高い)ことが原因のよう。

そこで、各NICの設定でDEFROUTEという属性を与えれば解決しそうということで

# 最終形態

まず、/etc/sysconfig/networkにてGATEWAY属性を加えます。

/etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=yes
HOSTNAME=hoge
GATEWAY=10.32.2.254

次に、各NICの設定(/etc/sysconfig/network-scripts/ifcfg-eno[n])で、ルータに繋がっているNICにのみDEFROUTE=yes, 他のNICにDEFROUTE=noを追加します。
ここではeno2がルータに繋がっているので、/etc/sysconfig/network-scripts/ifcfg-eno2DEFROUTE=yesを、/etc/sysconfig/network-scripts/ifcfg-eno1DEFROUTE=noをつけます。あと、eno1GATEWAY属性は消しておきます。具体的には

/etc/sysconfig/network-scripts/ifcfg-eno1
TYPE=Ethernet
BOOTPROTO=none
IPV6INIT=no
NAME=eno1
DEVICE=eno1
HWADDR=XX:XX:XX:XX:XX:XX
ONBOOT=yes
IPADDR=192.168.10.1
PREFIX=24
USERCTL=no
PEERDNS=no
PROXY_METHOD=none
BROWSER_ONLY=no
IPV4_FAILURE_FATAL=no
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
DNS1=192.168.10.1
ZONE=internal
DOMAIN=huga
DEFROUTE=no
/etc/sysconfig/network-scripts/ifcfg-eno2
TYPE=Ethernet
BOOTPROTO=none
IPV6INIT=no
NAME=eno2
HWADDR=YY:YY:YY:YY:YY:YY
DEVICE=eno2
ONBOOT=yes
IPADDR=10.32.2.1
PREFIX=24
GATEWAY=10.32.2.254
PROXY_METHOD=none
BROWSER_ONLY=no
IPV4_FAILURE_FATAL=no
UUID=yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy
PEERROUTES=no
DNS1=192.168.10.1
ZONE=external
DEFROUTE=yes

(DHCPだったり、firewallの設定も入ってしまっていると思います...)
このように設定し再起動させてpingを通してみると

# ping foo
PING foo.bar (10.32.2.22) 56(84) bytes of data.
64 bytes from foo.bar (10.32.2.22): icmp_seq=1 ttl=64 time=0.246 ms

# ping google.com
PING google.com (172.217.175.110) 56(84) bytes of data.
64 bytes from nrt20s21-in-f14.1e100.net (172.217.175.110): icmp_seq=1 ttl=115 time=3.07 ms

と、無事に接続できたことを確認。routeを見てみると

# ip route
default via 10.32.2.254 dev eno2 proto static metric 100
10.32.2.0/24 dev eno2 proto kernel scope link src 10.32.2.1 metric 100
192.168.10.0/24 dev eno1 proto kernel scope link src 192.168.10.1 metric 101
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown

と、デフォルトゲートウェイは一つに定まっていました。

参考

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?