ルーティング
パケットを宛先まで届けるための経路選択。ルーティングテーブルの読み方、 静的 / 動的、ルーティングプロトコル(RIP / OSPF / BGP)、AS、Anycast、ECMP まで。
ルーティングの仕組み(再確認)
- パケットを受け取った機器が、宛先 IPと自分のテーブルを照合
- 最も長いプレフィックスに一致するエントリを選ぶ(longest prefix match)
- そのエントリの ネクストホップ へ転送
- TTL を 1 減らす
- L2 ヘッダを書き換えて送出(送信元 / 宛先 MAC が変わる)
重要: L3 ヘッダ(IP)は変わらず、L2 ヘッダ(Ethernet)は毎ホップ書き換わる。
ルーティングテーブルの読み方
Linux
$ ip route
default via 192.168.1.1 dev eth0 proto dhcp metric 100
10.0.0.0/8 via 192.168.1.254 dev eth0
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.10
- default: 0.0.0.0/0、どこにも一致しないとき送る先
- via: ネクストホップ
- dev: 出力 NIC
- proto: 経路の出所(kernel / static / dhcp / bgp...)
- metric: 同じ宛先に複数経路あるときの優先度(小さい方が優先)
- scope link: 直接接続のサブネット
macOS / BSD
netstat -rn
Windows
route print
Get-NetRoute
longest prefix match
宛先 192.168.1.50 へのパケットがあるとき、テーブルに次のエントリがあれば:
0.0.0.0/0 (default)
192.168.0.0/16
192.168.1.0/24 ← 最長一致 (24 ビット)、これが選ばれる
プレフィックスが長いほど具体的=優先される。
静的ルーティング
- 管理者が手でテーブルに書く
- シンプル、軽量、予測可能
- 変化に追従できない(リンク切れに弱い)
- 小規模 / DMZ / ポイントツーポイント向け
追加例
# Linux
sudo ip route add 10.0.0.0/8 via 192.168.1.254
sudo ip route del 10.0.0.0/8
# macOS
sudo route -n add -net 10.0.0.0/8 192.168.1.254
# Windows
route add 10.0.0.0 mask 255.0.0.0 192.168.1.254 -p
動的ルーティング
ルータ同士が自動で経路情報を交換。リンク切れに自動で対応。
3 つの方式
| 方式 | 原理 | 例 |
|---|---|---|
| 距離ベクトル | 「あの宛先まで N ホップ」と隣接に伝える | RIP, EIGRP, BGP |
| リンクステート | 全リンクの状態を共有し、各自で最短経路計算 | OSPF, IS-IS |
| パスベクトル | 距離ベクトル + 経路(AS パス)も伝える | BGP |
RIP(Routing Information Protocol)
- 最古の動的プロトコル(1980 年代)
- 距離ベクトル、メトリック = ホップ数
- 最大 15 ホップ(16 = 到達不可)
- 30 秒ごとに全テーブルをブロードキャスト
- 収束が遅い、ループ問題
- 現代ではほぼ使われない
- RIPv2(CIDR 対応)/ RIPng(IPv6 用)
OSPF(Open Shortest Path First)
- リンクステート、企業内の主流
- 各ルータが LSA(Link State Advertisement)を全体に flooding
- 各自でDijkstraで最短経路計算
- 収束が速い、大規模対応
- エリアで階層化(Area 0 = バックボーン)
- OSPFv2 (IPv4) / OSPFv3 (IPv6)
- マルチキャストアドレス: 224.0.0.5 / 224.0.0.6
IS-IS
- OSPF と並ぶリンクステート
- ISP / 大規模キャリアで好まれる
- IPv4 / IPv6 をプロトコル変更なしで両対応
EIGRP
- Cisco 独自(後にオープン化)
- 距離ベクトル + α、複合メトリック
- DUAL アルゴリズムで高速収束
BGP(Border Gateway Protocol)
インターネット全体を動かしているプロトコル。 AS(Autonomous System)の間で経路を交換する。
用語
- AS: 1 つの組織が運用する経路ポリシーを共有するネットワーク
- ASN: AS 番号(16/32 ビット)。例: AWS=16509, Cloudflare=13335, Google=15169
- eBGP: 別 AS 間
- iBGP: 同 AS 内
- BGP セッション: TCP 179 上のセッション
BGP 経路選択の優先順位
- Weight(Cisco 独自、ローカル)
- Local Preference(AS 内)
- Locally Originated(自 AS 発の経路)
- AS Path が短い
- Origin(IGP < EGP < Incomplete)
- MED(Multi-Exit Discriminator)
- eBGP > iBGP
- IGP メトリック
- 古いセッション(同点なら)
BGP のリスク
- 経路ハイジャック: 別 AS が偽の経路を流して通信を引き寄せる
- ルートリーク: 本来流すべきでない経路を流す(誤設定)
- 2008 年 YouTube 障害、2021 年 Facebook 障害(自滅)など歴史的事件多数
- 対策: RPKI(経路の暗号認証)/ ROA(ルートオリジン認証)
インターネットの階層
| Tier | 性質 | 例 |
|---|---|---|
| Tier 1 | 他 AS に料金を払わずインターネット全体に到達できる | NTT, Lumen, Telia, Tata |
| Tier 2 | 一部のピアリング + Tier 1 へのトランジット購入 | 多くの国内 ISP |
| Tier 3 | すべてトランジット購入(自社で BGP は持たないことも) | 地域 ISP |
IX(Internet eXchange)
ISP が物理的に集まってピアリングするハブ。日本では JPIX / JPNAP / Equinix が有名。 IX を経由することで、第三者 ISP を介さずに直結 → 遅延短縮 + 費用削減。
Anycast
同じ IP アドレスを世界中の複数拠点で広告し、BGP に最寄りを選ばせる仕組み。
- DNS ルートサーバ(13 IP に対して数百拠点)
- 1.1.1.1 / 8.8.8.8 のパブリック DNS
- Cloudflare / Fastly / Akamai の CDN
- クラウドの Global Accelerator
- ユーザに最寄りのエッジが応答 → 低遅延
- 同 IP のためセッション固定が難しい(TCP は通常 OK だが UDP / 長期接続は要工夫)
Unicast / Broadcast / Multicast / Anycast まとめ
| 方式 | 1 → ? |
|---|---|
| Unicast | 1 対 1 |
| Broadcast | 1 対 全員(同一リンク内) |
| Multicast | 1 対 グループ(参加した人だけ) |
| Anycast | 1 対 最寄り(複数候補のうち 1 つ) |
ECMP(Equal-Cost Multi-Path)
コストが同じ複数経路がある場合、負荷分散して送る仕組み。
- パケットごとにバラまくと TCP の順序乱れの原因 → 推奨されない
- フロー単位(5-tuple ハッシュ)で同じ経路に固定
- 5-tuple = 送信元 IP / 宛先 IP / プロトコル / 送信元ポート / 宛先ポート
- クラウドの ALB / NLB、データセンター内のスイッチで広く利用
ポリシールーティング
宛先だけでなく送信元 / アプリ / DSCP でも経路を変える。
- 「VoIP は専用回線へ」
- 「特定送信元はバックアップ回線へ」
- Linux:
ip rule+ 複数のip routeテーブル
ルーティングループ
誤設定で 2 つのルータが互いを宛先に送り続ける状態。TTL が無ければ無限。
- 距離ベクトルで起きやすい(カウント・ツー・インフィニティ)
- 対策: Split Horizon / Route Poisoning / Hold-Down Timer
- リンクステートは原理的に起きにくい
VRF / マルチテナント
Virtual Routing and Forwarding — 1 台のルータの中に独立したルーティングテーブルを複数持つ。 ISP / マルチテナントクラウドで使われる。
SDN / ネットワーク仮想化
- SDN: コントロールプレーンとデータプレーンを分離。OpenFlow など
- VXLAN: L2 を L3 トンネル上に伸ばす(クラウドの VPC 実装)
- EVPN: BGP ベースの L2 / L3 マルチテナント
クラウドの VPC とルーティング
- VPC は仮想化されたルータのように振る舞う
- サブネットごとにルートテーブルを関連付け
- Internet Gateway / NAT Gateway / VPN / Transit Gateway がネクストホップ候補
- VPC Peering / Transit Gateway でマルチ VPC 接続
BGP コミュニティ
経路にラベル(コミュニティ値)を付け、受け手側のポリシーを制御する。 例: 「特定 ISP に広告するな」「優先度を下げて」など。
Looking Glass
他組織の BGP 視点を覗ける Web ツール。経路ハイジャック / ピアリング状況の確認に使う。
確認コマンド
# 経路追跡
traceroute example.com
mtr example.com
# AS パス
whois -h whois.radb.net 8.8.8.8
# 自分の AS
curl ipinfo.io
# Linux のポリシーテーブル
ip rule
ip route show table all
# ルーティングデーモン例(FRR)
vtysh
show ip route
show ip bgp
show ip ospf neighbor
よくあるトラブル
| 症状 | 原因 |
|---|---|
| 非対称ルーティング | 行きと戻りで経路が違う。FW でセッション切れ |
| traceroute が * * * | 中間ルータが ICMP 拒否(到達自体は OK の可能性) |
| 特定先だけ繋がらない | BGP ハイジャック / ルート漏れ / 通信規制 |
| DEFAULT が複数あって混乱 | metric / 同一テーブルでの整理 |
| 遅い経路を選ぶ | BGP の AS パス短いより遅延長い経路に流れる |
インターネットは誰も全体を制御していない。BGP の合意形成で動いている。 だからこそ誤設定で世界規模の障害が起きるし、RPKI のような認証の取り組みが進んでいる。