
VLAN(Virtual LAN)とは、1台のスイッチや1本のケーブルを論理的に複数のネットワークに分割する技術で、IEEE 802.1Qで定めた4バイトのタグ(VLAN ID、1〜4094)をイーサネットフレームに付けて所属を識別します。自宅や小規模オフィスでは、IoT機器・ゲスト・サーバー・管理系をそれぞれ別のVLANとサブネットに置き、ルーターのファイアウォールで通信の向きを決めることで、テレビの脆弱性からNASを、来客のスマホから業務PCを切り離せます。
OPNsenseとUniFiを例に、5つのVLANの設計表を作り、ルーターのVLANインターフェース、スイッチのトランク/アクセスポート、SSIDの割り当て、ファイアウォールルール、mDNSの中継まで設定し、tcpdump と nc で確かめます。
この記事でわかること
- 802.1Qタグ、トランク/アクセスポート、PVID(ネイティブVLAN)の意味と、L3ルーティングとの関係
- サーバー・信頼端末・IoT・ゲスト・管理の5 VLANの設計表(ID・サブネット・DHCP範囲)
- OPNsense / UniFiでのVLAN作成、スイッチのポート設定、SSIDとVLANの対応
- ステートフルなファイアウォールルールの組み方(RFC1918エイリアス、先勝ち評価)
- ChromecastやプリンターがVLANをまたいで見えなくなる理由(mDNS)と、リピーターでの解決
VLANとは:タグVLAN・トランク・アクセスポート
スイッチはVLANごとに別のMACアドレステーブルとブロードキャストドメインを持ちます。VLAN 30のフレームはVLAN 30に属するポートにしか流れず、ルーターを介さなければ他のVLANとは一切通信できません。この「通信できない」が出発点で、必要な通信だけをルーターのファイアウォールで開けていくのがセグメンテーションの実体です。
| 用語 | 意味 | 設定画面での表記 |
|---|---|---|
| 802.1Qタグ | フレームに挿入される4バイト。12ビットのVLAN IDを含む | Tagged / VLAN tagging |
| アクセスポート | 1つのVLANに属し、タグなしで送受信する。PC・テレビ・NAS用 | Untagged / Access / PVID |
| トランクポート | 複数のVLANをタグ付きで運ぶ。スイッチ間、AP、ルーター、Proxmox用 | Tagged VLANs / Trunk / Allowed VLANs |
| PVID(ネイティブVLAN) | タグなしで届いたフレームをどのVLANに入れるか | PVID / Native VLAN / Untagged VLAN |
| L3ルーティング | VLAN間の通信はルーター(またはL3スイッチ)を必ず通る | VLANインターフェース / Virtual Network |
なぜ分離するのか:IoT・ゲスト・サーバー・管理
脅威の中心はIoT機器です。テレビ、ロボット掃除機、スマートプラグ、ネットワークカメラは更新が数年で止まり、発売時のファームウェアのまま家庭内LANに居座ります。同じサブネットにいれば、乗っ取られた1台からNASのSMBやProxmoxの8006番へ直接手が届きます。ゲストの端末は状態が分からず、会社支給のテレワークPCは会社の規程で家庭内機器から隔離することを求められる場合があります。スイッチ・AP・ルーターの管理画面は、家族のスマホから見える必要がありません。
VLANは5つで足ります。機器ごとにVLANを切る設計はルールの数が爆発し、mDNSの中継設定も増えて、結局「全部許可」に逆戻りします。増やしてよいのは、テレワークPC用と、カメラのように帯域を食う機器を隔離したいときくらいです。
設計例:VLAN IDとサブネットの割り当て表
| VLAN ID | 名前 | サブネット | ゲートウェイ | DHCP範囲 | 所属 |
|---|---|---|---|---|---|
| 10 | SERVER | 192.168.10.0/24 | 192.168.10.1 | .100〜.199 | Proxmox、NAS、k3s、Home Assistant(固定IPは.2〜.99) |
| 20 | TRUST | 192.168.20.0/24 | 192.168.20.1 | .100〜.250 | 家族のPC・スマホ、有線PC |
| 30 | IOT | 192.168.30.0/24 | 192.168.30.1 | .100〜.250 | テレビ、家電、Chromecast、プリンター |
| 40 | GUEST | 192.168.40.0/24 | 192.168.40.1 | .100〜.250 | 来客、テレワークPC |
| 99 | MGMT | 192.168.99.0/24 | 192.168.99.1 | なし(固定) | ルーター、スイッチ、APの管理IP |
VLAN 1(既定VLAN)は使いません。多くのスイッチで全ポートの初期PVIDが1になっており、設定漏れのポートが自動的に「どこか」につながる事故を避けるためです。サブネットの第3オクテットをVLAN IDに合わせておくと、IPを見ただけで所属が分かり、ファイアウォールのログを読む速度が上がります。
必要な機器と選び方
| 役割 | 例 | 選ぶ基準 |
|---|---|---|
| ルーター/ファイアウォール | OPNsense・pfSense(2ポート以上のミニPC)、UniFi Gateway、MikroTik、ヤマハRTX | VLANインターフェースを作れて、インターフェースごとにルールを書けること。家庭用ルーターの多くは802.1Qタグに非対応 |
| L2スイッチ | UniFi、TP-Link Omada、NETGEAR等の「スマート」「マネージド」型 | ポートごとのPVIDとタグ付きVLANの設定、できればAP給電用のPoE |
| Wi-Fi AP | UniFi、Omada、Aruba Instant On | SSIDごとに異なるVLANタグを付けられること、ゲスト用のクライアント分離 |
ファイアウォールを深く学びたいならミニPCにOPNsense、機器を1つの管理画面で済ませたいならUniFiで揃える、が分かれ道です。OPNsenseはルールの評価順やNATの動きがすべて見えるぶん設定量が多く、UniFiは楽なぶん細かい挙動がアプリの版に左右されます。ルーターだけOPNsense、スイッチとAPはUniFi、という混成でも問題なく動きます。
設定手順:ルーターでVLANを作る
OPNsenseでは Interfaces → Other Types → VLAN → Add で Parent(LAN側の物理NIC、例: igc1)、VLAN tag 30、Description IOT を作り、Interfaces → Assignments でそのVLANデバイスを新しいインターフェースとして追加します。追加したインターフェースを開いて Enable にチェック、IPv4 Configuration Type を Static、アドレスを 192.168.30.1/24 にして保存・適用し、Services → DHCPv4(版によってはKea DHCP)→ IOT で範囲 .100〜.250 を有効にします。これをVLAN 10・20・40・99について繰り返します。
UniFiでは Settings → Networks → New Virtual Network で名前、VLAN ID、Gateway IP/Subnet 192.168.30.1/24、DHCPの範囲を入れるだけです。GUESTには「Isolate Network」(同一ネットワーク内の端末同士も遮断)を有効にします。どちらの場合も、ルーターとスイッチをつなぐポートはすべてのVLANをタグ付きで通すトランクになります。
設定手順:スイッチのポートとWi-FiのSSID
| ポート | 接続先 | モード | PVID(Untagged) | Tagged |
|---|---|---|---|---|
| 1 | ルーター | トランク | 99 | 10, 20, 30, 40 |
| 2 | Wi-Fi AP | トランク | 99(APの管理IP) | 20, 30, 40 |
| 3 | Proxmoxホスト | トランク | 10 | 20, 30 |
| 4 | NAS | アクセス | 10 | なし |
| 5〜6 | 有線PC | アクセス | 20 | なし |
| 7〜8 | テレビ、プリンター | アクセス | 30 | なし |
UniFiのスイッチは Port Manager でポートごとに Native VLAN と Tagged VLAN Management を選びます。汎用のスマートスイッチは「802.1Q VLAN」の画面でVLANごとにポートの Tagged / Untagged / 除外を表にして設定し、別画面でPVIDを合わせます。PVIDとUntaggedの設定が食い違うと、送信はできるのに受信できない片方向の故障になるので、両方を同じ値にします。
SSIDは Home をVLAN 20、Home-IoT をVLAN 30、Home-Guest をVLAN 40に割り当てます。UniFiは Settings → WiFi でSSIDごとに Network を選び、他社APは「VLAN tagging」や「VLAN ID」の欄にIDを入れます。IoT用SSIDは2.4GHzのみにすると、5GHz非対応の家電がつまずきません。ゲストSSIDにはクライアント分離を有効にします。
管理VLAN(99)への移行は最後に行い、作業中は現在つながっているポートのVLANを変えないでください。スイッチの管理IPを先にVLAN 99へ移してからトランクの設定を忘れると、自分自身を締め出してリセットボタン以外に戻す手段がなくなります。コンソールポートかリセット手順を確認してから着手します。
ファイアウォールルールでVLAN間通信を制御する
OPNsenseのルールはパケットが入ってくるインターフェースで評価され、上から先に一致したものが適用され、どれにも一致しなければ暗黙で拒否されます。ステートフルなので、TRUSTからIoTへ許可した接続の戻りパケットはIoT側のルールに関係なく通ります。したがって「誰が接続を始めてよいか」だけを書けば済みます。先に Firewall → Aliases で RFC1918(10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)を作っておきます。
| インターフェース | 順 | 送信元 → 宛先 | ポート | 動作 | 目的 |
|---|---|---|---|---|---|
| TRUST | 1 | TRUST net → any | any | 許可 | 家族の端末は全部に届く |
| IOT | 1 | IOT net → 192.168.10.40 | TCP 1883, 8123 | 許可 | 家電からHome Assistant(MQTT・Web)へ |
| IOT | 2 | IOT net → RFC1918 | any | 拒否 | 家庭内の他VLANへ出さない |
| IOT | 3 | IOT net → any | any | 許可 | インターネットのみ |
| GUEST | 1 | GUEST net → RFC1918 | any | 拒否 | 家庭内に一切入れない |
| GUEST | 2 | GUEST net → any | any | 許可 | インターネットのみ |
| SERVER | 1 | SERVER net → RFC1918 | any | 拒否 | サーバーから端末側へ接続を始めさせない |
| SERVER | 2 | SERVER net → any | any | 許可 | 更新やバックアップの外向き通信 |
拒否ルールを許可ルールより上に置くのが要で、順を入れ替えると「any → any 許可」に全部飲まれます。DNSとNTPは各VLANのゲートウェイ(ルーター自身)宛てを別途許可しておかないと、RFC1918拒否に引っかかって名前解決が止まります。UniFiでは Settings → Firewall & Security で同等のルールを書きますが、執筆時点ではゾーンベースのファイアウォールに切り替わっており、ネットワークをゾーンに割り当ててゾーン間の許可・拒否をマトリクスで決める形になっています。
IPv6を使っている場合、IPv4のRFC1918エイリアスは効きません。各VLANのIPv6プレフィックスとULA(fc00::/7)に対する同じ向きの拒否ルールを別途書くか、IoTとGuestのVLANではIPv6を配らない設定にしてください。
mDNS・Chromecastなど分離時の課題と解決
ChromecastやAirPlay、プリンター(Bonjour/IPP)の発見はmDNSで行われ、マルチキャストアドレス 224.0.0.251 のUDP 5353にTTL 1で送られます。リンクローカルなのでルーターを越えず、TRUSTのスマホからIOTのChromecastが「見つからない」状態になります。解決はルーターでmDNSを中継することです。OPNsenseは System → Firmware → Plugins で os-mdns-repeater を入れ、Services → mDNS Repeater で TRUST と IOT を選びます。UniFiは Settings → Networks の Global Network Settings にある Multicast DNS を有効にし、対象ネットワークを選びます。
発見の後の実通信(Chromecastの TCP 8008/8009、AirPlayのTCP 7000番台など)はTRUST側から始まるユニキャストなので、「TRUST → any 許可」のルールで通り、戻りはステートで通ります。例外はSonosのように機器側から端末へ接続を始める製品で、その場合だけIOT → TRUSTに必要なポートを個別に開けます。Linux機で中継する場合はAvahiのリフレクターが同じ役割です。
[server]
allow-interfaces=eno1.20,eno1.30
[reflector]
enable-reflector=yesGUESTはmDNS中継の対象にしません。来客のスマホから家のテレビが見えるのは便利ですが、隔離した意味がなくなります。
サーバー側の設定:ProxmoxとLinuxでVLANを扱う
Proxmoxホストはトランクポートにつなぎ、ブリッジをVLAN awareにします。VMごとにNICの「VLAN Tag」を指定するだけで、IoT向けのHome Assistant VMはVLAN 30、通常のVMはVLAN 10、と1台のホストから複数のVLANに足を出せます。
auto vmbr0
iface vmbr0 inet static
address 192.168.10.5/24
gateway 192.168.10.1
bridge-ports eno1
bridge-stp off
bridge-fd 0
bridge-vlan-aware yes
bridge-vids 2-4094sudo ip link add link eno1 name eno1.30 type vlan id 30
sudo ip addr add 192.168.30.50/24 dev eno1.30
sudo ip link set eno1.30 up
ip -d link show eno1.30 | grep vlan # vlan protocol 802.1Q id 30 と出るホストのアドレスはPVID(10)のタグなし側に付き、VLAN 30の足はタグ付きで同じケーブルを流れます。Proxmox VEの構築ガイドで作った vmbr0 に bridge-vlan-aware yes と bridge-vids の2行を足すだけで、既存のVMには影響しません。
動作確認
# トランクにタグ付きフレームが流れているか(Proxmoxホストなどトランク接続の機器で)
sudo tcpdump -i eno1 -nn -e vlan -c 5
# 12:00:01.000 aa:bb:.. > ff:ff:.., ethertype 802.1Q, vlan 30, p 0, ethertype ARP ...
# IoT側の端末(VLAN 30)から
ping -c 2 192.168.30.1 # ゲートウェイには届く
nc -zv -w 3 192.168.10.30 445 # NASのSMB: Connection timed out(拒否が効いている)
nc -zv -w 3 192.168.10.40 8123 # Home Assistant: succeeded(個別許可)
# TRUST側(VLAN 20)から
nc -zv -w 3 192.168.30.60 8009 # Chromecast: succeeded
avahi-browse -art | grep -i chromecast # mDNS中継が効いていれば名前が出るWindowsのGUEST端末からは Test-NetConnection 192.168.10.30 -Port 445 で TcpTestSucceeded : False になれば隔離が効いています。ルーターのライブログで拒否ルールのヒットが見えるかも合わせて確認します。
つまずきポイント
- IoT用SSIDにつないだ端末のIPが
169.254.x.xになる: DHCP要求がルーターに届いていません。APをつないだスイッチポートでVLAN 30がTagged になっていないか、ルーター側でそのVLANのDHCPが無効です。 - ゲートウェイにpingは通るのにインターネットに出られない: 新しいインターフェースに許可ルールがなく暗黙拒否に当たっています。OPNsenseはインターフェースを作っただけではルールが空です。
- Chromecast・プリンターが一覧に出ない: mDNS中継が未設定か、SSIDのクライアント分離がIoT側で有効になっています。IoT SSIDの分離は切り、GUESTだけ残します。
- スイッチの管理画面に入れなくなった: 管理VLANの変更をトランク設定の前に行ったか、PVIDとUntaggedが食い違っています。コンソールポートがなければ工場出荷リセットからやり直し、管理VLANの移行を最後にします。
よくある質問
VLANとサブネットの違いは?
VLANはレイヤー2(イーサネット)の分離で、ブロードキャストが届く範囲をスイッチ上で区切ります。サブネットはレイヤー3(IP)の区切りです。通常はVLAN 1つにサブネット1つを対応させ、VLAN間の通信をルーターに通すことでファイアウォールを効かせます。サブネットだけ分けてVLANを分けないと、同じL2上にいる端末はARPで直接届いてしまい、隔離になりません。
家庭用ルーターでもVLANは使えますか?
多くの家庭用ルーターは802.1Qタグに対応せず、代わりに「ゲストネットワーク」機能でSSID1つ分の隔離だけができます。IoTとゲストの2系統で足りるならそれで十分です。サーバー用や管理用まで分けるには、VLAN対応のルーター(OPNsense、UniFi、ヤマハRTXなど)とマネージドスイッチが必要です。
IoT機器を分離する理由は?
更新されないファームウェアの脆弱性を突かれた機器が、同じLANのNASやPCへの踏み台になるのを防ぐためです。IoT VLANからはインターネットとHome Assistantのような特定の宛先だけを許可し、家庭内の他のサブネットへの新規接続を拒否しておけば、1台が乗っ取られても被害はそのVLANの中に留まります。
まとめ
SERVER・TRUST・IOT・GUEST・MGMTの5 VLANを第3オクテットと同じIDで切り、ルーターとAPとProxmoxはトランク、その他はアクセスポートでPVIDを合わせ、ファイアウォールは「拒否を上、許可を下」の順で書く。mDNSはTRUSTとIOTの間だけ中継し、管理VLANの移行は最後にやる。この順番を守れば、締め出しも「Chromecastが消えた」もなく1日で終わります。外出先からの入口はTailscaleのSubnet RouterをSERVER VLANに置き、NASはTrueNASの共有をSERVER側で公開する形が、この設計の続きになります。