深夜2時の電話が、VLANへの考え方を変えた
3年前、「オフィスからサーバーに接続できない」という理由でアラートが来た。1人だけではない——60人全員が使えない状態だった。ベッドから転がり出て、VPNに接続し、幽霊を追いかけるように45分を費やした末に分かったのは、誰かがラップトップを誤ったスイッチポートに接続し、ネットワークセグメント全体を落としていたということだった。
原因はケーブルでもNICの不具合でもなかった。1つのトランクポートにVLAN設定が抜けていただけだ。その夜はSLAペナルティで4,000ドルの損失となり、VLANを最初から正しく設定することの大切さが骨身に染みた。
今まさに何かが壊れているのか、あるいは同じ状況を避けたいのか——このガイドはそんなあなたのために書いた。
ネットワークが「壊れる」とき、実際に何が起きているのか
「スイッチのせい」にされるネットワーク障害の多くは、実際にはVLANの設定ミスだ。コマンドに入る前に、フレームレベルでVLANが何をしているのかを理解する必要がある。問題の本質が分かれば、修正方法は自ずと見えてくる。
VLAN(仮想LAN)は、物理ネットワークを独立したブロードキャストドメインに分割する。VLAN 10のデバイスは、トラフィックがレイヤー3デバイスを経由しない限り、VLAN 20のデバイスと通信できない。これはバグではなく、セキュリティモデルだ。
スイッチポートは2つのモードのどちらかで動作する:
- アクセスポート — 1つのVLANにのみ属し、エンドデバイスに転送する前にVLANタグを取り除く。ワークステーション、プリンター、IoTデバイスはここに接続する。
- トランクポート — 802.1Qヘッダーでタグ付けされた複数のVLANを伝送する。スイッチ間リンクやスイッチ-ルーター間リンクで使用する。
先ほど説明した障害の話に戻ると、新しいVLANをスイッチに追加したものの、アクセス層とディストリビューション層の間のトランクポートで許可するのを忘れていたことが原因だった。新しいVLANからのトラフィックには行き場がなかった。
根本原因分析:本番環境でVLAN設定が失敗する理由
何年もオンコール対応を続ける中で、繰り返し見てきたVLAN障害を整理した:
- トランクポートでVLANが抜けている — 一方のスイッチにVLAN 30を追加したのに、アップリンクのトランクで許可するのを忘れた。トラフィックがブラックホールに落ちる。
- ネイティブVLANのミスマッチ — スイッチAのネイティブVLANが1、スイッチBが99の場合、タグなしトラフィックが誤って割り当てられる。追跡が非常に難しい断続的な接続問題が発生する。
- STPトポロジーの変更 — スパニングツリーの優先度を確認せずに新しいVLANを追加すると、予期しないルートブリッジ選出が発生する。
- VLAN間ルーティングが設定されていない — VLANは存在するが、VLAN間のレイヤー3パスがない。ユーザーは自分のVLAN内でpingできるが、他はどこにも到達できない。
- VLANデータベースにVLANが存在しない — ポートをVLAN 50に割り当てたのに、VLAN 50が作成されていない。ポートが非アクティブ状態になる。
ほぼすべてのVLAN障害は、この5つのどれかに当てはまる。全部経験してしまえば、もう勘で探ることはなく、チェックリストに直行できるようになる。
比較:Cisco IOS vs. Open vSwitch vs. Linux Bridge
コマンドはプラットフォームによって異なって見えるが、根本的なロジックは変わらない。よく使う3つの環境での違いを以下にまとめる。
選択肢1:Cisco IOS(Catalystスイッチ)
最も一般的なエンタープライズ環境だ。VLANを作成してポートに割り当てるのは簡単:
# VLANデータベースにVLANを作成する
switch# configure terminal
switch(config)# vlan 10
switch(config-vlan)# name OFFICE
switch(config-vlan)# vlan 20
switch(config-vlan)# name SERVERS
switch(config-vlan)# exit
# アクセスポートを設定する(例:ワークステーション用 Gi0/1)
switch(config)# interface GigabitEthernet0/1
switch(config-if)# switchport mode access
switch(config-if)# switchport access vlan 10
switch(config-if)# spanning-tree portfast
switch(config-if)# exit
# トランクポートを設定する(例:Gi0/24 アップリンク)
switch(config)# interface GigabitEthernet0/24
switch(config-if)# switchport mode trunk
switch(config-if)# switchport trunk encapsulation dot1q
switch(config-if)# switchport trunk allowed vlan 10,20
switch(config-if)# switchport trunk native vlan 999
switch(config-if)# exit
# 設定を保存する
switch# write memory
native vlan 999の設定は意図的なものだ。ネイティブVLANは常に未使用のVLANに設定している。VLAN 1のままにしておくのはよく知られたセキュリティリスクだ(VLANホッピング攻撃はネイティブVLAN 1を悪用する)。
選択肢2:Open vSwitch(仮想化/SDN環境)
KVM、OpenStack、またはSDNベースのインフラを使っているなら、Open vSwitchのVLAN処理は少し異なる:
# ブリッジを作成する
ovs-vsctl add-br br0
# 物理インターフェースをトランクとして追加する
ovs-vsctl add-port br0 eth0
# VMインターフェースをVLAN 10のアクセスポートとして追加する
ovs-vsctl add-port br0 vnet0 tag=10
# VLAN 10と20を許可するトランクポートを追加する
ovs-vsctl add-port br0 eth1 trunks=10,20
# 確認する
ovs-vsctl show
ovs-ofctl show br0
選択肢3:Linuxカーネルブリッジ(シンプルなサーバー/コンテナ)
フルSDNスタックなしでVLANに参加する必要があるLinuxサーバーの場合:
# まだロードされていない場合は8021qモジュールをロードする
modprobe 8021q
echo "8021q" >> /etc/modules
# eth0上にVLAN 10用のVLANインターフェースを作成する
ip link add link eth0 name eth0.10 type vlan id 10
ip link set eth0.10 up
ip addr add 192.168.10.100/24 dev eth0.10
# ブリッジを作成してVLANインターフェースをアタッチする
ip link add name br-vlan10 type bridge
ip link set eth0.10 master br-vlan10
ip link set br-vlan10 up
# /etc/network/interfacesに永続化する(Debian/Ubuntu)
cat >> /etc/network/interfaces << 'EOF'
auto eth0.10
iface eth0.10 inet manual
vlan-raw-device eth0
auto br-vlan10
iface br-vlan10 inet static
bridge_ports eth0.10
address 192.168.10.100
netmask 255.255.255.0
EOF
最善の方法:Router-on-a-StickによるVLAN間ルーティング
VLANはトラフィックを分離するが、ユーザーはセグメントをまたいで通信する必要がある。VLAN 10のワークステーションはVLAN 20のサーバーに接続しなければならない。レイヤー3スイッチがない場合、最もシンプルな解決策がRouter-on-a-Stickだ。スイッチとルーターの間に1本のトランクリンクを引き、各VLANをサブインターフェースで処理する。
この構成を、本番環境で15以上のVLANを持つ1本のアップリンクで運用してきた。高負荷のトラフィック下でも十分に機能し、設定の監査も容易なままだ。
# Ciscoルーター上 — VLAN間ルーティング用にサブインターフェースを設定する
router# configure terminal
# VLAN 10 サブインターフェース
router(config)# interface GigabitEthernet0/0.10
router(config-subif)# encapsulation dot1Q 10
router(config-subif)# ip address 192.168.10.1 255.255.255.0
router(config-subif)# exit
# VLAN 20 サブインターフェース
router(config)# interface GigabitEthernet0/0.20
router(config-subif)# encapsulation dot1Q 20
router(config-subif)# ip address 192.168.20.1 255.255.255.0
router(config-subif)# exit
# 物理インターフェースを有効化する
router(config)# interface GigabitEthernet0/0
router(config-if)# no shutdown
router(config-if)# exit
router# write memory
設定が完了したら、VLAN 10ホストのデフォルトゲートウェイを192.168.10.1に、VLAN 20ホストを192.168.20.1に設定する。VLAN間のトラフィックはルーターのサブインターフェースを経由してルーティングされるようになる。
覚えておくべき確認コマンド
深夜2時に何か壊れたとき、インターネットを検索する時間はない。私が順番に実行するコマンドを以下に挙げる:
# VLANデータベースを確認 — VLANが実際に作成されているか?
show vlan brief
# トランクの状態を確認 — VLANがトランクで許可されているか?
show interfaces trunk
# 特定のインターフェースを確認する
show interfaces GigabitEthernet0/24 trunk
show interfaces GigabitEthernet0/1 switchport
# 特定のVLANのMACアドレステーブルを確認する
show mac address-table vlan 10
# VLAN別のスパニングツリーを確認する
show spanning-tree vlan 10
# Linux用 — VLANインターフェースを確認する
ip link show type vlan
cat /proc/net/vlan/config
# Open vSwitch用 — ポートの設定を確認する
ovs-vsctl list port
ovs-vsctl get port vnet0 tag
5分でできる変更前チェックリスト
本番環境でVLAN設定を変更するたびに、作業前に必ずこのチェックリストを実行する:
- 現在の状態を記録する:
show running-config→ ファイルに保存 - ポートに割り当てる前に、VLANデータベースにVLANが存在することを確認する
- トランクポートを確認し、新しいVLANが許可されることを確かめる
- すべてのトランクの両端でネイティブVLANが一致していることを確認する
- 変更後:
show vlan briefとpingテストで確認する
実際のところ、このチェックリストで少なくとも十数件の問題を、深夜の緊急対応になる前に防いできた。深夜2時の45分間のデバッグより、5分の確認作業の方がはるかにいい——どうして知っているかって?身を持って経験したからだ。
クイックトラブルシューティングリファレンス
- ポートがinactive/notconnect状態 → VLANデータベースにVLANが存在しない。
show vlan briefを実行して作成する。 - VLAN内では通信できるがVLAN間では通信できない → VLAN間ルーティングが設定されていないか、サブインターフェースが不足している。
- スイッチ間の断続的な接続問題 → ネイティブVLANのミスマッチ。両方のスイッチで
show interfaces trunkを実行して比較する。 - 新しいVLANがアップストリームに到達できない → トランクでVLANが許可されていない。
switchport trunk allowed vlan add 30で追加する(switchport trunk allowed vlan 30ではない——これは許可リスト全体を置き換えてしまう)。 - デフォルトゲートウェイにpingできない → サブインターフェースがdownか、カプセル化が間違っている。
show interfaces GigabitEthernet0/0.10を確認する。
2つのことを身につければ、VLANは怖くなくなる。アクセスとトランクのモデル、そして5つの障害パターンだ。構文はベンダーやプラットフォームによって異なる。しかしロジックは変わらない——タグはトランクポートで付き、アクセスポートで外れ、トラフィックはレイヤー3でのみVLANの境界をまたぐ。
ネイティブVLANを未使用のものに設定し、変更のたびにトランクを確認し、チェックリストを手元に置いておく。将来の自分——深夜2時にアラートを受け取るあなた——がきっと感謝するだろう。

