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 enp0s3iproute2ツールで指定のルーティングが追加されています。
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 enp0s3net-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 enp0s3iproute2ツールで指定のルーティングが削除されています。
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 enp0s3net-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 100iproute2ツールで指定のデフォルトゲートウェイが追加されています。
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.254net-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 101net-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.254net-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アドレス"