NET // communication networks
LESSON 31 / 発展編

GNS3 + VyOS でネットワークを構築する

標準編で学んだ IP・ARP・ルーティング・VLAN・NAT・HTTP は、紙の上では設定例を見るしかない。本講では GNS3(ネットワークシミュレータ)と VyOS(オープンソースのルータ OS)を組み合わせて、自分の PC 上に「触れるネットワーク」を作る。Cisco IOS は商用ライセンスの壁で個人学習者には入手しづらいが、VyOS は誰でも合法に無料でダウンロードでき、本物の Linux ベース router OS として AWS / Azure マーケットプレイスや ISP でも本番投入されている。本講では 仮想 PC 2 台で ARP を観察する ところから始め、スタティック → RIP → OSPF → BGP → VLAN → NAT → TCP/HTTP と 7 つのラボを段階的に積み上げ、Wireshark でパケットを直接観察する。

学習目標

本講を終えると、以下を達成できるようになります。

本講は 標準 #20 IP・サブネット・NAT標準 #22 ルーティング標準 #23 Ethernet第32回 VLAN標準 #18 TCP標準 #12 HTTP を前提とします。前回 第34回 WebSocket までで「プロトコルの中身」を見てきました。本講では視点を変えて、「自分でネットワーク機器を動かして、これまでの理論を手で確認する」 仕上げの回です。第30回 Wireshark と組み合わせると、「設定 → 動作 → パケット観察」 の 1 サイクルが手元で回せるようになります。

このレッスンの目次

01 なぜ実 OS で組むのか 紙の本との差・物理機器のコスト・壊しても安全 02 シミュレータ比較 GNS3 / Packet Tracer / EVE-NG / Mininet 03 VyOS という解 Cisco IOS の壁、Vyatta の系譜、Junos ライク CLI 04 セットアップ GNS3 + GNS3 VM、VyOS ISO の入手と登録 05 ラボ① 2台のPC直結 IP 設定 → ping → ARP のやり取りを観察する 06 ラボ② スタティックルート ルータ手動設定で 2 サブネットを繋ぐ 07 ラボ③ RIP(距離ベクトル) 最古典の動的ルーティング、30 秒ごとのフラッディング 08 ラボ④ OSPF(リンクステート) Hello/DBD/LSA で経路を交換する現代の主流 09 ラボ⑤ BGP(AS 間ルーティング) OPEN/KEEPALIVE/UPDATE、AS パス、政治的経路選択 10 ラボ⑥ VLAN 802.1Q トランクとサブインタフェースで分割する 11 ラボ⑦ NAT 送信元 NAT(masquerade) で外への出口を作る 12 ラボ⑧ TCP/HTTP Apache + telnet で 3 ウェイと GET を観る 13 Wireshark で観察 GNS3 のリンクキャプチャで生パケットを見る 14 まとめと用語 本講の重要語句を整理 15 確認問題 5 問で理解度をチェック

なぜ実 OS で組むのか ─ 教科書だけでは見えない世界

教科書では「router ospf 1network ... で OSPF が動く」と書かれている。読めば「分かった気」にはなる。しかし 本当に動くのか・どんなメッセージが流れるのか・設定を間違えたら何が起きるのか は、手を動かさない限り見えない。
POINT 実機で組むメリット:
本当に疎通するか を ping / traceroute / show コマンドで確認できる
壊して直す を何度でもできる(物理機器なら設定ミスで通信断 = 業務影響)
パケットを観察できる(GNS3 + Wireshark で OSPF Hello、ARP、VLAN タグが見える)
ベンダー CLI に触れる ─ 教科書の擬似コマンドではなく本物の構文

物理機器を買うのは現実的でない

個人で Cisco の業務用ルータを 1 台買うと中古でも数万円、新品なら 10 万円超。3 台揃えて OSPF を試そうとすると 30 万円コース、しかもラックや電源の準備が要る。シミュレータなら自分のノート PC 1 台で 5〜10 ノードを動かせる。これが「ネットワーク学習にシミュレータが必要」という最大の理由。

つながる知識: 大学のネットワーク講義・CCNA トレーニング・各種ベンダー認定でも、現代はほぼシミュレータで実習する。Cisco の公式トレーニングでも CML(Cisco Modeling Labs) という Web 版シミュレータが使われ、物理機器のラックは縮小傾向。「本物の機器を持っているか」 ではなく 「どんな設定で何が起きるかを理解しているか」 が問われる時代。

確認: ネットワーク学習にシミュレータが推奨される理由として、最も適切なものはどれか。

正解:B。シミュレータの本質的価値は低コスト(数万円のソフト不要、PC 1台で完結)と再現性(壊して直すを何度も)。A は誤り(エミュレーションは物理より遅い場合が多い)、C は誤り(物理機器でも SPAN ポートで取れる)、D は逆(物理機器こそ本物の OS が動く)。

シミュレータ比較 ─ 自分に合う道具を選ぶ

ネットワークシミュレータには複数の流派があり、「本物の OS を動かすか」「マルチベンダーか」 などで使い分けがある。本講で使う GNS3 は「複数ベンダーの本物 OS イメージを VM/エミュレータで動かす」 という最も伝統的かつ柔軟な選択肢。

主要シミュレータの位置づけ

ツール性質得意領域使う場面
GNS3マルチベンダー、本物 OS をエミュレート本格的・自由度高OSPF / BGP / VLAN を本物の CLI で学ぶ
Cisco Packet TracerCisco 製、教育用シミュレーション初学者・CCNA 入門NetAcad 受講中、軽くトポロジを動かす
EVE-NGWeb UI、共同作業向けチーム学習大規模トポロジを共同で構築
MininetLinux Network Namespace、SDN 研究向けSDN・OpenFlow研究・学術論文の実験用
Cisco Modeling Labs (CML)Cisco 公式 Web シミュレータCisco 認定試験対策有償・ライセンス契約者

本講が GNS3 を選ぶ理由

つながる知識: GNS3 自身は GUI で、内部では Dynamips(Cisco IOS のエミュレータ) や QEMU(任意 VM) を呼んでイメージを動かす。VyOS は QEMU で動く VM として GNS3 に登録する形になる。「GNS3 自体は管制塔、実際にプロセスを動かすのは下のエンジン」 という分業構造を頭に入れておくと、トラブルシュートで役立つ。

VyOS という解 ─ Cisco IOS の壁を越える

GNS3 でルータを動かすには ルータ OS のイメージ が必要。Cisco IOS / IOSv は 商用ライセンス(Cisco Smart Net Total Care、Modeling Labs サブスクリプション等)を持っていないと公式に入手できず、ネット上のグレーな配布に頼るのは法的リスク。VyOS はこの問題に対するオープンソース版の答え。
POINT VyOS の特徴:
Linux ベース(Debian)に FRRouting(Quagga 系の OSS ルーティングエンジン) を組み込んだ 本物のルータ OS
Junos 系の CLI(configuresetcommit) ─ Cisco IOS とは流儀が違うが、概念はそのまま流用できる
rolling release は無料・合法(個人学習はこれで十分)、LTS 版は商用サブスクリプション付き
本番投入実績:AWS / Azure マーケットプレイスで提供、ISP・SaaS の VPN ゲートウェイで使われる

Vyatta から VyOS への系譜

2005 年にスタートした商用 OSS ルータ Vyatta がベース。Brocade 社が買収・独占化したのを機に 2013 年にコミュニティが VyOS としてフォーク。「メーカーロックインしないオープンソースのルータ OS が欲しい」 という運動の象徴的な存在で、現在では SR Linux(Nokia)・FRR(コミュニティ)・SONiC(Microsoft → Linux Foundation)とともに 「ベンダーフリー・ネットワーキング」 の流れを支える。

Cisco IOS と VyOS の CLI 対応表

操作Cisco IOSVyOS
設定モードに入るenableconfigure terminalconfigure
インタフェースに IPinterface eth0
ip address 10.0.0.1 255.255.255.0
set interfaces ethernet eth0 address '10.0.0.1/24'
OSPF を有効化router ospf 1
network 10.0.0.0 0.0.0.255 area 0
set protocols ospf area 0 network '10.0.0.0/24'
設定を確定endwrite memorycommitsave
経路を確認show ip routeshow ip route(同じ!)
OSPF 隣接を確認show ip ospf neighborshow ip ospf neighbor(同じ!)
インタフェース状態show interfacesshow interfaces

大事なポイント: 「show 系のオペレーショナルコマンドは概ね共通、設定系は思想が違う」。VyOS の set ベースの設定は 「目的の状態を 1 行ずつ宣言する」 流派(Junos と同じ)で、これに慣れると後で Cisco IOS にも自然に移れる。逆向きも同様で、「ネットワークの概念を理解していれば CLI は方言の違いに過ぎない」 という普遍性を体感できるのが、本講で VyOS を使う隠れたメリット。

Q. なぜ VyOS の設定は commit という明示的なステップを要求するのか? Cisco IOS のように 「コマンドを打ったら即時反映」 ではない理由を考えよ。

セットアップ ─ GNS3 + VyOS を動かすまで

GNS3 のインストールは公式ドキュメントが詳しいので、本節では 「VyOS を GNS3 に追加する」 手順に絞って書く。最小構成で動かしたい人向けに、要点を時系列で整理する。

用意するもの

手順(8 ステップ)

# 1. GNS3 GUI をインストール(macOS なら brew install --cask gns3)
# 2. GNS3 VM を有効化(Edit → Preferences → GNS3 VM)
# 3. 「+ New Template」→ 「Install an appliance from the GNS3 server」
# 4. 一覧から VyOS を選ぶ(公式アプライアンス定義あり)
# 5. ダウンロードした VyOS rolling ISO を指定
# 6. アプライアンスとしてインポート完了
# 7. 新しいプロジェクトでドラッグ → ノード起動
# 8. Console 接続(ログイン: vyos / vyos)→ install image でディスクへ書き込み

初回起動後にすべきこと

VyOS はデフォルトで Live ISO 状態(再起動で設定が消える)なので、永続化のため必ず install image を実行する。インストール先(仮想ディスク)・rootパスワード・config の保存先を聞かれるので順に答え、再起動すると永続インストール状態で起動する。これ以降は commit + save で設定が保存される。

注意: GNS3 VM は CPU 仮想化(VT-x / AMD-V) が必須。Mac の Apple Silicon(M1/M2 系) では UTM(QEMU ベース) を経由する形になり、Intel 比でやや手順が増える。Windows では Hyper-V と VirtualBox の共存に注意(片方を無効化が必要なケースあり)。動かないときは公式ドキュメントの OS 別ガイド を参照するのが結局早い。

ラボ① 2 台の PC を直結 ─ ARP と ping を観る

最初のラボはルータも何も使わない。仮想 PC 2 台をスイッチでつなぎ、IP アドレスを設定して ping を打つ。たったこれだけで、標準編で学んだ ARPICMPサブネットの境界 が目に見える形で確認できる。GNS3 標準の VPCS(仮想 PC)を使うので追加 OS のダウンロードは不要。「触れる」体験の入り口として最も軽い構成。

トポロジ

PC1 ─ Switch ─ PC2(同一サブネット) PC1 (VPCS) 192.168.1.10/24 MAC: 自動割当 L2 Switch GNS3 内蔵 単純な学習スイッチ PC2 (VPCS) 192.168.1.20/24 MAC: 自動割当 同じ /24 サブネットの 2 台。ルータなしで直接通信できる

図の見方:GNS3 で VPCS を 2 つドラッグ、Ethernet switch(GNS3 標準内蔵) を間に置き、リンクで接続するだけ。10 秒で組める最小構成。スイッチを介して 2 台の PC が同じ L2 セグメントに乗る。

PC1 と PC2 の設定

# PC1 のコンソールで
ip 192.168.1.10/24

# PC2 のコンソールで
ip 192.168.1.20/24

# PC1 から PC2 へ ping
ping 192.168.1.20

Wireshark で観察できるパケット

PC1 ↔ Switch のリンクで「Start capture」 を打ってから ping を実行すると、3 種類 のパケットが流れる:

考えてみよう: 一度 ping を打つと、その後しばらくは ARP が流れずに ICMP だけ流れる。これは ARP キャッシュ ── PC1 が「192.168.1.20 の MAC は ◯◯」 を一定時間覚えているから。Linux/Mac の arp -a で同じテーブルが見える。

確認: PC1 と PC2 を同じ 192.168.1.0/24 サブネットに置き、PC1 から初めて PC2 に ping を打った。Wireshark で観察される最初のパケットはどれか。

正解:C。PC1 は宛先 IP の MAC を知らないとフレームを作れない。だから最初に ARP Request をブロードキャストで投げ、PC2 から ARP Reply を受け取って初めて ICMP Echo Request を送れる。これが「IP の住所を MAC の住所に翻訳する」 ARP の役割を実機で確認する瞬間。

応用:同じ IP を 2 台に設定するとどうなる?

PC1 と PC2 の 両方を同じ IP(例:192.168.1.10)に設定して ping してみる。Wireshark を見ると ARP Reply が 2 つ返ってくる 状況になり、後勝ち・前勝ち どちらの応答を受け取るか不定で動作が壊れる。これが標準編で学んだ「IP は一意でなければならない」の実機での意味。

ラボ② スタティックルートでサブネット同士を繋ぐ

ラボ① では「同じサブネット」 の 2 台が繋がる仕組みを見た。次は 「異なるサブネット間」 を繋ぐ。これにはルータが必要で、最も基本的な経路設定が スタティックルート(手動設定)。標準 #22 で「ルーティングはルータがどのインタフェースから出すかを決める処理」と学んだその仕組みを、自分の手で設定してみる。

トポロジ

3 つのサブネット ─ 中央のリンクが「ルータ間」 PC1 192.168.10.2/24 GW: .10.1 .10.0/24 VyOS-1 eth0: .10.1/24 eth1: .20.1/24 .20.0/24 VyOS-2 eth0: .20.2/24 eth1: .30.1/24 .30.0/24 PC2 192.168.30.2/24 GW: .30.1 PC1 と PC2 は別サブネット。中央のルータが互いの先のサブネットを「教えてもらう」 必要がある

図の見方:PC1 のサブネット(.10.0/24)と PC2 のサブネット(.30.0/24)を、中央のサブネット(.20.0/24)で結ぶ。ルータ同士は「相手側の先のサブネット」を知らないので、そのままだと PC1 ↔ PC2 の通信は届かない。

VyOS-1 / VyOS-2 の IP 設定

# [VyOS-1]
configure
set interfaces ethernet eth0 address '192.168.10.1/24'
set interfaces ethernet eth1 address '192.168.20.1/24'
commit
save
exit

# [VyOS-2]
configure
set interfaces ethernet eth0 address '192.168.20.2/24'
set interfaces ethernet eth1 address '192.168.30.1/24'
commit
save
exit

PC1 / PC2 の設定とスタティックルート

# [PC1] VPCS で IP とデフォルトゲートウェイを同時に設定
ip 192.168.10.2/24 192.168.10.1
# [PC2]
ip 192.168.30.2/24 192.168.30.1

# [VyOS-1] PC2 のサブネットを「VyOS-2 経由で届く」 と教える
configure
set protocols static route 192.168.30.0/24 next-hop 192.168.20.2
commit
save
exit

# [VyOS-2] 帰り道の経路を設定する
configure
set protocols static route 192.168.10.0/24 next-hop 192.168.20.1
commit
save
exit

# 確認:PC1 から PC2 へ ping
# (PC1 で)ping 192.168.30.2
show ip route   # → "S" マーク(Static 由来) の経路が見える

段階的に試す:片側だけだとどうなるか

VyOS-1 だけに静的経路を設定して、VyOS-2 の側はまだ設定していない状態で ping を打つと 必ず timeout する。理由:行きの ICMP Echo Request は届く(VyOS-1 が経路を知っているので)が、帰りの ICMP Echo Reply が VyOS-2 で詰まる(VyOS-2 は .10.0/24 をどう届ければいいか知らない)。これが「経路は 双方向 に設定が必要」 の意味。

つながる知識: スタティックルートは規模が小さいうちは管理しやすいが、ルータが 5 台、10 台と増えると組み合わせ爆発で人間の手では追いきれなくなる。「ルータが増えたら自動で経路を交換する仕組みが必要」 ─ これが次のラボ ③ ④ で扱う 動的ルーティング(RIP / OSPF) の動機。

Q. VyOS-1 にだけスタティックルート(.30.0/24 → next-hop .20.2) を設定し、VyOS-2 側はまだ設定していない状態で PC1 → PC2 へ ping を打つ。Wireshark で各リンクをキャプチャすると、どのリンクで どの方向のパケットが見えなくなる はずか。

ラボ③ RIP ─ 距離ベクトル型の動的ルーティング

動的ルーティングプロトコルの最古典 RIP(Routing Information Protocol、RFC 2453)を VyOS で組む。RIP は 「自分が知っている経路情報を、隣のルータに 30 秒ごとに丸ごと教える」 という素朴なアルゴリズムで、教育的価値が高い。標準 #22 の 距離ベクトル型 で説明された原理が、Wireshark で見る RIP Request / Response パケット として目に見えるようになる。

同じトポロジで RIP を使う

ラボ② のスタティック設定を一旦削除し、RIP に置き換える。両ルータが「自分が直結しているサブネット情報」を交換するだけで、自動的に経路が完成する。

# [VyOS-1] スタティックルートを削除
configure
delete protocols static route 192.168.30.0/24

# RIP を有効化(RIP を喋るインタフェースを指定)
set protocols rip interface eth0
set protocols rip interface eth1

# 自分が直結しているサブネット情報を RIP で広告する
set protocols rip redistribute connected
commit
save
exit

# [VyOS-2] 同じ手順
configure
delete protocols static route 192.168.10.0/24
set protocols rip interface eth0
set protocols rip interface eth1
set protocols rip redistribute connected
commit
save
exit

動作確認

# 経路確認
show ip route
# → 192.168.30.0/24 に "R" マーク(RIP 由来)が付いていれば成功
# → ホップ数(metric) が経路の隣に表示される

# RIP の状態
show ip rip
# → 学習している経路の一覧

Wireshark で観察できる RIP パケット

VyOS-1 ↔ VyOS-2 のリンクをキャプチャすると、30 秒間隔で RIP Response がフラッディング されている様子が時系列でわかる。これが RIP の「知ってることを定期的に全部送る」 流派。

RIP の限界

項目RIP の挙動問題
収束時間30 秒間隔で更新経路が変わったら最大数分かかる
メトリックホップ数のみ1Gbps と 10Mbps のリンクが同じ「1 ホップ」 で評価される
最大ホップ15(16 で「到達不能」)大規模ネットワーク不可
負荷経路テーブル全体を送るルータ・帯域への負荷が大きい

つながる知識: RIP は 1980 年代の小規模 LAN 向けに普及したが、「全部送る・遅い・ホップ数だけ」 の 3 点で現代の業務ネットワークには合わない。これを解決すべく登場したのが次の OSPF(リンクステート型)。RIP と OSPF を 続けて触れる と「なぜリンクステートが必要だったか」 が体感できる。

ラボ④ OSPF ─ リンクステート型で経路を効率的に交換

RIP の問題点(遅い・ホップ数だけ・全部送る)を解決するのが OSPF(Open Shortest Path First、RFC 2328)。「全部送る」 ではなく 「変化があった部分だけを送る」、ホップ数ではなく 「リンク帯域に基づくコスト」 で経路を選び、ダイクストラ法で 各ルータが最短経路を独立計算 する ── これが現代の企業ネットワークで標準となった理由。

同じトポロジで OSPF に切り替える

# [VyOS-1] RIP を削除して OSPF に置き換え
configure
delete protocols rip
set protocols ospf area 0 network '192.168.10.0/24'
set protocols ospf area 0 network '192.168.20.0/24'
set protocols ospf parameters router-id 1.1.1.1
commit
save
exit

# [VyOS-2]
configure
delete protocols rip
set protocols ospf area 0 network '192.168.20.0/24'
set protocols ospf area 0 network '192.168.30.0/24'
set protocols ospf parameters router-id 2.2.2.2
commit
save
exit

動作確認

# 隣接が張れているか
show ip ospf neighbor
# → R2(2.2.2.2) が "Full" 状態になっていれば成功

# 学習した経路
show ip route
# → 192.168.30.0/24 に "O" マーク(OSPF 由来)が付いていれば OK
# → RIP のときの "R" から "O" に変わっている

# LSDB(リンクステートデータベース)の中身
show ip ospf database
# → 各ルータが交換した LSA(Link State Advertisement) が見える

Wireshark で観察できる OSPF パケット

RIP との比較表

項目RIPOSPF
方式距離ベクトルリンクステート
更新タイミング30 秒ごとに全部変化時のみ差分
メトリックホップ数リンクコスト(帯域)
最大規模15 ホップまで実質無制限(area 設計)
収束分単位秒単位
マルチキャスト224.0.0.9 / UDP 520224.0.0.5・224.0.0.6 / IP プロトコル 89

つながる知識: OSPF の隣接が Init2-Way で詰まる典型は area / mask / hello-interval / dead-interval / authentication の不一致。Hello パケットで合意できないと ExStart 以降に進めない。標準編 #22 の理論が、ここで show ip ospf neighbor の状態遷移 + Wireshark の Hello パケット として目に見える形になる。

確認: show ip ospf neighbor を実行したら、状態が Init のまま Full に進まなかった。最も可能性が高い原因はどれか。

正解:C。OSPF Hello は area / mask / hello-interval / dead-interval / authentication が一致しないと隣接が ExStart 以降に進まない。トラブルシュート時にまず確認すべき定番チェックリスト。

ラボ⑤ BGP ─ AS 間ルーティング(EGP)

RIP と OSPF はいずれも IGP(Interior Gateway Protocol、AS 内部のルーティング)。インターネット全体を支えるのは別の仕組み BGP(Border Gateway Protocol、RFC 4271)で、これは AS(Autonomous System、独立した管理ポリシーを持つネットワーク群)同士の経路情報を交換する。GoogleやAmazon、自分の家のISPなど、すべての組織が AS 番号 を持ち BGP で接続されている。

BGP の特徴

トポロジ

AS 10 と AS 20 を eBGP で繋ぐ PC1 192.168.10.2/24 VyOS-1 (AS 10) eth0: 10.0.0.1/24 eth1: 192.168.10.1/24 eBGP 10.0.0.0/24 VyOS-2 (AS 20) eth0: 10.0.0.2/24 eth1: 192.168.30.1/24 PC2 192.168.30.2/24 2 つの組織(AS)が eBGP で接続。各 AS 内ではローカル経路、AS 間で BGP が経路情報を交換する

図の見方:VyOS-1 は AS 10 の境界ルータ、VyOS-2 は AS 20 の境界ルータ。中間の 10.0.0.0/24 リンク上で BGP セッションを張り、互いの内部サブネット情報(.10.0/24、.30.0/24)を交換する。これがインターネットの基本構造の最小モデル。

BGP の設定

# [VyOS-1] AS 10 の設定
configure
set interfaces ethernet eth0 address '10.0.0.1/24'
set interfaces ethernet eth1 address '192.168.10.1/24'

# 自分の AS 番号を 10 として宣言
set protocols bgp system-as 10

# 隣接 AS 20 のルータ(10.0.0.2)とピアを張る
set protocols bgp neighbor 10.0.0.2 remote-as 20

# 自分の AS 内サブネットを BGP で広告
set protocols bgp address-family ipv4-unicast network 192.168.10.0/24

commit
save
exit

# [VyOS-2] AS 20 の設定
configure
set interfaces ethernet eth0 address '10.0.0.2/24'
set interfaces ethernet eth1 address '192.168.30.1/24'
set protocols bgp system-as 20
set protocols bgp neighbor 10.0.0.1 remote-as 10
set protocols bgp address-family ipv4-unicast network 192.168.30.0/24
commit
save
exit

動作確認

# BGP のピア状態
show ip bgp summary
# → State が "Established" であれば成功
# → 受信した経路数が表示される

# 学習した経路
show ip bgp
# → 経由した AS PATH(例: "20") が見える

# 経路テーブル
show ip route
# → 192.168.30.0/24 に "B" マーク(BGP 由来) が付く

Wireshark で観察できる BGP メッセージ

BGP は OSPF と違い TCP の上に乗る ので、Wireshark で見ると 3 ウェイハンドシェイク → BGP OPEN → KEEPALIVE という順序が見える。これが TCP との接続点。

つながる知識: 実運用ではさらに AS PATH プリペンド(自分の AS 番号を意図的に複数回並べて経路の優先度を下げる)などのポリシー操作が使われる。「BGP の経路選択は技術より政治」 と言われる所以で、IPv4 経路の漏洩・ハイジャック事件(2008 YouTube 事件、2018 Amazon Route 53 事件)はすべて BGP の信頼ベース設計の脆弱性に起因する。RPKI による経路認証が現代の対策。

Q. なぜ BGP は TCP(信頼性プロトコル)の上で動くのか? OSPF や RIP のように UDP やマルチキャストで直接動かさない理由を考えよ。

ラボ⑥ VLAN ─ 802.1Q トランクとサブインタフェース

第32回 VLAN で学んだ 802.1Q タグ を VyOS で実装する。1 本の物理リンク(トランクポート)に複数の VLAN を流し、ルータ側で サブインタフェース として受ける ── いわゆる 「ルータ・オン・ア・スティック」

VyOS でのサブインタフェース設定

VyOS では vif(virtual interface) という概念で 802.1Q サブインタフェースを表現する。物理 eth0 の上に VLAN 10 / 20 を載せるなら次のように書く。

configure

# 物理 eth0(トランク受け側)はアドレス無し
# VLAN 10 のサブインタフェース
set interfaces ethernet eth0 vif 10 address '10.10.10.1/24'

# VLAN 20 のサブインタフェース
set interfaces ethernet eth0 vif 20 address '10.10.20.1/24'

commit
save
exit

# 確認
show interfaces
# → eth0.10、eth0.20 が見える

L2 スイッチ側の設定

GNS3 には組み込みの「Ethernet switch」 があり、ポートごとに access(タグなし VLAN) / trunk(複数 VLAN タグ付き) を選べる。物理ルータと L2 スイッチを 1 本のトランクで結べば、1 本のケーブルで複数の VLAN を運ぶ 状態になる。Wireshark でこのリンクをキャプチャすると 802.1Q タグ(0x8100) 付きのフレームが見える。

つながる知識: 「ルータ・オン・ア・スティック」 は古典的だが、現代でも仮想化基盤の VM セグメント分離(KVM の bridge + VLAN tagging)で同じ仕組みが使われている。Linux ホストで ip link add link eth0 name eth0.10 type vlan id 10 しても同じことができ、VyOS の vif はそのコマンドを抽象化した薄いラッパーに近い。「ルータの専用機能」 ではなく Linux の機能、と理解すると応用が利く。

ラボ⑦ NAT ─ 内部 LAN を 1 つの外部 IP で隠す

標準 #20 IP・NAT で学んだ 送信元 NAT(NAPT / masquerade) を VyOS で構成する。家庭ルータが当たり前にやっている処理を、自分で書いてみる。

シナリオ

内部 LAN 192.168.10.0/24 のホストが、外部(eth1)を経由してインターネットへ出る。ルータの外部 IP は 1 つだけで、内部の複数ホストの通信を ポート番号で多重化 して同じ外部 IP に詰め込む。

configure

# rule 番号は数字が小さい方から評価される
set nat source rule 100 outbound-interface 'eth1'
set nat source rule 100 source address '192.168.10.0/24'
set nat source rule 100 translation address 'masquerade'

commit
save
exit

# 動作確認
show nat source rules            # rule 100 が状態 active で表示
show nat source translations     # 翻訳テーブル(現在のフロー)が見える

masquerade vs 固定 IP 変換

家庭ルータが自動で行ってくれるあの作業を、ここでは 自分の手でルールを 3 行書く。これが「ブラックボックスを開けて中を見る」 体験。

確認: VyOS の set nat source rule 100 translation address 'masquerade' という記法が表す挙動として、最も適切なものはどれか。

正解:Bmasquerade は Linux netfilter の用語で、「出力 IF の現在の IP に置き換える」 動作。DHCP で外側 IP が変動する環境でも追従するため家庭ルータの典型。送信元ポートも NAPT として自動で書き換えられる。

ラボ⑧ TCP / HTTP ─ Apache サーバを立てて telnet で覗く

最後のラボはアプリケーション層。Apache HTTP サーバ を立て、クライアントから telnet で生 HTTP リクエスト を打って Wireshark で観察する。標準 #18 TCP3 ウェイハンドシェイク標準 #12 HTTPGET / レスポンス が、TCP セグメントと HTTP メッセージとして同じパケット列に現れる ── これがプロトコル階層の体感。

トポロジ

Apache を動かすには Linux 環境が必要。GNS3 では VirtualBox VM 上の Ubuntu を 2 台用意して接続する(Server 用 + Client 用)。Ubuntu のイメージは公式から無料でダウンロードできる(.iso → VirtualBox VM として登録 → GNS3 から呼び出し)。

Ubuntu Client ─ Switch ─ Ubuntu Server (Apache) Ubuntu Client 192.168.10.3/24 telnet, curl, Firefox L2 Switch GNS3 内蔵 Ubuntu Server 192.168.10.1/24 Apache 2 (port 80) クライアントとサーバ間で TCP 80 番に HTTP リクエストを流す

図の見方:VirtualBox 上の Ubuntu Server(Apache 起動)と Ubuntu Client を、GNS3 のスイッチで接続。両者の間のリンクで Wireshark を起動して、TCP と HTTP のパケットを同時にキャプチャする。

Ubuntu Server で Apache を起動

# IP アドレスを設定(必要なら)
sudo ip addr add 192.168.10.1/24 dev enp0s3

# Apache をインストールしてない場合は:sudo apt install apache2
sudo service apache2 start

# 80 番ポートが listen しているか確認
ss -tlnp | grep :80
# → 0.0.0.0:80 や :::80 に "apache2" プロセスが bind しているのが見える

Ubuntu Client から telnet で生 HTTP を打つ

# IP アドレス設定
sudo ip addr add 192.168.10.3/24 dev enp0s3

# まず ping で疎通確認
ping 192.168.10.1

# telnet で 80 番に接続
telnet 192.168.10.1 80
# → "Connected to 192.168.10.1" と出る(これが TCP 3-way 完了の合図)

# 接続後、以下を 1 行ずつ手で打ち込み、最後に空行を入れる
GET /index.html HTTP/1.0
[Enter]   ← 空行で送信
# → サーバから index.html が返ってくる(HTTP/1.0 200 OK ヘッダ + HTML 本文)

Wireshark で観察できるパケット列

  1. ARP Request / Reply ─ 初回はクライアントがサーバの MAC を知らない
  2. TCP SYN(クライアント → サーバ)─ 「接続したい、初期 seq 番号は X」
  3. TCP SYN+ACK(サーバ → クライアント)─ 「了解、私の seq は Y、Xは受信」
  4. TCP ACK(クライアント → サーバ)─ 3 ウェイハンドシェイク完了
  5. HTTP GET(クライアント → サーバ)─ TCP データセグメントの中身として GET 要求
  6. HTTP/1.0 200 OK(サーバ → クライアント)─ レスポンスヘッダ + 本文
  7. TCP FIN / FIN+ACK / ACK ─ 接続クローズ

これがアプリケーション層と TCP 層が 同じパケット列 として観察できる瞬間。Wireshark の Follow → TCP Stream 機能を使えば、HTTP のやり取りだけを「上り → 下り」 と整形表示できる。

応用:Firefox でアクセスして比較

Ubuntu Client で Firefox を立ち上げ、URL バーに http://192.168.10.1 と打ち込む。telnet 手打ちと違って、ブラウザは HTTP/1.1 + 多数のヘッダ(User-Agent, Accept, Cookie, etc.) を自動付加する。第29回 HTTP プログラミング で見た「ブラウザは多くのヘッダを自動送信」 が、ここで Wireshark の生フレームとして確認できる。

つながる知識: このラボで扱うのは HTTP/1.0 over TCP の最も素朴な形。標準 #12 HTTP で学んだ Persistent Connection、第33回 QUIC / HTTP/3 の UDP 上のストリーム多重化、第34回 WebSocket の双方向昇格 ── これらすべてが「最初の telnet で打つ GET」 から派生した進化なのだと、本ラボを通すと体感できる。HTTP の歴史を 30 秒の telnet で凝縮体験する のが本ラボの真髄。

Wireshark で観察 ─ 自分が組んだ通信を直接見る

GNS3 の最大の魅力の 1 つが リンクキャプチャ。トポロジ上の任意のリンクを右クリック → Start capture で、そのリンクを流れる生フレームが Wireshark に直接送られる。第30回 Wireshark の 「目」 を、自分で組んだ実機トポロジ に向けて使うのが本講のクライマックス。

各ラボで観察できる代表的なもの

NAT の挙動を観察するレシピ

NAT ラボの構成で、内部 LAN 側のリンクと外部側のリンクを同時にキャプチャ し、Wireshark 画面を 2 枚並べて見る。同じ ICMP echo が 送信元 IP と送信元ポートを書き換えられて 出ていく様子が、両画面を並べて見ると 1 対 1 で対応 していることが目で確認できる。

Q. GNS3 でトポロジ上の同じリンクを 同時に 2 つの Wireshark ウィンドウ で開きたい(片方は OSPF だけ表示、もう片方は ICMP だけ表示)。これは可能か? 可能ならその仕組みは?

まとめと用語チェック

SUMMARY 1. GNS3 + VyOS で、自分の PC 上にルータ・スイッチからなるネットワークを構築できる
2. Cisco IOS は商用ライセンスの壁があるが、VyOS は無料・合法・本番投入実績ありの Linux ベース router OS
3. VyOS の CLI は Junos 系(configuresetcommit)。show 系は Cisco とほぼ共通
4. ラボ① 〜 ② で ARP / ICMP / スタティックルート という基礎を実機で確認
5. ラボ③ 〜 ⑤ で RIP(古典)→ OSPF(現代主流)→ BGP(AS 間) という動的ルーティングの進化を体験
6. ラボ⑥ ⑦ で VLAN(802.1Q)NAT(masquerade) を構成
7. ラボ⑧ で Apache + telnet によりアプリ層(HTTP) と TCP の連動を観察
8. GNS3 のリンクキャプチャ + 第30回 Wireshark で「設定 → 動作 → パケット観察」 が 1 サイクルで回せる

用語チェック

用語1行説明
GNS3マルチベンダー対応のネットワークシミュレータ。本物の OS イメージを VM/エミュレータで動かす
GNS3 VMGNS3 の実行エンジン。Linux ベースで、Hypervisor 上に常駐する
VPCSGNS3 内蔵の軽量仮想 PC。ip ... / ping ... など最小限のコマンドで動く
VyOSLinux + FRR ベースのオープンソース router OS。Vyatta から派生
FRRouting (FRR)Quagga の後継。OSPF/BGP/IS-IS などを実装するルーティングスタック
operational modeVyOS で show 系コマンドを実行する通常モード
configuration modeconfigure で入る設定モード。set / delete で候補設定を編集
commit候補設定を実行中設定に反映する原子的操作
save実行中設定をディスクに永続化する
スタティックルート管理者が手動で設定する経路
RIP距離ベクトル型 IGP。30 秒間隔・224.0.0.9・UDP 520・最大 15 ホップ
OSPFリンクステート型 IGP。Hello/DBD/LSU・224.0.0.5・IP プロトコル 89・area 設計
BGPパスベクトル型 EGP。AS 間ルーティング・TCP 179・OPEN/KEEPALIVE/UPDATE
AS(Autonomous System)独立した管理ポリシーを持つネットワーク群。AS 番号で識別
vifVyOS の VLAN サブインタフェース表記。eth0 vif 10 で eth0.10 相当
masquerade送信元 NAT で「出力 IF の現 IP に置換」 を意味する Linux netfilter 由来の用語
Apache HTTP Server1995 年〜の代表的 OSS Web サーバ。apache2 プロセスとして 80/443 を listen
本講で開いた扉: ネットワークは「読み物」 ではなく 「自分で動かして観察できる対象」 になりました。ARP の解決、RIP/OSPF の経路交換、BGP の AS 越境、VLAN の境界、NAT の翻訳テーブル、TCP/HTTP のやり取り ── すべて手元で何度でも再現・検証できます。資格試験(CCNA / LPIC / 各社認定) のラボ、研究プロジェクトのプロトタイプ、ホームラボの実験 ── どこでも本講の素地が役立ちます。

確認問題

問1. 個人学習者がネットワーク機器を Cisco IOS で学ぼうとすると直面する 最大の障壁 はどれか。

次の選択肢から最も適切なものを選択してください。
A. Cisco IOS は無料だが、CLI の習得が困難である
B. Cisco IOS は Linux 上で動かない
C. IOS / IOSv のイメージは商用ライセンス契約者(NetAcad、CML サブスクリプション、Smart Net 契約等)でないと公式に入手できない
D. Cisco IOS は OSPF を実装していない
正解:C。Cisco の IOS / IOSv / IOS XE / IOS XR のイメージは 商用ライセンスを伴う配布 で、無償ダウンロードは原則できない。教育用の Cisco Modeling Labs(CML)も有償サブスクリプション。だから個人学習者は VyOS のようなオープンソース router OS で代替するのが現実解になる。

問2. 同じサブネット 192.168.1.0/24 に置いた仮想 PC 2 台で、初めて ping を打ったときに Wireshark で 最初に観察される パケットはどれか。

次の選択肢から最も適切なものを選択してください。
A. ICMP Echo Request
B. TCP SYN
C. ARP Request(ブロードキャストで宛先 MAC を尋ねる)
D. OSPF Hello
正解:C。送信側は宛先 IP に対応する MAC を知らないとフレームを作れない。だからまず ARP Request をブロードキャストで投げて MAC を解決し、ARP Reply を受け取ってから ICMP Echo Request を送る。

問3. RIP と OSPF の違いとして、適切でない ものはどれか。

次の選択肢から「適切でない」記述を選択してください。
A. RIP は距離ベクトル型、OSPF はリンクステート型
B. RIP は 30 秒ごとに経路テーブル全体をフラッディング、OSPF は変化があった LSA だけを送る
C. RIP のメトリックはホップ数、OSPF はリンクコスト(帯域ベース)
D. RIP は AS 間ルーティングプロトコルだが、OSPF は AS 内ルーティングプロトコル
正解:D(これだけ誤り)。RIP も OSPF も IGP(AS 内ルーティング)。AS 間ルーティングは BGP が担う。A・B・C はすべて RIP と OSPF の正しい違い。OSPF が現代の企業ネットワークで主流になった理由は、B(差分更新)と C(帯域ベース)の組み合わせで「速く・正しい」 経路が選ばれるから。

問4. BGP が TCP の上で動く 主な理由として、最も適切なものはどれか。

次の選択肢から最も適切なものを選択してください。
A. UDP よりも転送速度が速いから
B. インターネット全経路(90 万件超)を信頼性のある順序で交換する必要があり、AS 間の遠隔ピアでマルチキャストが届かないから
C. OSPF と統合するため
D. UDP では暗号化できないから
正解:B。BGP は AS 間で動くため、同一セグメント前提のマルチキャスト型 OSPF/RIP と違い、遠隔ノード間でユニキャスト・信頼性のある通信 が必要。膨大な経路情報を欠損なく順序正しく届けるには TCP の再送・順序保証が必須。ポート 179 が予約されている。

問5. telnet 192.168.10.1 80 で接続後 GET / HTTP/1.0 を打ち込み Enter を 2 回押すと、Wireshark で観察される 順序 として最も適切なものはどれか。

次の選択肢から最も適切なものを選択してください。
A. HTTP GET → TCP SYN → HTTP 200 OK
B. TCP SYN → HTTP 200 OK → HTTP GET
C. TCP SYN → SYN+ACK → ACK → HTTP GET → HTTP 200 OK → TCP FIN
D. HTTP GET → TCP FIN → HTTP 200 OK
正解:C。HTTP は TCP の上で動くため、まず 3 ウェイハンドシェイク(SYN → SYN+ACK → ACK)で接続が確立してから HTTP リクエストを送れる。telnet コマンドを打って "Connected to ..." と表示される瞬間が 3 ウェイ完了の合図。その後、手で打った GET がデータセグメントとして送られ、サーバから 200 OK が返り、最後に FIN で接続クローズという流れ。
← PREV
第30回 Wireshark でパケットを観る
NEXT →
第32回 VLAN