
家里设备一多网络迟早会乱成一锅粥。我目前这台RouterOS上同时跑着访客WiFi、办公终端和智能家居三套网络它们在同一台设备上互不干扰、二层完全隔离靠的就是网桥VLAN这个组合。说白了就是用网桥把多个物理口拼成一个逻辑二层设备再在这个网桥上用VLAN切出若干个互相隔离的二层虚拟网络——这就是非常典型的“安全隔离二层虚拟网络”实践。这篇文章按我自己的调试顺序来写既讲配置命令也讲每条命令背后的原因适合看过一点RouterOS但没真正玩过VLAN的人跟着敲一遍基本就能上手。1. 先把“网桥VLAN”这套组合拳拆开看很多人一上来就找命令抄结果配完发现整个网络全断了管理口也进不去。所以动手之前我建议先把网桥和VLAN这两个基础概念捋清楚弄明白它们在RouterOS里到底是怎么工作的后面踩坑的概率会小很多。1.1 网桥把多个物理口拼成一块“逻辑背板”RouterOS里的网桥Bridge在逻辑上等价于一台二层交换机。它做的事情很简单把多个物理接口比如ether2、ether3、ether4、ether5放进同一个转发域让这些口之间可以直接转发以太网帧也就是二层互通。打个比方网桥就像一块交换机背板物理口就是背板上的插槽。网桥本身不关心IP地址也不做路由它只负责根据MAC地址表把帧从一个口送到另一个口。这点和普通家用交换机完全一样。在RouterOS上命令非常直观/interface bridge add namebridge1 /interface bridge port add bridgebridge1 interfaceether2 /interface bridge port add bridgebridge1 interfaceether3执行完之后ether2和ether3就等于被“焊”在同一个广播域里了。从它们上面接的设备来看这就是一台两口的傻瓜交换机两个口之间的ARP广播、DHCP广播都能互相到达。这里有一个新手容易忽视的点物理口一旦加入网桥它就不再是一个独立的、可以配IP的路由口了。如果你之前在ether2上配置过IP加入网桥后那个IP会从接口上消失RouterOS会把配置状态标成invalid。所以加入网桥前先想好管理方式否则容易把自己锁在门外。1.2 VLAN在同一块背板上划分“虚拟隔间”网桥把多个口拼成一块背板之后如果所有设备都在同一个二层域里广播会互相影响安全边界也很模糊。访客设备拿着手机连上来理论上可以ARP扫描到你的NAS、打印机、摄像头这显然不合适。VLAN解决的就是这个问题。它通过给以太网帧打上一个802.1Q标签把同一个网桥从逻辑上切成多个互相隔离的“虚拟局域网”。每个VLAN都是一个独立的广播域默认情况下VLAN 10里的广播帧不会跑到VLAN 20里。你可以把VLAN想象成同一栋办公楼里的不同公司。大家共享大堂物理网线但进了门禁之后各走各的楼层互相看不见。门禁卡就是VLAN标签保安就是下面要讲的网桥VLAN过滤。802.1Q标签只有4个字节里面真正核心的是12位的VLAN ID取值范围是1到4094。VLAN 1比较特殊大多数交换机默认把不带标签的帧归到VLAN 1所以它经常被叫做“本征VLAN”Native VLAN或“默认VLAN”。1.3 为什么我推荐用网桥VLAN而不是交换芯片的switch配置用过RouterOS的朋友应该知道很多带交换芯片的设备比如RB750Gr3、CRS3xx系列还有一套/interface ethernet switch配置也可以做VLAN划分而且走硬件转发性能更高。那为什么我还推荐先用网桥VLAN原因很简单通用性。交换芯片的VLAN功能在不同型号上的配置命令差异很大有的支持vlan-filtering到硬件卸载有的只支持部分模式排查起来相当痛苦。而网桥VLAN是纯软件逻辑某些型号也能硬件卸载几乎在所有RouterOS设备上都是一套命令配置逻辑也和标准802.1Q一致。对于绝大多数家用和小型办公场景网络流量根本到不了软件转发的瓶颈。与其在交换芯片的私有配置里折腾半天不如老老实实用网桥VLAN结构清晰、好维护出了问题也好排查。注意如果你用的是CRS3xx这类带高性能交换芯片的设备追求极限线速转发时才需要考虑硬件switch配置。普通RB系列和x86软路由网桥VLAN已经够用。2. 动手指前先把VLAN规划和端口角色定清楚熟悉我调试习惯的朋友知道我每次改网络拓扑之前一定会先画图、先列表。网络配置最忌讳“边想边配”尤其是VLAN这种牵一发动全身的东西。提前把VLAN编号、网段、端口角色定清楚后面就是机械式填命令。2.1 一个典型的“三区隔离”拓扑我以一个小型办公/家用混合场景为例一台RouterOS设备一个千兆WAN口ether1接上级光猫/主路由其余四个LAN口ether2~ether5需要承载三类设备办公网电脑、NAS、打印机属于可信内部网络需要互相访问。访客网客人手机、临时设备只能上外网绝对不能碰内部设备。IoT/监控网智能家居、摄像头设备本身可以互相通信但禁止主动访问办公网。需求很明确二层广播域互相隔离三层访问按需控制。这就是题目里说的“安全隔离的二层虚拟网络”。2.2 VLAN编号与网段规划表规划这件事强烈建议一次性想清楚不然后面加VLAN、改网段会非常痛苦。我这次直接给出一个可以直接抄的规划VLAN ID名称用途网段网关DHCP范围10office办公设备、NAS192.168.10.0/24192.168.10.1192.168.10.100-20020guest访客设备192.168.20.0/24192.168.20.1192.168.20.100-20030iot智能家居、摄像头192.168.30.0/24192.168.30.1192.168.30.100-200VLAN ID我故意没有用1因为VLAN 1是默认的Native VLAN容易出现各种兜底流量单独拿来当业务VLAN容易埋坑。用10、20、30这种规律编号后面写防火墙规则时也容易记忆。2.3 Access口和Trunk口怎么对应到RouterOS的tagged/untagged做交换机配置出身的朋友应该很熟悉两个词Access口和Trunk口。Access口只属于某一个VLAN端口发出去的帧不带标签Trunk口同时承载多个VLAN端口发出去的帧带802.1Q标签。RouterOS的网桥VLAN里没有直接叫Access/Trunk的命令它用的是两个概念untagged和tagged。理解起来也简单untagged从这个口出去的帧剥掉VLAN标签相当于Access口。tagged从这个口出去的帧保留VLAN标签相当于Trunk口。再配合一个PVIDPort VLAN ID的概念PVID表示“当这个口收到一个不带标签的帧时默认把它归到哪个VLAN”。这正好对应华为交换机里的port trunk pvid vlan和port default vlan。如果你是华为交换机用户可以做这样一个对应记忆华为交换机概念RouterOS对应概念port link-type accessbridge port 设 pvid untaggedport default vlan 10bridge port 的 pvid10port link-type trunkbridge port 设为 taggedport trunk allow-pass vlan 10 20bridge vlan 表里该端口加入tagged列表port trunk pvid vlan 1bridge port 的 pvid默认1我这次规划的端口角色如下端口角色说明ether2Trunk口接楼下交换机承载VLAN 10/20/30ether3Access口接办公网设备属于VLAN 10ether4Access口接访客AP/设备属于VLAN 20ether5Access口接摄像头、智能家居属于VLAN 303. RouterOS网桥VLAN实操命令一步一步敲规划做完了现在进入实操环节。我会按我自己配置的顺序来先建网桥再配VLAN表最后开VLAN过滤。每一步都会说明为什么这么做。3.1 第一步建网桥、绑端口先让所有物理口跑通先建一个网桥把四个LAN口全部加进去但此时不要开vlan-filtering。这样做的目的是先把物理层跑通确认所有口都正常工作避免一上来就开VLAN过滤导致问题叠加。/interface bridge add namebridge1 /interface bridge port add bridgebridge1 interfaceether2 /interface bridge port add bridgebridge1 interfaceether3 /interface bridge port add bridgebridge1 interfaceether4 /interface bridge port add bridgebridge1 interfaceether5此时这台RouterOS的四个LAN口已经变成一台不划分VLAN的傻瓜交换机。如果手边有设备可以先插到任意LAN口确认能互相通、能拿IP再继续往下走。提示如果你打算把RouterOS本身也作为网关和DHCP服务器建议先给bridge1配一个临时管理IP比如192.168.1.1/24并开启DHCP。这样后面开VLAN过滤时即使出问题至少还有一条相对清晰的恢复路径。3.2 第二步先把bridge vlan表写对再开vlan-filtering这里是我最想强调的一点RouterOS的vlan-filtering开关和bridge vlan表是两个东西一定要先配置表再开开关。否则一开vlan-filtering所有不在表里的VLAN流量会被全部丢弃你的管理会话可能瞬间断掉。按照前面的端口规划配置如下/interface bridge port add bridgebridge1 interfaceether2 frame-typesadmit-only-vlan-tagged add bridgebridge1 interfaceether3 pvid10 frame-typesadmit-only-untagged-and-priority-tagged add bridgebridge1 interfaceether4 pvid20 frame-typesadmit-only-untagged-and-priority-tagged add bridgebridge1 interfaceether5 pvid30 frame-typesadmit-only-untagged-and-priority-tagged简单解释一下这里的frame-typesTrunk口ether2设置成admit-only-vlan-tagged表示只接受带VLAN标签的帧。这样不带标签的普通PC网线插上去直接被拒绝相当安全。Access口ether3/4/5设置成admit-only-untagged-and-priority-tagged表示只接受无标签帧或优先级标签帧。这些口收到的帧会被打上PVID指定的VLAN标签然后进入对应的VLAN转发域。接下来在bridge vlan表里声明VLAN成员关系/interface bridge vlan add bridgebridge1 vlan-ids10 taggedether2,bridge1 untaggedether3 add bridgebridge1 vlan-ids20 taggedether2,bridge1 untaggedether4 add bridgebridge1 vlan-ids30 taggedether2,bridge1 untaggedether5这里有个非常关键的小细节我在tagged列表里加了bridge1。这意味着RouterOS的CPU也作为该VLAN的成员可以收发带标签的帧。这么做是为了下一步能给VLAN接口配IP、做DHCP和路由。如果只是单纯把RouterOS当二层交换机用可以把bridge1去掉但那样RouterOS自己就无法终结这些VLAN了。3.3 第三步打开vlan-filtering体验“一开就断”的经典现场配置表之后可以打开VLAN过滤开关了/interface bridge set bridge1 vlan-filteringyes这个开关一打开网桥就从“无脑转发”变成“按规则转发”。所有没有在bridge vlan表里显式声明的VLAN流量一律丢弃。这也是为什么前面强调必须先配置表再开开关。很多人第一次操作时开完vlan-filtering发现Winbox直接断连管理口进不去了原因就在这管理口要么不在VLAN表成员里要么管理IP所在的VLAN没有把对应端口加入tagged/untagged列表。我的习惯是在Winbox里先点击右上角的Safe Mode按钮或者SSH终端里按CtrlX开启Safe Mode。这个模式下如果连接意外断开RouterOS会自动回滚到之前保存的配置避免把自己锁在门外。如果已经断连了可以试试用MAC地址方式访问RouterOSWinbox里输入路由器的MAC地址或者直接物理断电重启然后重新检查bridge vlan配置。3.4 第四步创建VLAN接口做三层网关让VLAN间按需通信网桥VLAN只解决二层隔离问题。如果不同VLAN之间想通信比如办公网要访问打印机、访客网要上外网还需要在RouterOS上创建VLAN接口并给这些接口配置IP地址让RouterOS充当三层网关。命令如下/interface vlan add interfacebridge1 namevlan10 vlan-id10 add interfacebridge1 namevlan20 vlan-id20 add interfacebridge1 namevlan30 vlan-id30 /ip address add address192.168.10.1/24 interfacevlan10 add address192.168.20.1/24 interfacevlan20 add address192.168.30.1/24 interfacevlan30请注意VLAN接口的父接口是bridge1而不是某个物理口。RouterOS会把发往192.168.10.0/24的流量交给vlan10接口然后封装成带VLAN 10标签的帧通过bridge1寻找tagged成员转发出去。配置完之后可以顺手把DHCP服务器也配了/ip pool add namedhcp_pool10 ranges192.168.10.100-192.168.10.200 add namedhcp_pool20 ranges192.168.20.100-192.168.20.200 add namedhcp_pool30 ranges192.168.30.100-192.168.30.200 /ip dhcp-server add address-pooldhcp_pool10 disabledno interfacevlan10 namedhcp10 add address-pooldhcp_pool20 disabledno interfacevlan20 namedhcp20 add address-pooldhcp_pool30 disabledno interfacevlan30 namedhcp30 /ip dhcp-server network add address192.168.10.0/24 dns-server192.168.10.1 gateway192.168.10.1 add address192.168.20.0/24 dns-server192.168.20.1 gateway192.168.20.1 add address192.168.30.0/24 dns-server192.168.30.1 gateway192.168.30.1如果发现VLAN接口能配IP但ping不通网关或者DHCP请求收不到优先检查上一步bridge vlan表里有没有把bridge1加进对应VLAN的tagged列表。这是网桥VLAN场景下最常见的问题来源。3.5 第五步防火墙规则把“隔离”落实到位二层和三层已经打通了但“安全隔离”还差最后一步控制VLAN间的路由访问。RouterOS默认没有防火墙规则时三层转发默认是放行的。也就是说任何VLAN都可以ping通其他VLAN这显然不符合访客隔离的需求。最简单的做法是先加两条Drop规则把不该通的流量挡掉。比如访客网VLAN 20不能访问办公网VLAN 10和IoT网VLAN 30/ip firewall filter add actiondrop chainforward src-address192.168.20.0/24 dst-address192.168.10.0/24 add actiondrop chainforward src-address192.168.20.0/24 dst-address192.168.30.0/24如果还想更严格一点可以让IoT网不能主动访问办公网但办公网可以访问IoT网比如用手机App远程查看摄像头/ip firewall filter add actiondrop chainforward src-address192.168.30.0/24 dst-address192.168.10.0/24 add actionaccept chainforward src-address192.168.10.0/24 dst-address192.168.30.0/24这里要注意防火墙规则是有顺序的从上往下匹配匹配到就停止。所以建议把允许的规则放在Drop规则前面或者干脆用address-list分组管理避免规则越加越乱。如果希望所有VLAN都能上网还需要在NAT里做源地址转换/ip firewall nat add actionmasquerade chainsrcnat src-address192.168.10.0/24 out-interfaceether1 add actionmasquerade chainsrcnat src-address192.168.20.0/24 out-interfaceether1 add actionmasquerade chainsrcnat src-address192.168.30.0/24 out-interfaceether1这样VLAN 10/20/30的设备访问外网时源IP会被替换成WAN口IP回程流量也能正常回来。4. 验证与排错怎么确定VLAN真的生效了配置做完了别急着收工。VLAN这种二层隔离的东西表面上看“能上网”不代表隔离生效。我自己调试时有一整套验证流程从最简单的连通性测试到抓包看标签一步步确认。4.1 基础验证DHCP、ping、广播隔离最低成本的验证方式就是插设备试。拿一台电脑插到ether3VLAN 10的Access口应该能正常获取192.168.10段的IP插到ether4VLAN 20的Access口应该能获取192.168.20段的IP。然后交叉ping测试VLAN 10的设备ping VLAN 10的网关192.168.10.1必须通。VLAN 10的设备ping VLAN 20的设备如果防火墙已经drop了必须不通。VLAN 20的设备ping外网比如ping 223.5.5.5如果能通说明访客上网功能正常。还有广播隔离验证在VLAN 10的电脑上ping某个不存在的IP比如192.168.10.254会发出ARP广播。这时在VLAN 20的电脑上用Wireshark抓包应该看不到任何来自VLAN 10的ARP广播。如果看到了说明VLAN没有真正隔离开。4.2 进阶验证抓包看802.1Q标签有时候需要确认Trunk口上的VLAN标签到底打没打对最直接的办法是抓包。把一台Linux笔记本接到ether2Trunk口创建一个VLAN子接口然后抓包sudo ip link add link eth0 name eth0.10 type vlan id 10 sudo ip link set eth0.10 up sudo dhclient eth0.10 sudo tcpdump -i eth0 -nn vlan如果配置正确tcpdump会看到带vlan 10标签的DHCP请求帧。也可以断开Trunk口直接在Wireshark里选择对应网卡过滤条件填vlan就能看到802.1Q头里的VLAN ID。有一点需要提醒有些电脑自带的网卡驱动会默认剥离或者不抓VLAN标签导致Wireshark看不到预期的tag。这不是RouterOS的问题换一块网卡或者在网卡高级设置里关闭VLAN offload即可。4.3 常见问题速查表与排查思路我把实际调试中遇到的高频问题整理成了一张表方便遇到问题直接对照排查现象可能原因处理方法开启vlan-filtering后管理口失联bridge vlan表没配好或管理VLAN没加bridge1为成员用MAC地址方式登录或重启后开Safe Mode重新检查Trunk口接终端拿不到IPTrunk口设为admit-only-vlan-tagged终端不带标签终端侧必须配置VLAN子接口或用支持VLAN的交换机接Access口Access口收到设备但DHCP不分配端口PVID与bridge vlan表里的untagged VLAN不一致检查/interface bridge port print里的pvid和bridge vlan表对应不同VLAN之间能ping通但希望隔离防火墙forward默认放行添加drop规则注意规则顺序VLAN接口配了IP但ping不通网关bridge vlan表里bridge1没有加入tagged列表在bridge vlan表对应VLAN的tagged里加上bridge1无线客户端进不来网段无线接口没加入网桥或没设置pvid把无线接口加进bridge port并设置对应pvid排查时我的习惯是先用/interface bridge vlan print和/interface bridge port print把当前配置完整看一遍确认PVID、tagged、untagged都在预期状态再回到物理层检查网线、网卡、交换机端口。大部分VLAN问题都不是设备坏了而是配置里某个细节漏掉了。5. 进阶玩法与踩坑记录单线复用、无线绑定VLAN和几个实战心得基础配置跑通之后网桥VLAN的想象空间其实很大。我分享几个自己用过并且觉得非常实用的扩展玩法顺便把我踩过的坑也一并交代了。5.1 单线复用一根物理网线承载多个VLAN很多家庭装修时只在弱电箱到客厅之间预埋了一根网线既想看电视盒子又想接路由器还想让客厅设备访问内网。这时候VLAN的单线复用能力就非常顶用。做法很简单弱电箱里的RouterOS把ether2设成Trunk口客厅放一台支持VLAN的交换机交换机上联口设成Trunk下联口按需设成不同VLAN的Access口。这样一条物理线路里同时跑着IPTV、办公网、访客网三个VLAN。如果客厅交换机也是RouterOS配置思路完全一样如果是华为或普通网管交换机典型配置大概是interface GigabitEthernet0/0/1 port link-type trunk port trunk allow-pass vlan 10 20 30 port trunk pvid vlan 1这个配置里的port trunk pvid vlan 1对应的就是RouterOS里Trunk口的默认PVID1。理解了这个对应关系跨品牌交换机配VLAN就不再是难事。5.2 无线SSID与VLAN联动访客WiFi自动隔离如果RouterOS上开了无线功能或接无线AP可以把不同的SSID对应到不同的VLAN。比如主SSID属于办公网VLAN 10访客SSID属于访客网VLAN 20两个SSID虽然来自同一个AP但二层完全隔离。无线接口加入网桥时设置对应的PVID即可/interface bridge port add bridgebridge1 interfacewlan1 pvid10 frame-typesadmit-only-untagged-and-priority-tagged add bridgebridge1 interfacewlan2 pvid20 frame-typesadmit-only-untagged-and-priority-tagged这样访客连上wlan2之后发出来的无标签帧会被打上VLAN 20的标签进入访客VLAN。后续只要前面防火墙规则已经禁止VLAN 20访问内网访客就再也摸不到你的NAS和打印机了。5.3 实操心得与避坑清单最后集中写几条我自己的经验都是真金白银换来的第一Safe Mode是救命稻草。每次改动bridge vlan或者开vlan-filtering之前一定先开Safe Mode。我第一台设备配网桥VLAN时就是因为没开Safe Mode开完vlan-filtering直接断连最后只能顶着冷风去机房断电重启。第二画图永远比敲命令重要。我见过太多人拿着命令直接改生产设备结果改完自己都不记得哪个口属于哪个VLAN。先画一张简单的端口-VLAN对照图再动手配置效率至少高一倍。第三版本差异要留意。RouterOS v6和v7在网桥VLAN的配置界面上有些差异v7还支持直接在bridge port上设置pvid和bridge-vlan-mode的简化写法。但核心逻辑不变vlan-filtering、pvid、tagged/untagged这三个关键词是通用的。第四不要把VLAN接口加进网桥。创建/interface vlan时它的interface参数是bridge1但VLAN接口本身不要通过/interface bridge port加入任何网桥否则会形成二层环路或导致VLAN接口收不到流量。这个问题我自己就犯过一次排查了很久才发现是VLAN接口被多嘴加进了bridge。第五硬件卸载要确认。某些带交换芯片的RouterOS设备开vlan-filtering后硬件卸载可能失效CPU转发性能会下降。配置完可以看/interface bridge port print里的hw字段如果显示no说明流量走了CPU流量大时要留意负载。如果你准备在自己的设备上实践我的建议是先拿一台不重要的路由设备练手按照从建网桥到开防火墙的顺序一步步来每完成一步就验证一步。等这一整套流程走通了再迁移到生产环境你会发现自己对二层网络的理解会上一个台阶。