スタティックルートを追加する

スタティックルートを追加する。

環境

内容

nmcliコマンドを使って、スタティックルートを設定する手順をまとめます。

ネットワーク設定は以下のようになっているとします。

DeviceConnectionIP
enp0s3enp0s310.0.2.15/24
enp0s8System enp0s8192.168.33.101/24
enp0s9System enp0s9192.168.34.101/24
# nmcli
enp0s3: connected to enp0s3
        "Intel 82540EM Gigabit Ethernet Controller (PRO/1000 MT Desktop Adapter)"
        ethernet (e1000), 08:00:27:11:AD:D2, hw, mtu 1500
        ip4 default
        inet4 10.0.2.15/24
        inet6 fe80::d927:d646:dfa1:fcbb/64

enp0s8: connected to System enp0s8
        "Intel 82540EM Gigabit Ethernet Controller (PRO/1000 MT Desktop Adapter)"
        ethernet (e1000), 08:00:27:B6:92:7D, hw, mtu 1500
        inet4 192.168.33.101/24
        inet6 fe80::a00:27ff:feb6:927d/64

enp0s9: connected to System enp0s9
        "Intel 82540EM Gigabit Ethernet Controller (PRO/1000 MT Desktop Adapter)"
        ethernet (e1000), 08:00:27:39:D9:95, hw, mtu 1500
        inet4 192.168.34.101/24
        inet6 fe80::a00:27ff:fe39:d995/64

lo: unmanaged
        "lo"
        loopback (unknown), 00:00:00:00:00:00, sw, mtu 65536

DNS configuration:
        servers: 10.0.2.3
        domains: example.com
        interface: enp0s3

Use "nmcli device show" to get complete information about known devices and
"nmcli connection show" to get an overview on active connection profiles.

Consult nmcli(1) and nmcli-examples(5) manual pages for complete usage details.

今回、以下のようなルーティングを追加してみます。

宛先ゲートウェイ
192.168.100.0/24192.168.33.254
192.168.200.0/24192.168.33.254

事前確認

ルーティング

まず、現状のルーティングテーブルを確認します。

# ip route
default via 10.0.2.2 dev enp0s3 proto static metric 100
10.0.2.0/24 dev enp0s3 proto kernel scope link src 10.0.2.15 metric 100
192.168.33.0/24 dev enp0s8 proto kernel scope link src 192.168.33.101 metric 100
192.168.34.0/24 dev enp0s9 proto kernel scope link src 192.168.34.101 metric 100

ディフォルトゲートウェイ以外、スタティックルートは存在していな状態です。

設定ファイル

設定ファイルの作成状況も確認しておきます。
スタティックルートに関する設定ファイルは存在していません。

# ls -l /etc/sysconfig/network-scripts/route-*
※何も表示されない※

ルーティングの追加

それでは、ルーティングの設定を追加してみます。
今回は、「192.168.100.0/24」宛の通信を「192.168.33.254」へルーティングするので、インタフェース「enp0s8」に紐づく設定として追加する必要があります。

ルーティングを追加する際のnmcliコマンドは、以下のような書式となります。

nmcli connection modify Connection名 ipv4.routes "宛先アドレス ゲートウェイ"

ただ、nmcliコマンドでの設定は即時反映されませんので、注意が必要です。
nmcliコマンドで設定を行った後、設定反映するのを忘れないようにしましょう。

実際にコマンドを実行すると、以下のような感じになります。
設定ファイルは、自動的に作成されていましたが、ルーティングテーブルには反映されていない状態です。

# nmcli connection modify "System enp0s8" ipv4.routes "192.168.100.0/24 192.168.33.254"

# ls -l /etc/sysconfig/network-scripts/route-*
-rw-r--r--. 1 root root 70 Jun 15 02:32 /etc/sysconfig/network-scripts/route-enp0s8

# cat /etc/sysconfig/network-scripts/route-enp0s8
ADDRESS0=192.168.100.0
NETMASK0=255.255.255.0
GATEWAY0=192.168.33.254

# ip route
default via 10.0.2.2 dev enp0s3 proto static metric 100
10.0.2.0/24 dev enp0s3 proto kernel scope link src 10.0.2.15 metric 100
192.168.33.0/24 dev enp0s8 proto kernel scope link src 192.168.33.101 metric 100
192.168.34.0/24 dev enp0s9 proto kernel scope link src 192.168.34.101 metric 100

ルーティング設定を反映する。

この状態から、ルーティング設定を反映にするには2つの方法があります。
1つはNICの再起動、もう一つは ipコマンドによる即時反映です。
順番に見ていきましょう。

NICの再起動

今回、ルーティングを設定したNIC(Connection)を再起動することで、ルーティング設定が読み込まれます。

# nmcli connection down "System enp0s8"
Connection 'System enp0s8' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)

# nmcli connection up "System enp0s8"
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)

# ip route
default via 10.0.2.2 dev enp0s3 proto static metric 100
10.0.2.0/24 dev enp0s3 proto kernel scope link src 10.0.2.15 metric 100
192.168.33.0/24 dev enp0s8 proto kernel scope link src 192.168.33.101 metric 100
192.168.34.0/24 dev enp0s9 proto kernel scope link src 192.168.34.101 metric 100
192.168.100.0/24 via 192.168.33.254 dev enp0s8 proto static metric 100

こちらの方法だと、再起動の際にネットワークの接続が切れてしまいます。
サービストラフィックが流れているような環境では、注意が必要です。

ただ、設定ファイルから読み込んで設定されるため、サーバが再起動した際に正しく設定されるのかの確認にもなります。
可能であればこちらの方法で反映するほうがいいと思います。

ipコマンドによる即時反映

通信が切れてしまうのは許容できない、といった場合には、ipコマンドで即時反映することもできます。
コマンドは以下のような感じになります。

ip route add 宛先アドレス via ゲートウェイ dev [デバイス名]

実際にコマンドを実行してみましょう。
nmcliコマンドでルーティングを追加してから、NICを再起動していない想定となります。

# ip route
default via 10.0.2.2 dev enp0s3 proto static metric 100
10.0.2.0/24 dev enp0s3 proto kernel scope link src 10.0.2.15 metric 100
192.168.33.0/24 dev enp0s8 proto kernel scope link src 192.168.33.101 metric 100
192.168.34.0/24 dev enp0s9 proto kernel scope link src 192.168.34.101 metric 100

# ip route add 192.168.100.0/24 via  192.168.33.254 dev enp0s8

# ip route
default via 10.0.2.2 dev enp0s3 proto static metric 100
10.0.2.0/24 dev enp0s3 proto kernel scope link src 10.0.2.15 metric 100
192.168.33.0/24 dev enp0s8 proto kernel scope link src 192.168.33.101 metric 100
192.168.34.0/24 dev enp0s9 proto kernel scope link src 192.168.34.101 metric 100
192.168.100.0/24 via 192.168.33.254 dev enp0s8 proto static metric 100

ルーティングの追加(2つ目)

1つのNIC(Connection)に複数のルーティングを設定する場合は、少し注意が必要です。

1つ目のルーティングを追加した際と同じコマンドを使うと、2つ目のルーティングのみが有効になり、元のルーティングは上書きされてしまいます。

試してみましょう。
1つ目と同じコマンドで宛先アドレスだけを変えて実行してみると、元の設定(192.168.200.0/24 192.168.33.254)が消えて新しいものだけが残っている状態になります。
NICを再起動してみても、当然ながらルーティングは新しいほうの1つしか存在しません。

# nmcli connection modify "System enp0s8" ipv4.routes "192.168.200.0/24 192.168.33.254"

# cat /etc/sysconfig/network-scripts/route-enp0s8
ADDRESS0=192.168.200.0
NETMASK0=255.255.255.0
GATEWAY0=192.168.33.254

# nmcli connection down "System enp0s8"
Connection 'System enp0s8' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)

# nmcli connection up "System enp0s8"
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)

# ip route
default via 10.0.2.2 dev enp0s3 proto static metric 100
10.0.2.0/24 dev enp0s3 proto kernel scope link src 10.0.2.15 metric 100
192.168.33.0/24 dev enp0s8 proto kernel scope link src 192.168.33.101 metric 100
192.168.34.0/24 dev enp0s9 proto kernel scope link src 192.168.34.101 metric 100
192.168.200.0/24 via 192.168.33.254 dev enp0s8 proto static metric 100

設定を上書きすることなく、追加するには、引数に付与する設定項目の前に「+」を付けます。
具体的には、以下のようになります。

nmcli connection modify "System enp0s8" +ipv4.routes "192.168.200.0/24 192.168.33.254"

コマンドを実行すると、こんな感じです。
ルーティングが2つ、ちゃんと設定されていますね。

# nmcli connection modify "System enp0s8" +ipv4.routes "192.168.200.0/24 192.168.33.254"

# cat /etc/sysconfig/network-scripts/route-enp0s8
ADDRESS0=192.168.100.0
NETMASK0=255.255.255.0
GATEWAY0=192.168.33.254
ADDRESS1=192.168.200.0
NETMASK1=255.255.255.0
GATEWAY1=192.168.33.254

# nmcli connection down "System enp0s8"
Connection 'System enp0s8' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)

# nmcli connection up "System enp0s8"
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)

# ip route
default via 10.0.2.2 dev enp0s3 proto static metric 100
10.0.2.0/24 dev enp0s3 proto kernel scope link src 10.0.2.15 metric 100
192.168.33.0/24 dev enp0s8 proto kernel scope link src 192.168.33.101 metric 100
192.168.34.0/24 dev enp0s9 proto kernel scope link src 192.168.34.101 metric 100
192.168.100.0/24 via 192.168.33.254 dev enp0s8 proto static metric 100
192.168.200.0/24 via 192.168.33.254 dev enp0s8 proto static metric 100

反対に、複数の設定の中から1つだけ消したい場合は、「-」を付けます。
こんな感じです。

nmcli connection modify "System enp0s8" -ipv4.routes "192.168.200.0/24 192.168.33.254"

実際に試してみると、以下のような感じになります。
192.168.200.0/24に関するルーティングが設定ファイルから消えています。

# nmcli connection modify "System enp0s8" -ipv4.routes "192.168.200.0/24 192.168.33.254"

# cat /etc/sysconfig/network-scripts/route-enp0s8
ADDRESS0=192.168.100.0
NETMASK0=255.255.255.0
GATEWAY0=192.168.33.254