RT-AC86U VLAN 配置 - vlanctl 篇

RT-AC86U 没有 robocfg 命令,网上找不到成功配置 VLAN 的例子。几番摸索,发现可以用 vlanctl 或 vconfig 来实现,本篇介绍 vlanctl 的用法(传送门:vconfig 篇)。

示例 1

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

启用这个虚拟接口。

示例 2

示例 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

示例 3

示例 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

做了两处修改:

  1. 对于 --rx ,我们不再脱去 tag,所以去掉了 --pop-tag 。
  2. 对于 --tx ,因为之前没有脱掉 tag,所以 tag 数 是 1 而不是 0 (改为 --tags 1),然后不再需要添加 tag 和 设置 vid,所以去掉了 --push-tag 和 --set-vid 85 0 。

这样修改后,对于 --tx 其实我们什么也没做,所以这条 rule 是可以删掉的。

示例 4

除了 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,全部透传。

示例 5

前面的示例其实都不完整,因为一旦用 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

几点说明:

  • 用 #号 框起来的部分即是为了恢复 eth0 和 eth1 对 Native VLAN 的支持。之后的代码跟前一个示例相同。
  • 不知道为什么,新建的虚拟接口 eth0.v0 不能直接用于拨号上网,需要把它添加到一个 bridge 中。
  • 为了让系统知道拨号上网的接口改了,需要设置 nvram 几个相关变量,并且这段代码在开机过程中需要在 WAN 初始化好之前运行。
  • 需要从 LAN 对应的 bridge 中删掉 eht1,并添加 eth1.v0,所以这段代码在开机过程中需要在 LAN 初始化好之后运行。
  • services-start 是 梅林系统 中同时满足以上两个条件的唯一脚本。
  • bridge 中的接口有一段初始化的过程,需要从 disabled 经过 listening、learning 到 forwarding 等几个状态才能变成可用,所以开机拨号会变慢(不过也还好,就多一小会)。

完整的 IPTV 配置脚本参见:上海电信 TL-EP110 + RT-AC86U 实现观看 4K IPTV 无卡顿 (2019-10)

作者:u128393
首发:https://www.cnblogs.com/u128393/p/11629970.html

原文地址:https://www.cnblogs.com/u128393/p/11629970.html

时间: 2024-10-09 22:22:42

RT-AC86U VLAN 配置 - vlanctl 篇的相关文章

RT-AC86U VLAN 配置 - vconfig 篇

RT-AC86U 没有 robocfg 命令,网上找不到成功配置 VLAN 的例子.几番摸索,发现可以用 vlanctl 或 vconfig 来实现,本篇介绍 vconfig 的用法(传送门:vlanctl 篇). 示例 1 vconfig set_name_type DEV_PLUS_VID_NO_PAD vconfig add eth0 85 ifconfig eth0.85 up 我们逐条分解: vconfig set_name_type DEV_PLUS_VID_NO_PAD 设置创建虚

痞子衡嵌入式:飞思卡尔i.MX RT系列微控制器启动篇(2)- Boot配置(BOOT_CFG Pin/eFUSE)

大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的Boot配置. 在上一篇文章 飞思卡尔i.MX RT系列微控制器启动篇(1)- Boot简介 里痞子衡为大家介绍了Boot基本原理以及i.MXRT Boot方式简介.今天痞子衡就来重点聊一聊i.MXRT Boot方式具体由哪些配置决定的. 无论是什么芯片里的BootROM,其最核心的功能无非两个:一.从存放Application的存储器中加载执行:二.通过支持的通信接口接收来自Host的Applic

痞子衡嵌入式:飞思卡尔i.MX RT系列微控制器启动篇(3)- Serial Downloader模式(sdphost/mfgtool)

大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的Serial Downloader模式. 在上一篇文章 飞思卡尔i.MX RT系列微控制器启动篇(2)- Boot配置(BOOT Pin, eFUSE) 里痞子衡为大家介绍了i.MXRT Boot的行为配置,其中第一节里讲了Boot有三种行为模式:Serial Downloader.Boot From Fuses.Internal Boot,后两种是核心的加载启动行为模式,而Serial Downl

痞子衡嵌入式:飞思卡尔i.MX RT系列微控制器启动篇(4)- Flashloader初体验(blhost)

大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的Flashloader. 在上一篇文章 飞思卡尔i.MX RT系列微控制器启动篇(3)- Serial Downloader模式(sdphost, mfgtool) 里痞子衡为大家介绍了i.MXRT Boot的Serial Downloader模式,这种模式主要是用来引导启动Flashloader,那么Flashloader到底具有哪些功能?这是本篇文章痞子衡要为大家解惑的主题. 痞子衡在前面提过F

痞子衡嵌入式:飞思卡尔i.MX RT系列微控制器启动篇(6)- Bootable image格式与加载(elftosb/.bd/.bin)

大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的Bootable image格式与加载过程. 在i.MXRT启动系列第三篇文章 飞思卡尔i.MX RT系列微控制器启动篇(3)- Serial Downloader模式(sdphost, mfgtool) 里痞子衡在介绍使用sdphost引导启动Flashloader时使用过一个名叫ivt_flashloader.bin的image文件,其实这个image文件就是Bootable image的一种,

痞子衡嵌入式:飞思卡尔i.MX RT系列微控制器启动篇(9)- 从Parallel NOR启动

大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的Parallel NOR启动. 上一篇讲i.MXRT从Raw NAND启动的文章 飞思卡尔i.MX RT系列微控制器启动篇(8)- 从Raw NAND启动 一经放出,深入广大网友喜爱,短时间内阅读量飙升,这让痞子衡深入鼓舞,所以趁热打铁继续把从Parallel NOR启动也顺便一起讲了,为什么说是顺便呢?因为Parallel NOR与Raw NAND都是并行接口,属于同一门派,且这两种外存设备在i.

痞子衡嵌入式:飞思卡尔i.MX RT系列微控制器启动篇(13)- 从Serial(1-bit SPI) EEPROM/NOR恢复启动

大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的Serial EEPROM/NOR恢复启动. 在前几篇里痞子衡介绍的Boot Device都属于主动启动的Primary Boot Device(Serial NOR/NAND, Parallel NOR/NAND, SD/eMMC),试想一下如果遇到这样的情况,你选择启动的某个Primary Boot Device正常工作一段时间后某次开机突然因为某种未知原因无法启动了,此时系统无法正常工作,但如

基于cisco_vtp的vlan配置

step1:设计实验环境 实验环境:6台2950cisco交换机 8台PC.如图: swiches' hostnames A,B,C,D,E,F vtp: Server:Switch1 Client:Switch0,2,3,4,5,6 Domain:nashsun.com Password:cisco Trunk mode:trunk VLAN10 PC0:10.10.1.1/16 fa0/11 PC2:10.10.2.2/16 fa0/11 PC6:10.10.3.3/16 fa0/13 VL

【华为】MUX VLAN配置详解

MUX VLAN应用场景 在企业网中实现客户与客户之间不可互相访问,客户与员工之间不可互相访问,员工与员工之间可以互相访问,员工与客户都可以访问服务器. MUX VLAN是一种二层流量隔离机制 MUX VLAN 分为 Principal VLAN (主VLAN)和 Subordinate VLAN(从VLAN),从VLAN分为Group VLAN(互通从VLAN) 和 Separate VLAN(隔离型从VLAN) 通信权限 一丶主VLAN端口可以和所有VLAN通信 二丶互通型从VLAN可以和自