标签:其他 不清楚 初始 ast 删掉 成功 开机过程 原因 拨号上网
RT-AC86U 没有 robocfg 命令,网上找不到成功配置 VLAN 的例子。几番摸索,发现可以用 vlanctl 或 vconfig 来实现,本篇介绍 vlanctl 的用法(传送门:vconfig 篇)。
vlanctl --mcast --if-create eth0 85
vlanctl --if eth0 --rx --tags 1 --filter-vid 85 0 --pop-tag --set-rxif eth0.v85 --rule-append
vlanctl --if eth0 --tx --tags 0 --filter-txif eth0.v85 --push-tag --set-vid 85 0 --rule-append
ifconfig eth0.v85 up
我们逐条分解:
vlanctl --mcast --if-create eth0 85
基于 eth0 创建一个虚拟接口并命名为 eth0.v85,注意这里的 85 只是一个名字,跟 VLAN tag 没有任何关系。--mcast 在 vlanctl 的帮助文档上没看到,但 梅林 的代码里都加了这个参数,看名字应该是为接口启用多播。
vlanctl --if eth0 --rx --tags 1 --filter-vid 85 0 --pop-tag --set-rxif eth0.v85 --rule-append
如果 接口 eth0 接收到的数据 (--if eth0 --rx),有 1 个 VLAN tag (--tags 1),并且第 0 个 tag 的 VLAN ID 是 85 (--filter-vid 85 0),则 脱去 tag (--pop-tag),并设置接收接口为 eth0.v85 (--set-rxif eth0.v85)。把这条规则添加到表中 (--rule-append)。
vlanctl --if eth0 --tx --tags 0 --filter-txif eth0.v85 --push-tag --set-vid 85 0 --rule-append
接口 eth0 发送数据时 (--if eth0 --tx),如果 没有 VLAN tag (--tags 0),并且 发送数据的虚拟接口是 eth0.v85 (--filter-txif eth0.v85),则 给数据(以太帧)加上一个 VLAN tag (--push-tag),并给第 0 个(刚加的)tag 设置 VLAN ID 为 85 (--set-vid 85 0)。把这条规则添加到表中 (--rule-append)。
ifconfig eth0.v85 up
启用这个虚拟接口。
示例 1 只处理了 eth0(WAN 口) ,接下来我们对 eth1(LAN 口 4)做类似处理,并把它们桥接起来。这样 WAN 和 LAN 口 4 的 VLAN 85 就联通了。
vlanctl --mcast --if-create eth0 85
vlanctl --if eth0 --rx --tags 1 --filter-vid 85 0 --pop-tag --set-rxif eth0.v85 --rule-append
vlanctl --if eth0 --tx --tags 0 --filter-txif eth0.v85 --push-tag --set-vid 85 0 --rule-append
ifconfig eth0.v85 up
vlanctl --mcast --if-create eth1 85
vlanctl --if eth1 --rx --tags 1 --filter-vid 85 0 --pop-tag --set-rxif eth1.v85 --rule-append
vlanctl --if eth1 --tx --tags 0 --filter-txif eth1.v85 --push-tag --set-vid 85 0 --rule-append
ifconfig eth1.v85 up
brctl addbr vlan85
brctl addif vlan85 eth0.v85
brctl addif vlan85 eth1.v85
ifconfig vlan85 up
示例 2 中 VLAN 85 的 tag,从 eth0 进入路由器后被脱掉,再从 eth1 出去时又被加回去(反过来也一样),其实是做了无用功。我们可以稍作修改让 VLAN 85 的帧保留 tag 在 eth0 和 eth1 之间传输。
vlanctl --mcast --if-create eth0 85
vlanctl --if eth0 --rx --tags 1 --filter-vid 85 0 --set-rxif eth0.v85 --rule-append
vlanctl --if eth0 --tx --tags 1 --filter-txif eth0.v85 --rule-append # 这行可删除
ifconfig eth0.v85 up
vlanctl --mcast --if-create eth1 85
vlanctl --if eth1 --rx --tags 1 --filter-vid 85 0 --set-rxif eth1.v85 --rule-append
vlanctl --if eth1 --tx --tags 1 --filter-txif eth1.v85 --rule-append # 这行可删除
ifconfig eth1.v85 up
brctl addbr vlan85
brctl addif vlan85 eth0.v85
brctl addif vlan85 eth1.v85
ifconfig vlan85 up
做了两处修改:
这样修改后,对于 --tx 其实我们什么也没做,所以这条 rule 是可以删掉的。
除了 VLAN 85,我们也许同时想把 VLAN 51 也打通,或者我们根本不想管它 VLAN ID 是多少,除了 Native VLAN (untagged) 用于上互联网(上海电信是这样),其他全给打通(类似于 trunk)。这其实很容易实现,命令比上个示例更简单,这是 vlanctl 的灵活之处。
vlanctl --mcast --if-create eth0 1
vlanctl --if eth0 --rx --tags 1 --set-rxif eth0.v1 --rule-append
ifconfig eth0.v1 up
vlanctl --mcast --if-create eth1 1
vlanctl --if eth1 --rx --tags 1 --set-rxif eth1.v1 --rule-append
ifconfig eth1.v1 up
brctl addbr br1
brctl addif br1 eth0.v1
brctl addif br1 eth1.v1
ifconfig br1 up
除了接口名字都换了一下,只做了一处修改:去掉了 --filter-vid 85 0。这样只要 tag 数是 1,全部透传。
前面的示例其实都不完整,因为一旦用 vlanctl 创建虚拟接口之后,原来的接口就不能用了。具体原因不清楚,可能跟 vlanctl 的实现机制有关。所以为了让 WAN 和 LAN 的 Native VLAN 还能用,需要针对 --tags 0 也创建虚拟接口。
#!/bin/sh
# 该脚本需要在 services-start 中运行
# 注:这只是 vlanctl 的用法示例,不是完整的 IPTV 配置脚本
ifconfig eth0 allmulti up
#####################################################################
vlanctl --mcast --if-create eth0 0 #
vlanctl --if eth0 --rx --tags 0 --set-rxif eth0.v0 --rule-append #
ifconfig eth0.v0 up #
#
brctl addbr br2 #
brctl addif br2 eth0.v0 #
ifconfig br2 up #
#
nvram set wan_ifnames=br2 #
nvram set wan_ifname=br2 #
nvram set wan0_ifname=br2 #
#####################################################################
#####################################################################
brctl delif br0 eth1 #
#
vlanctl --mcast --if-create eth1 0 #
vlanctl --if eth1 --rx --tags 0 --set-rxif eth1.v0 --rule-append #
ifconfig eth1.v0 up #
#
brctl addif br0 eth1.v0 #
#####################################################################
vlanctl --mcast --if-create eth0 1
vlanctl --if eth0 --rx --tags 1 --set-rxif eth0.v1 --rule-append
ifconfig eth0.v1 up
vlanctl --mcast --if-create eth1 1
vlanctl --if eth1 --rx --tags 1 --set-rxif eth1.v1 --rule-append
ifconfig eth1.v1 up
brctl addbr br1
brctl addif br1 eth0.v1
brctl addif br1 eth1.v1
ifconfig br1 up
几点说明:
完整的 IPTV 配置脚本参见:上海电信 TL-EP110 + RT-AC86U 实现观看 4K IPTV 无卡顿 (2019-10) 。
作者:u128393
首发:https://www.cnblogs.com/u128393/p/11629970.html
标签:其他 不清楚 初始 ast 删掉 成功 开机过程 原因 拨号上网
原文地址:https://www.cnblogs.com/u128393/p/11629970.html