愚蠢的地球人

单网口软路由配合VLAN交换机单线复用原理分析

趁着6.18大促,入手了一台威联通TS-453Bmini。之所以选这款机器主要是看中了它双网口的配置,想利用它来做一个软路由,另外还有HDMI接口,可以用做HTPC。


一开始设计的方案是一个网口做WAN,另一个网口做LAN。但是这个方案有一个致命的缺陷:一旦LAN口用于PC和NAS之间拷贝数据,这个LAN口的千兆带宽会被完全占用,这时候其他设备再通过这个LAN口访问外网的速度肯定会受影响。所以最后我定下来的方案是保留一个网口供NAS专用,另一个网口做一个单网口的软路由。另外,为了维护的方便,我将原来的硬路由保留下来作为备用,平时不通电,当NAS升级或者维护的时候只需要拔下软路由跟交换机之间的网线然后将备用的硬路由插上电源即可。整个网络的拓扑图如下:


对于软路由来说,一个物理接口既是WAN口又是LAN口,连上交换机之后WAN和LAN的数据如何隔离呢?这时候我们就需要使用VLAN了,为了解释清楚单线复用的工作原理,我先把结构简化一下,以一个三口交换机为例:


VLAN我们可以理解为实体交换机里面的虚拟区域,每个区域之间互相隔离,只有同一个区域内部能互相通讯。每一个VLAN都有一个VID(VLAN ID),拥有相同VID的接口组成一个VLAN。

数据帧在交换机内部都是带tag(VID)转发的,也就是说每一个数据帧都带有一个VID,数据帧只允许被转发到拥有这个VID的端口,从而实现了数据的隔离。

从外部进入交换机的数据可以是带tag的也可以是不带tag的,每个端口有一个PVID(Port-base VLAN ID),一个端口可以属于多个VLAN(拥有多个VID),但是只能有一个PVID。PVID的作用是在交换机从外部接受到Untagged数据帧时给数据帧添加tag标记。交换机端口对数据的处理规则如下表格所示


流进交换机的数据帧
流出交换机的数据帧

Tagged数据帧

Untagged数据帧Tagged数据帧Untagged数据帧
Tagged端口
保留原tag接收
用PVID给数据帧打上tag标签
保留原tag发出
不存在
Untagged端口
丢弃(不接收)用PVID给数据帧打上tag标签去掉tag发出
不存在


根据以上规则,我们来看一下PC访问外网时数据帧进出交换机的流出流入原理:

这里有几个关键点让我来给大家分析一下:

  1. PC发出的数据帧不带tag,进入交换机的时候被端口3(PVID=1)打上了VID=1的tag,这个数据帧只能在VLAN1内部转发(转发到软路由),无法到达端口1(光猫)。

  2. 当上一条中tag为VID=1的数据帧从VLAN1的端口2流出的时候,由于端口2在VLAN1里是Untagged口,数据帧流出的时候会被去掉tag,这个数据帧进入到软路由之后会被软路由识别为LAN的数据,直接进入到eth0。

  3. 软路将LAN口(eth0)接收到的数据帧转发到WAN口(eth0.2),数据帧被打上VID=2的tag,从端口2进入交换机的时候会保留VID=2的tag,这个数据帧只能在VLAN2内部转发(转发到光猫),无法到达端口3(PC)。

  4. 光猫发出的数据帧不带tag,进入交换机的时候被端口1(PVID=2)打上了VID=2的tag,这个数据帧只能在VLAN2内部转发(转发到软路由),无法到达端口3(PC)。

  5. 当上一条中tag为VID=2的数据帧从VLAN2的端口2流出的时候,由于端口2在VLAN2里是Tagged口,数据帧流出的时候会保留tag,这个数据帧进入到软路由之后会被软路由识别为WAN的数据,直接进入到eth0.2。

  6. 软路将WAN口(eth0.2)接收到的数据帧转发到LAN口(eth0),数据帧被去掉tag,然后从端口2进入交换机的时候又会被端口2(PVID=1)打上VID=1的tag,这个数据帧只能在VLAN1内部转发(转发到PC),无法到达端口1(光猫)。


看完了以上的原理分析,下面开始实战了,这是我的接线图:


有点乱,大家可能看不明白,我用表格来描述一下:

交换机端口
1
2
3
4
5
6
7
8
连接设备
光猫
硬路由WAN
软路由
NAS
AP1
AP2
PC
硬路由LAN
VLAN1
X
X
U
U
U
U
U
U
VLAN2
U
U
T
X
X
X
X
X
PVID
2
2
1
1
1
1
1
1


交换机VLAN1的设置:


交换机VLAN2的设置:


交换机端口PVID设置:


软路由设置:


最后顺便解释一下OpenWRT的eth0,eth0.1,eth0.2的含义,之前我也是对这些概念是一无所知,最近折腾软路由才大致弄明白。

eth0是一块物理网卡(当然对虚拟机来说是虚拟网卡,只不过对于OpenWRT来说是一块物理网卡)。eth0.1,eth0.2都是从此设备上虚拟出来接口,称为软件VLAN。
Openwrt加VLAN的方法是在物理接口后面加个点再加个数字,例如你新建一个eth0.2的接口,就意味着物理接口eth0自动转化成一个虚拟交换机,同时在eth0上新建一个VID为2的虚拟端口。


使用了几天,感觉软路由性能真不错,比原来的硬路由强多了,测了一下速度,200M的联通宽带能跑满,峰值速度甚至超过了500Mbps。



jj 评论于
回复
感谢,受益匪浅
abc 评论于
回复
"保留一个网口供NAS专用,另一个网口做一个单网口的软路由",如果设备支持建议做链路聚合。
liu_geng 评论于
回复
链路聚合的话,软路由功能就不能用了吧?
这样设置应该有缺陷 评论于
回复
看学习的同学们考虑清楚呀
无名 评论于
回复
很奇怪端口2在VLAN1里是Untagged口,那么tag=1的数据流应该直接会被丢弃才对呀
愚蠢的地球人 评论于
回复
你是说软路由连接的端口3吧?端口3在VLAN1里是U,那么tag=1的数据包在流出端口3的时候会去掉tag发出,不会被丢弃的。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

友情链接

网站分类

最新留言

最近发表