🐧 Linux 総合学習プラットフォーム
ネットワーク基礎 ・ 中級

ルーティングとゲートウェイ

自分のネットワークの外(別のネットワークやインターネット)へ届けるには、パケットの中継役が必要です。その出口になるのがデフォルトゲートウェイで、通常は家庭や社内のルータが担います。OSは「どの宛先をどこへ送るか」をルーティングテーブルで管理し、該当するルートがなければデフォルトゲートウェイへ転送します。ip route で現在のテーブルを確認できます。

同じネットワークにいる相手には、データを直接渡せる。だが相手が別のネットワークや、海の向こうのインターネット上のサーバだと、そのままでは1ミリも届かない。

💡
ポイント同じネットワークの相手には直接データを渡せる。別のネットワークやインターネットへは、出口のルータ=デフォルトゲートウェイ経由で届ける。

そこで登場するのが中継役だ。あるネットワークから別のネットワークへパケットを受け渡す装置をルータ(またはレイヤ3スイッチ)と呼ぶ。そして自分のネットワークの「出口」として設定されたルータを、デフォルトゲートウェイという。家庭や社内では、インターネット回線につながったルータがこの役を担うのが一般的だ。

手紙でいえば、町内の相手には直接手渡しできるが、遠くの町へ送るときは郵便局(ゲートウェイ)に託す。前のトピックの「相手が同じネットワーク部かどうか」の判断が、ここで「直接送るか、ゲートウェイに託すか」の分かれ道として効いてくる。

自分のネットワーク 192.168.1.x(同じ町) あなたのPC .10 デフォルトGW .1 インターネット 別のネットワーク 同じ町なら直接、別の町宛ては「出口」のゲートウェイへ託す

🧭 ルータは、行き先をどうやって知っているのか

託された側のルータは、宛先までの長い道のりを全部知っているわけではない。ここに、インターネットという巨大な仕組みが破綻せず動く秘密がある。

ルーティングとは、このパケットの受け渡し先(経路)を選ぶことを指す。インターネットは無数のネットワークがルータでつながった巨大な集合体で、宛先までの道のりにはいくつものルータが並んでいる。

各ルータは受け取ったパケットの宛先ネットワークを見て、「次にどのルータへ渡せばよいか」だけを判断し、バケツリレーのように次々と転送していく。送り出す側も途中のルータも、遠くの経路全体を知る必要はなく、「とりあえず次にどこへ渡すか」さえ知っていればよい。この分担があるからこそ、地球規模の通信が現実的に成り立つ。

万一どこかで判断を誤り、迷子になったパケットが永遠に回り続けたら困る。それを防ぐため、IPパケットにはTTLという寿命の値があり、ルータを1つ通過するたびに1ずつ減って、0になると破棄される仕組みも備わっている。

🗺 ルーティングテーブルを見て決めている

その「次にどこへ渡すか」を、OSやルータは何を見て決めているのか。判断のもとになるのがルーティングテーブルだ。

これは「この宛先ネットワークへは、次にこのルータ(ネクストホップ)へ渡す」あるいは「このネットワークは直接つながっている」という対応を並べた、経路の一覧表である。実は端末もルータと同じようにルーティングテーブルを持っている。

パケットを送るときは、まず宛先のネットワーク・アドレスをこの表と照らし合わせる。宛先が自分と同じネットワークなら相手へ直接送り、テーブルに該当する経路があればそのネクストホップへ渡す。

規模の小さいネットワークでは、管理者が手動でこの表を設定する「スタティック・ルーティング」で足りる。大規模になると、ルータ同士が情報を交換して自動でテーブルを作る「ダイナミック・ルーティング」が必要になり、その仕組みを定めたものをルーティング・プロトコル(RIP・OSPF・BGPなど)と呼ぶ。

🚪 「知らない宛先」はどこへ送られるのか

ルーティングテーブルのどの経路とも一致しない宛先――たとえば一度も通信したことのない、見知らぬインターネット上のサーバ――に送りたいときは、どうなるのか。

迷子にはならない。そうした宛先は、最後の受け皿としてデフォルトゲートウェイへ転送される。デフォルトゲートウェイは「宛先がよく分からないものは、とりあえずここへ送れば外の世界へ取り次いでくれる」という総合窓口だ。

多くの家庭や小規模ネットワークでは出口となるルータがひとつだけなので、そのルータのアドレスをデフォルトゲートウェイとして設定する。

逆にいえば、デフォルトゲートウェイが設定されていなかったり、誤ったアドレスになっていたりすると、同じネットワーク内とは通信できてもインターネットへはまったく出られない、という症状になる。

なお家庭用のルータは、このゲートウェイとしての経路選択に加えて、1つのグローバルIPアドレスを複数の端末で共有するためのアドレス変換(NAT)の機能も兼ね備えているのが普通だ。

🔍 自分の「出口」を確かめる

自分の出口がどこに設定されているかは、その場で確認できる。Linuxで現在のルーティングテーブルを見るには ip route コマンドを使う。

ip route ……ルーティングテーブルを表示する。default で始まる行のアドレスが「外への出口」(デフォルトゲートウェイ)だ。

実行すると、たとえば default via 192.168.1.1 dev eth0 という行が現れる。これはデフォルトゲートウェイが 192.168.1.1 であり、eth0 というインターフェースから送り出すことを示す。続く 192.168.1.0/24 dev eth0 scope link の行は、192.168.1.0/24 のネットワークが eth0 に直接つながっていることを表す。

default で始まる行のアドレスが「外への出口」だと覚えておけば、出力を一瞬で読み解ける。

さらに経路の途中をたどって調べたいときは traceroute コマンドが役立ち、宛先までに経由するルータを1台ずつ順に表示してくれる(Windowsでは tracert という名前になる)。どこまで番号が進んだかで、経路のどこまで通信できているかを目で追える。

⚠ つまずいたら、まずここ

この ip route が主役になるのが、「インターネットにつながらない」というトラブルの切り分けだ。

手順はこうだ。まず ip addr で自分のIPアドレスが正しく割り当たっているかを見る。次に ip route で default の行があるか、そのゲートウェイのアドレスが自分のネットワーク内の正しい値かを確認する。default の行が無ければデフォルトゲートウェイ未設定、アドレスが見当違いなら設定ミスが疑われる。

さらに、そのゲートウェイ自体に ping が通るかを確かめれば、「自分とゲートウェイの間」までは健全かどうかを判断できる。

よくある失敗は、IPアドレスは合っているのにデフォルトゲートウェイを書き忘れる、あるいは別ネットワークのアドレスを指定してしまうケースだ。この場合「ローカルは通るのに外に出られない」という典型的な症状になる。

つまずき外に出られないときは、ip route に default の行があるか、そのゲートウェイのアドレスが自分のネットワーク内の正しい値かを確認しよう。

古いシステムでは route -n や netstat -rn でも同じ情報を確認できるが、現在のLinuxでは ip route 系に一本化されているため、こちらに慣れておくのが安全だ。

この項目に出てくる用語

デフォルトゲートウェイでふぉるとげーとうぇい
自分のネットワーク外へ出るときの出口となる機器。
ルーティングテーブルるーてぃんぐてーぶる
どの宛先をどこへ送るかを定めた経路の一覧表。

関連コマンド

ip routetraceroute

▶ 学習アプリでこの続きを学ぶ・演習する