RHEL9(Rocky Linux9)のルーティング設定方法(nmcliコマンド)

Linux

サーバーOSをCentOS8からRocky Linux9に切り替えたのですが、ルーティングに関する仕様が変更されていましたので備忘録として設定方法を記載します。

CentOS8では、ネットワーク設定が/etc/sysconfig/network-scripts/にif-cfg形式で保存されていました。

ところがRHEL9では、設定ファイル保存場所が/etc/NetworkManager/system-connections/に変わり、ファイル記述形式もkeyfileフォーマットに一新されています。

keyfileの中身を見ると、以下の通り複雑化していますので手動作成は困難です。

# cd /etc/NetworkManager/system-connections
# ls
ens160.nmconnection
# cat ens160.nmconnection
[connection]
id=ens160
uuid=3419124e-3315-3ae3-a141-3b2dd6fd1da1
type=ethernet
autoconnect-priority=-999
interface-name=ens160
timestamp=1691814156

[ethernet]

[ipv4]
method=auto

[ipv6]
addr-gen-mode=eui64
method=auto

[proxy]

またCentOS8までは、if-cfgファイルの書き換えでもルーティング設定は出来ていましたが、RHEL9ではif-cfgファイルがデフォルトで存在しなくなりました

したがって、RHEL9のルーティング設定はnmcliコマンドを用いた設定が得策と思われますので、以下に手順を示します。

(手順1)ネットワークインタフェース情報を確認する

ネットワークデバイスのインタフェース名を調べるには「nmcli d」コマンドを使います。

nmcli dのdはデバイス(device)を示し、nmcli c のcはコネクション(connection)を示します。

nmcliコマンドの使い方は、Linuxであればどのバージョンであってもほぼ同じです。

[root@localhost]$ nmcli d
DEVICE  TYPE      STATE            CONNECTION 
ens160  ethernet  接続済み         ens160     
lo      loopback  接続済み (外部)  lo   
      
[root@localhost]$ nmcli c
NAME    UUID                                  TYPE      DEVICE 
ens160  3419124e-3315-3ae3-a141-3b2dd6fd1da1  ethernet  ens160 
lo      61275aa5-5ecb-4d10-9d27-54ea270a3c3b  loopback  lo

上述の例では、DEVICE名がens160、コネクション名がens160となります。

DEVICE名とコネクション名は、自動で付与されますので、特段の意識をしなくても大丈夫です。

(手順2)ルーティング情報を確認する

ルーティング情報は、「ip route」 と「netstat -nr」で表示することが出来ます。

[root@localhost system-connections]$ ip route
default via 192.168.50.2 dev ens160 proto dhcp src 192.168.50.130 metric 100 
192.168.50.0/24 dev ens160 proto kernel scope link src 192.168.50.130 metric 100 
[root@localhost system-connections]$ netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         _gateway        0.0.0.0         UG        0 0          0 ens160
192.168.50.0    0.0.0.0         255.255.255.0   U         0 0          0 ens160

上述の例では、物理ネットワークインタフェースはens160の1つだけで、ルーティングは以下の設定になっています。

  • IP address: DHCP(192.168.50.2)
  • DHCP Server: 192.168.50.130(Windows上のVMware WorkstationのDHCPサーバーとなります)

(手順3)ルーティングテーブルを追加する

ルーティングテーブルの追加はnmcliコマンド(管理者権限)で行います。

以下のルーティング設定を行ってみます。

  • ホッピングアドレス:192.168.10.0/24
  • ネクストゲートウェイ:172.10.30.254

192.168.10.0のIPアドレスを、172.10.30.254のゲートウェイにルーティングする設定をいれます。

# nmcli conn mod eth0 +ipv4.routes "192.168.10.0/24 172.10.30.254"

Linuxは複数の物理NICインタフェースを積んでいても、defalt gatewayは1つのみとなりますので、2つ目以降のNICに対してgatewayを設定する場合は、static routeを記載する必要があります。

(手順4)ネットワーク設定を反映

設定反映方法はsystemctlでNetworkManagerを指定して行います。

ネットワーク設定を変更するときは、systemctl restartで設定反映が出来ない場合も多々あります。

その時はnmcliによるNICのdown/upを使うとうまくいきます。NICのdown/upでも操作していることは全く同じです。

CentOS8, RHEL9(Rocky Linux9)
# systemctl restart NetworkManager

systemctlでも変更されない場合は以下を実施
# nmcli con down <interface名>
# nmcli con up <interface名>

NetworkManagerは、RHEL8(CentOS8)から変更されています。

CentOS7までの"systemctl restart network"ではネットワーク設定が変更できませんので、注意が必要です。

最後にルーティングテーブルを確認し、反映ができていることを確認し、pingで疎通確認が取れれば作業終了です。

root@localhost system-connections]$ netstat -nr
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.50.2    0.0.0.0         UG        0 0          0 ens160
172.10.30.254   0.0.0.0         255.255.255.255 UH        0 0          0 ens160
192.168.10.0    172.10.30.254   255.255.255.0   UG        0 0          0 ens160
192.168.50.0    0.0.0.0         255.255.255.0   U         0 0          0 ens160

[root@localhost system-connections]$ ip route
default via 192.168.50.2 dev ens160 proto dhcp src 192.168.50.130 metric 100 
172.10.30.254 dev ens160 proto static scope link metric 100 
192.168.10.0/24 via 172.10.30.254 dev ens160 proto static metric 100 
192.168.50.0/24 dev ens160 proto kernel scope link src 192.168.50.130 metric 100

注意事項

リモートデスクトップやSSHなどのネットワーク接続で設定している場合、nmcli con downをすると接続が切れ、設定にミスがあると再接続できなくなってしまいます

nmcliでインタフェース再起動を行う場合は、必ず物理コンソールにアクセスできる環境で行うように心がけてください。