こんにちは、フルスタックエンジニアのryuです。
Linuxで通信できないときに、ルーティングテーブルを確認したいことがあります。
しかし、routeとip routeのどちらを使えばよいのか、迷いませんか。
現在のLinuxでは、ip routeコマンドを使ってルーティングを確認・変更する方法が基本です。
この記事では、ルーティングテーブルの見方から、ルートの追加と削除、再起動後も設定を残す方法まで解説します。
Linuxのルーティングとは?¶
ルーティングとは、宛先へパケットを送るための経路を決めることです。
Linuxはルーティングテーブルを確認し、どのゲートウェイやネットワークインターフェースへパケットを送るのか判断します。
例えば、同じネットワーク内の通信は直接送ります。
別のネットワークやインターネットへの通信は、通常はデフォルトゲートウェイへ送ります。
ルーティングの仕組みから知りたい方は、ルーティングとは?も参考にしてください。
ip routeでルーティングテーブルを確認する¶
現在のルーティングテーブルを確認するには、以下のコマンドを実行します。
ip route
showを付けても同じように確認できます。
ip route show
実行結果は、次のようになります。
default via 192.168.1.1 dev ens3 proto dhcp src 192.168.1.10 metric 100
192.168.1.0/24 dev ens3 proto kernel scope link src 192.168.1.10 metric 100
最初は少し分かりにくいですよね。
主な項目は以下の通りです。
| 表示 | 意味 |
|---|---|
default |
個別の経路がない宛先に使う経路 |
via |
次にパケットを渡すゲートウェイ |
dev |
通信に使うインターフェース |
src |
送信元として使うIPアドレス |
metric |
経路の優先度。一般的には小さい方が優先される |
この例では、192.168.1.0/24と同じネットワークへの通信はens3から直接送ります。
それ以外の通信は、192.168.1.1のデフォルトゲートウェイへ送ります。
route -nとの違い¶
以前は、以下のrouteコマンドがよく使われていました。
route -n
現在も環境によっては利用できますが、net-toolsパッケージが入っていないと実行できません。
また、IPアドレス、インターフェース、ルーティングなどをまとめて操作できるipコマンドが広く使われています。
| 以前のコマンド | 現在使われるコマンド |
|---|---|
ifconfig |
ip address |
route -n |
ip route |
arp -n |
ip neigh |
検索結果や古い手順書でroute addを見かけることはあります。
新しく覚えるなら、まずはip routeを使えるようにしておきましょう。
宛先までの経路を確認する¶
特定のIPアドレスへ通信するときに、どの経路が使われるのか確認するにはip route getを使います。
ip route get 8.8.8.8
実行結果は、次のようになります。
8.8.8.8 via 192.168.1.1 dev ens3 src 192.168.1.10 uid 1000
この結果から、8.8.8.8への通信は、ゲートウェイ192.168.1.1を経由し、ens3から送信されることが分かります。
ルーティングテーブルを眺めても判断しにくい場合は、ip route getを使うと分かりやすいです。
ip route addでルートを追加する¶
ここからは、静的ルートを一時的に追加してみましょう。
例えば、10.1.0.0/16への通信を、ゲートウェイ172.16.0.254へ送る場合は以下のように実行します。
sudo ip route add 10.1.0.0/16 via 172.16.0.254 dev ens3
基本的な書式は以下です。
ip route add 宛先ネットワーク via ゲートウェイ dev インターフェース
追加後は、ルーティングテーブルを確認します。
ip route
対象の経路だけを確認する場合は、以下のように指定できます。
ip route show 10.1.0.0/16
ゲートウェイは、指定したインターフェースから到達できるIPアドレスである必要があります。
デフォルトゲートウェイを追加する¶
デフォルトルートが存在しない場合は、以下のように追加できます。
sudo ip route add default via 192.168.1.1 dev ens3
すでにデフォルトルートがあり、変更したい場合はreplaceを使えます。
sudo ip route replace default via 192.168.1.1 dev ens3
ただし、SSHで接続しているサーバーのデフォルトルートを変更すると、通信が切れる可能性があります。
遠隔サーバーでは、戻す方法や別の接続経路を準備してから作業してください。
デフォルトゲートウェイについては、デフォルトゲートウェイとは?でも解説しています。
ip route delでルートを削除する¶
追加した静的ルートを削除する場合は、delを使います。
sudo ip route del 10.1.0.0/16 via 172.16.0.254 dev ens3
基本的な書式は以下です。
ip route del 宛先ネットワーク via ゲートウェイ dev インターフェース
削除後は、もう一度ip routeで確認します。
ip route
存在しない経路を削除しようとすると、エラーが表示されます。
現在の設定を確認してから削除しましょう。
ip routeで追加した設定は再起動すると消える¶
ip route addで追加した経路は、Linuxのカーネルが持つ現在のルーティングテーブルへ反映されます。
そのため、通常はLinuxを再起動すると消えます。
動作確認や一時的な切り分けには便利ですが、本番運用で使う経路はOSのネットワーク設定へ記述する必要があります。
永続化する方法は、Linuxディストリビューションやネットワーク管理ツールによって異なります。
Ubuntuで静的ルートを永続化する¶
Ubuntu ServerなどでNetplanを使っている場合は、/etc/netplan/配下のYAMLファイルへルートを設定します。
設定例は以下です。
network:
version: 2
ethernets:
ens3:
dhcp4: true
routes:
- to: 10.1.0.0/16
via: 172.16.0.254
既存の設定ファイルへ追加するときは、インデントを崩さないように注意してください。
設定後は、いきなりnetplan applyを実行せず、まず以下を試します。
sudo netplan try
netplan tryでは、確認できない場合に設定を自動で戻せます。
SSH接続中の作業では、通信が切れたときに戻せるよう、この方法を使うと安心です。
RHEL系で静的ルートを永続化する¶
Rocky Linux、AlmaLinux、RHELなどでNetworkManagerを使っている場合は、nmcliで接続プロファイルへルートを追加できます。
最初に、接続名を確認します。
nmcli connection show
接続名がSystem ens3の場合は、以下のように設定します。
sudo nmcli connection modify "System ens3" \
+ipv4.routes "10.1.0.0/16 172.16.0.254"
設定を反映します。
sudo nmcli connection up "System ens3"
接続プロファイル名は、インターフェース名と同じとは限りません。
必ずnmcli connection showで確認してください。
Linuxで通信できないときの確認順¶
ルートを追加する前に、本当にルーティングが原因なのか確認することも大切です。
私は、以下の順番で確認することが多いです。
ip addressでIPアドレスを確認するip linkでインターフェースがUPか確認するip routeで経路を確認するip route get 宛先IPで使用される経路を確認する- ゲートウェイへpingを実行する
- ファイアウォールやクラウド側の設定を確認する
通信できないからといって、すぐに静的ルートを追加すると、余計に原因が分かりにくくなることがあります。
まずは現在の状態を確認しましょう。
Linuxのルーティング設定まとめ¶
現在のルーティングテーブルは、以下のコマンドで確認できます。
ip route
ルートを追加するときはadd、削除するときはdelを使います。
sudo ip route add 10.1.0.0/16 via 172.16.0.254 dev ens3
sudo ip route del 10.1.0.0/16 via 172.16.0.254 dev ens3
ip routeで追加した設定は、通常は再起動すると消えます。
継続して使う場合は、UbuntuではNetplan、RHEL系ではNetworkManagerなど、環境に合った方法で永続化してください。
コマンドだけを覚えるのではなく、どの宛先を、どのゲートウェイへ、どのインターフェースから送るのかを考えることが大切です。
Linuxとネットワークを実際に学びたい方へ¶
ルーティングは、Linuxとネットワークの両方に関係する重要な知識です。
実際にIPアドレスや経路を設定し、通信結果を確認すると理解しやすくなります。
Linuxのネットワーク設定を学びたい方は、Linux中級講座を確認してみてください。
ルーターや経路制御を構築しながら学びたい方は、ネットワーク講座がおすすめです。
