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」と表記されるデフォルトゲートウェイと、ダイレクトコネクトつまり自分が所属するセグメントです。


ルーティングの追加方法は以下の通りです。
 ・コマンドで永続ルーティングを追加
 ・設定ファイルへ永続ルーティングを追加
 ・コマンドで一時ルーティングを追加

一時ルーティングは、設定した直後から有効になりますが、OS再起動したら消えます。
永続ルーティングは設定しただけでは有効になりませんが、ネットワークを再読み込みさせるか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

コマンドからルーティングを削除しても、それは一時的な削除です。
OS起動すると、削除したルーティングも復活します。
次回再起動時も削除しておきたければ、永続ルーティングをコマンドもしくは設定ファイルから削除しておきます。




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

永続ルーティングをnmcliコマンド追加します。
(ネットワークのデバイス名を確認)
#ip addr

(ルーティングの追加)
#nmcli conn mod ens0s3 +ipv4.routes "10.1.1.0/24 192.168.1.2"

(ネットワークを再起動して、設定を有効化)
#systemctl restart network


ルーティングの削除
#nmcli conn mod ens0s3 -ipv4.routes "10.1.1.0/24 192.168.1.2"
ip addrコマンドでデバイス名を確認します。
nmcliコマンドでルーティングの追加をします。追加なので、プラス記号を使用します。
ネットワークを再起動して、追加したルーティングを反映します。
追加したルーティングを削除するときは、マイナス記号を付けます。

nmcliコマンドが永続ルーティング追加でなにをしているかと言えば、単に
/etc/sysconfig/network-script/route-デバイスへ、ルーティングを追加しているだけです。
つまりエディタでやるのと同じことを自動でやってくれます。


サーバなどネットワークを容易に再起動できない場合、続けて一時ルーティングを追加します。




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

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

まず、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