
Packet Tracer で Router-on-a-Stick を構築してみた〜L3 スイッチとの違いも比較〜
はじめに
Cisco Packet Tracer でのネットワーク構築を練習するにあたり、Claude に要件定義書を作成してもらい、それをもとに自分で設計・構築してみました。
要件定義書を自分で考えるのは難しいですが、Claude にネットワーク構築の要件定義書を依頼することで、リアルな練習課題を手軽に用意できます。今回はこの方法で学習を進めました。
設計を始める際、VLAN 間ルーティングの方法として「L3 スイッチで ip routing を有効にする方法」か「ルーターの物理インターフェースを複数使う方法」を考えていました。Claude にどちらが良いか相談したところ、Router-on-a-Stick(ルーターオンアスティック) という第 3 の方法を提案されました。今まで聞いたことがない構成だったので、実際に構築しながら「なぜこの方法が存在するのか」を調べてまとめました。
環境
- Cisco Packet Tracer 9.0
- ルーター:Cisco 2911
- スイッチ:Cisco 2960
要件定義書から読み解いた設計方針
今回 Claude に作成してもらった要件定義書には、以下のような要件が含まれていました。
- 総務部・営業部・サーバー室の 3 部署をネットワーク上で分離すること
- DHCP で端末に自動的に IP アドレスを割り当てること
- インターネット接続が必要
「部署ごとにネットワークを分離する」という要件から、VLAN を使った設計が必要だと判断しました。
VLAN 間ルーティングの方法を整理する
VLAN を切るのはすぐに決まりましたが、どうやって VLAN 間のルーティングを実現するかで迷いました。最初は方法①・方法②の 2 つを候補として考えていましたが、Claude に相談したところ方法③を提案されたため、最終的に 3 つを比較することにしました。
方法① L3 スイッチ(3560)+ ip routing

L3 スイッチが VLAN 間のルーティングを直接担う構成です。スイッチ内部で処理が完結するため高速ですが、L3 スイッチは L2 スイッチより高価です。
方法② ルーターの物理インターフェースを VLAN ごとに用意する構成

この方式では、VLAN ごとにルーターの物理インターフェースを消費します。L2 スイッチ自体は 1 台でも複数 VLAN を収容できますが、ルーター側の物理ポート数が VLAN 数に比例して必要になるため、VLAN が増えるとスケールしにくい構成です。
今回検討した構成ではルーターやスイッチの台数が増え、ポート数・機器台数の面で非効率だと判断し早い段階で却下しました。
方法③ Router-on-a-Stick(2911 + 2960)

Claude に提案されて初めて知った構成です。ルーターの物理インターフェース 1 つにサブインターフェースを作り、複数の VLAN を通します。サブインターフェースとは、1 つの物理インターフェースを論理的に複数に分割したもので、ルーター側ではサブインターフェースごとに encapsulation dot1Q <VLAN ID> を設定します。これにより、スイッチからトランクポート経由で届いた 802.1Q タグ付きフレームを、VLAN ID に応じて対応するサブインターフェースで処理できます。スイッチとルーター間はトランクポートで接続します。方法②と異なり、ルーターは 1 台で済むため、コストを抑えつつ VLAN 間ルーティングを実現できます。
「結局 L3 スイッチでよくない?」という疑問
構築を終えた後、率直にこう感じました。
「L3 スイッチの方がシンプルだし、トラフィックも速いのでは?」
調べた結果、L3 スイッチと Router-on-a-Stick にはそれぞれメリット・デメリットがありました。
| 方法 | コスト | 処理速度 | 向いている場面 |
|---|---|---|---|
L3 スイッチ(3560)+ ip routing |
高 | ◎(スイッチ内部で完結) | 予算に余裕がある・トラフィックが多い本番環境 |
| ルーターの物理インターフェースを VLAN ごとに用意 | 中〜高(ルーターの物理ポートを消費) | ○ | VLAN 数が少ない小規模構成 |
| Router-on-a-Stick(2911 + 2960) | 低 | △(トランクリンクに集中) | 予算を抑えたい・既存の L2 スイッチを活かしたい環境 |
社内 LAN 内で VLAN 間通信が多い環境では、L3 スイッチでルーティングする構成が一般的です。スイッチ内部で処理できるため高速で、トランクリンク 1 本に VLAN 間通信が集中しにくいメリットがあります。
一方で、小規模環境や既存の L2 スイッチを活用したい場合、またはルーターやファイアウォール側で VLAN 間通信・NAT・セキュリティポリシーを集約したい場合は、Router-on-a-Stick 型の構成も選択肢になります。
Packet Tracer での構築手順
疑問が解消したところで、実際の構築手順を紹介します。
Step1. 機器の配置と接続
Packet Tracer 上に以下の機器を配置しケーブルで接続します。構成は方法③(Router-on-a-Stick)の図と同じです。
今回のポート割り当ては以下の通りです。
- スイッチ Fa0/1 〜 Fa0/10:総務部 PC(VLAN10・DHCP)
- スイッチ Fa0/11 〜 Fa0/20:営業部 PC(VLAN20・DHCP)
- スイッチ Fa0/21:サーバー室(VLAN30・固定 IP)
- スイッチ Gi0/1:ルーターへのトランクポート
Step2. スイッチの VLAN 設定
SW1> enable
SW1# configure terminal
! VLAN の作成
SW1(config)# vlan 10
SW1(config)# vlan 20
SW1(config)# vlan 30
Step3. スイッチのポート設定
! 総務部 PC(Fa0/1〜Fa0/10)を VLAN10 に割り当て
SW1(config)# interface range fa0/1 - 10
SW1(config-if-range)# switchport mode access
SW1(config-if-range)# switchport access vlan 10
! 営業部 PC(Fa0/11〜Fa0/20)を VLAN20 に割り当て
SW1(config)# interface range fa0/11 - 20
SW1(config-if-range)# switchport mode access
SW1(config-if-range)# switchport access vlan 20
! サーバー室(Fa0/21)を VLAN30 に割り当て
SW1(config)# interface fa0/21
SW1(config-if)# switchport mode access
SW1(config-if)# switchport access vlan 30
! ルーターへの接続ポートをトランクポートに設定
SW1(config)# interface gi0/1
SW1(config-if)# switchport mode trunk
SW1(config-if)# switchport trunk allowed vlan 10,20,30
interface range コマンドを使うことで、複数ポートをまとめて設定できます。
Step4. ルーターのサブインターフェース設定
ここが Router-on-a-Stick の核心部分です。物理インターフェース Gi0/0 に対してサブインターフェースを VLAN ごとに作成します。端末のデフォルトゲートウェイはこのサブインターフェースの IP アドレスになります。
R1> enable
R1# configure terminal
! 物理インターフェースを有効化(IP は付けない)
R1(config)# interface gi0/0
R1(config-if)# no shutdown
! VLAN10 用サブインターフェース(総務部のゲートウェイ)
R1(config)# interface gi0/0.10
R1(config-subif)# encapsulation dot1Q 10
R1(config-subif)# ip address 192.168.10.1 255.255.255.0
R1(config-subif)# ip nat inside
! VLAN20 用サブインターフェース(営業部のゲートウェイ)
R1(config)# interface gi0/0.20
R1(config-subif)# encapsulation dot1Q 20
R1(config-subif)# ip address 192.168.20.1 255.255.255.0
R1(config-subif)# ip nat inside
! VLAN30 用サブインターフェース(サーバー室のゲートウェイ)
R1(config)# interface gi0/0.30
R1(config-subif)# encapsulation dot1Q 30
R1(config-subif)# ip address 192.168.30.1 255.255.255.0
R1(config-subif)# ip nat inside
Step5. DHCP の設定
VLAN10(総務部)と VLAN20(営業部)は DHCP で自動割り当て、VLAN30(サーバー室)は固定 IP のため DHCP 設定は不要です。
! .1〜.9 はゲートウェイ等に予約。DHCP の払い出しは .10 以降になる
! VLAN10 向け DHCP プール(総務部・自動割り当て)
R1(config)# ip dhcp excluded-address 192.168.10.1 192.168.10.9
R1(config)# ip dhcp pool VLAN10
R1(dhcp-config)# network 192.168.10.0 255.255.255.0
R1(dhcp-config)# default-router 192.168.10.1
! 本記事では DNS サーバーの構築および名前解決の確認は対象外
R1(dhcp-config)# dns-server 8.8.8.8
! VLAN20 向け DHCP プール(営業部・自動割り当て)
R1(config)# ip dhcp excluded-address 192.168.20.1 192.168.20.9
R1(config)# ip dhcp pool VLAN20
R1(dhcp-config)# network 192.168.20.0 255.255.255.0
R1(dhcp-config)# default-router 192.168.20.1
! 本記事では DNS サーバーの構築および名前解決の確認は対象外
R1(dhcp-config)# dns-server 8.8.8.8
! VLAN30(サーバー室)は固定 IP のため DHCP 設定なし
! サーバー側で IP アドレス・サブネットマスク・デフォルトゲートウェイを手動設定する
Step6. NAT・デフォルトルートの設定
! WAN 側インターフェース
! 203.0.113.0/24 は RFC 5737 で定められたドキュメント用アドレス(TEST-NET-3)
! 実環境では ISP などから割り当てられたアドレスを使用する
R1(config)# interface gi0/1
R1(config-if)# ip address 203.0.113.1 255.255.255.252
R1(config-if)# ip nat outside
R1(config-if)# no shutdown
! NAT 設定(名前付きアクセスリストを使用)
R1(config)# ip access-list standard NAT_SOURCE
R1(config-std-nacl)# permit 192.168.0.0 0.0.255.255
R1(config)# ip nat inside source list NAT_SOURCE interface gi0/1 overload
! デフォルトルート
R1(config)# ip route 0.0.0.0 0.0.0.0 203.0.113.2
動作確認
構築完了後、PC1 から以下の 3 パターンで疎通確認を行いました。なお、すべて Packet Tracer 上のシミュレーション結果です。
VLAN 間通信(VLAN10 → VLAN20)
PC1(VLAN10)から PC2(VLAN20・DHCP で割り当てられた IP)への ping です。

サーバーへの通信(VLAN10 → VLAN30)
PC1(VLAN10)からサーバー(VLAN30・192.168.30.10・固定 IP)への ping です。

外部ネットワーク接続確認
PC1 から、Packet Tracer 上に用意した外部ネットワーク側の 8.8.8.8 へ ping を実行しました。この確認により、内部ネットワークから外部ネットワークへの通信と NAT の動作を確認しました。
なお、これは Packet Tracer 上の疑似外部ネットワークへの疎通確認であり、実インターネット上の Google Public DNS に到達しているわけではありません。

NAT が正しく動作していることは show ip nat translations でも確認できます。ping 直後に実行することで NAT の変換テーブルを確認できます。

| 項目 | 意味 |
|---|---|
| Inside global | NAT 後のアドレス(203.0.113.1 = WAN 側 IP) |
| Inside local | NAT 前のアドレス(192.168.10.10 = PC1 の実際の IP) |
| Outside local / global | 宛先アドレス(8.8.8.8) |
PC1(192.168.10.10)が WAN 側 IP(203.0.113.1)に変換されて外部ネットワークに出ていることが確認できます。
3 パターンすべてで疎通確認ができました。
詰まったポイント
① encapsulation dot1Q の設定漏れ
サブインターフェースを作成しただけでは動きません。encapsulation dot1Q <VLAN番号> を設定して初めて、そのサブインターフェースがどの VLAN ID の 802.1Q タグ付きフレームを処理するのかを判断できるようになります。
② 物理インターフェースに IP を付けてしまった
Gi0/0 自体に IP アドレスを付けてしまうと、サブインターフェースとの競合が起きます。物理インターフェースは no shutdown だけで、IP アドレスはサブインターフェース側に付けるのが正しい設定です。
③ NAT の ip nat inside をサブインターフェースに設定し忘れた
今回のように VLAN ごとにサブインターフェースを作成している場合、ip nat inside は NAT 対象となる各サブインターフェースに設定する必要があります。親インターフェース Gi0/0 に設定しても、サブインターフェース側には適用されません。
! ❌ 今回のサブインターフェース構成では不十分な例
! 親インターフェースに設定しても、各サブインターフェースには適用されない
R1(config)# interface gi0/0
R1(config-if)# ip nat inside
! ✅ 正しい書き方:NAT 対象となるサブインターフェースごとに設定する
R1(config)# interface gi0/0.10
R1(config-subif)# ip nat inside
R1(config)# interface gi0/0.20
R1(config-subif)# ip nat inside
R1(config)# interface gi0/0.30
R1(config-subif)# ip nat inside
この設定が漏れると、VLAN 間の通信は問題なくできるのにインターネットへの通信だけ失敗するという状況になります。ping の結果を確認しながら原因を特定するまでに時間がかかりました。
まとめ
| 方法 | コスト | 処理速度 | 向いている場面 |
|---|---|---|---|
L3 スイッチ(3560)+ ip routing |
高 | ◎ | 本番環境・トラフィックが多い環境 |
| ルーターの物理インターフェースを VLAN ごとに用意 | 中〜高(ルーターの物理ポートを消費) | ○ | VLAN 数が少ない小規模構成 |
| Router-on-a-Stick(2911 + 2960) | 低 | △ | 低予算環境・既存機器を活かしたい場合・学習用途 |
Router-on-a-Stick は「なぜこの構成が存在するのか」を最初は理解できませんでしたが、調べることでコスト・ポート数・トラフィック量の観点での使い分けが見えてきました。VLAN とトランクの仕組みを理解するという意味では、Router-on-a-Stick を一度手を動かして構築してみることに価値があると感じました。
クラスメソッドオペレーションズ株式会社について
クラスメソッドグループのオペレーション企業です。
運用・保守開発・サポート・情シス・バックオフィスの専門チームが、IT・AIをフル活用した「しくみ」を通じて、お客様の業務代行から課題解決や高付加価値サービスまでを提供するエキスパート集団です。
当社は様々な職種でメンバーを募集しています。
「オペレーション・エクセレンス」と「らしく働く、らしく生きる」を共に実現するカルチャー・しくみ・働き方にご興味がある方は、クラスメソッドオペレーションズ株式会社 コーポレートサイトをぜひご覧ください。
※2026年1月 アノテーション㈱から社名変更しました。





