前几个月入手了一个官翻的WNR3500L,此路由号称开源并对第三方固件支持是很吸引我的地方,开始先是刷了DD-WRT后来又换成TOMATO,在换成TOMATO后通过ssh连接到路由,ifconfig显示出了一大堆interface,除了熟悉的eth0,eht1,br0外,还多出vlan0,vlan1之类的,通过运行brctl show br0后,发现是把vlan0和eth1绑成br0的。这让我对其网络结构十分感兴趣。搜索了大量资料后,有了下面的心得:
首先 WNR3500L使用了BCM4718+BCM53115的组合方案,对比前一篇对RB450G的分析,参考下面的图片,可以看出BCM4718只有一个RGMII(Reduced Gigabit MII)通道,所以只能通过单一的端口来连接BCM53115(虽然BCM53115是支持双RGMII的,见下图)。
这个RGMII端口,在系统看来就是所谓的eth0。而另外一个无线ap部分,在系统看来就是eth1,所以eth0,eth1是两个“硬”interface,有实际物理线路对应,连接到cpu硬件上的有且只有这两个端口。其它inteface都是衍生于这两个“硬”interface上的“虚”interface。
既然br0是由vlan0和eth1组成的,那么就放在最后说,先看两个vlan是怎么回事。首先要说明的是BCM53115这个switch chip是具备划分vlan能力的,这也是它能被用在这个解决方案中的基本条件。先从它说起。在BCM53115中,如上面看共有7个GMAC和5个GPHY,5组GMAC+GPHY的组合就实际对应着5个物理端口,而另外两个GMAC中一个没用,另外一个通过RGMII和BCM4718上的 RGMII直接连接形成网络通道。所以从逻辑视图上看这里可以等同于一个6 ports的switch,其中port5和BCM4718的eth0相联,其它port0-4是物理端口。在划分vlan的时候,port0+port5被划分成了vlan1,port1-4+port5被划分成了vlan0。6个port分成两组,其中port5就是连接cpu那个是被共用的,从vlan角度可以视之为一个TRUNK端口(请自行搜索相关概念,这里只需要知道两个vlan都可以从它经过就是了)。其中vlan0对应着4个LAN口,vlan1对应着单独的WAN口。
BCM53115那边划分好 VLAN后,系统这边需要有对应的interface,因为tomato是基于linux的,那一般使用vconfig add eth0 x的方式来创建应用的interface,其中x就是vlan id。这里tomato在eth0的基础上创建了vlan0和vlan1两个interface,分别对应switch中划分的vlan0,vlan1。 然后回到eth1,因为无线ap可以视之为一个无线switch,那么需要wired lan和wireless lan处在同一个lan下,所以这里使用了桥接,用brctl创建了br0,然后把eth1(无线设备组)和vlan0(有线设备组)加了进去。最后对于系统来说,只要给vlan1和br0分配ip并采取路由规则就好了。因为有线lan内机器间数据交换是在vlan0中进行的,无线lan内数据交换是在 ap中进行的,有线和无线lan内数据交换是在br0中进行的。当然,如果是用pppoe拨号的话,实际提供网络的接口是ppp0,相当于直接使用时 vlan1的作用。
可以参照下面这图(虽然是针对wrt54g的,但同样适用于3500L)理解上面那段话:
如果还是看着乱的话,逻辑视图可以参考下面:
可以从图中发现没有eth0的存在。因为eth0这个interface本身并没有被使用,系统直接使用的是在它的基础上衍生出的vlan0,vlan1,ifconfig可以发现eth0根本没有分配ip。当然vlan0和eth1也是通过组合成br0的形式被使用的,我们在路由器中分配的lan ip实际上就是分配给br0的。如果是pppoe拨号的话,使用的interface是vlan1,这时vlan1也处于和eth0同样的境地,因为此时系统使用来连接网络的是拨号成功时生成的ppp0。ppp0本身使用着ISP提供的公网IP。
默认的方案是把四个lan口绑在一个vlan里了,其实完全可以设置switch的参数来划分更多的vlan,形成多wan口路由来连接不同的子网或是多拨什么的,总共5个口最多可以配成4wan+1lan。当然这是理论上的,具体情况要看路由器固件的支持程度了。配置switch的办法各个固件都不一 样,可以搜索一下。
之前一直认为做路由用的话机器上至少需要2个端口,但从分析3500L来看,单端口的linux机器,配合一个带vlan的交换机,也是同样能具备路由功能。
参考: