「サーバーから外部のインターネットへ通信できない」「特定のセグメントだけパケットが届かないとき、どの経路を通っているのか確認したい」といったネットワークのトラブルに直面したことはないでしょうか。
ネットワークの疎通確認や経路制御において、ルーティングテーブルの確認と適切な設定変更はインフラエンジニアにとって不可欠な作業です。
この記事を読むことで、LinuxLinux [リナックス / ライナックス]オープンソースのOSカーネルのrouteコマンドを用いたルーティングテーブルの確認方法から、デフォルトゲートウェイの変更、静的ルートの追加・削除手順を理解し、あわせて現代のLinuxで標準的に利用されるip routeコマンドへの移行方法まで学べます。
確認した環境
本記事で解説するコマンドと手順は、以下の環境で動作を確認しています。
- OSOS [オーエス]Operating System。基本ソフトウェア: UbuntuUbuntu [ウブントゥ]人気のLinuxディストリビューション 22.04 LTS
- ネットワーク管理ツール: net-tools (
routeコマンドを含むパッケージ)
Linuxのrouteコマンドとは?ネットワーク経路やトラブル調査の基本
routeコマンドは、LinuxなどのUnix系OSにおいて、カーネルのIPIP [アイピー]Internet Protocol。インターネット通信の基本プロトコルルーティングテーブルを表示・操作するためのコマンドです。
ネットワークインターフェースがパケットを送信する際、宛先IPアドレスに対して「どのルーター(ゲートウェイ)を経由すべきか」「どのネットワークカードから送信すべきか」を決定するためのルールがルーティングテーブルに記録されています。
通信不良が発生した際、「パケットが意図した経路を通っているか」「デフォルトゲートウェイが正しく設定されているか」を確認する上で、routeコマンドは基本的な調査ツールとして役立ちます。
routeコマンドの基本的な使い方とネットワーク経路の確認
まずは、現在のルーティングテーブルを表示する方法と、その出力結果の見方について解説します。
route -nで現在のネットワーク経路(ルーティングテーブル)を確認する
オプションを何も指定せずに route コマンドを実行すると、ルーティングテーブルのアドレスがホスト名などに変換されて表示される場合があります。
名前解決に時間がかかる環境では、ルーティングテーブルの表示自体に時間がかかることがあります。
そのため、ネットワーク障害の調査などでは、名前解決を行わず数値形式で表示する -n オプションを付けて実行する方法が一般的です。
route -n実行例:
Kernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 eth0192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0routeコマンド出力結果の見方(Destination、Gatewayなど)
出力された各項目の意味は以下の通りです。ルーティングテーブルを正しく読み解くための重要な要素となります。
- Destination(宛先):
パケットの宛先となるネットワークアドレスまたはホストアドレスです。
0.0.0.0はデフォルトルートを示します。 - Gateway(ゲートウェイ):
パケットを転送する次ホップ(ルーター)のIPアドレスです。自網内の直接接続である場合は
*または0.0.0.0が表示されます。 - Genmask(ネットマスク): 宛先アドレスのネットワーク範囲を特定するためのサブネットマスクです。
- Flags(フラグ):
経路の状態や特性を示すフラグです。主なものは以下の通りです。
U(Up):経路が有効である。G(Gateway):ゲートウェイ(ルーター)を経由する。H(Host):宛先がネットワークではなく特定のホストである。D(Dynamic):ルーティングデーモンやICMPICMP [アイシーエムピー]Internet Control Message Protocol。IP通信のエラー報告や制御メッセージを転送するプロトコルリダイレクトなどによって動的に追加された経路。
- Metric(メトリック):
経路の距離や優先度を表すために利用される値です。
routeコマンドのmanページでは、宛先までの「距離」として説明されており、通常はホップ数などで表されます。 また、同じ宛先に複数の経路が存在する場合、Linuxのルート選択では宛先プレフィックスの最長一致など、複数の条件が考慮されます。そのため、「Metricが小さい経路が常に選択される」と単純に考えないように注意が必要です。 - Iface(インターフェース):
パケットを送信するネットワークインターフェース名(例:
eth0,enp3s0など)です。
デフォルトゲートウェイの経路を確認・変更する方法
インターネットや外部ネットワークと通信するためには、デフォルトゲートウェイの正しい設定が不可欠です。ここでは現在の確認と変更の手順を解説します。
現在設定されているデフォルトゲートウェイを確認する
デフォルトゲートウェイは、Destinationが 0.0.0.0(または default)の行を確認することで特定できます。
route -n | grep '^0.0.0.0'あるいは、route コマンドをオプションなしで実行し、Gateway列にルーターのIPアドレスが表示されているエントリを確認します。
デフォルトゲートウェイの経路を追加・変更する
既存のデフォルトゲートウェイを変更する場合、route コマンドでは一度既存のデフォルトゲートウェイを削除してから新しいものを追加します(※後述する ip route replace を使うと、削除せずに直接置き換えることが可能です)。
注意: SSHSSH [エスエスエイチ]Secure Shell。暗号化されたリモート接続プロトコルなどのリモート接続中にデフォルトゲートウェイを削除すると、現在の接続が切断される可能性があります。リモート環境では、作業前にコンソールなどの復旧手段を確保してください。
ステップ1:既存のデフォルトゲートウェイを削除する
sudo route del defaultステップ2:新しいデフォルトゲートウェイを追加する
sudo route add default gw 192.168.1.254 dev eth0ここで指定しているオプションの意味は以下の通りです。
default: 宛先が一致しないすべてのパケットの転送先を指定します(0.0.0.0と同義)。gw 192.168.1.254: 経由するゲートウェイのIPアドレスを指定します。dev eth0: 通信に使用するネットワークインターフェースを指定します。
スタティックルート(静的ルート)による特定のネットワーク経路の追加と削除
特定のネットワークセグメントへ通信するために、特定のルーターを経由させる「静的ルート(スタティックルート)」の追加と削除手順を解説します。
route addで特定のネットワークへの経路を追加する
例えば、社内の別拠点である 10.20.0.0/16 というネットワークへアクセスする際、ルーター 192.168.1.254 を経由させたい場合は以下のように実行します。
sudo route add -net 10.20.0.0 netmask 255.255.0.0 gw 192.168.1.254 dev eth0特定のホスト(例: 192.168.100.50)宛ての経路を単体で追加したい場合は -host オプションを使用します。
sudo route add -host 192.168.100.50 gw 192.168.1.254 dev eth0パラメータの補足:
-net: 宛先がネットワークであることを示します。netmask: 宛先ネットワークのサブネットマスクを指定します。gw: 経由するルーターのIPアドレスを指定します。dev: 使用するネットワークインターフェースを指定します。
補足: 指定するゲートウェイ(
gw)は、事前に対象のネットワークインターフェースから到達可能(Reachable)である必要があります。
route delで不要になったネットワーク経路を削除する
追加した静的ルートが不要になった場合や、設定を誤ってやり直す場合は route del コマンドを使用します。
ネットワーク単位の経路を削除する場合:
sudo route del -net 10.20.0.0 netmask 255.255.0.0ホスト単位の経路を削除する場合:
sudo route del -host 192.168.100.50ここで紹介した route コマンドによる変更は、実行中のカーネルのルーティングテーブルに対する一時的な変更です。ネットワーク設定の再適用やOSの再起動などによって、手動で追加した経路が失われる場合があります。
設定を恒久化する場合は、使用しているディストリビューションやネットワーク管理方式に応じた設定が必要です。
Ubuntu 22.04 LTSでは、一般的にNetplanの設定ファイル(/etc/netplan/*.yaml)に routes: を記述して静的ルートを設定します。
一方、Red Hat系の一部の旧来の環境では、/etc/sysconfig/network-scripts/ 配下の設定ファイルが使用される場合があります。
注意点:モダンなLinux環境でのip routeコマンドへの移行について
長年親しまれてきた route コマンド(net-toolsパッケージに含まれる)は、多くのモダンなLinuxディストリビューションにおいて非推奨(レガシー)扱いとなっています。
Ubuntu 22.04 LTSなどの現行OSでは、より高機能でモダンなネットワーク管理ツールである iproute2 パッケージの ip コマンドの利用が標準となっています。
ルーティングテーブルを確認・操作する際は、将来的にも ip route コマンドへの移行を検討・推奨します。
特定の宛先に対して選択される経路を確認する
現代のLinuxでのトラブルシューティングとしては、ip route get も便利です。
ip route get 8.8.8.8このコマンドでは、指定した宛先に対してルーティングテーブルからどの経路が選択されるのかを確認できます。
例えば、以下のような結果が表示されます。
8.8.8.8 via 192.168.1.1 dev eth0 src 192.168.1.100この場合、8.8.8.8 への通信では、192.168.1.1 をゲートウェイとして eth0 から送信し、送信元アドレスとして 192.168.1.100 が選択されることが分かります。
ただし、ip route get は実際にパケットを送信して通信の疎通を確認するコマンドではありません。実際の通信可否を確認する場合は、ping、traceroute、curl など、目的に応じた疎通確認も必要です。
「特定のセグメントだけパケットが届かない」といった障害では、まず ip route get でローカルホストが選択している経路を確認すると、原因の切り分けに役立ちます。
参考として、route コマンドと ip route コマンドの対比表を以下に示します。
| 操作内容 | 旧式(routeコマンド) | モダン(ip routeコマンド) |
|---|---|---|
| ルーティング表示 | route -n | ip route show |
| デフォルトGW追加 | sudo route add default gw <IP> | sudo ip route add default via <IP> dev <Iface> |
| デフォルトGW変更 | route del default後にroute add | sudo ip route replace default via <IP> dev <Iface> |
| 静的ルート追加 | sudo route add -net <NW> netmask <Mask> gw <IP> | sudo ip route add <NW>/<Prefix> via <IP> |
| 経路削除 | sudo route del -net <NW> netmask <Mask> | sudo ip route del <NW>/<Prefix> |
このように、ip route コマンドはサブネットマスクをCIDR表記(例: /24)で直感的に指定できるなどのメリットがあります。
まとめ:routeコマンドでネットワーク経路を適切に確認・制御しよう
本記事では、Linuxの route コマンドを用いたネットワーク経路の確認方法と設定変更の手順について解説しました。
記事のポイントを以下にまとめます。
route -nを使うことで、名前解決による表示の遅延を避けながら、現在のルーティングテーブルを数値形式で確認できる。- デフォルトゲートウェイの変更は、一度既存のルートを削除してから新しいゲートウェイを指定して追加する。
route addおよびroute delを用いることで、特定のネットワークやホストに対する静的ルートの追加・削除ができる。routeコマンドによる設定は一時的なものであるため、再起動後も維持するには恒久的なネットワーク設定が必要となる。- 近年のモダンなLinux環境では、より高機能な
ip routeコマンドへの移行が進んでいる。
ネットワークのトラブルシューティングや環境構築の場面において、ルーティングの仕組みを把握し、正しく経路を確認・制御できるようにしておきましょう。
以上で本記事の解説を終わります。
よいITライフを!
人気記事
- 1
- 2
- 3
- 4
- 5
Rocky Linux対応。実際にWebサーバーを公開するまでのプロセスを体験できる、最も確実で実践的なガイドブックです。