Old-School Networking / 2026 ・ No.05

いにしえのネットワーク入門

第5回 ルーター ── 経路表と TTL、traceroute、そして「家のルーター」の正体

公開

Wireshark の画面。traceroute の記録で、PC から 203.0.113.20 への UDP と、192.168.1.1・198.51.100.1・198.51.100.6・198.51.100.10 からの ICMP Time-to-live exceeded、サーバーからの Destination unreachable (Port unreachable) が交互に並ぶ。6番が選ばれ、明細に Type: 11 (Time-to-live exceeded) と、中に入った元の IPv4 と UDP の見出しが見える
traceroute の記録。6番は2台目のルーター r2(198.51.100.1)からの「時間切れ」の知らせで、中に、寿命が尽きた元の小包の見出し(送信元 192.168.1.10、宛先 203.0.113.20、番号 33435)が入っています(筆者がクラウド上に作った練習用ネットワークで、2026年10月25日に記録したものを Wireshark 4.2.2 で開いて撮影。画面は英語のまま。ウインドウの上の帯と見出しは説明のために描き足したもの)

第4回で、宛先が「よそのネットワーク」ならルーターに渡す、というところまで来ました。今回は、渡されたルーターが何をしているのかです。
ルーター4台の練習用ネットワークを作り、経路表を読み、traceroute で道のりを調べ、わざと道を輪にして小包を迷子にします。
後半は、家にある「ルーター」と呼ばれる箱の正体(NAT)と、世界中のネットワークが道を教え合うしくみ(BGP)です。

一

道案内の層

新井ルーターって、家にある、アンテナの生えた白い箱ですよね。ランプが点滅してるやつ。

古井あれもルーターだが、あの箱には仕事が7つくらい詰めこまれている。本物のルーターの仕事はそのうち1つだけだ。

新井えっ、残りの6つは何をしてるんですか?

古井それは後半で。まずは本来の仕事、道案内から見よう。ルーターを4台並べた。

全12回の路線図(いまここ:第5回)

1 全体図 2 物理層 3 データリンク層 4 IP アドレス 5 ルーター 6 TCP 7 UDP・ソケット 8 TLS 9 DNS 10 HTTP 11 開発者の網 12 切り分け いまここ 全体図 第1層 第2層 第3層 第4層 第5・6層 第7層 実践
  • ルーターの仕事 ── 受け取って、表を引いて、TTL を減らして、次へ渡す
  • 経路表と traceroute ── いちばん長く一致する行、寿命 TTL と道のりの調べ方(実測)
  • ICMP ── 「時間切れ」「その宛先への道はない」というお知らせ
  • 家のルーター ── NAT で住所を付けかえる。外す・外から入るとどうなるか(実測)
  • インターネット ── AS と BGP、約107万本の経路

今回の練習用ネットワークは、家(新井さんの PC と家のルーター r1)から、プロバイダの r2、中継の r3、データセンターの r4 を通って、申請を受け取るサーバーまでの一本道です。住所は第4回の 10.0.x.x から、家らしい 192.168.1.10 に変えました。

練習用の道:ルーター4台、ネットワーク5つ

家 プロバイダ 中継 データセンター pc 新井の PC r1 家のルーター 1 r2 2 r3 3 r4 4 srv サーバー 5 192.168.1.0/24 198.51.100.0/30 198.51.100.4/30 198.51.100.8/30 203.0.113.0/24 青い番号=PC から何番目の機械か(ルーター4台、サーバーは5番目) 点線の下は、それぞれ別のネットワーク。ルーターは2つにまたがって立つ 住所はすべて説明用に予約されたもの(192.168/198.51.100/203.0.113)
二

ルーターの仕事

ルーターは、2つ以上のネットワークに足を持つ機械です。図の r2 なら、左のネットワーク(198.51.100.0/30)では 198.51.100.1、右のネットワーク(198.51.100.4/30)では 198.51.100.5 という、2つの住所を持っています。ルーターが小包を受け取ると、することは毎回同じです。

  1. 自分の MAC あてのフレームを受け取り、第2層の封筒(第3回)を開ける。
  2. 中の IP の見出しの宛先の住所だけを見る。送信元は見ない。
  3. 経路表を引いて、次に渡す相手と、出ていく足を決める。
  4. 見出しの TTL を1つ減らす。0 になったら捨てて、送り主に知らせる。
  5. 次の相手の MAC を ARP で調べ、新しい封筒に入れて送り出す。
POINT

一区間ごとに封筒(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 はどの行で送られるか

宛先 203.0.113.20 はどの行? 宛先のネットワーク 次に渡す相手 一致するビット数 結果 198.51.100.0/30 e0 外れ 198.51.100.4/30 e1 外れ 203.0.0.0/8 198.51.100.6 当てはまる 203.0.113.0/24 198.51.100.6 いちばん長い 当てはまる行が複数あれば、いちばん長く一致する行を使う 当てはまる行がひとつもなく、default もなければ「送れない」
# 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 r1 r2 r3 r4 srv TTL 1 時間切れ(Time exceeded) TTL 2 時間切れ(Time exceeded) TTL 3 時間切れ(Time exceeded) TTL 4 時間切れ(Time exceeded) TTL 5 着いた:その番号は使っていない(Port unreachable) 寿命(TTL)を1ずつ増やして送り、どこで尽きたかの知らせを集める 知らせの差出人を順に並べたものが、traceroute の表示
# 新井さんの 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 番から)あてに送るので、相手は「その番号は使っていない」と返し、それで「着いた」と分かります。

表紙の写真は、このときの記録です。「時間切れ」の知らせの中には、寿命が尽きた元の小包の見出しがそのまま入っていて、送り主は、どの小包の知らせなのかを照らし合わせられます。

NOTE

表示されるのは、ルーターのこちらを向いた足の住所です。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)
Wireshark のパケット一覧の上と下を並べたもの。どの行も 198.51.100.2 から 203.0.113.20 への同じ ping(seq=1)で、ttl が 62、61、60 と1つずつ減っていき、62個目で ttl=1 になっている
経路をわざと輪にして、ping を1回だけ送ったところ。同じ小包が r2 と r3 の間を行き来するたびに TTL が1つ減り、62個目(0.085 ミリ秒後)に尽きて捨てられました(筆者がクラウド上に作った練習用ネットワークで、2026年10月25日に記録したものを Wireshark 4.2.2 で開いて撮影。画面は英語のまま。ウインドウの上の帯と見出しは説明のために描き足したもの)

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回)。

七

家のルーターの正体

「家のルーター」と呼ばれる箱に入っているもの

「家のルーター」の中身 ルーター(経路) 第5回 NAT(付けかえ) 第5回 ファイアウォール 第5回 DHCP(住所を配る) 第4回 DNS の中継 第9回 スイッチ(差し口) 第3回 Wi-Fi アクセスポイント 第2回 家の中 PC・スマホ 光回線へ プロバイダ 本来の「ルーター」は1つだけ。ほかは、ついでに入っている別の仕事

家の箱は、本来のルーターに、スイッチ(第3回)、Wi-Fi の親機(第2回)、DHCP(第4回)、DNS の中継(第9回)などを詰めこんだものです。中でも、家の中から外へ出ていけるのは、NAT(Network Address Translation、住所の付けかえ)のおかげです。

外に出るとき、送信元の住所を付けかえる

家の中(192.168.1.0/24) 外(インターネット側) 家のルーター 付けかえの表 192.168.1.10:40418 ↕ 198.51.100.2:40418 行き:送信元 192.168.1.10:40418 → 203.0.113.20:3000 行き:送信元 198.51.100.2:40418 → 203.0.113.20:3000 帰り:宛先 203.0.113.20:3000 → 192.168.1.10:40418 帰り:宛先 203.0.113.20:3000 → 198.51.100.2:40418 外に出るとき送信元の住所を書きかえ、表を見て返事を戻す。これが NAT 今回は番号 40418 はそのまま。同じ番号がぶつかると、ルーターは番号も変える 外から見えるのはルーターの住所だけ。家の中の 192.168 は外に出ない
Wireshark のパケット一覧を2つ並べたもの。上は家の中で記録したもので、送信元 192.168.1.10 から 203.0.113.20 の 3000 番へ、POST /api/expenses と HTTP/1.1 201 Created を含む9個。下は家の外で記録した同じやりとりで、192.168.1.10 だったところがすべて 198.51.100.2 になっている。番号 40418 は同じ
同じ申請を、家のルーターの内側と外側で同時に記録したもの。中身も番号 40418 も同じで、住所だけが付けかわっています(筆者がクラウド上に作った練習用ネットワークで、2026年10月25日に記録したものを Wireshark 4.2.2 で開いて撮影。画面は英語のまま。ウインドウの上の帯と見出しは説明のために描き足したもの)

家の中の 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 どうしが道を教え合う(番号は説明用のもの)

家 r1・default だけ プロバイダ AS64500・r2 中継 AS64501・r3 データセンター AS64502・r4 BGP BGP 「うちにある」と知らせる 203.0.113.0/24 AS path: 64502 203.0.113.0/24 AS path: 64501 64502 AS は、ひとつの方針で運営されるネットワークのまとまり。AS どうしは BGP で道を伝え合う 伝えるたびに自分の 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 で確かめる

調べたいことMacWindowsLinux
道のりtraceroute 宛先tracert 宛先traceroute 宛先
自分の経路表netstat -rnroute printip route
その宛先にはどの行が使われるかroute get 宛先Find-NetRoute -RemoteIPAddress 宛先ip route get 宛先
届くかping 宛先ping 宛先ping 宛先

家から traceroute をすると、1番目に家のルーター(192.168 で始まる住所)、2番目あたりからプロバイダのルーターが現れるはずです。途中に * * * が並んでも、最後まで届けば問題ありません。PC の経路表には、default の行と、家のネットワークの行のほかに、VPN や Docker を入れているとその分の行も並んでいます(第11回)。

結 — 一枚まとめと、次回

  1. ルーターは宛先の住所だけを見て、経路表で次の相手を決め、新しい封筒(MAC)に入れて渡す。
  2. 経路表は「直接つながっている」「この住所に渡す」「default」の3通り。当てはまる行が複数あればいちばん長く一致する行。
  3. TTL はルーターを越えるたびに1減る。traceroute はそれを1ずつ増やして「時間切れ」の差出人を集める。
  4. 経路を輪にすると、1回の ping が r2 と r3 の間を 62回通って TTL が尽きた。
  5. ICMP は IP のお知らせ。ファイアウォールで止められることも多く、ping が通らなくても Web は通ることがある。
  6. 家のルーターの本体はNAT。送信元を付けかえ、表で戻す。外すと、行きは届いて帰りが迷子に。外からは入れない。
  7. インターネットは約8万の AS の集まりで、BGP で約107万本の経路を教え合っている。

新井NAT の表にあった 40418 とか 3000 って、結局なんの番号なんですか?

古井住所が建物なら、番号は部屋だ。そして小包は、途中で落ちたり順番が入れかわったりする。それをどう立て直すか。次回、TCP だ。

参考

記録は、筆者がクラウド上の 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

← 記事一覧へ