ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

单臂路由详解:子接口、802.1Q封装与VLAN间路由配置实战

单臂路由详解:子接口、802.1Q封装与VLAN间路由配置实战 单臂路由这个词做网络的人多少都听说过但真正动手配过、配明白的人其实不算多。尤其是刚入行的朋友一听到子接口802.1Q封装Router-on-a-Stick这些词容易懵总觉得这是老古董技术、学了没用。实际上单臂路由在今天的大量中小型网络里仍然是性价比极高的VLAN间路由方案即便在企业防火墙上也经常以类似的单臂思路来部署解决口子不够、vlan互访、安全隔离这些实际问题。这篇文章我就把自己这些年配置单臂路由的经验、踩过的坑、验证方法全部梳理一遍从原理到实操顺序再到防火墙单臂场景的配置思路一次性讲透适合正在准备网络实验、要上真实项目、或者被VLAN间路由困扰的朋友直接照着抄。1. 理解单臂路由的基本原理1.1 为什么需要它VLAN间通信的必经之路交换机划分VLAN之后广播域被隔离了二层流量只能在同一个VLAN内部转发。这是好事因为广播风暴的影响范围减小了安全性也提升了。但问题随之而来不同VLAN之间的设备要互相通信怎么办答案很明确必须经过三层设备。三层设备可以是三层交换机可以是路由器也可以是防火墙。但很多中小型环境里手头并没有三层交换机只有一台普通二层交换机和一台路由器这时候就需要让路由器来承担跨VLAN转发的任务。传统的做法是多根物理网线把交换机的每个VLAN都接到路由器的不同物理接口上VLAN 10接一个口、VLAN 20接另一个口路由器上配置对应网段的网关地址。这样做的缺点是极其浪费接口资源VLAN一多交换机端口和路由器端口都不够用。单臂路由正是为了解决这个痛点而生的在交换机和路由器之间只用一条物理链路链路上跑Trunk把多个VLAN的流量全部封装进这一条链路里在路由器上用子接口区分不同的VLAN分别配置网关IP从而实现所有VLAN之间的互访。因为整个拓扑看起来像路由器只用一只手臂连着交换机所以叫单臂路由专业术语叫Router-on-a-Stick简称ROAS。1.2 核心机制Trunk、子接口与802.1Q单臂路由能成立依赖三个关键机制配合。第一个是Trunk链路。交换机连接路由器的接口必须配置成Trunk模式目的只有一个允许所有VLAN的流量通过这条链路。如果这个口还是Access口那就只认某一个VLAN其他VLAN的数据到不了路由器路由功能自然无从谈起。第二个是802.1Q封装。VLAN的流量在Trunk链路上传输时以太网帧头里会打上一个VLAN Tag告诉对端我是哪个VLAN的数据。802.1Q是IEEE 802.1Q标准定义的帧标记技术在源MAC地址和Type/Length字段之间插入了4字节的Tag其中包含12位的VLAN ID字段取值范围1到4094。这台路由器识别每个VLAN靠的就是读这个Tag。第三个是子接口。路由器的物理接口本身只有一个但它可以被划分成多个逻辑接口每个逻辑接口对应一个VLAN。配置时在子接口上指定封装协议为dot1Q并指定对应的VLAN ID再配上这个VLAN的网关地址路由器就能一芯多用了。你可以这样理解一个物理接口就是一个公寓大门子接口是门里一个个房间每个房间门口挂了块牌子写着VLAN 10收件箱VLAN 20收件箱。802.1Q Tag就是快递包裹上的楼层标签路由器拆开包裹前先看标签然后送到对应房间处理。1.3 适用场景与时机判断我见过不少人在不合适的场景里硬上单臂路由结果性能不够、排障困难。那么什么情况下用单臂路由是合理的第一设备条件有限。只有二层交换机和带路由功能的路由器没有三层交换机。这种情况下单臂路由几乎是唯一选择。第二流量规模不大。单臂路由有个天然瓶颈所有VLAN之间的流量都要挤在同一条物理链路上而且路由器转发性能通常不如三层交换机的硬件转发。如果VLAN间流量很大比如文件服务器集中在一个VLAN、大量客户端从其他VLAN频繁读写大文件这条链路很容易成为瓶颈。实测下来百兆链路跑单臂路由吞吐上到七八十兆之后就开始明显丢包千兆链路会好很多但路由器CPU转发能力同样要打个问号。第三实验环境或小型办公网。公司总计几十台电脑分两三个VLAN日常流量主要是上网上网流量默认走出口不经过单臂链路、邮件、OA这些单臂路由完全扛得住而且配置简单、成本低。另外补充一点如果要跑单臂路由建议优先选择千兆端口。百兆端口在单臂场景下性能余量太小稍有突发流量就会拥塞。2. 动手前的规划拓扑设计与参数准备2.1 网络拓扑怎么搭单臂路由的标准拓扑非常简洁三条线就能说清楚PC-A接交换机PC-B接交换机交换机接路由器。具体到端口分配我建议这样规划交换机的G0/1口作为Trunk口连接路由器比如路由器的G0/0口。交换机的G0/2口划分到VLAN 10连接PC-A。交换机的G0/3口划分到VLAN 20连接PC-B。如果手头设备端口更多完全可以扩展出VLAN 30、VLAN 40思路完全一样。这个拓扑最关键的一点是交换机和路由器之间那条Trunk链路必须用千兆口我用百兆口做过实验数据一多CPU占用率直接飙到百分之八九十那叫一个痛苦。2.2 VLAN与IP地址规划表规划时把VLAN ID、网段、网关、子接口编号全部列出来配置的时候照表操作这样不容易出错。项目VLAN 10VLAN 20VLAN ID1020网段192.168.10.0/24192.168.20.0/24网关192.168.10.1192.168.20.1路由器物理接口G0/0G0/0子接口编号G0/0.10G0/0.20802.1Q VLAN IDdot1Q 10dot1Q 20交换机Trunk接口G0/1G0/1PC接口所属VLANG0/2Access VLAN 10G0/3Access VLAN 20PC的IP地址192.168.10.10192.168.20.10注意子接口编号不要求一定和VLAN ID一致你可以用G0/0.1对应VLAN 10完全没问题。但强烈建议子接口编号和VLAN ID保持一致比如VLAN 10对应G0/0.10看着明白排障时少一层换算。这个习惯我在项目里坚持了很多年确实能省事。2.3 配置前的设备检查动手之前一定先花两分钟确认三件事。首先确认设备确实支持VLAN和802.1Q。现在市面上能买到的管理型交换机基本都支持但部分老旧设备或非网管交换机根本不认Trunk和Tag配了也白配。可以在交换机上敲show vlan看看能不能看到VLAN表如果能说明支持VLAN。其次确认路由器支持子接口和dot1Q封装。家用宽带路由器有些阉割了这些功能企业级路由器基本都支持。登录路由器看一眼接口配置里有没有subinterface相关选项。最后确认版本。路由器IOS或VRP版本太老可能有些命令不同配置前先show version看一眼避免命令敲进去报错。3. 核心实操交换机与路由器的完整配置3.1 交换机侧配置VLAN与Trunk我这里以常见的华为设备命令为例Cisco命令会附在括号里对比核心思路是一样的。第一步创建VLAN# 华为 system-view vlan batch 10 20 quit # Cisco对应命令 # configure terminal # vlan 10 # vlan 20第二步把连接PC的接口划入对应VLAN# 华为 interface GigabitEthernet0/0/2 port link-type access port default vlan 10 quit interface GigabitEthernet0/0/3 port link-type access port default vlan 20 quit # Cisco对应命令 # interface GigabitEthernet0/0/2 # switchport mode access # switchport access vlan 10 # interface GigabitEthernet0/0/3 # switchport mode access # switchport access vlan 20第三步配置Trunk口# 华为 interface GigabitEthernet0/0/1 port link-type trunk port trunk allow-pass vlan 10 20 quit # Cisco对应命令 # interface GigabitEthernet0/0/1 # switchport mode trunk # switchport trunk allowed vlan 10,20这里有个细节值得多说一句华为设备默认Trunk口只允许VLAN 1通过所以一定要配置allow-pass把需要的VLAN加进去Cisco设备默认Trunk口允许所有VLAN通过但你仍然建议显式写清楚方便后续排查。有些版本还支持trunk encapsulation dot1q命令如果有这个选项就先用它。3.2 路由器侧配置子接口与网关交换机配完后进入路由器配置子接口。# 华为 system-view interface GigabitEthernet0/0/0.10 dot1q termination vid 10 ip address 192.168.10.1 255.255.255.0 arp broadcast enable quit interface GigabitEthernet0/0/0.20 dot1q termination vid 20 ip address 192.168.20.1 255.255.255.0 arp broadcast enable quit# Cisco对应命令 # configure terminal # interface GigabitEthernet0/0.10 # encapsulation dot1Q 10 # ip address 192.168.10.1 255.255.255.0 # interface GigabitEthernet0/0.20 # encapsulation dot1Q 20 # ip address 192.168.20.1 255.255.255.0华为设备有一个很容易被忽略的命令arp broadcast enable。如果漏配子接口不会处理ARP广播报文PC能ping通网关的IP吗不能。华为设备默认在子接口上对ARP广播报文不进行处理必须显式打开这一点和Cisco设备有区别。很多照着Cisco配置习惯去配华为的人在这里卡了半天我一开始也栽过这跟头。物理口本身不需要配IP也不需要特殊配置它就是一个承载层真正的逻辑配置全在子接口上。物理口千万别误配成shutdown或者access模式保证它处于up状态就行。3.3 关键参数选择背后的原因为什么要用802.1Q而不是ISL因为ISL是Cisco私有协议只支持Cisco设备之间的Trunk而802.1Q是IEEE标准所有厂商都认。在混合厂商环境里只有802.1Q可选。现在ISL基本已经退出历史舞台了新设备上甚至都不支持这个问题现实中已经不用纠结了。为什么网关IP要配在路由器子接口上而不是交换机上因为交换机是二层交换机它没有三层转发能力所有跨VLAN的报文都必须先送到网关路由器子接口由路由器查路由表后转发。所以网关必须落在路由器上。有的朋友想偷懒给二层交换机配个管理IP就让VLAN间互访那是不可能的二层交换机管理IP只能用于设备自身管理做不了三层转发。子接口的IP地址网段为什么必须和VLAN网段一致这是路由表的基本逻辑。PC-A的网关是192.168.10.1这个地址必须和PC-A在同一网段192.168.10.0/24内否则PC-A根本不知道怎么找到网关。3.4 静态路由是否需要配置有人会问子接口配好IP之后跨VLAN的流量就能通了吗需要不需要配路由答案是在只有两个子接口的情况下不需要额外配路由。因为路由器直连路由会自动生成路由器发现自己的两个子接口分别属于192.168.10.0/24和192.168.20.0/24网段自动在路由表里写上这两条直连路由。当收到目的地为192.168.20.10的报文时查路由表匹配到直连路由直接从G0/0.20转发出去。但如果后面接了外网比如路由器还有一个接口连运营商那就需要配置一条默认路由指出去往外网的方向比如ip route-static 0.0.0.0 0.0.0.0 GigabitEthernet0/0/1否则内网用户没法上网。4. 防火墙场景单臂路由的典型部署4.1 什么是防火墙单臂路由实际项目中我碰到过很多次这种需求公司买了两台防火墙或者一台防火墙上既要跑安全策略又想实现VLAN间路由但防火墙的物理接口不够用了。这时候就需要在防火墙上做单臂路由。很多厂家的防火墙都支持在物理接口上创建子接口配置VLAN Tag和IP地址和路由器基本一样。不同点是防火墙还多了安全域zone和策略的概念子接口必须划入某个安全域还必须放通对应的安全策略流量才能真正通起来。这里的核心逻辑是防火墙不仅仅在做路由还在做安全过滤。同样的拓扑你换一台路由器可能通了就行但换防火墙就必须考虑域间策略。4.2 以某主流防火墙为例的配置步骤不同厂商的防火墙界面差别很大这里我用一个通用的思路来描述你可以照着在自己的设备上找到对应入口。建议优先采用命令行或者CLI方式配置因为网页界面上有些选项藏得深不如命令快。假设物理接口为eth0子接口eth0/0.10属于VLAN 10eth0/0.20属于VLAN 20。第一步创建VLAN并配置子接口# 创建VLAN vlan 10 vlan 20 # 进入物理接口创建子接口 interface eth0.10 vlan-type dot1q 10 ip address 192.168.10.1 255.255.255.0 interface eth0.20 vlan-type dot1q 20 ip address 192.168.20.1 255.255.255.0第二步把子接口加入安全区域firewall zone trust add interface eth0.10 firewall zone untrust add interface eth0.20第三步配置安全策略放通VLAN 10到VLAN 20的流量# 在策略配置中增加一条规则 policy rule name Allow_VLAN10_to_VLAN20 source-zone trust destination-zone untrust source-address 192.168.10.0 24 destination-address 192.168.20.0 24 action permit注意这里我把VLAN 10划到了trust区域VLAN 20划到了untrust区域。实际项目中你可以根据安全需求灵活调整但思路就是不同子接口之间默认是隔离的必须通过安全策略显式放通。如果你配完之后发现ping不通八成就是策略没放通。4.3 防火墙单臂的常见坑防火墙单臂路由踩坑概率比路由器高得多这里说三个典型的。第一个坑是子接口没加入任何安全域。防火墙默认安全策略是拒绝一切未放通的流量子接口如果没加入区域流量进来直接被丢弃而且日志不一定明显排半天都找不出原因。第二个坑是VLAN Tag封装不一致。交换机Trunk口配置的是allow vlan 10、20防火墙子接口配置的是vlan-type dot1q 10、20如果某一端的VLAN ID对不上报文直接就被丢弃了。这里可以用抓包工具看一眼如果Trunk链路上能看到带Tag的报文而防火墙收不到基本就是两端VLAN封装配合问题。第三个坑是来回路径不一致。有的防火墙默认开了会话保持和状态检测如果一条数据流的回程走了别的线路或别的接口防火墙会认为这是一个未知连接而直接丢弃。在单臂环境中因为只有一个物理口回程路径一般是同一个口这个问题还不太容易出现但如果你在防火墙上做了策略路由或者负载均衡就要格外注意来回路径一致性。5. 验证与排障真正能看出水平的环节5.1 验证命令与排查思路配置完成后我一般按这个顺序验证。先看交换机的Trunk状态display port vlan # 华为 show interfaces trunk # Cisco重点确认G0/1口是Trunk模式且允许的VLAN列表里包含VLAN 10和20。如果这里显示不对后面全是白搭。再看路由器的子接口状态display ip interface brief # 查看所有三层接口状态 show ip interface brief # Cisco对应命令G0/0.10和G0/0.20都应该是up状态并且IP地址正确。如果某个子接口的IP没生效检查是不是物理口down了或者子接口创建失败。然后看路由表display ip routing-table # 查看路由表 show ip route # Cisco对应命令重点是两条直连路由192.168.10.0/24 via 192.168.10.1G0/0.10和192.168.20.0/24 via 192.168.20.1G0/0.20。缺哪条就说明对应的子接口配置有问题。最后从PC-A去ping PC-B。先ping网关确认本地链路没毛病再ping对端PC的IP。这里建议先ping网关、再ping对端主机分步定位问题边界。5.2 高频故障速查表单臂路由的故障翻来覆去就是那么几个原因做成表格对照排查效率最高。现象可能原因排查与解决PC ping不通网关子接口没配IPdisplay ip interface brief查看补配IP网关能ping通PC-B不通PC-B接错VLAN或没接管线查看PC-B所接交换机端口的VLAN所有VLAN互访都不通Trunk口没放行VLAN检查交换机Trunk allow vlan配置华为子接口up但不通漏配arp broadcast enable在子接口下执行arp broadcast enable防火墙ping不通子接口不在安全域或策略未放通把子接口加入区域配置策略action permit链路显示up但持续丢包单臂链路带宽不足或双工不匹配检查接口速率双工建议千兆口5.3 避坑清单与实操心得最后分享几个我这些年亲测有效的习惯。第一所有配置之前先备份。路由器上执行display current-configuration把当前配置导出来交换机、防火墙也同样处理。单臂路由本身不复杂但在生产环境里改错一个Trunk口可能导致全网瘫痪有备份心里不慌。第二命令行配置优于网页点击。虽然现在很多设备都有Web界面但子接口、VLAN封装这些配置在Web界面上操作路径很长一个参数漏点就找不到哪里错了。命令行是标准操作方式效率高排错思路也更清晰。第三抓包工具是你的好朋友。在PC-A上ping PC-B的时候在交换机Trunk口接一台笔记本跑Wireshark抓Trunk口上的报文。你会看到PC-A发出的ICMP Echo Request报文带着VLAN 10的Tag到达Trunk口路由器回复的ICMP Echo Reply报文带着VLAN 20的Tag回来。能观察到这种报文流转你对单臂路由的理解就算真的到位了。第四先配交换机再配路由器。这个顺序很重要。交换机Trunk没配好路由器子接口起来也没用顺序反了排错时会增加干扰变量。我记得有一次现场调试VLAN之间怎么都不通我把交换机配置翻了个底朝天都没发现问题最后抓包发现Trunk口配置放行了VLAN 10和20但连接路由器的那个口模式是Access VLAN 10所以Trunk封装根本就没上去VLAN 20的流量到不了路由器。那之后我每次都会先确认物理口的链路类型再排查其他问题这个坑就再也没踩过。单臂路由这个技术说简单确实简单会配置的人很多但真正理解它的数据流转过程、能够在复杂环境里快速排障的人并不多。希望这篇文章能帮你在原理和实操之间搭一座桥。如果你准备配防火墙单臂路由建议先在测试环境里把安全域和策略的命名规划好别上线了才发现zone划分不合理到那时候每改一次策略都牵一发而动全身。
返回列表