2020/08/01 CentOS7.2





静的ルーティングを追加する

デフォルトゲートウェイ以外のルーティングを設定する手順です。
なお、デフォルトゲートウェイはnmcli経由で設定する方が良いでしょう。
別項 nmcliでIPアドレスを設定する 参照


ルーティングを表示する
コマンドで永続ルーティングを追加する
一時ルーティングを追加にする
ファイルへ永続ルーティングを追加する
おまけ nmcliでのルーティング追加




ルーティングを表示して確認するコマンド

#ip route show
default via 192.168.1.1 dev enp0s3 proto static metric 100
192.168.1.0/24 dev enp0s3 proto kernel scope link src 192.168.1.108 metric 100
通常表示されるのは「default」と表記されるデフォルトゲートウェイと、ダイレクトコネクトつまり自分が所属するセグメントです。


ルーティングの追加方法として
 ・手作業で永続ルーティングを追加
 ・(再起動できないときは、さらに)コマンドで一時ルーティングを追加
 ・コマンドで永続ルーティングを追加
について述べます。





コマンドで永続ルーティングを追加する

永続ルーティングをコマンドで設定するです。
nmcliを使う方法です。

まず、ip addr コマンドで表示されるデバイス名を確認します。(コネクション名ではありません)
#ip addr

ルーティングの追加(確認したデバイス名を指定)。追加なので「プラス記号」を付けます
#nmcli conn mod ens0s3 +ipv4.routes "10.1.1.0/24 192.168.1.2"

ルーティングの削除
#nmcli conn mod ens0s3 -ipv4.routes "10.1.1.0/24 192.168.1.2"

反映
#systemctl restart network

routeコマンド、ipコマンドでルーティングを追加すると、それはOSを再起動すると消えてしまう
一時ルーティングです。
しかしnmcliコマンドは永続ルーティングを追加します。
(もう少し詳しく知りたければ、後述の「ファイルへ永続ルーティングを追加する」を参照してください)

nmcliコマンドがなにをしているかと言えば、単に/etc/sysconfig/network-script/route-デバイスへ、ルーティング設定を追加しているだけです。(エディタでやるのと同じことを自動でやってくれる)
ファイルへ追加しているのだから、ネットワークかOSを再起動しないとルーティングテーブルは有効にはなりません。

サーバなど再起動できない環境の場合、次の一時ルーティングを続けて設定します。





一時ルーティングの追加

routeファイルに設定された永続ルーティングは、ネットワークを再起動するまで有効になりません。
ネットワークを停止できないサーバの場合、いつか再起動するまで一時ルーティングを追加しておきます。
いつか再起動したら消えてしまう設定ですが、その時は永続ルーティングの方が有効になってくれます。

新しいipコマンドによるものと従来のrouteコマンドによるものがありますが、どちらを使用してもいいでしょう。

ipコマンドによるルーティング追加
#ip route add 10.1.1.0/24 via 192.168.1.2
#ip route add 10.2.2.1 via 192.168.1.3

削除
#ip route del 10.1.1.0/24
#ip route del 10.2.2.1

routeコマンドによるルーティング追加
#route add -net 10.1.1.0 netmask 255.255.255.0 gw 192.168.1.2
#route add -host 10.2.2.1 gw 192.168.1.3

削除
#route del -net 10.1.1.0 netmask 255.255.255.0
#route del 10.2.2.1


再起動できないサーバから永続ルーティングを削除する場合

1.コマンドでルーティングを削除(永続ルーティングであっても、コマンドによって一時的に削除できます)
2.routeファイルから永続ルーティング設定を削除(エディタか、nmcliコマンドによる)
3.次回再起動を待つ

という流れになります。





ファイルへ永続ルーティングを追加する

システム再起動後も維持される「永続ルーティング」を追加する場合、従来通りファイルに追加するのが安心だという人もいるでしょう。

まず、ip addr コマンドで表示されるデバイス名を確認します。(コネクション名ではありません)
確認したデバイス名を使って、/etc/sysconfig/network-scripts 配下に、
「route-デバイス名」というファイルを作成します。

#ip addr
#vi /etc/sysconfig/network-script/route-enp0s3

次にファイルの中に追加ルーティングを記述します。
ルーティングの記述形式は2種類あるので、どちらかに統一します。

注意

「DHCPの場合」と「nmcliですでにデフォルトゲートウェイが手動設定してある場合」は、routeファイルの中の
デフォルトゲートウェイ設定は無視されます。


ipコマンド形式で記述 (ip routeコマンドの引数の形式)
/etc/sysconfig/network-script/route-enp0s3

default via 192.168.1.100    #デフォルトゲートウェイ。DHCPなら無視される
10.1.1.0/24 via 192.168.1.2
10.2.2.1/32 via 192.168.1.3

ネットワーク/ネットマスクディレクティブ形式で記述 (従来型)
/etc/sysconfig/network-script/route-enp0s3

ADDRESS0=10.1.1.0
NETMASK0=255.255.255.0
GATEWAY0=192.168.1.2
ADDRESS1=10.2.2.1
NETMASK1=255.255.255.255
GATEWAY1=192.168.1.3


ネットワークを再起動し設定を反映・ルーティングの確認
# systemctl restart network
# ip route show

もしネットワークを再起動できないサーバなら、上述の一時ルーティングをさらに追加します。


ちなみにrouteファイルの中に2つの形式を混在させてみたら、
ネットワーク/ネットマスクディレクティブ形式のルーティングのみが有効となりました。


ipコマンド形式と位置を入れ替えてみても、変わらなかったので順序は関係ない模様。





おまけ nmcliでのルーティング追加について

ルーティングファイルへは、nmcliからコマンドで設定を追加できるわけですが
#nmcli conn mod ens0s3 +ipv4.routes "10.1.1.0/24 192.168.1.2"

nmcliはちょっと気が利いています。
ルーティングファイルの中身によって動作が変化します。

・ルーティングファイルがまだ存在しない場合
 → nmcliはネットワーク/ネットマスクディレクティブ形式でルーティングファイルを作成してくれます。

・すでにルーティングファイルがあり、内容が ネットワーク/ネットマスクディレクティブ形式
 → nmcliは ネットワーク/ネットマスクディレクティブ形式でルーティングを追加してくれます。

・すでにルーティングファイルがあり、内容がipコマンド形式
 → nmcliは ipコマンド形式でルーティングを追加してくれます。

つまりルーティングファイルの形式はあまり気にせず、コマンドまかせでよい、ということです。


ちなみに形式を混在させたルーティングファイルへnmcliからルーティングを追加すると


もともと機能していなかったipコマンド形式の範囲をコメントアウトしてくれました。








prev.gif