RHEL 7でスタティック(静的)ルートを追加する4つの方法

linux-static-route

今回は、Linuxルーティングテーブルに対して、スタティック静的ルート追加する方法をいくつかご紹介します。
と言うのも、場合によってはコマンドがなかったり、設定した結果が思うように返ってこないこともあるので、どのような状況にも対応できるように、知っていても損はないと思います。

スタティック(静的)ルートとは?

スタティックルートとは、管理者が宛先ネットワークへの最適なルートを手動で設定したルートのことで、ネットワークの状態に変化があった場合でも、他に有効な宛先ルートがあっても、自動的にそのルートに切り替わることはありません。

設定内容の確認方法

ipコマンドを利用して、ルーティングの設定内容を確認します。

ip r(route)

すると、このように表示されます。

default via 192.168.100.254 dev ens160 proto static metric 100
192.168.100.0/24 dev ens160 proto kernel scope link src 192.168.100.10 metric 100
192.168.100.0/24 via 192.168.100.254 dev ens160 proto static metric 101

上の2行はデフォルトで設定されているものですね。
3行目のルーティング設定例を見ると、以下のように設定されています。

  • IPアドレス:192.168.100.0
  • サブネット:255.255.255.0
  • ゲートウェイ:192.168.100.254
  • インターフェース:ens160
  • メトリック:101

次に、以下のネットワークデバイスの情報を見てみましょう。

ip a

このように表示されるはずです。

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
        valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
        valid_lft forever preferred_lft forever
1: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:11:22:33:4a:5b brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.10/24 brd 192.168.100.255 scope global noprefixroute ens160
        valid_lft forever preferred_lft forever
    inet6 ab12::cd34:ef56:ab78:cd90/64 scope link noprefixroute
        valid_lft forever preferred_lft forever

これを見れば、IPアドレスとそれに紐付くインターフェースが確認できます。

一時的なスタティックルートの追加

スタティックルートの追加は、OSネットワークサービス再起動すると消えてしまう一時的な設定と、永続的恒常的)に反映される2種類の設定方法があります。

ipコマンドを使う

基本的には、ip route addコマンドで追加することができます。

ip route add [アドレス]/[サブネット] via [ゲートウェイ]
例)
ip route add 192.168.100.0/24 via 192.168.100.254

しかし、インターフェース複数ある場合は、オプションを使用して明示的に指定することもできます。

ip route add [アドレス]/[サブネット] via [ゲートウェイ] dev [インターフェース]
例)
ip route add 192.168.100.0/24 via 192.168.100.254 dev ens160

もし前述した通り、メトリックも含めた設定内容の確認と同じ結果を望むのであれば、単純に頭にip route addコマンドをつければ良いです。

ip route add 192.168.100.0/24 via 192.168.100.254 dev ens160 proto static metric 101

一時的に追加する場合は、この方法が最善だと思われます。

routeコマンドを使う

こちらも同じように、route add -netコマンドで追加します。
REHL 7以降はrouteコマンドが非推奨になっていますので、どうしても使いたい場合はyumで追加する必要があります。

route add -net [アドレス] netmask [サブネット] gw [ゲートウェイ]
例)
route add -net 192.168.100.0 netmask 255.255.255.0 gw 192.168.100.254

routeコマンドには、メトリックを指定する方法がないようですが、インターフェースを指定するとこのようになります。

route add -net [アドレス] netmask [サブネット] gw [ゲートウェイ] [インターフェース]
例)
route add -net 192.168.100.0 netmask 255.255.255.0 gw 192.168.100.254 ens160

ただし、メトリックは表示されませんので、意図する結果になっているか疑問です。

一時的な追加の注意点

著者が行った検証結果では、どちらもインターフェースメトリックを指定しなくても意図した動きになりますが、ルーティングテーブルには表示されないので気持ち悪いです。
ip aコマンドの結果のように、上から順にインターフェースを見ているのか、ゲートウェイから判断しているのか謎です。
なので上記のように、ip route addコマンドを使って、全部指定する方法がベストだと思います。

永続的(恒常的)なスタティックルートの追加

前述の通り、永続的恒常的)なスタティックルートの設定を追加するには、ネットワーク再起動が必要になりますが、一度設定すると消えることがないので、本来ならこちらの設定をお勧めします。

route設定ファイルを作成する

まずは、network-scriptsフォルダに移動します。

cd /etc/sysconfig/network-scripts/

その直下に、route-[インターフェース]ファイルを作成します。
インターフェースは、ip aで確認した通りです。
これまでの例で「route-ens160」というファイル名になります。

vi route-ens160

書き方は以下の2パターンありますので、お好きな方で記述してください。
ただし、混在はできません。

書き方1

以下は、1つのルーティング設定を1行で書く方法です。
3つほど例を記載します。

192.168.100.0/24 via 192.168.100.254
172.16.100.0/24 via 192.168.100.254
10.10.100.0/24 via 192.168.100.254
・・・

非常にスッキリとして分かりやすいですね!
ちなみに、インターフェースはファイル名に書いてあるから指定しなくても大丈夫なんだと思います。(メトリックは…知らねw)

書き方2

次に、1つのルーティング設定を3行で書く方法です。

ADDRESS0=192.168.100.0
NETMASK0=255.255.255.0
GATEWAY0=192.168.100.254
ADDRESS1=172.16.100.0
NETMASK1=255.255.255.0
GATEWAY1=192.168.100.254
ADDRESS2=10.10.100.0
NETMASK2=255.255.255.0
GATEWAY2=192.168.100.254
・・・

どちらも結果は同じですが、こちらは見づらいですね。
上記のように複数ルーティングを設定する場合は、必ず0から始まり、〜0〜1〜2…と追加するルールになっております。
反映させるには、下記のいずれかのコマンドネットワーク再起動します。

systemctl restart network

または、

/etc/init.d/network restart

これでスタティックルートの設定は完了です。
再びip rコマンドで確認してみてください。

nmcliコマンドを使う

最後にnmcliコマンドでの追加方法です。
このコマンドを実行すると、上記と同じroute設定ファイルが書き方1で作成されます。

nmcli c m [インターフェース] +ipv4.routes "[アドレス]/[サブネット] [ゲートウェイ]" ipv4.route-metric [メトリック]
例)
nmcli c m ens160 +ipv4.routes "192.168.100.0/24 192.168.100.254" ipv4.route-metric 101

設定が完了したら、こちらもnmcliコマンドネットワーク再起動してあげます。

nmcli c down ens160; nmcli c up ens160

ちなみに、nmcliコマンドでの確認方法もご紹介しておきます。

nmcli d show ens160

IP4.ROUTE[〜]が追加されているはずです。

【余談】削除も同じ

一時的スタティックルート削除したい場合は、コマンドaddの部分をdelに変更すると削除ができます。
永続的恒常的)に削除したい場合は、route設定ファイルから設定を削除する必要があります。

この記事が気に入ったら
いいね ! しよう

Twitter で

東京生まれ福岡育ちの文系プログラマー。
テクノロジーの恩恵を感じながら日々精進しています。
広く浅くをモットーに、最近ではプログラミングだけでなく、仮想サーバーからセキュリティ、監視システムなども勉強中です。

管理者をフォローする

コメント

Amazon プライム対象
タイトルとURLをコピーしました