
1. 项目概述为什么单臂路由值得重新认真学一遍先说结论这东西看着简单但在真实项目里翻车率极高。单臂路由Router-on-a-Stick几乎是所有网络课程里的标配内容HCIA、CCNA、软考网络工程师里都有它。很多人觉得它就是个过时的技术VLANIF一出来就该淘汰了真实项目里谁还用路由器去跑VLAN间路由说实话这种想法我理解但真的不完全对。我最近几年做网络改造项目单臂路由反而出现得很频繁尤其是防火墙大范围接入内网做安全隔离的场景十个项目里能碰到四五个。单臂路由的核心价值是用一个物理接口加多个逻辑子接口实现VLAN间的三层通信。它解决的问题非常具体二层交换机只能根据MAC地址转发同一个VLAN内的帧不同VLAN之间默认是隔离的想互通就必须引入三层设备。传统的做法是路由器和交换机之间每个VLAN拉一根物理线VLAN多了接口根本不够用。单臂路由的本质就是在一根物理链路上通过802.1Q标签区分不同VLAN的流量让路由器一个物理口当好几个口用。这篇文章我会把单臂路由从原理到实操完整拆一遍覆盖路由器场景和防火墙场景两种配置方式以及我在现场踩过的一些坑。适不适合你学如果你正在备考网络认证或者工作里需要配置VLAN间路由、防火墙网关部署又或者纯粹想搞懂数据帧在交换机路由器之间到底怎么走这篇都值得花十几分钟看完。2. 单臂路由的环境准备与设计思路2.1 理解单臂路由的拓扑结构与核心逻辑单臂路由的组网模型非常简单一台二层交换机上行一根网线接到路由器或防火墙的某一个物理口交换机上划分了多个VLAN每个VLAN里接若干台PC或服务器。路由器上把这个物理口打成若干个子接口每个子接口对应一个VLAN的网关。PC发往其他VLAN的流量先到交换机交换机打上对应VLAN的tag从trunk口出去路由器收到后根据tag判断这个帧属于哪个VLAN再查路由表决定转发到哪个子接口最后把帧打上目标VLAN的tag从同一个物理口送回交换机。数据进出都走这一根线所以叫“单臂”。这里有一个很关键的设计意图很多人一开始没想明白为什么要在路由器上搞子接口直接给物理接口配个IP不行吗原因是物理接口本身不带VLAN识别能力。交换机trunk口送出来的帧是带802.1Q标签的路由器物理接口如果不做任何封装根本不知道这个tag代表什么会把带标签的帧当成普通帧甚至直接丢弃。子接口的作用就是做VLAN终结也就是让路由器能认出这个tag并且把这个子接口当作对应VLAN的三层网关接口来用。画个简单的对应关系对象作用对应关系交换机VLAN 10隔离广播域PC1所属网段交换机VLAN 20隔离广播域PC2所属网段交换机上行口G0/0/24Trunk模式放行VLAN 10和20与路由器物理口相连路由器物理口G0/0/0承载多个子接口不配IP只做物理介质接入路由器子接口G0/0/0.10VLAN 10的三层网关封装dot1q vid 10路由器子接口G0/0/0.20VLAN 20的三层网关封装dot1q vid 20从这张表能看到单臂路由的本质它是把三层网关从交换机上剥离出来放到上联的路由器或防火墙上。这种设计在安全场景里特别有价值因为策略控制点被集中了VLAN之间的访问规则可以在一个设备上统一管控而不是散落在各台交换机上。2.2 设备接口模式与VLAN标签流转的底层概念说到单臂路由必须先讲清楚交换机的三种接口模式因为很多人就是栽在“接口模式选错”这件事上。Access口用于连接终端设备它只属于一个VLAN发出的帧不带tag收到的帧如果带tag且与自身PVID不一致就直接丢弃。Trunk口用于连接交换机之间或交换机与路由器之间默认放行所有VLAN但实际使用时强烈建议手动指定放行列表只放必要的VLAN。Hybrid口是华为特有的模式既能像Access一样不携带tag发送也能像Trunk一样携带tag发送灵活性更高但也更容易把人绕晕。单臂路由场景里交换机接PC的口用Access接路由器的口用Trunk。为什么接路由器要用Trunk而不是Access因为Access口发出的帧是untagged的路由器物理口收到不带tag的帧只能把它当作某一个子接口的流量来处理其他VLAN的帧根本送不过来。只有Trunk口能让多个VLAN的帧带着各自的tag通过路由器才能根据tag正确分发到不同子接口。那路由器子接口上为什么要配置封装命令华为的写法是dot1q termination vid 10Cisco是encapsulation dot1Q 10。这条命令就是告诉路由器我收到的帧里凡是带着VLAN 10的tag就交给这个子接口处理。这个过程叫VLAN终结。不封装子接口就不知道自己在为哪个VLAN服务。这里还有个容易被忽略的点子接口默认不会主动广播ARP请求。华为路由器默认关闭了子接口的ARP广播功能如果不开arp broadcast enablePC第一次跨VLAN访问时路由器收到目标IP的ARP请求后在子接口上不回应PC就找不到网关MAC地址表现就是ping不通。真实设备踩坑十个有八个都是这个原因。2.3 单臂路由与三层交换机VLANIF方案怎么选很多初学者会问一个问题明明三层交换机配VLANIF又快又稳为什么还要用单臂路由这个问题问得很实在但也暴露了对方案选型逻辑的不理解。选型看的是业务场景不是技术新旧。三层交换机做VLAN间路由转发性能高、配置简单适合绝大多数园区网场景。但单臂路由有它不可替代的位置第一网关统一收拢到防火墙。很多等保整改项目要求内网东西向流量也要过防火墙审计如果每个VLAN的网关还放在交换机上VLAN之间的流量根本不会经过防火墙安全策略等于虚设。把网关全部挪到防火墙的子接口上所有跨VLAN流量必经防火墙策略才能生效。这种场景在政企网络改造里非常常见。第二现有设备复用。有些小规模网络只有一台二层交换机和一台家用级或企业级路由器预算不支持买三层交换机单臂路由能让这台路由器顺带把VLAN间路由的活干了不需要额外采购。第三实验室和备考场景。认证考试里单臂路由是必考实验学会它也就理解了VLAN标签在整个网络里的流转路径这个底子打好了后面学VXLAN、QinQ这些复杂封装技术都会顺畅很多。对比项单臂路由三层交换机VLANIF转发性能取决于路由器CPU通常较弱硬件交换芯片转发性能强配置复杂度需要配置子接口、封装、trunk放行只需创建VLANIF并配置IP适用场景网关下沉到防火墙、小型网络大中型园区网、核心汇聚成本利用现有设备不额外增加成本需要三层交换机硬件支持安全策略联动网关在防火墙上便于统一审计策略分散东西向流量难管控3. 路由器单臂路由的完整配置实操3.1 场景规划与IP地址设计用一个我们在项目中常遇到的基础拓扑来演示。假设公司有办公区和研发区两个部门分别划分在VLAN 10和VLAN 20网段规划如下VLAN 10办公区192.168.10.0/24网关192.168.10.254VLAN 20研发区192.168.20.0/24网关192.168.20.254交换机接入PC上行口连路由器G0/0/0路由器物理口G0/0/0创建两个子接口G0/0/0.10和G0/0/0.20PC的IP地址和网关可以先用静态配置来做实验验证真实场景里一般由DHCP服务器统一分配网关地址就是子接口的IP。我习惯把网关的最后一位统一用254方便记忆和排障。设备选型上路由器用华为AR系列举例交换机用S5700系列命令在华为VRP平台上通用。Cisco的命令我会在后面的对比表格里给出来逻辑一样只是关键字有差异。3.2 交换机侧配置步骤交换机上需要做的就是创建VLAN、把PC口划进对应VLAN、把上联口配置为Trunk并放行VLAN。以华为交换机为例system-view vlan batch 10 20 interface GigabitEthernet0/0/1 port link-type access port default vlan 10 quit interface GigabitEthernet0/0/2 port link-type access port default vlan 20 quit interface GigabitEthernet0/0/24 port link-type trunk port trunk allow-pass vlan 10 20 quit这里有两个细节值得说。第一access口的PVID默认为1如果PC口不配port default vlan设备会被划分到VLAN 1里接上去之后跟其他VLAN的通信必然出问题。配置完记得用display port vlan查看端口和VLAN的对应关系。第二trunk口的allow-pass vlan一定要手写全。华为交换机trunk口默认只放行VLAN 1其他VLAN除非显式放行否则帧到了就被丢弃。我曾经遇到一个情况配置了三层路由、VLAN也建了、IP也配了PC就是ping不通网关排查半天发现是trunk口少了10 20这两个放行列表。这个问题几乎每个新手都会碰到放行列表就是唯一出入口的安检名单漏了谁谁就进不来。3.3 路由器侧子接口配置步骤路由器上的配置是单臂路由的重头戏。华为AR路由器操作如下system-view interface GigabitEthernet0/0/0.10 dot1q termination vid 10 ip address 192.168.10.254 255.255.255.0 arp broadcast enable quit interface GigabitEthernet0/0/0.20 dot1q termination vid 20 ip address 192.168.20.254 255.255.255.0 arp broadcast enable quit三步操作缺一不可。dot1q termination vid 10这个命令是子接口的身份证明不写的话子接口就像一个没有门牌的房间不知道该接收哪个VLAN的帧。ip address是这个VLAN的网关地址PC上的默认网关必须跟它一致。arp broadcast enable是最容易被忽略的一步华为低版本VRP和部分模拟器版本里子接口默认不处理ARP广播报文跨VLAN的PC第一次访问网关时ARP请求发到子接口就石沉大海。这个命令的含义是让子接口参与ARP广播响应没有它即使IP和封装全对也ping不通。配置完成后可以用display ip interface brief查看子接口状态正常的输出应该显示每个子接口都有IP地址且协议状态是Up。如果发现状态Down优先检查物理链路和Trunk口配置而不是急着改子接口。3.4 Cisco、H3C和华为的命令对比工作里经常会碰到同时维护多个厂商设备的情况我把三家主流厂商的命令并列放在一起方便对照记忆。配置项华为VRPH3C ComwareCisco IOS创建子接口interface G0/0/0.10interface G0/0/0.10interface G0/0/0.10VLAN封装dot1q termination vid 10dot1q termination vid 10encapsulation dot1Q 10配置IP地址ip address 192.168.10.254 24ip address 192.168.10.254 24ip address 192.168.10.254 255.255.255.0ARP广播处理arp broadcast enablearp broadcast enable默认开启无需配置从表格能看出华为和H3C命令几乎完全一致因为H3C早期设备和华为同源。Cisco的区别主要在两点封装命令的写法不同以及不需要显式开启ARP广播IOS默认就是开启状态。所以如果你在Cisco设备上习惯了不下arp broadcast enable换到华为设备时务必记得补上。3.5 子接口配置完成后的验证与连通性检查配置全部完成后要验证的不是只看配置对不对而是要让PC之间实际通信起来。先用ping从办公区PC1192.168.10.1测试网关192.168.10.254通的话说明VLAN 10的终端到路由器的这段链路没问题。再测试PC1到PC2192.168.20.1通的话说明跨VLAN路由转发链路正常。第一次ping可能会失败这是ARP学习需要时间多ping几次或者等几秒再试尤其是华为路由器没开arp broadcast enable的情况下会一直失败而不是只失败一次这个区别可以用来辅助判断问题。我在真机上做验证时还会在路由器上执行display arp正常情况下应该能看到两个VLAN网段各有一个ARP表项。如果只有本端的说明VLAN标签有问题或者ARP广播没开启。在交换机上执行display vlan查看各VLAN是否包含正确的端口成员display interface GigabitEthernet0/0/24查看trunk口状态和tag转发情况。用抓包工具在PC2网卡上抓包能看到PC1发来的ICMP请求报文带有VLAN 20的标签这个现象能直观验证单臂路由的整个转发过程是否真正的完整。4. 防火墙单臂路由配置网络改造的高频场景4.1 防火墙做单臂路由和路由器到底哪里不一样前面说了半天路由器接下来重点说防火墙。因为从热搜词和后台数据看大家搜的最多的是“防火墙怎么配置单臂路由”这个关键词背后暴露了一个普遍困惑防火墙身上有三层路由能力但又有安全区域和策略的概念子接口该怎么配配完之后VLAN间能不能通防火墙做单臂路由和路由器有一个本质区别路由器子接口配完IP只要路由表里有路由流量就能转发防火墙子接口配完IP默认情况下还会被安全策略拦一道。防火墙的安全策略默认是拒绝的你只配了接口不配策略VLAN之间就是不通这是防火墙与路由器最大的不同也是很多第一次在防火墙上配单臂路由的人懵掉的原因。从网络架构角度说防火墙做单臂路由通常有两种目的。一种是把防火墙放在核心交换机旁路各个VLAN的网关收拢到防火墙的子接口上实现东西向流量统一过防火墙审计。另一种是更简单的场景小型网络本来就只有一台防火墙把内网多个VLAN的网关都建在它的子接口上一个口接交换机trunk省得内网再单独买路由器。无论哪种场景核心逻辑都是把防火墙从单纯的边界设备升级成“边界内网网关”的混合角色。4.2 以华为防火墙为例的子接口与安全区域配置华为USG系列防火墙的子接口配置思路和AR路由器类似但多了一层安全区域的概念。示例组网防火墙G1/0/0口接核心交换机trunk需要在防火墙上创建VLAN 10和VLAN 20两个子接口并把它们分别加入trust和dmz区域。system-view interface GigabitEthernet1/0/0.10 dot1q termination vid 10 ip address 192.168.10.254 255.255.255.0 arp broadcast enable quit interface GigabitEthernet1/0/0.20 dot1q termination vid 20 ip address 192.168.20.254 255.255.255.0 arp broadcast enable quit firewall zone trust add interface GigabitEthernet1/0/0.10 quit firewall zone dmz add interface GigabitEthernet1/0/0.20 quit注意华为防火墙的子接口也会遇到ARP广播问题所以arp broadcast enable依然要写。可以把区域划分理解为给每个子接口贴了一个标签后续安全策略就是基于这些标签来做匹配的。4.3 安全策略与NAT策略配置要点接口配完了如果这时候直接用VLAN 10的PC去ping VLAN 20的PC大概率是不通的因为防火墙默认不会放行不同区域之间的互访。需要先确认两个子接口被划分到了哪个安全区域再配置对应的安全策略。security-policy rule name trust_to_dmz_vlan source-zone trust destination-zone dmz source-address 192.168.10.0 24 destination-address 192.168.20.0 24 action permit quit这条策略的意思是允许来自trust区域的VLAN 10网段访问dmz区域的VLAN 20网段。反过来如果VLAN 20的PC也要访问VLAN 10需要再写一条反向策略。安全策略的匹配是单向的每一条规则只控制一个方向的流量不要觉得自己配了一条放行就能来回通信了。另外一个需要注意的点是NAT策略。防火墙默认在外出接口方向启用源NAT但这会让内网VLAN之间互访时也做地址转换。华为防火墙默认对同优先级区域之间的流量不做NAT但如果你把两个子接口划分到了不同安全级别区域并且在策略里引用了NAT就可能出现源地址被转换的情况排查跨VLAN通信问题时如果发现目标设备上看到的源地址不对优先怀疑是NAT策略的影响。在真实项目里防火墙上的单臂路由常常配合DHCP服务使用。因为网关已经在防火墙上所以DHCP服务器可以顺势建在防火墙设备上让防火墙直接给终端下发地址同时在DHCP配置里把网关地址指到子接口IP。这种方式可以让内网终端零配置接入非常省事。4.4 防火墙单臂路由的典型坑与对策防火墙场景下踩坑概率最高的几个点我整理成一张速查表照着排查基本能解决大半问题。症状原因解决办法PC ping不通网关ARP广播未开启在子接口下配置 arp broadcast enablePC能ping通网关但跨VLAN不通安全策略未放行检查 source-zone 和 destination-zone 策略部分方向通反向不通策略是单方向匹配增加反向安全策略ping通但业务异常NAT策略转换了源地址检查并调整源NAT策略防火墙子接口状态DownTrunk口未放行对应VLAN在交换机上检查端口放行列表配置了策略还是不通区域划分错误或流量未走到防火墙确认路由表和子接口加入的区域这里要特别强调一下区域划分的原则。两个子接口如果放在同一个安全区域流量默认是互通的不需要策略如果放在不同区域就必须配置策略。有的工程师为了省事把所有子接口都放trust域跨VLAN通信是通了但防火墙的安全审计功能就等于废了。既然把网关收回来了目的就是为了管控该分区域就分区域该写策略就写策略。4.5 其他主流防火墙品牌的配置逻辑差异虽然命令各不相同但防火墙做单臂路由的底层逻辑是通用的子接口封装VLAN、分配IP、加入安全区域、配置策略。理解了这个逻辑换任何品牌都只是查命令的问题。品牌子接口封装区域划分策略配置入口华为USGdot1q termination vidfirewall zonesecurity-policy山石SG-6000子接口VLAN IDzone配置policy配置深信服AF逻辑接口VLAN标签区域与接口绑定访问控制策略Fortinet子接口VLAN IDzone或接口直接引用防火墙策略换品牌时先找三个关键配置子接口怎么创建、VLAN封装写在哪、策略基于什么匹配。这三个点找到了剩下的都是时间问题。5. 单臂路由常见问题排查与避坑指南5.1 症状对照速查表单臂路由的问题看起来五花八门实际归纳起来就那么几类。我把最常见的症状、根因和排查方向整理成表。故障现象可能原因排查步骤PC ping不通自己的网关ARP广播未开启或子接口状态Down查子接口状态确认 arp broadcast enable网关通但跨VLAN PC不通路由器缺路由或防火墙策略拦截查路由表查安全策略同一VLAN内PC能通跨VLAN不通Trunk口未放行VLAN或封装VLAN不匹配查交换机trunk放行列表核对子接口vid第一次ping不通第二次通这是正常ARP学习现象不需要过度担心用连续ping或静态ARP验证单向能通反向不通策略单向匹配或路由器/防火墙NAT问题分别检查两个方向策略和NAT规则PC获取不到IPVLAN未放行或DHCP配置在错误网段查DHCP服务器位置和VLAN放行状态交换机Trunk口状态为Down物理链路或对端接口未激活查网线、接口是否shutdown、速率协商5.2 关键查看命令与抓包排查方法故障排查时最快的方式是在设备上逐层核对状态。我习惯的命令顺序是先看接口物理状态再看VLAN对应关系然后看路由表和ARP表最后才上抓包。display ip interface brief display vlan display port vlan display arp display ip routing-table华为设备上display ip interface brief能一眼看出子接口的IP配置和Up/Down状态。如果子接口是Down的先怀疑物理接口本身有没有开、两端速率协商是否正常。display vlan能确认VLAN创建情况和端口成员关系。display arp能确认路由器是否已经学到了终端的ARP表项这个信息能帮你判断问题出在二层还是三层。抓包层面如果有条件在PC端用Wireshark抓包重点看两个内容PC发出的ARP请求有没有得到响应ICMP请求发出后是否收到应答。如果ARP始终无响应问题大概率在路由器子接口的ARP处理上如果ARP正常但ICMP无响应问题大概率在路由或策略上。交换机上如果有镜像口把上联口抓包还能顺便确认STP是否阻塞了端口以及端口下发的VLAN tag是否符合预期。5.3 实操中容易踩的坑清单我把这几年实战里遇到过的坑逐一列出来很多都是文档里不会细讲的问题。第一个坑是子接口编号不一定要和VLAN ID一致但强烈建议保持一致。子接口的编号只是本地的标识封装命令里的VLAN ID才是真正生效的东西。如果配置成接口G0/0/0.99封装VLAN 10功能上完全没问题但后期维护的人会看得一头雾水。约定俗成的做法是子接口编号等于VLAN ID不要为了标新立异给自己找麻烦。第二个坑是交换机trunk口默认放行列表。华为交换机trunk口默认只放行VLAN 1很多人在模拟器里习惯了默认放行所有VLAN到了真机上发现不通特别容易栽在这里。配置完trunk后记得用display port vlan或display interface trunk检查放行列表。第三个坑是防火墙的默认拒绝策略。在路由器上做完单臂路由实验再转防火墙的人很容易忽略安全策略这一步。只要子接口划分到了不同区域没有策略就一定不通这不是设备故障是设计如此。第四个坑是子接口上的VRRP场景。如果防火墙做双机热备VRRP备份组要建立在子接口上面同时要注意VRRP报文也是走VLAN标签的。双机场景我建议先做单机验证再上双机不然两台设备同时出问题排障难度直接翻倍。第五个坑是MTU问题。默认情况下以太网MTU是1500字节带VLAN标签的帧会多4字节部分设备默认不调整可能导致大包不通小包通。遇到大包丢失小包正常的现象优先查链路的MTU一致性。5.4 单臂路由性能优化与替代方案单臂路由最大的问题是性能瓶颈所有VLAN间流量都挤在一根物理链路上还要靠路由器CPU做三层转发。如果一个千兆口下面同时跑几个VLAN的大流量业务CPU飙升和延迟增大是必然的。如果流量不大单臂路由完全够用如果业务发展到流量明显增长以下几个方向可以考虑第一个方案是把核心交换机换成三层交换机VLANIF做VLAN间路由性能最好。防火墙继续放在边界做安全管控内网VLAN间不再强制过防火墙。第二个方案是保持防火墙做网关的架构但把物理链路从单根升级为Eth-Trunk链路聚合可以用两个千兆口绑定成一个逻辑口增加带宽的同时提高链路可靠性。华为设备上做链路聚合时两个物理口都需要加入同一个Eth-Trunk交换机侧也做同样的聚合配置子接口要建在Eth-Trunk接口上面。第三个方案是采用分层设计核心VLAN间的互访走三层交换机只有需要审计的敏感业务网关放在防火墙或单独的安全网关上。这样既保证了安全策略可管控又不会让所有流量都挤在一根线上。6. 一个认证真题引发的思考写到最后分享一个我面试新人时经常问的场景题华为路由器上配置了子接口IP地址也配了VLAN封装也配了为什么PC ping不通网关十个人里有一半的人答不上来答上来的人里八成会说是trunk放行问题或VLAN没建全。真正完整且恰当的答案是先看子接口状态再看ARP广播是否开启然后查trunk放行列表。这三个环节里任何一环断了单臂路由都起不来。这个问题的价值不在于考一个冷门命令而是通过一个简单的场景逼着人去完整梳理数据转发的链路。单臂路由之所以适合作为学习网络的切入点就是因为它把VLAN隔离、802.1Q标签、ARP协议、三层路由、安全策略这些基础概念串在了一起。把单臂路由搞明白了VLAN间通信整个链路对你来说就是透明的后续学防火墙策略、NAT、甚至VXLAN都会省很多力气。我个人的实操体会是遇到单臂路由的问题不要急着在设备上盲试命令先把自己代入数据帧的角色从PC出帧开始一步步走一遍看到底在哪一步被丢掉了。网络排障最重要的不是记命令而是理解流量应该怎么走命令只是辅助手段。抱着这个思路单臂路由就只是一块磨刀石磨的是你对网络数据流转的理解深度。