【Linux基礎】ルーティングの設定をする!追加や削除やDGの設定

Linuxサーバーでルーティングの設定をする事がたまにあります。

そこで今回はLinuxサーバーでのルーティングの設定を、実例を踏まえて行います。

ルーティング追加から削除やデフォルトルートの設定なども行います。

また一時的なルーティング設定永続的なルーティング設定を現役エンジニアの筆者がまとめます。

筆者はWindowsサーバーやLinuxサーバーの運用構築を11年以上おこなってきました。その経験を元に知識を公開していきます!

この記事でLinuxのルーティング設定について、理解ができます。

目次

Linuxでルーティングの設定をする方法

サーバー

Linuxでルーティングの設定をするコマンドについてまとめます。

ルーティング設定コマンドはいくつかあります。自身の環境のインストールしているネットワーク設定ツールによってコマンドが変わってきます。

ネットワーク設定ツール別コマンド
  • net-toolsツール⇒routeコマンド
  • iproute2ツール⇒ip routeコマンド

どちらを使用すれば良いかというと、iproute2ツールの「ip route」コマンドが推奨です。

Linuxでルーティング追加の設定をする

traning

iproute2ツールでルーティング追加の設定

iproute2ツールでルーティング追加の設定を行います。「ip route」コマンドの基礎構文を以下に示します。

ip route add IPアドレス/マスク via GWアドレス
ip route add IPアドレス/32 via GWアドレス

ホストを指定する時はマスクを32にして設定します。

実際にルーティング設定をしてみます。

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」です。

Linuxサーバーでルーティング確認方法の詳細は以下の記事でまとめています。

[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アドレス

セグメントを指定する時はnetを、ホストを指定する時はhostを記述します。

実際にルーティング設定をしてみます。

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

マスクの箇所は「24」等ではエラーが出ます。きちんと「255.255.255.0」等で入力します。

ホストのルーティングを設定する時に、netmaskを指定するとエラーとなります。

セグメント「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ツールで指定のルーティングが追加されています。

Flagsの項目の記号の意味をまとめます。

Flagsの項目の記号の意味
  • U・・・UPしている
  • G・・・Gatewayを向いている
  • H・・・Hostを意味する
  • !・・・無効

Linuxでルーティング削除の設定をする

エラー発生

iproute2ツールでルーティング削除の設定

Linuxサーバーのiproute2ツールでルーティング削除の設定を行います。削除コマンドの基礎構文を以下に示します。

ip route delete IPアドレス/マスク

ルーティング削除で「delete」を「del」にするとエラーが出ます。

実際にルーティング削除の設定をしてみます。

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アドレス/マスク

削除の場合、セグメントを指定する時はnetをホストを指定する時はhostを記述します。

実際にルーティング削除の設定をしてみます。

route del -net 192.168.222.0/24
route del -host 192.168.222.1/32

hostの場合はマスクを省略できますが、netの場合マスクを省略すればエラーが出ます。きちんとマスクも設定します!

セグメント「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でデフォルトゲートウェイ追加の設定をする

moving

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

複数のデフォルトゲートウェイがある場合はnet-toolsツールのコマンドでは、どれが追加されたかわかりません。

そういった場合の対処法として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コマンドで確認します。

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つです。

インターネット接続できなくなった原因2つ
  • 設定したデフォルトゲートウェイのIPのL3機器がない
  • ルーティングの優先度

1つめの原因は設定したデフォルトゲートウェイのIPアドレスのL3機器がなかった事です。ルータがあれば通信できました。

2つ目の原因はルーティングの優先度です。もともと設定してあったデフォルトゲートウェイの優先度が高かったら通信はできていました。

Linuxでインターネット接続できなくなった時の対処法の全ては、以下の記事にまとめています。

ルーティング追加の優先度メトリックがあります。もう一度ルーティングテーブルを確認します。

[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

デフォルトゲートウェイに飛んでいて通信できています。やはりデフォルトゲートウェイが原因でした。

ルーティング設定メトリックをつけて設定するには、最後に「metric 数字」と設定します。

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コマンド

どちらを使用すれば良いかというと、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アドレス"

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次