VLANという名の「論理的な壁」:物理の制約を払い除け、ネットワークを自在に操る設計術
ネットワークエンジニアの端くれとして現場に立っていると、「物理的なケーブルの引き直し」という言葉ほど心躍らない響きはありません。スイッチのポートが足りない、あるいは特定の部署間での通信を物理的に遮断したい……そんなとき、我々が取り出す魔法の杖が VLAN(Virtual LAN) です。
今日は、教科書的な定義をなぞるだけでは終わらない、実務に即したVLANの設計概念と、802.1Qがパケットに何を刻み込んでいるのかという「現場の解像度」について話をしましょう。
—
1. なぜ「物理」から「論理」へ移行する必要があるのか?
かつて、ネットワークの分割は物理的なハブやスイッチを分けることでしか実現できませんでした。しかし、これではオフィスのレイアウト変更や組織変更のたびに、データセンターのラッキングやケーブル配線のやり直しが発生します。
VLANの真髄は、「物理的なトポロジーに縛られず、データリンク層(L2)でブロードキャストドメインを切り分ける」ことにあります。
- セキュリティの担保: 経理部とゲストWi-Fiが同じブロードキャストドメインにいるのは、セキュリティ的に論外です。VLANで分けることで、L3デバイス(ルーターやL3スイッチ)を通さない限り、通信は物理的に遮断されます。
- ブロードキャストの抑制: 不必要なARPリクエストが全ノードに届くのを防ぎ、スイッチのCPU負荷と帯域を保護します。
—
2. 802.1Q:パケットに刻まれる「タグ」の正体
VLAN IDを異なるスイッチ間で運ぶための共通言語が、IEEE 802.1Q規格です。ここで重要なのは、イーサネットフレームの「ソースMACアドレス」と「タイプ(EtherType)」の間に、4バイトのタグ(Tag Header)が挿入されるという点です。
このタグの中には、VLAN ID (VID) という12ビットの識別子が含まれています。0から4095までの値をとりますが、実務で使えるのは1〜4094まで。このタグを解釈できるか否かが、ポート設定のすべてを決める鍵となります。
実務におけるポート設定の基本概念
- Access Port(アクセスポート): 端末を繋ぐポート。タグを剥がして通信させる。
- Trunk Port(トランクポート): スイッチ間を繋ぐポート。複数のVLANタグを付けたまま通信させる。
—
3. 設定ファイルから読み解く現場の知見
Cisco Catalystシリーズを例に、具体的な設定を見てみましょう。特に、トランクポートで「ネイティブVLAN(タグを付けずに送るVLAN)」をあえて指定する設計は、トラブルシューティングで必ずと言っていいほどハマるポイントです。
! VLAN 10(開発環境)と 20(運用環境)を作成
vlan 10
name Dev_Network
vlan 20
name Ops_Network
! アクセスポートの設定
interface GigabitEthernet0/1
switchport mode access
switchport access vlan 10
description 開発用サーバー接続ポート
! トランクポートの設定
interface GigabitEthernet0/24
switchport trunk encapsulation dot1q
switchport mode trunk
! ネイティブVLANを意図的に設定(セキュリティ上の推奨)
switchport trunk native vlan 999
description スイッチ間接続用トランク
シニアからのTips: native vlan はデフォルトで VLAN 1 に設定されていますが、攻撃対象になりやすいため、必ず未使用のVLANに変更し、switchport trunk allowed vlan で必要なVLANのみを通す「ホワイトリスト方式」を徹底してください。
—
4. Web APIエンジニアへ:インフラ越しに何が見えているか?
API開発者が curl や Python でサービスを叩くとき、その通信はVLANを跨いでいるかもしれません。例えば、10.0.10.x のAPIサーバーから 10.0.20.x のDBへアクセスする場合、そこには必ずL3デバイス(ゲートウェイ)が存在します。
もし疎通が取れない場合、単なるコードのバグではなく、ネットワーク側で「トランクポートの許可VLAN(Allowed VLAN)から外れている」という事態が往々にしてあります。
import requests
# APIの疎通確認スクリプト(現場のトラブルシューティング用)
def check_api_reachability(url):
try:
# VLAN越えのルーティングが正常か、タイムアウトで判断
response = requests.get(url, timeout=3)
print(f"Status Code: {response.status_code}")
except requests.exceptions.Timeout:
print("Error: タイムアウト発生。VLAN間のルーティング、またはFWの制御を確認せよ")
except Exception as e:
print(f"Error: {e}")
check_api_reachability("http://10.0.20.5/api/v1/health")
—
まとめ:ネットワークは「論理」で制御する
VLANを使いこなすということは、「パケットの通り道を、自分の脳内で論理的に描けるようになること」です。
1. タグの付け外しを意識せよ: パケットがどのポートに入り、どのタグが付与され、どこで剥がされるのか。これをシーケンスとしてイメージできれば、トラブルの5割は解決します。
2. 設定は最小限の権限で: トランクポートには必要なVLANだけを通す。無駄なブロードキャストを流さないのが、美しいネットワーク設計の基本です。
3. 現場の泥臭い事実: どんなに綺麗な設計図も、現場の show interface trunk コマンドの結果には勝てません。CLIを信じ、パケットの動きを追い続けてください。
ネットワークは生き物です。論理的な壁(VLAN)を正しく配置し、効率的でセキュアなインフラを構築していきましょう。次は、VLAN間のルーティングを制御する「SVIとRouter-on-a-Stick」の深淵についてお話しできればと思います。
コメント