Linuxで静的ルーティングを追加・変更・削除する方法

本記事では一時的にルーティングを設定する方法、そして永続的にルーティングを設定する方法を解説します。

一時的にルーティングを設定する方法としてip routeコマンドとrouteコマンドを解説します。そして永続的にルーティングを設定する方法としてnmcliコマンドを解説します。

一時的にルーティングを追加する

コマンドラインで一時的にルーティングを追加する方法を解説します。この設定は一時的な設定なので、OSを再起動するとルーティング設定は消えてしまいます。

設定方法はip routeコマンドとrouteコマンドの2つのパターンを解説します。

routeコマンドはnet-toolsパッケージに含まれています。routeコマンドを使いたいけれどインストールされていない場合はnet-toolsパッケージをインストールしてください。

ip routeコマンドでルーティングを追加する

ip route add ネットワーク/プレフィックス via ゲートウェイ

# ip route add 10.1.2.0/24 via 192.168.0.1

ホスト指定の場合はプレフィックスを/32にします。

# ip route add 10.1.2.3/32 via 192.168.0.1

ip routeコマンドでルーティングを変更する

ネクストホップ(via)を変更するにはchageで指定します。

# ip route change 10.1.2.0/24 via 192.168.0.2

ip routeコマンドでルーティングを削除する

ルーティングの削除はip route delコマンドを実行します。

ルーティング削除ではviaを省略できますが、面倒でもviaを指定して削除するルーティングを明示的に指定することをおすすめします(特に業務の場合)。

ip route del ネットワーク/プレフィックス via ゲートウェイ

# ip route del 10.1.2.0/24 via 192.168.0.1

routeコマンドでルーティングを追加する

routeコマンドはnet-toolsパッケージがインストールされている必要があります。

宛先にネットワークを指定する

ネットワークを宛先にする場合は-netオプションで宛先を指定します。

route add -net ネットワークアドレス netmask サブネットマスク gw ゲートウェイ
route add -net ネットワークアドレス/プレフィックス gw ゲートウェイ

①サブネットマスクで指定する場合

# route add -net 10.1.2.0 netmask 255.255.255.0 gw 192.168.0.1

②プレフィックスで指定する場合

# route add -net 10.1.2.0/24 gw 192.168.0.1

宛先にホストを指定する

ホストを宛先にする場合は-hostで宛先を指定します。

route add -host IPアドレス gw ゲートウェイ

# route add -host 10.1.2.3 gw 192.168.0.1

もしくはnetmask255.255.255.255を指定します。

# route add -net 10.1.2.3 netmask 255.255.255.255 gw 192.168.0.1

routeコマンドでルーティングを削除する

routeコマンドはnet-toolsパッケージがインストールされている必要があります。

ルーティングの削除はroute delコマンドを実行します。

ルーティング削除ではgwを省略できますが、面倒でもgwを指定して削除するルーティングを明示的に指定することをおすすめします(特に業務の場合)。

route del -net ネットワーク/プレフィックス gw ゲートウェイ

# route del -net 10.1.2.0/24 gw 192.168.0.1

route del -net ネットワーク netmask サブネットマスク gw ゲートウェイ

# route del -net 10.1.2.0 netmask 255.255.255.0 gw 192.168.0.1

宛先がホストの場合は-hostを使うか、netmask255.255.255.255を指定します。

# route del -host 10.1.2.3 gw 192.168.0.1

もしくは

# route del -net 10.1.2.3 netmask 255.255.255.255 gw 192.168.0.1

ルーティングを永続的に追加する

NetworkManagerで設定する方法

従来の方法ではファイルにルーティング設定を書き込みプロセスを再起動する方法が主流でした。この方法は古くからあるため今でも使われていますが、Debian系とRedHat系で設定方法が異なるなど現代の管理方法には合いません。

可能であれば、nmcli(NetworkManager コマンドラインインターフェイス)による設定方法をおすすめします。本記事ではnmcliによる設定方法を解説します。

nmcliはNetworkMangerで動きます。意図的にNetworkManagerを止めている場合はnmcliが使えません。また、NetworkManagerがインストールされていない場合は別途インストールが必要です。

デバイスを確認する

デバイスの確認はnmcli deviceコマンドを実行します。次のコマンドの結果ではens160が使われている事が分かります。

# nmcli device
DEVICE  TYPE      STATE            CONNECTION
ens160  ethernet  接続済み         ens160
lo      loopback  接続済み (外部)  lo
#

ルーティングを追加する

nmcli connection modify デバイス名 +ipv4.routes "ネットワーク/プレフィックス ゲートウェイ"

# nmcli connection modify ens160 +ipv4.routes "10.1.2.0/24 192.168.0.1"

設定を追加したらsystemctl restart NetworkManager.serviceコマンドでNetworkManagerを再起動します。

# systemctl restart NetworkManager.service
#

これでOSを再起動してもルーティング設定は消えません。

ルーティングを削除する

nmcli connection modify デバイス名 -ipv4.routes "ネットワーク/プレフィックス ゲートウェイ"

# nmcli connection modify ens160 -ipv4.routes "10.1.2.0/24 192.168.0.1"

設定を削除したらsystemctl restart NetworkManager.serviceコマンドでNetworkManagerを再起動します。

# systemctl restart NetworkManager.service
#

まとめ

Linux環境で静的ルーティングを設定する方法を解説しました。

Linuxでルーティングを追加したり削除することはあまり無いため、コマンドを忘れてしまうエンジニアの方も多いかと思います。

そんな時に本記事が参考になれば幸いです。