Linuxサーバーでルーティングの設定をする事がたまにあります。
そこで今回はLinuxサーバーでのルーティングの設定を、実例を踏まえて行います。
また一時的なルーティング設定や永続的なルーティング設定を現役エンジニアの筆者がまとめます。
筆者はWindowsサーバーやLinuxサーバーの運用構築を11年間以上おこなってきました。その経験を元に知識を公開していきます!
この記事でLinuxのルーティング設定について、理解ができます。
Linuxでルーティングの設定をする方法
Linuxでルーティングの設定をするコマンドについてまとめます。
ルーティング設定コマンドはいくつかあります。自身の環境のインストールしているネットワーク設定ツールによってコマンドが変わってきます。
- net-toolsツール⇒routeコマンド
- iproute2ツール⇒ip routeコマンド
Linuxでルーティング追加の設定をする
iproute2ツールでルーティング追加の設定
iproute2ツールでルーティング追加の設定を行います。「ip route」コマンドの基礎構文を以下に示します。
ip route add IPアドレス/マスク via GWアドレス
ip route add IPアドレス/32 via GWアドレス
実際にルーティング設定をしてみます。
ip route add 192.168.111.0/24 via 192.168.0.1
ip route add 192.168.111.1/32 via 192.168.0.1
セグメント「192.168.111.0」を「192.168.0.1」に向けたルーティングを追加しました。
また「192.168.111.1」のホストを「192.168.0.1」に向けたルーティングを追加しました。
ルーティングテーブルを確認します。iproute2ツールのルーティング確認コマンドは「ip route show」です。
[root@localhost ~]# ip route show
default via 192.168.0.1 dev enp0s3 proto dhcp metric 100
192.168.0.0/24 dev enp0s3 proto kernel scope link src 192.168.0.4 metric 100
192.168.111.0/24 via 192.168.0.1 dev enp0s3
192.168.111.1 via 192.168.0.1 dev enp0s3
iproute2ツールで指定のルーティングが追加されています。
net-toolsツールでルーティング追加の設定
net-toolsツールでルーティング追加の設定を行います。「route」コマンドの基礎構文を以下に示します。
route add -net IPアドレス netmask マスク gw GWアドレス
route add -host IPアドレス gw GWアドレス
実際にルーティング設定をしてみます。
route add -net 192.168.222.0 netmask 255.255.255.0 gw 192.168.0.1
route add -host 192.168.222.1 gw 192.168.0.1
セグメント「192.168.222.0」を「192.168.0.1」に向けたルーティングを追加しました。
また「192.168.222.1」のホストを「192.168.0.1」に向けたルーティングを追加しました。
ルーティングテーブルを確認します。net-toolsツールのルーティング確認コマンドは「netstat -r」か「route」コマンドです。
[root@localhost ~]# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default router 0.0.0.0 UG 0 0 0 enp0s3
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 enp0s3
192.168.111.0 router 255.255.255.0 UG 0 0 0 enp0s3
192.168.111.1 router 255.255.255.255 UGH 0 0 0 enp0s3
192.168.222.0 router 255.255.255.0 UG 0 0 0 enp0s3
192.168.222.1 router 255.255.255.255 UGH 0 0 0 enp0s3
[root@localhost ~]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default router 0.0.0.0 UG 100 0 0 enp0s3
192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 enp0s3
192.168.111.0 router 255.255.255.0 UG 0 0 0 enp0s3
192.168.111.1 router 255.255.255.255 UGH 0 0 0 enp0s3
192.168.222.0 router 255.255.255.0 UG 0 0 0 enp0s3
192.168.222.1 router 255.255.255.255 UGH 0 0 0 enp0s3
net-toolsツールで指定のルーティングが追加されています。
- U・・・UPしている
- G・・・Gatewayを向いている
- H・・・Hostを意味する
- !・・・無効
Linuxでルーティング削除の設定をする
iproute2ツールでルーティング削除の設定
Linuxサーバーのiproute2ツールでルーティング削除の設定を行います。削除コマンドの基礎構文を以下に示します。
ip route delete IPアドレス/マスク
実際にルーティング削除の設定をしてみます。
ip route delete 192.168.111.0/24
ip route delete 192.168.111.1/32
先程追加したセグメント「192.168.111.0」とホストの「192.168.111.1」のルーティングを削除しました。
ルーティングテーブルを確認します。iproute2ツールのルーティング確認コマンドは「ip route show」でした。
[root@localhost ~]# ip route show
default via 192.168.0.1 dev enp0s3 proto dhcp metric 100
192.168.0.0/24 dev enp0s3 proto kernel scope link src 192.168.0.4 metric 100
192.168.222.0/24 via 192.168.0.1 dev enp0s3
192.168.222.1 via 192.168.0.1 dev enp0s3
iproute2ツールで指定のルーティングが削除されています。
net-toolsツールでルーティング削除の設定
net-toolsツールでルーティング削除の設定を行います。「route」コマンドの基礎構文を以下に示します。
route del -[net/host] IPアドレス/マスク
実際にルーティング削除の設定をしてみます。
route del -net 192.168.222.0/24
route del -host 192.168.222.1/32
セグメント「192.168.222.0」とホスト「192.168.0.1」のルーティングを削除しました。
ルーティングテーブルを確認します。net-toolsツールのルーティング確認コマンドは「netstat -r」か「route」コマンドです。
[root@localhost ~]# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default router 0.0.0.0 UG 0 0 0 enp0s3
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 enp0s3
[root@localhost ~]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default router 0.0.0.0 UG 100 0 0 enp0s3
192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 enp0s3
net-toolsツールで指定のルーティングが削除されています。
Linuxでデフォルトゲートウェイ追加の設定をする
iproute2ツールでデフォルトゲートウェイ追加の設定
Linuxサーバーでデフォルトゲートウェイ追加の設定を行います。「ip route」コマンドの基礎構文を以下に示します。
ip route add default via GWアドレス
実際にデフォルトゲートウェイの設定をしてみます。
ip route add default via 192.168.0.254
デフォルトゲートウェイを追加しました。
ルーティングテーブルを確認します。iproute2ツールのルーティング確認コマンドは「ip route show」です。
[root@localhost ~]# ip route show
default via 192.168.0.254 dev enp0s3
default via 192.168.0.1 dev enp0s3 proto dhcp metric 100
192.168.0.0/24 dev enp0s3 proto kernel scope link src 192.168.0.4 metric 100
iproute2ツールで指定のデフォルトゲートウェイが追加されています。
net-toolsツールでデフォルトゲートウェイ追加の設定
net-toolsツールでデフォルトゲートウェイ追加の設定を行います。「route」コマンドの基礎構文を以下に示します。
route add default gw GWアドレス
実際にデフォルトゲートウェイの設定をしてみます。
route add default gw 192.168.0.253
「192.168.0.253」に向けたデフォルトゲートウェイを追加しました。
ルーティングテーブルを確認します。net-toolsツールのルーティング確認コマンドは「netstat -r」か「route」コマンドでした。
[root@localhost ~]# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default gateway 0.0.0.0 UG 0 0 0 enp0s3
default gateway 0.0.0.0 UG 0 0 0 enp0s3
default router 0.0.0.0 UG 0 0 0 enp0s3
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 enp0s3
[root@localhost ~]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default gateway 0.0.0.0 UG 0 0 0 enp0s3
default gateway 0.0.0.0 UG 0 0 0 enp0s3
default router 0.0.0.0 UG 100 0 0 enp0s3
192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 enp0s3
そういった場合の対処法としてnオプションを使用しましょう!名前ではなくIPで表示してくれます。
[root@localhost ~]# netstat -nr
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.0.253 0.0.0.0 UG 0 0 0 enp0s3
0.0.0.0 192.168.0.254 0.0.0.0 UG 0 0 0 enp0s3
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 enp0s3
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 enp0s3
[root@localhost ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.253 0.0.0.0 UG 0 0 0 enp0s3
0.0.0.0 192.168.0.254 0.0.0.0 UG 0 0 0 enp0s3
0.0.0.0 192.168.0.1 0.0.0.0 UG 100 0 0 enp0s3
192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 enp0s3
複数のルーティングを追加すると通信できなくなった場合の対処法
PingコマンドでGoogleのDNSサーバーに通信してみます。
[root@localhost ~]# ping -c 2 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
From 192.168.0.4 icmp_seq=1 Destination Host Unreachable
From 192.168.0.4 icmp_seq=2 Destination Host Unreachable
--- 8.8.8.8 ping statistics ---
2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 1006ms
pipe 2
通信できませんでした。経路情報をtracerouteコマンドで確認します。
[root@localhost ~]# traceroute -n -w 2 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
1 * * *
2 * * *
3 * * *
4 * * *
5 * * *
6 * 192.168.0.4 1010.630 ms !H 1010.468 ms !H
最初のホップのデフォルトゲートウェイに通信できていません。
外に通信できなくなった原因は以下の2つです。
- 設定したデフォルトゲートウェイのIPのL3機器がない
- ルーティングの優先度
1つめの原因は設定したデフォルトゲートウェイのIPアドレスのL3機器がなかった事です。ルータがあれば通信できました。
2つ目の原因はルーティングの優先度です。もともと設定してあったデフォルトゲートウェイの優先度が高かったら通信はできていました。
ルーティング追加の優先度にメトリックがあります。もう一度ルーティングテーブルを確認します。
[root@localhost ~]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default gateway 0.0.0.0 UG 0 0 0 enp0s3
default gateway 0.0.0.0 UG 0 0 0 enp0s3
default router 0.0.0.0 UG 100 0 0 enp0s3
192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 enp0s3
[root@localhost ~]# ip route show
default via 192.168.0.253 dev enp0s3
default via 192.168.0.254 dev enp0s3
default via 192.168.0.1 dev enp0s3 proto dhcp metric 100
192.168.0.0/24 dev enp0s3 proto kernel scope link src 192.168.0.4 metric 100
通信できていたデフォルトゲートウェイはメトリックが100となっています。手動で設定したものはメトリックが1になり優先度が高いです。
デフォルトゲートウェイの設定を一度削除します。
デフォルトゲートウェイの削除する方法
iproute2ツールでのデフォルトゲートウェイ削除設定
ip route del default via 192.168.0.254
net-toolsツールでのデフォルトゲートウェイ削除設定
route del default gw 192.168.0.253
削除されたか確認します。
[root@localhost ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 100 0 0 enp0s3
192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 enp0s3
[root@localhost ~]# ip route show
default via 192.168.0.1 dev enp0s3 proto dhcp metric 100
192.168.0.0/24 dev enp0s3 proto kernel scope link src 192.168.0.4 metric 100
削除されました。通信できるかPingとtracerouteしてみます。
[root@localhost ~]# ping -c 2 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=57 time=21.1 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=57 time=16.0 ms
--- 8.8.8.8 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1008ms
rtt min/avg/max/mdev = 16.013/18.577/21.141/2.564 ms
[root@localhost ~]# traceroute -n -w 1 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
1 192.168.0.1 23.912 ms 28.261 ms 28.119 ms
~省略~
8 * * *
9 8.8.8.8 12.252 ms 22.657 ms 31.309 ms
デフォルトゲートウェイに飛んでいて通信できています。やはりデフォルトゲートウェイが原因でした。
iproute2ツールでメトリック付きのデフォルトルートの指定方法
ip route add default via 192.168.0.254 metric 101
net-toolsツールでメトリック付きのデフォルトルートの指定方法
route add default gw 192.168.0.253 metric 102
ルーティング確認します。
[root@localhost ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 100 0 0 enp0s3
0.0.0.0 192.168.0.254 0.0.0.0 UG 101 0 0 enp0s3
0.0.0.0 192.168.0.253 0.0.0.0 UG 102 0 0 enp0s3
192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 enp0s3
メトリックが設定されています。Pingで疎通確認します。
[root@localhost ~]# ping -c 2 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=57 time=19.4 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=57 time=15.7 ms
--- 8.8.8.8 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1007ms
rtt min/avg/max/mdev = 15.770/17.622/19.475/1.857 ms
疎通できています。tracerouteでも確認します。
[root@localhost ~]# ping -c 2 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=57 time=19.4 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=57 time=15.7 ms
--- 8.8.8.8 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1007ms
rtt min/avg/max/mdev = 15.770/17.622/19.475/1.857 ms
[root@localhost ~]# traceroute -n -w 1 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
1 192.168.0.1 9.836 ms 9.213 ms 9.621 ms
~省略~
8 * * *
9 8.8.8.8 47.182 ms 47.139 ms 47.036 ms
通信できるようになりました。
やはりインターネット接続できなくなった原因は、メトリックの低い(優先度が高い)デフォルトゲートウェイの追加でした。
永続的にルーティング設定する方法
今まで行ってきたルーティング設定は一時的な設定であり、再起動すると消えてしまいます。
Linuxサーバーを再起動してから、ルーティング設定を確認します。
[root@localhost ~]# netstat -nr
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 enp0s3
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 enp0s3
再起動してもルーティング設定を残したい場合は「nmcli」コマンドを使用します。
永続的にルーティング追加する方法
「nmcli」コマンドでルーティング追加設定する基礎構文は以下となります。
nmcli connection modify コネクション名 +ipv4.routes "セグメント/マスク GWアドレス"
「ipv4」の前の+を忘れないようにしましょう!今まで設定したもの全て消えて、今回ルーティング追加した設定のみになってしまいます。
実際にルーティングの永続設定を行います。
nmcli connection modify enp0s3 +ipv4.routes "192.168.111.0/24 192.168.0.254"
ルーティングテーブルを確認します。
[root@localhost ~]# ip route show
default via 192.168.0.1 dev enp0s3 proto dhcp metric 100
192.168.0.0/24 dev enp0s3 proto kernel scope link src 192.168.0.4 metric 100
反映していません。。
「nmcli」コマンドでの設定を反映するには「nmcli connection up コネクション名」を実行します。
nmcli connection up enp0s3
再度ルーティングテーブルを確認します。
[root@localhost ~]# ip route show
default via 192.168.0.1 dev enp0s3 proto dhcp metric 100
192.168.0.0/24 dev enp0s3 proto kernel scope link src 192.168.0.4 metric 100
192.168.111.0/24 via 192.168.0.254 dev enp0s3 proto static metric 100
ルーティングが追加されました。再起動しても残っています。
永続的にルーティングを削除する
「nmcli」コマンドでルーティング削除設定する基礎構文は以下となります。
nmcli connection modify コネクション名 -ipv4.routes "セグメント/マスク GWアドレス"
永続的に削除するには+を-にします。
では実際に「nmcli」コマンドでルーティング削除してみます。
nmcli connection modify enp0s3 -ipv4.routes "192.168.111.0/24 192.168.0.254"
ルーティング削除設定を反映させます。
nmcli connection up enp0s3
ルーティングテーブルを確認します。
[root@localhost ~]# ip route show
default via 192.168.0.1 dev enp0s3 proto dhcp metric 100
192.168.0.0/24 dev enp0s3 proto kernel scope link src 192.168.0.4 metric 100
ルーティングが永続的に削除されています。
まとめ:Linuxでルーティング設定する
Linuxで一時的にルーティング設定する
Linuxで一時的にルーティングの設定をするコマンドについてまとめます。
- net-toolsツール⇒routeコマンド
- iproute2ツール⇒ip routeコマンド
Linuxサーバーでルーティング追加の設定
iproute2ツールでルーティング追加の設定を行います。「ip route」コマンドの基礎構文を以下に示します。
ip route add IPアドレス/マスク via GWアドレス
ip route add IPアドレス/32 via GWアドレス
net-toolsツールでルーティング追加の設定を行います。「route」コマンドの基礎構文を以下に示します。
route add -net IPアドレス netmask マスク gw GWアドレス
route add -host IPアドレス gw GWアドレス
Linuxサーバーでルーティング削除の設定
iproute2ツールのiproute2ツールでルーティング削除の設定を行います。削除コマンドの基礎構文を以下に示します。
ip route delete IPアドレス/マスク
net-toolsツールでルーティング削除の設定を行います。「route」コマンドの基礎構文を以下に示します。
route del -[net/host] IPアドレス/マスク
Linuxサーバーでデフォルトゲートウェイ追加の設定
iproute2ツールでデフォルトゲートウェイ追加の設定を行います。「ip route」コマンドの基礎構文を以下に示します。
ip route add default via GWアドレス
net-toolsツールでデフォルトゲートウェイ追加の設定を行います。「route」コマンドの基礎構文を以下に示します。
route add default gw GWアドレス
デフォルトゲートウェイの削除する方法
iproute2ツールでのデフォルトゲートウェイ削除設定
ip route del default via 192.168.0.254
net-toolsツールでのデフォルトゲートウェイ削除設定
route del default gw 192.168.0.253
永続的にルーティング追加する方法
「nmcli」コマンドでルーティング追加設定する基礎構文は以下となります。
nmcli connection modify コネクション名 +ipv4.routes "セグメント/マスク GWアドレス"
「ipv4」の前の+を忘れないようにしましょう!今まで設定したもの全て消えて、今回ルーティング追加した設定のみになってしまいます。
「nmcli」コマンドでの設定を反映するには「nmcli connection up コネクション名」を実行します。
nmcli connection up enp0s3
「nmcli」コマンドでルーティング削除設定する基礎構文は以下となります。
nmcli connection modify コネクション名 -ipv4.routes "セグメント/マスク GWアドレス"