家里房子的网络走线是运营商一根光纤到弱电箱,弱电箱4根网线到3个房间及客厅。装修已经完成没有办法改线了。
之前客厅安装了一个小米路由器 R3G(已刷入 Hiboy 大佬的 Padavan 固件),家里无线信号真心不怎么样。虽然后面买了一个小米的 wifi信号放大器,信号覆盖范围是有所增加,但苦于小区里邻里之间的信道相互干扰和穿墙等因素,网速还是没有什么改善。
最近黑鸟博客发现小米 R3G 的 CPU 芯片 MT7621A 居然内置 switch,而且 padavan 提供了相关的命令和方法可以设置该 switch 的 vlan,决定调整下家里的网络,其主要思想是数据尽量走实体网线以减少 wifi 上的传输,尽量不要额外加设备(尽量利用旧设备为主,之前有 2 个小米 mini 在家吃灰)。
我家里的的组网如下(vlan 号是根据运营商的规划设定的):
上图中Modem放置在弱电箱中,弱电箱出3根网线分别到两个房间和客厅:
- Router1(R3G)性能较强,放置在客厅作为家里的主路由器;
- Router2、Router3(刷了Padavan固件)分别放置在主卧和客房,作为扩展接入的热点。
- 整个家庭的拨号和局域网的 DHCP、NAT 等均由 Router1 承担;
- Modem 的 PPPOE 设置为桥接模式(不让光猫拨号);
组网说明:
- 如果设置 Modem 拨号为路由模式,则 Modem 将自行拨号,NAT、DHCP 等功能都在 Modem 上完成,但黑鸟君长期用惯了Hiboy大佬的 Padavan 的 KP过广告、$$、多媒体服务器、VPN 拨入家庭网络(有公网IP)等功能,显然让 Modem 自行拨号就无法用这些功能了,故放弃;
- 如果让 Modem 后面的各路由器各自 PPPOE 拨号(黑鸟君所在城市可以多播),每个Router上再设置 KP、$$ 等,但这导致每个Router 都各自做 NAT,后面带来的设备将不在一个大的二层网络上,也放弃。(如果 Router2、Router3 通过 VPN 到 Router1 还是存在类似的跨三层问题)。
- 该组网的方案相当于把 Modem 的拨号、NAT 等功能移动到外置的 Router1,并把 Router1 的本地局域网反向接入到 Modem,利用 Modem 下面 LAN 口之间二层互通的特性,再连接到其他路由器上。
我测了下电信送的光猫(型号为 TEWA-700E)LAN 口有如下特性:不管是否带有 tag 头的包均能在各 LAN 口之间转发。可以把 Modem 的 LAN 口看做是交换机上具有相同缺省 vlan 的 trunk 口(假定缺省 vlan 为 1)。
有时客厅和主卧要看 IPTV,利用单线复用的思想,在 Router1、Router2 的 WAN 上打通 Vlan43 走 IPTV 业务,并将该 VLAN 绑定到Router1、Router2 的 LAN 口(该端口配置为 untag 模式),剥离 vlan 的 tag 头后连接到 IPTV 盒子。
物理网口与 siwtch 连接关系确定
我猜测 R3G 的内部的 switch 网口连接如下:
R3G(Padavan)系统 Linux上有 eth2、eth3、ra0、ra1、rai0、rai1 网卡,接线如上图,其中 eth2、ra0、ra1、rai0、rai1 配置成一个网桥,相当于一个交换机、它们在二层网络上互通。(下图未出现rai1是因为我没有开启 5G guest wifi)
图2中的红色框表示:switch和CPU及WAN/LAN的对应关系。 “switch vlan dump”命令结果里portmap的位置表示switch的网口,如“111-1-1”,从左到右序号从0到6(共7位)表示switch的7个网口。(其他路由器如果极路由4增强版,虽然用的也是MT7621A的处理器,其switch和CPU、WAN/LAN的对应关系却不太一样。自行配置switch前,需弄清WAN/LAN/CPU等网口与switch的对应关系)
确定 switch 和 CPU、WAN/LAN 的对应关系,黑鸟博客用了以下两种方法:
- 用“switch dump”看交换模块的二层转发表,根据其中的mac(即可知道对应的设备)和各个设备所连接路由器的网口,确定CPU、WAN/LAN连接的switch的位置。该命令输出结果中port(0:6)字段(共有8位,最后一位忽略)的位置和之前portmap对应。
- 在路由界面上“端口隔离和 VLAN 过滤”页面,设置各种组合,在后台观察哪些位置的网口发生变化从而确定各个物理网口与switch的对应关系。(备注:为避免在配置 switch 过程中连接中断,建议从wifi登录路由器)。
同理猜测得出小米 mini 的内部连线(可知 CPU 只有一个物理网卡连接 switch,这点 MT7621 确实比 MT7620 有所增强):
主路由器Router1(R3G)设置
根据规划R3G路由器从vlan94进行PPPOE拨号、从vlan43走IPTV业务。只需在界面上完成如下设置即可:
完成设置后此时路由vlan情况如下:
分析可知(结合“图 2 R3G内部switch连接图”):
- vlan94连接1(WAN)、5(CPU),可知CPU可以从94进入switch经过WAN口到Modem完成PPPOE拨号,此类包进出Router1均带94tag头;
- vlan43连接1(WAN)、3(LAN1)、5(CPU),IPTV盒子连接LAN1经过WAN口走IPTV业务,此类包进出Router1均带43tag头;
- vlan1是路由器本地局域网,IP、LAN2、内部网桥(接无线)在此 vlan 上;
- vlan2是系统自己配置的vlan连接1(WAN)、5(CPU),路由从 WAN 口收到不带 tag 的数据包,通过 switch 会打上 2tag头上送到 CPU 的 2 口;
根据规划,要求将 Router1 的本地局域网回送到光猫,有如下 2 个方法:
- 将2加入到网桥br0,这样 Router1 内部的 vlan1、vlan2 就合并了,本地局域网的数据包直接通过网桥 br0 经过 vlan2,从WAN 后出去(不带 tag)回送到 Modem;
配置:在路由器启动后执行“brctl addif br0 eth3.2”即可;
- 在 switch 上完成本地局域网的转发:
- 取消 vlan2 里的各个端口;
- 将 switch 的 1 号(WAN)口划入 vlan1,并设置该网口的确实 vlan 为 1;
- CPU 无需连接 vlan43(因为 IPTV 是盒子自己拨号的无需路由器CPU参与);
switch vlan set 1 1110101 0 0 uuu-u-u switch vlan set 2 0000000 0 0 ------- switch vlan set 43 0101000 0 0 -t-u--- switch vlan set 94 0100010 0 0 -t---t- switch reg w 0x2004 0x570003 switch reg w 0x2104 0xFF0003 switch reg w 0x2204 0x570003 switch reg w 0x2304 0x0A0003 switch reg w 0x2404 0x570003 switch reg w 0x2504 0x220003 switch reg w 0x2604 0x570003 switch pvid 0 1 switch pvid 1 1 switch pvid 2 1 switch pvid 3 43 switch pvid 4 1 switch pvid 5 1 switch pvid 6 1
MT7621A的vlan设置涉及到matrix寄存器的设置;(如果不会以后会具体讲)
由于每次修改各个 vlan 里的成员端口都要手动计算各个端口的 matrix 值,比较繁琐。本人自行开发了一个自动计算/配置的脚本:(需在所有switch vlan set 。。。命令之后运行),该脚本会根据 switch vlan dump 命令结果里的 portmap 列表计算matrix:
将下面的脚本拷贝到Padavan上,直接运行即可,默认是打印设置寄存器的命令(相关命令可以贴到路由器的启动后执行脚本里)。后面加“w”参数,表示脚本在打印的同时执行相应命令。(自行开发用用的,未经专门测试,不喜勿喷)
链接: https://pan.baidu.com/s/1h7Ob8BcXAaW6DjlZqSOO9g 提取码: xwrx
图 9 自动设置matrix脚本
按网络规划设置R3G路由器后,vlan相关数据如下图所示。
黑鸟博客测试了上述的 2 个方法都可以实现期望功能,但是推荐使用第2种,因为数据包可以在 switch 上直接转发,没有必要上送到 CPU 的网卡再通过网桥转发,回到 switch,白白消耗路由器性能,但是此方法配置较复杂。如果嫌麻烦并且也不想了解 switch 网口各种对应关系,直接用第一种方法就可以了。
辅路由器Router2(小米Mini)设置
Router2主要功能是:
- WAN 口上 vlan1(不带 tag)的包用做 wifi 的热点数据源,并连接到 LAN2 口(不带tag);
- WAN 口上 vlan43(带 tag),连接到 LAN1 口(剥掉 Tag),给 IPTV 用;
要实现上述的功能,Padavan 的 AP 模式是接近的,理论上在界面上设置 AP 模式后,手动修改 switch 完成 vlan43 的转发要求即可。
黑鸟博客在设置路由器为 AP 模式后,默认 vlan 配置如下:
尝试过以下方法:
switch vlan set 0 1 10111011 0 0 u-uuu-tt switch vlan set 1 43 01001000 0 0 -u--t--- switch pvid 1 43
发现 switch 的 1 号口(LAN1)上有 43vlan 的二层转发表,4 号口(WAN)上却没有。
查阅相关资料后,在上述三条命令的前面再增加了“mtk_esw 64 0x00020003 0x002B002B”,即通过mtk_esw命令设置vlan条目;
mtk_esw 64 0x00020003 0x002B002B switch vlan set 0 1 10111011 0 0 u-uuu-tt switch vlan set 1 43 01001000 0 0 -u--t--- switch pvid 1 43
查看switch上vlan相关配置:
发现此时二层转发表里有各种 vlan 的条目了,其中 43vlan 的转发条目和对应的端口信息都是正确的,1 号口(LAN1)上有 43vlan 的二层转发表,4 号口(WAN)也有了,但是此时 IPTV 业务依然无法使用,无法理解。
Padavan 固件在 AP 模式下,其“外部网络 (WAN) – 外网设置”这页面时无法使用,所以我也没有办法从页面上进行相关 vlan 的设置。
感觉 MT7620A 的处理器内部 switch 配置 vlan 后,也需设置下相关的寄存器,网上找不到资料,无法解决。这里如果有高手看到如果有办法解决,希望指点一二,本站黑鸟博客不胜感激。
既然解决不了,只能绕过去了。设置路由器为默认的路由模式,在页面上配置相关的 vlan 数据,然后修改 vlan 相关配置让 WAN 进来的(不带tag头的)数据包直接上送到网桥(不走 CPU 及 NAT)。页面上的配置如下:
上述配置完成后,switch配置如下(此时IPTV业务可以正常使用):
此 Router2 工作在路由模式下,家庭局域网的数据包不带 tag 从 WAN 进入路由器,经 NAT 后通过网桥 Br0 由 wifi 发射出来,这将导致从 Router2 的 wifi 连接上来的设备与主路由器 Router1 连接上来的设备不在一个 2 层的网络里。修改如下:
switch vlan set 1 2 00000000 0 0 -------- switch vlan set 2 6 00001011 0 0 ----u-tt switch pvid 4 6 ifconfig br0:0 192.168.199.201 netmask 255.255.255.0 ifconfig eth2.6 0.0.0.0 brctl addif br0 eth2.6 ifconfig eth2.2 0.0.0.0 route add default gw 192.168.199.1 echo "nameserver 192.168.199.1" > /etc/resolv.conf
Router2 不要做 NAT,即 vlan2 无需使用,通过 vlan6 将 WAN口上将不太 tag 的数据包上送到 CPU 的 eth2.6 虚拟网卡,将该 eth2.6网卡加入到网桥 br0,让家庭局域网的数据包能到网桥 br0,再连接到各个 wifi 网卡和 LAN2。注意:
- 这里一定要将数据包上送到 br0,这样 Router2 的 wifi 才能将接入的设备连接到家庭局域网里,不能再switch上直接转发);
- 这里要另外起一个 vlan 连接 WAN口和eth2(即vlan6),如果直接用 vlan2,即要求将 2 加入到网桥 br0 中,但此时eth2.1 已经在网桥里了,相当于将 HNAT 的输入(eth2.2)和输出(eth2.1)接在一个交换机(br0)上,将导致路由器死机,无法登陆;
- 因为默认 Router2 会在 br0 上起一个 DHCP 服务器,该 DHCP 将和 Router1 的 DHCP 冲突,应该配置关闭 Router2 上的DHCP、DNS、防火墙等(最重要的是 DHCP 一定要关);
- Router2 的 LAN 网络地址也要避免和 Router1 里的 LAN 在一个网段里,否则局域网的网关冲突。主路由器是配置的 168.199.1,Router2 要避开它;
完成上述配置后,Router2将可以完成网络规划中的预期功能。虽然实现上走了野路子,但功能上是实现了,只是不够简洁。最主要的问题还是在AP模式下switch不能正常转发vlan43中的数据包(可能刷Router2刷Pandorabox更加合适吧)。
辅路由器Router3(小米Mini)设置
该路由器设置为Padavan的AP模式,直接在页面上操作即可,无需多言。
TEWA-700E光猫设置
配置该光猫之前需先获取其超级用户名和密码,详见:
https://jingyan.baidu.com/article/ae97a646032107bbfd461d18.html
关于用户侧 VLAN 的理解,之前看过相关光猫 vlan 的配置,我的理解用户侧 vlan 是:家庭网络接入光猫后,如果收到带有所配置用户侧 vlan tag 头的包,光猫将自动剥掉该 tag 头,然后打上 WAN(运营商)侧的 vlan 的 tag,发到运营商。相当于替换了 tag 头里的 vlanid 字段。如下图:
即eth0 网口上收到带8tag的包,将替换为 94tag 的包发送给运营商,运营商回来的带 94tag 的包再替换为 8tag 的包,回到用户侧。
但是我在配置实践过程中,配置用户侧为 94 绑定到 1_INTERNET_B_VID_94(我所在的城市运营商是用 vlan94 提供网络服务的)。路由器时无法正常拨号的。这一点我比较难理解,希望论坛里的高手不吝赐教。
我的配置是这样的,删除所有的 vlan 侧绑定:
这样光猫就是纯粹的收包转发,路由器所发出的包,已经携带了运营商提供网络服务 vlan 的 tag 头。Router1 此时 PPPOE拨号成功;
同理也关闭光猫上 IPTV 网络连接的 VLAN,如下图:
光猫最主要的就是要完成上述两个地方的修改(这前提是:要求家庭网络PPPOE和IPTV的vlan规划和运营商提供的vlan一致),其他不要动;额外说明如下:
光猫内置一个 DHCP 服务器默认不带 tag 头,所以会和 Router1 的 DHCP 服务器冲突,所以要关闭光猫的 DHCP 服务器。光猫用户侧的 IP 地址也要避免与家庭局域网的IP在一个网段,否则可能造成 IP 冲突(如果要访问光猫页面,只需在连接家庭 wifi 后,手动在无线网卡上绑一个同网段的 IP 即可,如 192.168.1.6/24)。
规划中 Router1 连接在光猫的 LAN1(千兆)、Router2、Router3 分 别连接 LAN2、LAN3(百兆)。(如果要把光猫的 IPTV 口用作 LAN 口,只要将光猫的“1_INTERNET_B_VID_”配置页面中“LAN 端口绑定”中的 iTV 勾选选中,同时将“4_Other_B_VID_”配置页面中“LAN端口绑定”中iTV勾选去掉。)
我的光猫是放在弱电箱(铁制的)里的,它的 wifi 信号几乎可忽略,所以我关闭了光猫的 wifi。
完成上述配置后,我所规划的网络基本实现:从 Router1、Router2、Router3 接入的 wifi 设备都在一个二层局域网里,这些设备IP地址都是由主路由器 Router1 分配,所有的设备最终都是通过 Router1 访问 Internet,Router1 上的 KP、$$、多媒体服务器等都可以被家里所有的设备使用,Router2、Router3 只是做 wifi 热点的扩展。连接在 Router1 及 Router2 的 LAN1 口上的 IPTV 盒子时也能正常观看网络电视。
问题说明:
- Router1、Router3 的管理页面上可以看到所有接入家庭网络的设备列表。Router2 的管理页面上无法显示。
- 家里是电信 100M 的宽带,连接主路由器 Router1 的 5G wifi,下载速度 10MB/s 左右基本跑满。但连接辅助路由器Router2、Router3 的 5G wifi,下载速度只有 6-7MB/s,我感觉是光猫的包转发速率不足导致。
(转载)
作者,能否提供一下,你的padavan软件的版本,我k2p ,不能像你图四一样,建46 , 我这这最多16。
switch vlan dump
vid portmap eg-tag eg-con stag ivl fid
1 111---1 uuu---u 0 0 1 -
2 ----11- ----uu- 0 0 1 -
3 ------- ------- 0 0 1 -
15 ---111- ---ttt- 0 0 1 -
我最多是15 ,不能16以上的数字郁闷
请问博主有联系方式吗?我用高恪和op都实现了单线复用,在pavadan上面没有成功,方便在线指导一下吗?谢谢
很好的文章,家里网络结构与楼主很相似,我的是极路由4增强版,折腾了很久没能成功,请教命令“brctl addif br0 eth3.2”中2指的是什么?
我对光猫的那个绑定不是很了解,移动的光猫好像有点看不懂,2020.3.24留言。
如果可以可否加个QQ为小弟解答,磕头感谢,本人超级新手小白
老哥太强了? 科班的?为啥我没学过这么细致的东西 自己学有的折腾了
有点没理解“也能正常观看网络电视”,意思说并不是看itv咯?
太专业 看的都不太懂 :biggrin:
博主好厉害,写的这么专业