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

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

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

自分と同じネットワークの相手には直接データを届けられますが、別のネットワークやインターネット上のサーバへは、そのままでは届きません。そこで必要になるのが、外の世界へパケットを送り出す中継役です。あるネットワークから別のネットワークへパケットを受け渡す装置をルータ(またはレイヤ3スイッチ)と呼び、自分のネットワークの「出口」として設定されたルータをデフォルトゲートウェイといいます。家庭や社内では、インターネット回線につながったルータがこの役割を担うのが一般的です。手紙でいえば、町内の相手には直接手渡しできるが、遠くの町へ送るときは郵便局(ゲートウェイ)に託す、というイメージです。前のトピックで学んだ「相手が同じネットワーク部かどうか」の判断が、ここで「直接送るか、ゲートウェイに託すか」の分かれ道として効いてきます。

ルーティングとは、このパケットの受け渡し先(経路)を選ぶことを指します。インターネットは無数のネットワークがルータでつながった巨大な集合体で、宛先までの道のりにはいくつものルータが並んでいます。各ルータは受け取ったパケットの宛先ネットワークを見て、「次にどのルータへ渡せばよいか」を判断し、バケツリレーのように次々と転送していきます。こうして、自分のすぐ隣のルータから順に経由しながら、最終的に目的のネットワークまでパケットが運ばれます。送り出す側は遠くの経路全体を知る必要はなく、「とりあえず次にどこへ渡すか」だけを知っていればよい、という分担になっているのが要点です。なお、迷子になったパケットが永遠に回り続けないよう、IPパケットにはTTLという寿命の値があり、ルータを1つ通過するたびに1ずつ減って、0になると破棄される仕組みも備わっています。

ルーティングテーブル

では、どの宛先をどこへ送るかを、OSやルータはどう判断しているのでしょうか。その判断のもとになるのがルーティングテーブルです。これは「この宛先ネットワークへは、次にこのルータ(ネクストホップ)へ渡す」あるいは「このネットワークは直接つながっている」という対応を並べた経路の一覧表です。端末もルータと同じようにルーティングテーブルを持っていて、パケットを送るときはまず宛先のネットワーク・アドレスをこの表と照らし合わせます。宛先が自分と同じネットワークなら相手へ直接送り、テーブルに該当する経路があればそのネクストホップへ渡します。規模の小さいネットワークでは管理者が手動でこの表を設定する「スタティック・ルーティング」で足りますが、大規模になるとルータ同士が情報を交換して自動でテーブルを作る「ダイナミック・ルーティング」が必要になり、その仕組みを定めたものをルーティング・プロトコル(RIP・OSPF・BGPなど)と呼びます。

デフォルトゲートウェイの役割

ルーティングテーブルにどの経路とも一致しない宛先——たとえば見知らぬインターネット上のサーバ——にパケットを送りたいときは、最後の受け皿としてデフォルトゲートウェイへ転送されます。デフォルトゲートウェイは「宛先がよく分からないものは、とりあえずここへ送れば外の世界へ取り次いでくれる」という総合窓口です。多くの家庭や小規模ネットワークでは出口となるルータがひとつだけなので、そのルータのアドレスをデフォルトゲートウェイとして設定します。逆にいえば、デフォルトゲートウェイが設定されていなかったり、誤ったアドレスになっていたりすると、同じネットワーク内とは通信できてもインターネットへはまったく出られない、という症状になります。家庭用のルータは、このゲートウェイとしての経路選択に加えて、1つのグローバルIPアドレスを複数の端末で共有するためのアドレス変換(NAT)の機能も兼ね備えているのが普通です。

ip route で確認する

Linuxで現在のルーティングテーブルを確認するには ip route コマンドを使います。実行すると、たとえば次のような行が表示されます。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アドレスは合っているのにデフォルトゲートウェイを書き忘れる、あるいは別ネットワークのアドレスを指定してしまうケースで、この場合「ローカルは通るのに外に出られない」という典型的な症状になります。古いシステムでは route -n や netstat -rn でも同じ情報を確認できますが、現在のLinuxでは ip route 系に一本化されているため、こちらに慣れておくのが安全です。

この項目に出てくる用語

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

関連コマンド

ip routetraceroute

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