エラーの読み解き
サーバーにpingを打とうとしたり、apt updateを実行したりした際、ターミナルにconnect: Network is unreachableという無愛想なメッセージが即座に返ってくることがあります。これは「Connection Timeout(接続タイムアウト)」とは異なります。タイムアウトはシステムが応答を待ってから発生しますが、このエラーはOSがパケットを送信しようとさえしなかったことを意味します。単純に、どこに送ればいいのか分からなくなっている状態です。
$ ping 8.8.8.8
connect: Network is unreachable
Linuxカーネルを郵便の仕分け人だと考えてみてください。宛先不明の郵便物を渡されたとき、「差出人に返送」する場所も「既定の出口」となるポストもなければ、仕分け人はその手紙を床に捨ててしまうしかありません。
根本原因:ルートの欠如
このエラーは、ほとんどの場合ルーティングテーブルの問題を指しています。これは、特定のIP範囲に対してどのネットワークインターフェース(eth0やwlan0など)を使用すべきかをLinuxに教える内部リストです。インターネットにアクセスしようとしているのに「デフォルトゲートウェイ」が定義されていない場合、システムはすぐに諦めてしまいます。
主な原因は以下の通りです:
- ネットワークインターフェースが物理的、または論理的に「Down(停止)」している。
- DHCPによるIPアドレスやゲートウェイの割り当てに失敗している。
- 静的IP設定(Netplanや/etc/network/interfaces)にタイポがある。
- デフォルトルートが手動で削除されたか、VPNによって上書きされている。
解決方法
1. インターフェースが有効か確認する
まずは、ネットワークカードが稼働しているか確認しましょう。以下のコマンドを実行します:
ip addr show
インターフェース名(通常はenp0s3、eth0、wlp2s0など)を探します。<BROADCAST,MULTICAST>は表示されているが、UPという文字がない場合、そのインターフェースは無効になっています。以下のコマンドで有効化します:
sudo ip link set enp0s3 up
2. デフォルトゲートウェイの確認
ここで問題が見つかることがほとんどです。ルートを確認します:
ip route show
正常なシステムであれば、次のようにdefaultで始まる行が表示されるはずです:
default via 192.168.1.1 dev enp0s3 proto dhcp src 192.168.1.50 metric 100
192.168.1.0/24 dev enp0s3 proto kernel scope link src 192.168.1.50
出力が空、またはdefaultの行がない場合、システムは孤立しています。192.168.1.1が外部世界への出口であることを認識できていません。
3. 一時的な修正の適用
すぐにオンラインに戻る必要がありますか?カーネルにゲートウェイの場所を手動で教えることができます。ルーターのIP(通常は.1や.254)が必要です。
sudo ip route add default via 192.168.1.1 dev enp0s3
すぐに8.8.8.8にpingを打って接続をテストしてください。成功すれば、原因が確定します。ただし、この設定は再起動すると消えてしまうので注意してください。
4. 設定を永続化する
再起動後も修正を維持するには、設定ファイルを更新する必要があります。
最新のUbuntu(Netplan)の場合
/etc/netplan/にあるYAMLファイルを開きます(ファイル名は環境によりますが、通常は01や50で始まります):
sudo nano /etc/netplan/01-netcfg.yaml
最新のNetplan(バージョン0.100以降)では、非推奨となったgateway4キーではなく、routesブロックを使用することが推奨されています。以下の構造を使用してください:
network:
version: 2
renderer: networkd
ethernets:
enp0s3:
dhcp4: no
addresses: [192.168.1.50/24]
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
保存して変更を適用します:
sudo netplan apply
Debianまたは古いUbuntuの場合
/etc/network/interfacesを編集し、staticブロックにゲートウェイが含まれていることを確認します:
iface enp0s3 inet static
address 192.168.1.50
netmask 255.255.255.0
gateway 192.168.1.1
経路のテスト
修正を適用したら、mtrを使ってパケットがネットワークを通過する様子を確認しましょう:
mtr -n 8.8.8.8
最初のホップにゲートウェイ(例:192.168.1.1)が表示され、その後に外部IPが続くようであれば、無事にオンライン復旧です。
予防策と仮想マシン
サブネットマスクの計算ミスは、ルーティングを壊す典型的な原因です。たとえば、/28のネットワークを定義したのにゲートウェイが.30にある場合、到達不能になります。私は静的IPを設定する前に、このサブネット計算機を使ってCIDR範囲を確認するようにしています。これにより、単純な入力ミスを防ぐことができます。
VirtualBoxなどの仮想マシンでLinuxを実行している場合は、「アダプタータイプ」を再確認してください。「ホスト専用アダプター」ではインターネットへの経路がありません。「ブリッジ」または「NAT」に切り替えるだけで、OS内部の設定を変更することなく「Network is unreachable」エラーが解消されることがよくあります。

