そういうトラブルに遭遇したとき、真っ先に確認すべきなのがルーティングテーブルです。
「どの宛先のパケットを、どのインターフェースから、どのゲートウェイ経由で送るか」——この情報を管理しているのがルーティングテーブルです。ここがおかしければ、pingやcurlがどれだけ正しくても通信できません。
この記事では、ip route コマンドの基本的な使い方から、静的ルートの追加・削除、永続化の手順、そしてよくあるトラブルの切り分けまで解説します。RHEL 9.4 / Rocky Linux 9 / Ubuntu 22.04 LTS で動作確認済みです。
この記事のポイント
・ip route show でルーティングテーブルを一覧表示できる
・ip route add でコマンドラインから静的ルートを追加できる(再起動で消える)
・永続化は RHEL 系は nmcli、Ubuntu 系は Netplan で設定する
・ip route get で「この宛先への実際の経路」を1行で確認できる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
ip routeコマンドとは——routeコマンドとの違い
ip route は、iproute2 パッケージに含まれるコマンドで、Linuxのルーティングテーブルを表示・操作するためのツールです。古くから使われてきた `route` コマンド(net-tools パッケージ)の後継に当たりますが、現在の主要なLinuxディストリビューションでは `route` はデフォルトインストールから外れており、ip route がスタンダードになっています。
| 比較項目 | ip route(新) | route(旧) |
|---|---|---|
| パッケージ | iproute2(標準搭載) | net-tools(別途インストール要) |
| IPv6対応 | ip -6 route で対応 | route -6 または route6 |
| 出力形式 | キーワード形式で読みやすい | 列形式(慣れが必要) |
| 推奨度 | 現在の標準(推奨) | 非推奨(廃止傾向) |
今後 `route` コマンドを使っている場面があれば、ip route に切り替えることを強くおすすめします。
ルーティングテーブルの基本を確認する(ip route show)
1. 現在のルーティングテーブルを表示する
引数なしで実行すると、現在のカーネルルーティングテーブルが表示されます。# ルーティングテーブルを表示 $ ip route show default via 192.168.1.1 dev eth0 proto dhcp src 192.168.1.105 metric 100 10.0.0.0/8 via 10.10.0.1 dev eth1 proto static metric 200 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.105 metric 100 192.168.100.0/24 dev eth1 proto kernel scope link src 10.10.0.10 metric 200 # ip route だけでも同じ結果(showは省略可) $ ip route
・default via 192.168.1.1:デフォルトルート。どのルートにも一致しない宛先はここを経由する
・dev eth0:使用するネットワークインターフェース
・proto dhcp / proto static:どのプロトコルでルートが設定されたか(dhcp=DHCP、static=手動設定、kernel=カーネル自動)
・scope link:同じセグメント内(ルーターなしで直接通信できる範囲)
・metric 100:ルートの優先度(小さい値ほど優先される)
2. 特定のネットワーク宛てのルートだけ表示する
# 10.0.0.0/8 ネットワーク宛てのルートだけ表示 $ ip route show 10.0.0.0/8 10.0.0.0/8 via 10.10.0.1 dev eth1 proto static metric 200 # 192.168 で始まるルートを絞り込む $ ip route show 192.168.0.0/16 192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.105 192.168.100.0/24 dev eth1 proto kernel scope link src 10.10.0.10
3. ある宛先IPへの実際の経路を確認する(ip route get)
「この宛先IPへの通信は、どの経路で通るか」を1行で確認できる非常に便利なコマンドです。障害切り分けの第一手として使います。# 8.8.8.8(Google DNS)への経路を確認 $ ip route get 8.8.8.8 8.8.8.8 via 192.168.1.1 dev eth0 src 192.168.1.105 uid 1000 cache # 192.168.100.5 への経路を確認 $ ip route get 192.168.100.5 192.168.100.5 via 10.10.0.1 dev eth1 src 10.10.0.10 uid 1000 cache
静的ルートを追加・削除する(ip route add / del)
1. 静的ルートを追加する(ip route add)
# 10.20.0.0/16 ネットワーク宛てのルートをゲートウェイ 10.10.0.254 経由で追加 $ sudo ip route add 10.20.0.0/16 via 10.10.0.254 # インターフェースを指定する場合 $ sudo ip route add 10.20.0.0/16 via 10.10.0.254 dev eth1 # metric(優先度)を指定する場合 $ sudo ip route add 10.20.0.0/16 via 10.10.0.254 dev eth1 metric 100 # 追加後に確認 $ ip route show 10.20.0.0/16 10.20.0.0/16 via 10.10.0.254 dev eth1
2. デフォルトルートを変更する
# 現在のデフォルトルートを確認 $ ip route show default default via 192.168.1.1 dev eth0 proto dhcp src 192.168.1.105 metric 100 # デフォルトルートを削除 $ sudo ip route del default # 新しいデフォルトルートを設定 $ sudo ip route add default via 192.168.1.254 # または replace で上書き(削除不要) $ sudo ip route replace default via 192.168.1.254 dev eth0
3. 静的ルートを削除する(ip route del)
# 追加したルートを削除 $ sudo ip route del 10.20.0.0/16 # ゲートウェイも指定して削除(同じネットワーク宛てに複数ルートがある場合) $ sudo ip route del 10.20.0.0/16 via 10.10.0.254 # 削除後に確認 $ ip route show 10.20.0.0/16 (出力なし = 削除完了)
静的ルートを永続化する方法
`ip route add` で設定したルートは再起動で消えます。本番環境では永続化が必須です。OS・ディストリビューションによって設定方法が異なります。1. RHEL / Rocky Linux / AlmaLinux(nmcliで設定)
RHEL 9 系では NetworkManager 経由で設定するのが正式な方法です。# 現在のネットワーク接続名を確認 $ nmcli connection show NAME UUID TYPE DEVICE eth0 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ethernet eth0 eth1 yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy ethernet eth1 # eth1 に静的ルートを追加(再起動後も有効) $ sudo nmcli connection modify eth1 +ipv4.routes "10.20.0.0/16 10.10.0.254" # 設定を反映(接続を再起動) $ sudo nmcli connection up eth1 # 設定確認 $ nmcli connection show eth1 | grep route ipv4.routes: { ip = 10.20.0.0/16, nh = 10.10.0.254 } # 実際のルーティングテーブルを確認 $ ip route show 10.20.0.0/16 10.20.0.0/16 via 10.10.0.254 dev eth1 proto static metric 100
nmcliコマンドの詳細な使い方はLinux ポート確認の全コマンドも参照してください。
2. Ubuntu 20.04 以降(Netplanで設定)
Ubuntu では Netplan がネットワーク設定の標準ツールです。# 設定ファイルを確認・編集(ファイル名はディストリビューションで異なる) $ ls /etc/netplan/ 00-installer-config.yaml $ sudo vi /etc/netplan/00-installer-config.yaml # 設定例(eth1 に静的ルートを追加) network: version: 2 ethernets: eth1: dhcp4: false addresses: - 10.10.0.10/24 routes: - to: 10.20.0.0/16 via: 10.10.0.254 metric: 100 # 設定を適用 $ sudo netplan apply # 確認 $ ip route show 10.20.0.0/16 10.20.0.0/16 via 10.10.0.254 dev eth1 proto static onlink
3. RHEL 7 / CentOS 7 系の旧形式(参考)
古いサーバーではファイルベースの設定がまだ使われていることがあります。# /etc/sysconfig/network-scripts/route-eth1 を作成・編集 $ sudo vi /etc/sysconfig/network-scripts/route-eth1 # 記述内容(1行に1ルート) 10.20.0.0/16 via 10.10.0.254 # ネットワークサービスを再起動して適用 $ sudo systemctl restart network
よく使うオプション一覧
| やりたいこと | コマンド |
|---|---|
| ルーティングテーブルを表示 | ip route show |
| 宛先への実際の経路を確認 | ip route get 宛先IP |
| 静的ルートを追加 | sudo ip route add ネットワーク via ゲートウェイ |
| デフォルトルートを追加 | sudo ip route add default via ゲートウェイ |
| ルートを削除 | sudo ip route del ネットワーク |
| ルートを上書き | sudo ip route replace ネットワーク via ゲートウェイ |
| IPv6のルーティングテーブルを表示 | ip -6 route show |
| テーブルIDを指定して表示(ポリシールーティング) | ip route show table 100 |
| 全テーブルをまとめて表示 | ip route show table all |
応用:ポリシールーティング(複数ゲートウェイの使い分け)
サーバーに複数のネットワークインターフェースがある場合、「特定の送信元IPからの通信だけ別のゲートウェイを経由させたい」という要件が出ることがあります。これをポリシールーティングと呼びます。ip route コマンド単体では対応できず、ip rule コマンドと組み合わせて使います。
# ルーティングテーブル 100 番を作成して静的ルートを追加 $ sudo ip route add default via 10.10.0.254 dev eth1 table 100 $ sudo ip route add 10.10.0.0/24 dev eth1 src 10.10.0.10 table 100 # 送信元IP 10.10.0.10 の通信は テーブル100 を使うよう設定 $ sudo ip rule add from 10.10.0.10 table 100 # ルールを確認 $ ip rule show 0: from all lookup local 32765: from 10.10.0.10 lookup 100 32766: from all lookup main 32767: from all lookup default
トラブルシュート・エラー対処
【よくある質問1】ルートを追加したのに通信できない
ルーティングテーブルは正しくても、通信できない原因はいくつかあります。# 1. まず ip route get で経路が正しいか確認 $ ip route get 10.20.0.5 10.20.0.5 via 10.10.0.254 dev eth1 src 10.10.0.10 uid 1000 # 2. ARP テーブルを確認(ゲートウェイのMACアドレスが解決されているか) $ ip neigh show 10.10.0.254 dev eth1 lladdr 00:11:22:33:44:55 REACHABLE # ゲートウェイへの ping を確認 $ ping -c 3 10.10.0.254 PING 10.10.0.254 (10.10.0.254) 56(84) bytes of data. 64 bytes from 10.10.0.254: icmp_seq=1 ttl=64 time=0.456 ms # 3. ファイアウォールの確認(firewalldやnftables) $ sudo firewall-cmd --list-all $ sudo nft list ruleset
【よくある質問2】「RTNETLINK answers: File exists」エラーが出る
同じネットワーク宛てのルートがすでに存在している場合に出るエラーです。$ sudo ip route add 10.20.0.0/16 via 10.10.0.254 RTNETLINK answers: File exists # 既存のルートを確認 $ ip route show 10.20.0.0/16 10.20.0.0/16 via 10.10.0.100 dev eth1 proto static # 既存ルートを削除してから追加するか、replaceで上書き $ sudo ip route replace 10.20.0.0/16 via 10.10.0.254 # 確認 $ ip route show 10.20.0.0/16 10.20.0.0/16 via 10.10.0.254 dev eth1
【よくある質問3】「RTNETLINK answers: Network is unreachable」エラーが出る
指定したゲートウェイへの経路がない場合に出るエラーです。ゲートウェイのIPアドレスが、現在のインターフェースが所属するネットワーク内にあるか確認してください。# eth1 のIPアドレスを確認 $ ip addr show eth1 3: eth1:
mtu 1500 qdisc mq state UP link/ether 00:50:56:xx:xx:xx brd ff:ff:ff:ff:ff:ff inet 10.10.0.10/24 brd 10.10.0.255 scope global eth1 # eth1 のネットワークは 10.10.0.0/24 # ゲートウェイに 192.168.1.254 を指定するとエラーになる(同一ネットワークではない) $ sudo ip route add 10.20.0.0/16 via 192.168.1.254 dev eth1 RTNETLINK answers: Network is unreachable # 正しくは eth1 のセグメント内のゲートウェイを指定する $ sudo ip route add 10.20.0.0/16 via 10.10.0.254 dev eth1
【よくある質問4】再起動後にルートが消える
`ip route add` コマンドで追加した設定は、再起動すると消えます。前述のとおり、RHEL 系は nmcli、Ubuntu 系は Netplan で永続化してください。暫定対処として、`/etc/rc.local` に `ip route add` コマンドを書く方法もありますが、NetworkManager が設定を上書きする可能性があるため推奨しません。
チェックリスト:ネットワーク疎通確認の手順
「特定のサーバーへの通信ができない」というトラブルに遭遇したときの確認手順をまとめます。
・ステップ1:`ip route get 宛先IP` で正しい経路が表示されるか確認する
・ステップ2:`ping ゲートウェイIP` でゲートウェイへの疎通を確認する
・ステップ3:`ip neigh show` でゲートウェイのARP解決ができているか確認する
・ステップ4:`ping 宛先IP` で宛先への疎通を確認する(ICMP許可が必要)
・ステップ5:`traceroute 宛先IP` で途中のどこで詰まっているか確認する
・ステップ6:ファイアウォール(firewalld / nftables / iptables)の設定を確認する
・ステップ7:対象サーバー側のルーティングテーブルを確認する(戻りのルートがあるか)
Linuxのポート確認についてはLinux ポート確認の全コマンドと合わせて活用してください。DNS設定の確認はLinux DNS 設定の基本も参考になります。
FAQ(よくある質問)
Q. ip route と route コマンドはどちらを使うべきですか?A. 現在の標準は ip route です。route コマンドは RHEL 9 / Ubuntu 22.04 以降ではデフォルトインストールされておらず、今後は ip route に統一することを推奨します。
Q. デフォルトルートが複数ある場合はどうなりますか?
A. metric 値(小さいほど優先)が異なる場合は小さい方が使われます。metric 値が同じ場合はECMP(Equal-Cost Multi-Path)として複数のルートを負荷分散して使う動作になることがあります。
Q. ip route show でルートが表示されない場合は?
A. そのインターフェースが UP 状態になっていない可能性があります。`ip link show` でインターフェースの状態を確認してください。状態が `DOWN` の場合は `sudo ip link set eth1 up` で有効化します。
Q. IPv6 のルーティングを確認するにはどうすればいいですか?
A. `ip -6 route show` を使います。IPv6の静的ルート追加は `sudo ip -6 route add 2001:db8::/32 via 2001:db8::1` のように `-6` オプションを付けるだけです。
Q. VPN接続後にルーティングがおかしくなりました。確認方法は?
A. `ip route show table all` で全テーブルのルートを一覧表示し、VPN接続で追加されたルートを確認してください。VPN切断後も残るルートは `sudo ip route del` で手動削除できます。
Q. ルーティングテーブルをバックアップしてから変更したい場合は?
A. `ip route show > /tmp/route-backup.txt` でファイルに保存できます。リストアする場合は保存内容を確認してから `sudo ip route add` で再設定します。
本記事のまとめ
| やりたいこと | コマンド |
|---|---|
| ルーティングテーブルを表示 | ip route show |
| 宛先への実際の経路を確認 | ip route get 宛先IP |
| 静的ルートを追加 | sudo ip route add 10.20.0.0/16 via 10.10.0.254 |
| デフォルトルートを変更 | sudo ip route replace default via ゲートウェイ |
| ルートを削除 | sudo ip route del 10.20.0.0/16 |
| IPv6のルーティングテーブルを表示 | ip -6 route show |
| 全ルーティングテーブルを表示 | ip route show table all |
| ルートをバックアップ | ip route show > /tmp/route-backup.txt |
| RHEL系で永続化 | nmcli connection modify eth1 +ipv4.routes "10.20.0.0/16 GW" |
| Ubuntu系で永続化 | Netplan の yaml ファイルに routes: を記述 |
「なぜここだけ繋がらないのか」というネットワークトラブルの多くは、ルーティングテーブルの設定ミスが原因です。まず `ip route get 宛先IP` で経路を確認し、次にゲートウェイへの疎通を確認する——この2ステップを習慣にするだけで、障害調査の時間が大幅に短縮されます。
サーバーの保守・運用を含めた、体系的なLinuxスキルを身につけませんか?
ルーティング設定はサーバー運用の基本ですが、安全に設定するにはLinuxのネットワーク全体の仕組みの理解が必要です。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます