Old-School Networking / 2026 ・ No.05
いにしえのネットワーク入門
第5回 ルーター ── 経路表と TTL、traceroute、そして「家のルーター」の正体
公開
第4回で、宛先が「よそのネットワーク」ならルーターに渡す、というところまで来ました。今回は、渡されたルーターが何をしているのかです。
ルーター4台の練習用ネットワークを作り、経路表を読み、traceroute で道のりを調べ、わざと道を輪にして小包を迷子にします。
後半は、家にある「ルーター」と呼ばれる箱の正体(NAT)と、世界中のネットワークが道を教え合うしくみ(BGP)です。
道案内の層
新井ルーターって、家にある、アンテナの生えた白い箱ですよね。ランプが点滅してるやつ。
古井あれもルーターだが、あの箱には仕事が7つくらい詰めこまれている。本物のルーターの仕事はそのうち1つだけだ。
新井えっ、残りの6つは何をしてるんですか?
古井それは後半で。まずは本来の仕事、道案内から見よう。ルーターを4台並べた。
全12回の路線図(いまここ:第5回)
- ルーターの仕事 ── 受け取って、表を引いて、TTL を減らして、次へ渡す
- 経路表と traceroute ── いちばん長く一致する行、寿命 TTL と道のりの調べ方(実測)
- ICMP ── 「時間切れ」「その宛先への道はない」というお知らせ
- 家のルーター ── NAT で住所を付けかえる。外す・外から入るとどうなるか(実測)
- インターネット ── AS と BGP、約107万本の経路
今回の練習用ネットワークは、家(新井さんの PC と家のルーター r1)から、プロバイダの r2、中継の r3、データセンターの r4 を通って、申請を受け取るサーバーまでの一本道です。住所は第4回の 10.0.x.x から、家らしい 192.168.1.10 に変えました。
練習用の道:ルーター4台、ネットワーク5つ
ルーターの仕事
ルーターは、2つ以上のネットワークに足を持つ機械です。図の r2 なら、左のネットワーク(198.51.100.0/30)では 198.51.100.1、右のネットワーク(198.51.100.4/30)では 198.51.100.5 という、2つの住所を持っています。ルーターが小包を受け取ると、することは毎回同じです。
- 自分の MAC あてのフレームを受け取り、第2層の封筒(第3回)を開ける。
- 中の IP の見出しの宛先の住所だけを見る。送信元は見ない。
- 経路表を引いて、次に渡す相手と、出ていく足を決める。
- 見出しの TTL を1つ減らす。0 になったら捨てて、送り主に知らせる。
- 次の相手の MAC を ARP で調べ、新しい封筒に入れて送り出す。
一区間ごとに封筒(MAC)は入れかわり、中の宛先(IP)は最後まで変わらない。第3回で「MAC はとなりまで、IP は最後まで」と言ったのは、ルーターがこの仕事をしているからです。
ルーターは、小包がどこから来たのかを気にしません。宛先を見て、次へ渡すだけ。後で、このことが家のルーターの話に効いてきます。
経路表
新井経路表って、世界中の住所が載ってる電話帳みたいなものですか?
古井家のルーターのは、3行しかない。見てみよう。
# 家のルーター r1:知らない宛先は全部プロバイダ(198.51.100.1)へ
r1$ ip route
default via 198.51.100.1 dev wan0
192.168.1.0/24 dev lan0
198.51.100.0/30 dev wan0
# プロバイダの r2:デフォルトがない。知っている3つだけ
r2$ ip route
198.51.100.0/30 dev e0
198.51.100.4/30 dev e1
203.0.113.0/24 via 198.51.100.6 dev e1
# データセンターの r4:自分の LAN 以外はすべて r3 へ
r4$ ip route
default via 198.51.100.9 dev e0
198.51.100.8/30 dev e0
203.0.113.0/24 dev e1
1行が1つの道案内です。読み方は3通りしかありません。
| 書き方 | 意味 | 例 |
|---|---|---|
| … dev 足 | 自分が直接つながっているネットワーク。ARP で相手を探して直接渡す | 192.168.1.0/24 dev lan0 |
| … via 住所 | このネットワークへは、この住所のルーターに渡す | 203.0.113.0/24 via 198.51.100.6 |
| default via 住所 | どの行にも当てはまらなければ、ここへ(0.0.0.0/0) | default via 198.51.100.1 |
家のルーター r1 は、家の中(192.168.1.0/24)と、プロバイダとの間の小さなネットワークしか知りません。それ以外は全部 default、つまり「分からなければプロバイダへ」です。第4回の PC の「デフォルトゲートウェイ」と同じ考え方で、ほとんどの機械はこれで足ります。
プロバイダの r2 には、default がありません。プロバイダの中心のルーターは、世界中のネットワークへの道を1本ずつ持っていて、「分からなければ誰か」に頼る相手がいないからです(第8章)。練習用の r2 は、3行だけ知っています。
いちばん長く一致する行を使う
宛先が2つ以上の行に当てはまったら、どれを使うのでしょう。r2 に大ざっぱな行 203.0.0.0/8 を足して試します。
203.0.113.20 はどの行で送られるか
# r2 に、大ざっぱな経路 203.0.0.0/8 を1本足してみる
r2$ ip route add 203.0.0.0/8 via 198.51.100.6
# 203.0.113.20 は /8 にも /24 にも当てはまる → 長い /24 が選ばれる(行き先が同じなので結果は同じ)
r2$ ip route get 203.0.113.20
203.0.113.20 via 198.51.100.6 dev e1 src 198.51.100.5 uid 0
r2$ ip route get 203.0.9.9
203.0.9.9 via 198.51.100.6 dev e1 src 198.51.100.5 uid 0
# 8.8.8.8 はどれにも当てはまらず、デフォルトもない → 送れない
r2$ ip route get 8.8.8.8
RTNETLINK answers: Network is unreachable
203.0.113.20 は、前の 8 ビットで見ても 24 ビットで見ても当てはまります。こういうとき、ルーターはいちばん長く一致する行(最長一致、longest prefix match)を選びます。長く一致するほど、詳しい道案内だからです。default は長さ 0 の行、つまり「何にでも当てはまるが、いちばん弱い行」です。どれにも当てはまらない 8.8.8.8 は、Network is unreachable(その宛先への道はない)で送れませんでした。
この練習では、経路表を筆者が手で書きました(スタティックルート)。会社やプロバイダのルーターは、となりのルーターと道を教え合って、表を自動で作ります(ルーティングプロトコル。外とは第8章の BGP、中では OSPF などが使われます)。
traceroute と TTL
IP の見出しには、TTL(Time To Live、寿命)という 8 ビットの数があります。送るときに 64 などで始まり、ルーターを1台越えるたびに1つ減って、0 になると捨てられます。サーバーで ping を受けると、届いた TTL は 60 でした。64 から始まり、ルーター4台で4つ減っています。
この寿命を逆手にとって、道のりを調べるのが traceroute です。
TTL を1つずつ増やして送る
# 新井さんの PC から、データセンターのサーバーまでの道のり
$ traceroute -n -q 1 203.0.113.20
traceroute to 203.0.113.20 (203.0.113.20), 30 hops max, 60 byte packets
1 192.168.1.1 0.070 ms
2 198.51.100.1 0.046 ms
3 198.51.100.6 0.042 ms
4 198.51.100.10 0.038 ms
5 203.0.113.20 0.040 ms
# 4台のルーターを越えて、5つ目でサーバーに着いた
TTL 1 の小包は最初のルーターで寿命が尽き、そのルーターが「時間切れ(Time exceeded)」を送り返してきます。その差出人が、1番目のルーターの住所です。TTL 2 なら2番目……と増やしていき、最後は相手に届きます。Linux の traceroute は、使われていなさそうな UDP の番号(33434 番から)あてに送るので、相手は「その番号は使っていない」と返し、それで「着いた」と分かります。
表紙の写真は、このときの記録です。「時間切れ」の知らせの中には、寿命が尽きた元の小包の見出しがそのまま入っていて、送り主は、どの小包の知らせなのかを照らし合わせられます。
表示されるのは、ルーターのこちらを向いた足の住所です。r2 なら 198.51.100.5 ではなく 198.51.100.1。また、知らせを返さない設定のルーターは * * * と表示されます。そこで道が切れているとは限りません。Windows の tracert は UDP ではなく ping(ICMP)を使います。
道が輪になると
新井寿命なんて、なんのためにあるんですか? 道案内が正しければ、いらないような。
古井道案内は、ときどき間違う。間違えさせてみよう。
r2 は 203.0.113.0/24 を r3 に渡します。その r3 の行を、わざと r2 に向けます。すると、小包は r2 と r3 の間を行ったり来たりします。
# r3 の 203.0.113.0/24 を、わざと r2 に向けて(r2 は r3 に向けたまま)輪にする
r3$ ip route replace 203.0.113.0/24 via 198.51.100.5
pc$ ping -c 1 203.0.113.20
From 198.51.100.1 icmp_seq=1 Time to live exceeded
# r2 と r3 の間の線を数えると、1回の ping で行き 31 回・帰り 31 回
r2 e1 tx 31 rx 31 (tcpdump 62)
PC が送った ping は、r1 と r2 で TTL が2つ減って、62 で r2 と r3 の間に入りました。そこから1往復で2つずつ減り、62個目で TTL が 1 になって捨てられ、r2 が「時間切れ」を返しました。この間 0.085 ミリ秒です。TTL がなければ、この小包は線の上を永遠に回り続け、輪に入る小包が増えるほど線が埋まっていきます。
第3回のスイッチのループ(ブロードキャストストーム)と似ていますが、第2層のフレームには寿命がなかったので STP で輪そのものを断ちました。第3層には TTL があるので、輪ができても、小包はいずれ消えます。
ICMP のお知らせ
「時間切れ」や「その番号は使っていない」は、ICMP(Internet Control Message Protocol)という、IP のためのお知らせです。ping もその一つで、「返事をください(Echo request)」と「はい(Echo reply)」の組です。うまくいかなかったときの知らせを、練習用ネットワークで集めました。
# 道のない宛先へ:プロバイダの r2 が「その宛先への道はない」と返す
pc$ ping -c 1 8.8.8.8
From 198.51.100.1 icmp_seq=1 Destination Net Unreachable
# 外(サーバー)から家の中の 192.168.1.10 へ:途中の r3 で止まる
srv$ ping -c 1 192.168.1.10
From 198.51.100.9 icmp_seq=1 Destination Net Unreachable
# 外から家のルーターの住所 198.51.100.2 へ:待ち受けているものがない
srv$ curl http://198.51.100.2:3000/
Failed to connect to 198.51.100.2 port 3000 after 0 ms: Couldn't connect to server
| 種類 | 意味 | どんなとき |
|---|---|---|
| Echo request / reply | 返事をください/はい | ping |
| Time exceeded | 寿命が尽きた | traceroute、経路のループ |
| Net unreachable | その宛先への道がない | 経路表に行がない |
| Port unreachable | その番号は使っていない | UDP の宛先に誰もいない(第7回) |
| Fragmentation needed | 大きすぎて通れない | 途中の MTU が小さい(第2回) |
ICMP は、会社やクラウドのファイアウォールで止められていることがよくあります。ping が通らないのに Web は見られる、ということは珍しくありません。ping が通らないことだけで「つながっていない」と決めつけないように(第12回)。
家のルーターの正体
「家のルーター」と呼ばれる箱に入っているもの
家の箱は、本来のルーターに、スイッチ(第3回)、Wi-Fi の親機(第2回)、DHCP(第4回)、DNS の中継(第9回)などを詰めこんだものです。中でも、家の中から外へ出ていけるのは、NAT(Network Address Translation、住所の付けかえ)のおかげです。
外に出るとき、送信元の住所を付けかえる
家の中の PC の住所 192.168.1.10 はプライベートアドレス(第4回)です。世界中の家で同じ 192.168.1.10 が使われているので、外のルーターはこの住所への道を知りません。そこで家のルーターは、外へ出る小包の送信元を自分の外側の住所 198.51.100.2 に書きかえ、その対応を表に覚えておきます。返事は 198.51.100.2 に届くので、表を見て 192.168.1.10 に戻します。申請はちゃんと届き、201 が返りました。
# 家のルーターが覚えている「付けかえの表」(conntrack)
r1$ conntrack -L -p tcp
tcp 6 119 TIME_WAIT src=192.168.1.10 dst=203.0.113.20 sport=40418 dport=3000
src=203.0.113.20 dst=198.51.100.2 sport=3000 dport=40418 [ASSURED]
# 行き:192.168.1.10 → 203.0.113.20 / 帰り:203.0.113.20 → 198.51.100.2(を 192.168.1.10 に戻す)
表には住所だけでなく 40418 や 3000 といった番号(ポート)も入っています。家の中の何台もの機械が同時に外とやりとりしても、番号で見分けて正しい機械に戻せるわけです(今回は番号はそのままでしたが、ぶつかればルーターが番号も変えます)。この番号の正体は、次回の TCP です。
NAT を外すと
# 家のルーターの NAT を外して、もう一度 ping
pc$ ping -c 3 203.0.113.20
3 packets transmitted, 0 received, 100% packet loss
# サーバー側の記録:届いて返事もしたが、返事は r3(198.51.100.9)で「その宛先への道はない」と止められた
192.168.1.10 -> 203.0.113.20 Echo (ping) request seq=1/256, ttl=60
203.0.113.20 -> 192.168.1.10 Echo (ping) reply seq=1/256, ttl=64
198.51.100.9 -> 203.0.113.20 Destination unreachable (Network unreachable)
NAT を外すと、ping は全滅しました。サーバー側の記録を見ると、意外にも申請(ping)は届いていて、返事もしています。ルーターは宛先しか見ないので、送信元が 192.168 でも行きは運ばれるのです。ところが返事の宛先は 192.168.1.10。r3 はその住所への道を知らないので、「その宛先への道はない」と捨てました。行きは届いて帰りが迷子になる、というのが NAT のない家の姿です。
外からは入れない
前の章の ICMP の記録の2つ目と3つ目が、外(サーバー)から家の中へ入ろうとしたものです。192.168.1.10 あては途中の r3 で道がなく、家のルーターの住所 198.51.100.2 あては、ルーター自身に届くだけで、中のどの機械に渡せばよいかの表がありません。NAT の家には、外から話しかけられないのです。守りとしては都合がよく、たいていの家のルーターは、さらにファイアウォールで外からの接続を止めています。
家で動かしている開発中のサーバーを外から見せたいときは、決まった番号を中の機械に向けるポート転送(ポート開放)を設定するか、中から外へつないだまま外の入口を借りるトンネルのサービスを使います(第11回)。プロバイダ側でもう一段 NAT をしている場合(CGNAT、第4回の 100.64.0.0/10)は、ポート転送もできません。
インターネットのつながり
新井r2 が3行だけ知ってるのは練習だから、ですよね。本物のプロバイダは、何行くらい知ってるんですか?
古井2026年7月末で、106万5956行。
新井……電話帳でしたね。
インターネットは、プロバイダ、クラウド、大学、大きな会社など、それぞれが自分の方針で運営するネットワークの集まりです。この一つ一つを AS(Autonomous System、自律システム)と呼び、番号(AS 番号)が付いています。AS どうしは、BGP(Border Gateway Protocol)で「この住所のかたまりは、うちの先にある」と教え合います。
AS どうしが道を教え合う(番号は説明用のもの)
データセンターが「203.0.113.0/24 はうちにある」と知らせると、中継は自分の AS 番号を前に足して、プロバイダに伝えます。プロバイダは、届いた道の中から、方針(料金や契約)と通る AS の数を見て1本を選び、経路表に入れます。番号の列に自分がいれば受け取らないので、AS どうしの間では輪ができにくくなっています。
| 数(2026年7月31日の集計) | 値 |
|---|---|
| 世界の BGP の経路表の行数(IPv4) | 1,065,956 |
| 経路表に現れる AS の数 | 78,975 |
| 練習用の r2 の行数 | 3 |
AS どうしは、直接線をつないだり、IX(インターネットエクスチェンジ)という、たくさんの AS が集まって線をつなぎ合う場所でつながったりします。BGP は互いの申告を信じるしくみなので、誰かが間違った道を知らせると、遠くまで影響します。2021年10月に Facebook が数時間つながらなくなったときは、保守作業の命令で自社の基幹網が切れ、それを見た DNS サーバーが自分への道を BGP で取り下げたため、世界中から Facebook の名前が引けなくなりました。
自分の PC で確かめる
| 調べたいこと | Mac | Windows | Linux |
|---|---|---|---|
| 道のり | traceroute 宛先 | tracert 宛先 | traceroute 宛先 |
| 自分の経路表 | netstat -rn | route print | ip route |
| その宛先にはどの行が使われるか | route get 宛先 | Find-NetRoute -RemoteIPAddress 宛先 | ip route get 宛先 |
| 届くか | ping 宛先 | ping 宛先 | ping 宛先 |
家から traceroute をすると、1番目に家のルーター(192.168 で始まる住所)、2番目あたりからプロバイダのルーターが現れるはずです。途中に * * * が並んでも、最後まで届けば問題ありません。PC の経路表には、default の行と、家のネットワークの行のほかに、VPN や Docker を入れているとその分の行も並んでいます(第11回)。
結 — 一枚まとめと、次回
- ルーターは宛先の住所だけを見て、経路表で次の相手を決め、新しい封筒(MAC)に入れて渡す。
- 経路表は「直接つながっている」「この住所に渡す」「default」の3通り。当てはまる行が複数あればいちばん長く一致する行。
- TTL はルーターを越えるたびに1減る。traceroute はそれを1ずつ増やして「時間切れ」の差出人を集める。
- 経路を輪にすると、1回の ping が r2 と r3 の間を 62回通って TTL が尽きた。
- ICMP は IP のお知らせ。ファイアウォールで止められることも多く、ping が通らなくても Web は通ることがある。
- 家のルーターの本体はNAT。送信元を付けかえ、表で戻す。外すと、行きは届いて帰りが迷子に。外からは入れない。
- インターネットは約8万の AS の集まりで、BGP で約107万本の経路を教え合っている。
新井NAT の表にあった 40418 とか 3000 って、結局なんの番号なんですか?
古井住所が建物なら、番号は部屋だ。そして小包は、途中で落ちたり順番が入れかわったりする。それをどう立て直すか。次回、TCP だ。
参考
- RFC 1812 — Requirements for IP Version 4 Routers
- RFC 792 — Internet Control Message Protocol
- traceroute(8) — Linux manual page
- RFC 3022 — Traditional IP Network Address Translator (Traditional NAT)
- RFC 4271 — A Border Gateway Protocol 4 (BGP-4)
- RFC 5737 — IPv4 Address Blocks Reserved for Documentation
- RFC 5398 — Autonomous System (AS) Number Reservation for Documentation Use
- Weekly Global IPv4 Routing Table Report (AFNOG, 2026-07-31)
- Geoff Huston — BGP in 2025 (ISP Column, January 2026)
- Engineering at Meta — More details about the October 4 outage (2021)
- Microsoft Learn — Find-NetRoute
記録は、筆者がクラウド上の Linux(Ubuntu 24.04)にネットワーク名前空間で作った練習用ネットワークで、2026年10月25日に取ったものです。ルーターは Linux の転送機能、経路は手で書いた静的経路、NAT は iptables の MASQUERADE、表は conntrack 1.4.8、traceroute は 2.1.5 です。表の数字はすべて、この記録とそのときのコマンドの出力から読んだ実際の値です。住所と AS 番号はすべて説明用に予約されたものです。世界の経路表の数は、AFNOG のメーリングリストに毎週流れる Weekly Global IPv4 Routing Table Report(2026年7月31日)によります。登場人物は架空の人物です。
いにしえのネットワーク入門 第5回 — ルーター / 2026.10