今回は、Linuxのルーティングテーブルに対して、スタティック(静的)ルートを追加する方法をいくつかご紹介します。
と言うのも、場合によってはコマンドがなかったり、設定した結果が思うように返ってこないこともあるので、どのような状況にも対応できるように、知っていても損はないと思います。
スタティック(静的)ルートとは?
スタティックルートとは、管理者が宛先ネットワークへの最適なルートを手動で設定したルートのことで、ネットワークの状態に変化があった場合でも、他に有効な宛先ルートがあっても、自動的にそのルートに切り替わることはありません。
ルーティング設定内容の確認方法
ip
コマンドを利用して、ルーティングの設定内容を確認します。
1 |
ip r(route) |
すると、このように表示されます。
1 2 3 |
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
次に、以下のネットワークデバイスの情報を見てみましょう。
1 |
ip a |
このように表示されるはずです。
1 2 3 4 5 6 7 8 9 10 11 12 |
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
コマンドで追加することができます。
1 2 3 |
ip route add [アドレス]/[サブネット] via [ゲートウェイ] 例) ip route add 192.168.100.0/24 via 192.168.100.254 |
しかし、インターフェースが複数ある場合は、オプションを使用して明示的に指定することもできます。
1 2 3 |
ip route add [アドレス]/[サブネット] via [ゲートウェイ] dev [インターフェース] 例) ip route add 192.168.100.0/24 via 192.168.100.254 dev ens160 |
もし前述した通り、メトリックも含めた設定内容の確認と同じ結果を望むのであれば、単純に頭にip route add
コマンドをつければ良いです。
1 |
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
で追加する必要があります。
1 2 3 |
route add -net [アドレス] netmask [サブネット] gw [ゲートウェイ] 例) route add -net 192.168.100.0 netmask 255.255.255.0 gw 192.168.100.254 |
route
コマンドには、メトリックを指定する方法がないようですが、インターフェースを指定するとこのようになります。
1 2 3 |
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
フォルダに移動します。
1 |
cd /etc/sysconfig/network-scripts/ |
その直下に、route-[インターフェース]
ファイルを作成します。
インターフェースは、ip a
で確認した通りです。
これまでの例で「route-ens160
」というファイル名になります。
1 |
vi route-ens160 |
書き方は以下の2パターンありますので、お好きな方で記述してください。
ただし、混在はできません。
スタティックルートを1行で追加する方法
以下は、1つのルーティング設定を1行で書く方法です。
3つほど例を記載します。
1 2 3 4 |
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)
スタティックルートを3行で追加する方法
次に、1つのルーティング設定を3行で書く方法です。
1 2 3 4 5 6 7 8 9 10 |
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…と追加するルールになっております。
反映させるには、下記のいずれかのコマンドでネットワークを再起動します。
1 |
systemctl restart network |
または、
1 |
/etc/init.d/network restart |
これでスタティックルートの設定は完了です。
再びip r
コマンドで確認してみてください。
nmcliコマンドでスタティックルートを追加
最後にnmcli
コマンドでの追加方法です。
このコマンドを実行すると、上記と同じroute設定ファイルが書き方1で作成されます。
1 2 3 |
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
コマンドでネットワークを再起動してあげます。
1 |
nmcli c down ens160; nmcli c up ens160 |
ちなみに、nmcli
コマンドでの確認方法もご紹介しておきます。
1 |
nmcli d show ens160 |
IP4.ROUTE[〜]
が追加されているはずです。
【余談】スタティックルートの削除も同じ
一時的にスタティックルートを削除したい場合は、コマンドのadd
の部分をdel
に変更すると削除ができます。
永続的(恒常的)に削除したい場合は、route設定ファイルから設定を削除する必要があります。
コメント