複数のネットワークに接続するサーバーを構築するとき、「特定の宛先へのパケットを別のゲートウェイに向けたい」という場面はよく出てきます。
この記事では、NetworkManagerのコマンドラインツール「nmcli」を使って、Linuxに静的ルートを追加・削除・確認する手順を解説します。
nmcliによる設定は再起動後も消えない永続的な設定になるため、ip route addコマンドによる一時設定との違いもあわせて確認しておきましょう。
nmcliでルーティングを設定すべき理由
Linuxでスタティックルートを追加する方法は主に2つあります。
ip route addコマンドは即座に反映される反面、OSを再起動すると設定が消えます。
サーバー運用では再起動後も経路を維持したいケースがほとんどなので、nmcliによる永続設定が基本になります。
| 方法 | 永続性 | 即時反映 |
|---|---|---|
nmcli connection modify + con up | 永続 | con up後に反映 |
ip route add | 一時(再起動で消える) | 即時 |
nmcliの全体的な使い方についてはnmcli完全ガイド:Linuxネットワーク設定の決定版も参考にしてください。
事前確認:接続プロファイル名とルーティングテーブルを確認する
まず、設定対象の接続プロファイル名(コネクション名)を確認します。
nmcli connection show
出力例:
NAME UUID TYPE DEVICE
ens160 3419124e-3315-3ae3-a141-3b2dd6fd1da1 ethernet ens160
lo 61275aa5-5ecb-4d10-9d27-54ea270a3c3b loopback lo
NAME列に表示されているのがコネクション名です(通常はデバイス名と同じ)。
デバイス名とコネクション名が異なる場合は、必ずコネクション名(NAME列)を使って設定します。
次に、現在のルーティングテーブルを確認しておきます。
ip route show
出力例:
default via 192.168.1.1 dev ens160 proto static metric 100
192.168.1.0/24 dev ens160 proto kernel scope link src 192.168.1.10 metric 100
ネットワークインターフェースの確認方法の詳細はLinuxでネットワークインターフェースを確認する方法を参照してください。
スタティックルートを追加する
基本の書式
nmcli connection modify <コネクション名> +ipv4.routes "<宛先ネットワーク>/<プレフィックス> <ゲートウェイIP>"
+ipv4.routesの「+」は既存ルートに追記することを意味します。+を付けずipv4.routesのみを指定すると、既存の設定がすべて上書きされるので注意が必要です。
設定を反映させる
nmcli connection modifyを実行しただけでは、現在のルーティングテーブルにはまだ反映されません。
インターフェースのdown/upによって設定が有効になります。
nmcli connection down <コネクション名>
nmcli connection up <コネクション名>
実際の手順:ルート追加から確認まで
ステップ1:ルートを追加する
192.168.100.0/24 宛のパケットをゲートウェイ 192.168.57.254 経由に向ける例です。
nmcli connection modify ens160 +ipv4.routes "192.168.100.0/24 192.168.57.254"
コマンドは成功しても何も出力されません。
ステップ2:設定を反映させる
nmcli connection down ens160
nmcli connection up ens160
注意: リモート接続(SSH等)で作業している場合、
nmcli connection downを実行するとそのまま接続が切断されます。
必ず物理コンソールにアクセスできる環境か、接続維持できる別のインターフェースがある状態で実行してください。
ステップ3:ルーティングテーブルで確認する
ip route show
追加したルートが表示されれば設定完了です。
default via 192.168.1.1 dev ens160 proto static metric 100
192.168.1.0/24 dev ens160 proto kernel scope link src 192.168.1.10 metric 100
192.168.100.0/24 via 192.168.57.254 dev ens160 proto static metric 100
複数のルートを一度に追加する
複数の宛先ネットワークを同時に追加するには、+ipv4.routesを複数並べて指定します。
nmcli connection modify ens160 \
+ipv4.routes "192.168.100.0/24 192.168.57.254" \
+ipv4.routes "10.10.0.0/16 192.168.57.254"
nmcli connection up ens160
または、カンマ区切りで1つの引数にまとめることも可能です(Red Hat系ディストリビューションで確認済み)。
nmcli connection modify ens160 \
+ipv4.routes "192.168.100.0/24 192.168.57.254, 10.10.0.0/16 192.168.57.254"
nmcli connection up ens160
設定済みルートを確認する
現在のコネクションに設定されているスタティックルートは、以下のコマンドで確認できます。
nmcli -f ipv4.routes connection show <コネクション名>
出力例:
ipv4.routes: { ip = 192.168.100.0/24, nh = 192.168.57.254, mt = -1 }
{ ip = 10.10.0.0/16, nh = 192.168.57.254, mt = -1 }
ipが宛先ネットワーク、nh(next hop)がゲートウェイ、mtがメトリックです。
特定のルートを削除する
1件だけ削除する
追加に使った+を-に変えて指定します。
追加時と完全に同じ宛先・ゲートウェイを指定しないと削除できない点に注意してください。
nmcli connection modify ens160 -ipv4.routes "192.168.100.0/24 192.168.57.254"
nmcli connection up ens160
全件削除する
設定されているルートをすべて消したい場合は、空文字を指定します。
nmcli connection modify ens160 ipv4.routes ""
nmcli connection up ens160
IPv6のルートを追加する場合
IPv6にも同じ要領で対応できます。ipv4.routesをipv6.routesに変えるだけです。
nmcli connection modify ens160 +ipv6.routes "2001:db8:2::/64 2001:db8:1::10"
nmcli connection up ens160
ip route addコマンドとの使い分け
テスト目的や即時確認が必要な場合はip route addを使う方が便利です。
この設定はOS再起動やNIC再起動で消えます。
# 一時的な追加(再起動で消える)
ip route add 192.168.100.0/24 via 192.168.57.254 dev ens160
# 一時的な削除
ip route del 192.168.100.0/24 via 192.168.57.254 dev ens160
nmcliで永続設定している場合、ip route delで一時削除してもNICのdown/upや再起動で元に戻ります。
永続設定を消したい場合は必ずnmcliの-ipv4.routesで削除してください。
インターネット接続の確認方法についてはLinuxでインターネット接続を確認する方法|ping・curl・routeで原因切り分け!も参考にしてください。
まとめ
nmcliでスタティックルートを追加する基本の流れは以下の3ステップです。
nmcli connection modify <コネクション名> +ipv4.routes "<宛先>/<プレフィックス> <GW>"でルートを追加nmcli connection down <コネクション名> && nmcli connection up <コネクション名>で反映ip route showでルーティングテーブルを確認
+ipv4.routesとipv4.routesの違い(追記か上書きか)、およびip route delでは永続設定を消せないという2点は特に混乱しやすいので注意が必要です。
AlmaLinuxやRocky LinuxなどRed Hat系でのIP設定全般についてはAlmaLinuxでIPアドレスをコマンドで設定する方法も参考にしてみてください。
参考情報源:

コメント