Bridging and Switching
网桥与交换

类似以太网的网络(以太网、Ethernet over IP、ap-bridge 或 bridge 模式下的 IEEE 802.11、WDS、VLAN)可以使用 MAC 网桥连接在一起。网桥功能允许互连连接到不同 LAN 的主机(使用 EoIP 时,只要它们之间存在任何类型的 IP 网络互连,地理上分散的网络也可以被桥接),就像它们连接到单个 LAN 一样。由于网桥是透明的,它们不会出现在 traceroute 列表中,如果这些 LAN 被桥接,任何工具都无法区分在一个 LAN 中工作的主机和在另一个 LAN 中工作的主机。但是,根据 LAN 互连的方式,主机之间的延迟和数据速率可能会有所不同。
复杂拓扑中可能会出现网络环路(有意或无意)。如果不做任何特殊处理,环路将阻止网络正常运行,因为它们会导致雪崩式的数据包增殖。每个网桥都运行一种算法来计算如何防止环路。(R/M)STP 允许网桥相互通信,因此它们可以协商出无环拓扑。所有其他原本会形成环路的替代连接都处于待机状态,这样一旦主连接发生故障,另一个连接就可以接替它。此算法定期交换配置消息(BPDU - 网桥协议数据单元),以便所有网桥都能获得有关网络拓扑变化的最新信息。(R/M)STP 选择一个根网桥,它负责网络重新配置,例如阻塞和打开其他网桥上的端口。根网桥是具有最低网桥 ID 的网桥。
网桥接口设置
要将多个网络组合成一个网桥,应创建一个网桥接口。之后,应将所有所需的接口设置为它的端口。默认情况下,网桥 MAC 地址将根据网桥端口配置自动选择。为避免不需要的 MAC 地址更改,建议禁用 auto-mac 并使用 admin-mac 手动指定 MAC 地址。
子菜单: /interface/bridge
| Property | Description |
|---|---|
| add-dhcp-option82 (yes | no; Default: no) | 重要: 从 RouterOS 7.23 版本开始,此设置已被移除。现在可以使用预定义变量(如 BRIDGEMAC、HOSTNAME、INTERFACE、VID)配置自定义 Remote ID 和 Circuit ID 值。有关详细信息,请参阅下面的 dhcp-agent-circuit-id 和 dhcp-agent-remote-id 属性。如果在早期版本(7.22 或更早版本)中启用了此设置,升级将自动把配置更新为新格式。是否向 DHCP 数据包添加 DHCP Option 82 信息(Agent Remote ID 和 Agent Circuit ID)。可以与支持 Option 82 的 DHCP 服务器一起使用,以分配 IP 地址并实施策略。此属性仅在 dhcp-snooping 设置为 yes 时生效。在 RouterOS 7.22 或更早版本中,这些值是预定义的且无法修改:对于 Agent Remote ID,RouterOS 使用网桥接口 MAC 地址,格式为 "xx:xx:xx:xx:xx:xx"(小写、冒号分隔)。对于 Agent Circuit ID,RouterOS 使用 DHCP 客户端所连接的接口名称和 VLAN ID,以冒号分隔(interface:vlan-id)。仅当网桥上启用了 <code>vlan-filtering</code> 时才包含 VLAN ID。例如(vlan-filtering=yes):Agent Remote ID - cc:2d:e0:01:6a:43 Agent Circuit ID - ether2:10 |
| admin-mac (MAC address; Default: none) | 网桥的静态 MAC 地址。此属性仅在 auto-mac 设置为 no 时生效。 |
| ageing-time (time; Default: 00:05:00) | 主机信息在网桥数据库中保留多长时间。 |
| arp (disabled | enabled | local-proxy-arp | proxy-arp | reply-only; Default: enabled) | 地址解析协议设置<code>disabled</code> - 接口将不使用 ARP<code>enabled</code> - 接口将使用 ARP<code>local-proxy-arp</code> - 路由器在接口上执行代理 ARP 并向同一接口发送回复<code>proxy-arp</code> - 路由器在接口上执行代理 ARP 并向其他接口发送回复<code>reply-only</code> - 接口仅回复来自匹配的 IP 地址/MAC 地址组合的请求,这些组合作为静态条目输入到 IP/ARP 表中。不会自动在 IP/ARP 表中存储动态条目。因此为了使通信成功,必须已存在有效的静态条目。 |
| arp-inspection (yes | no; Default: no) | 启用或禁用 ARP 检查。启用后,到达非信任端口的 ARP 数据包会根据 DHCP snooping 绑定数据库进行验证。发送方 MAC–IP 对与绑定条目不匹配的数据包将被丢弃。在信任端口上,所有 ARP 数据包都无需验证即可转发。此属性仅在 dhcp-snooping 设置为 yes 时生效。 |
| arp-timeout (auto | integer; Default: auto) | 在没有从 IP 收到数据包后,ARP 记录在 ARP 表中保留的时间。值 auto 等于 /ip/settings 中 arp-timeout 的值,默认为 30s。 |
| auto-mac (yes | no; Default: yes) | 当配置 auto-mac=yes 时,网桥将按照以下优先级顺序自动为网桥接口选择一个 MAC 地址:来自网桥中的以太网接口;来自网桥中的非以太网接口(例如 WiFi 或隧道);如果上述都不可用,则使用随机生成的地址。如果配置发生更改,例如向网桥添加新端口,则仅当出现更高优先级的地址来源时,网桥的 MAC 地址才会更新。例如,如果网桥最初使用随机生成的 MAC,然后添加了一个以太网接口,MAC 将根据最高可用优先级(此例中为以太网接口)更新。如果当前 MAC 与一个被移动到不同网桥的端口关联,网桥也将更新 MAC 地址。当前 MAC 地址及其优先级会被保存,并将在重启后重用。当配置 auto-mac=no 时,您可以使用 admin-mac 属性手动设置静态 MAC 地址。 |
| comment (string; Default: ) | 接口的简短描述。 |
| dhcp-agent-circuit-id (string; Default: !dhcp-agent-circuit-id) | 为通过网桥的 DHCP 消息指定 Option 82 的 Circuit ID 子选项值。字符串长度限制为 255 个字符。此设置取代了现已弃用的 add-dhcp-option82 属性。如果在早期版本(7.22 或更早版本)中启用了 add-dhcp-option82,升级将自动把配置更新为新格式:$(INTERFACE):$(VID)。通过 GUI 配置该设置时也将显示此格式。支持以下变量:$(BRIDGEMAC) - 当前网桥 MAC 地址,格式为 "xx:xx:xx:xx:xx:xx"(小写、冒号分隔);$(HOSTNAME) - 系统标识;$(INTERFACE) - DHCP 客户端所连接的接口名称;$(VID) - DHCP 客户端使用的 VLAN ID。如果 DHCP 客户端未标记,则 VID 对应于该端口的 <code>pvid</code>。仅在网桥上启用了 <code>vlan-filtering</code> 时适用。变量语法规则 变量必须括在括号内并以美元符号($)为前缀。从终端配置时,美元符号必须使用反斜杠(\)转义,否则它将被解释为 RouterOS 脚本变量。示例:/interface/bridge``add add-dhcp-option82=yes dhcp-agent-circuit-id="interface: \$(INTERFACE), vlan: \$(VID)" dhcp-snooping=yes name=bridge1 vlan-filtering=yes 此属性仅在 dhcp-snooping 设置为 yes 时生效。 |
| dhcpv6-agent-circuit-id (string; Default: !dhcpv6-agent-circuit-id) | 为通过网桥的 DHCPv6 消息指定 Option 18 的 Interface ID 子选项值。dhcpv6-agent-circuit-id 属性遵循与 dhcp-agent-circuit-id 相同的规则。 |
| dhcp-agent-remote-id (string; Default: !dhcp-agent-remote-id) | 为通过网桥的 DHCP 消息指定 Option 82 的 Remote ID 子选项值。字符串长度限制为 255 个字符。此设置取代了现已弃用的 add-dhcp-option82 属性。如果在早期版本(7.22 或更早版本)中启用了 add-dhcp-option82,升级将自动把配置更新为新格式:$(BRIDGEMAC)。通过 GUI 配置该设置时也将显示此格式。支持以下变量:$(BRIDGEMAC) - 当前网桥 MAC 地址,格式为 "xx:xx:xx:xx:xx:xx"(小写、冒号分隔);$(HOSTNAME) - 系统标识;$(INTERFACE) - DHCP 客户端所连接的接口名称;$(VID) - DHCP 客户端使用的 VLAN ID。如果 DHCP 客户端未标记,则 VID 对应于该端口的 <code>pvid</code>。仅在网桥上启用了 <code>vlan-filtering</code> 时适用。变量语法规则 变量必须括在括号内并以美元符号($)为前缀。从终端配置时,美元符号必须使用反斜杠(\)转义,否则它将被解释为 RouterOS 脚本变量。示例:/interface/bridge``add add-dhcp-option82=yes dhcp-agent-remote-id="ip: 192.168.88.1, identity: \$(HOSTNAME), mac: \$(BRIDGEMAC)" dhcp-snooping=yes name=bridge1 vlan-filtering=yes 此属性仅在 dhcp-snooping 设置为 yes 时生效。 |
| dhcpv6-agent-remote-id (string; Default: !dhcpv6-agent-remote-id) | 为通过网桥的 DHCPv6 消息指定 Option 37 的 Remote ID 子选项值。dhcpv6-agent-remote-id 属性遵循与 dhcp-agent-remote-id 相同的规则。 |
| dhcp-snooping (yes | no; Default: no) | 在网桥上启用或禁用 DHCP Snooping。注意: 启用 DHCP snooping 功能将关闭网桥 fast-path,进而影响通过该网桥的连接进行 fasttrack 的能力。 |
| dhcpv6-snooping(yes | no; Default: no) | 在网桥上启用或禁用 DHCPv6 Snooping。注意: 启用 DHCP snooping 功能将关闭网桥 fast-path,进而影响通过该网桥的连接进行 fasttrack 的能力。 |
| disabled (yes | no; Default: no) | 更改网桥是否被禁用。 |
| ether-type (0x9100 | 0x8100 | 0x88a8; Default: 0x8100) | 更改 EtherType,用于确定数据包是否具有 VLAN 标记。具有匹配 EtherType 的数据包被视为已标记数据包。此属性仅在 vlan-filtering 设置为 yes 时生效。 |
| fast-forward (yes | no; Default: yes) | Fast Path 的一种特殊且更快的实现,仅在具有 2 个接口的网桥上工作(默认仅对新网桥启用)。更多详细信息可在 Fast Forward 部分找到。 |
| forward-delay (time; Default: 00:00:15) | 网桥接口初始化阶段(即路由器启动或启用接口后)在监听/学习状态下花费的时间,之后网桥将开始正常工作。 |
| forward-reserved-addresses (yes | no: Default: no) | 是否转发 01:80:C2:00:00:0x 范围内的 IEEE 保留多播 MAC 地址。符合 R/M/STP 标准的网桥应避免转发这些数据包;此属性仅在 protocol-mode 设置为 none 时才可应用。启用保留 MAC 地址的转发可能会影响某些依赖这些地址的协议。建议仅在绝对必要时才启用转发,例如在透明桥接设置中(例如扩展长链路、将网桥用作媒体转换器或进行网络分析)。以下是一些值得注意的、由 RouterOS 使用的 MAC 地址和协议:01:80:C2:00:00:00 - 生成树协议(STP);01:80:C2:00:00:01 - 以太网流量控制;01:80:C2:00:00:02 - 链路聚合控制协议(LACP);01:80:C2:00:00:03 - Dot1x 客户端和服务器;01:80:C2:00:00:08 - 生成树协议(用于 802.1ad 网桥,使用 <code>ether-type=0x88a8</code>);01:80:C2:00:00:0D - 多 VLAN 注册协议(用于 802.1ad 网桥,使用 <code>ether-type=0x88a8</code>);01:80:C2:00:00:0E - 链路层发现协议、多机箱链路聚合组和精确时间协议;重要: 流量控制 MAC 地址 01:80:C2:00:00:01 是一个例外;它不会被网桥转发。 |
| frame-types (admit-all | admit-only-untagged-and-priority-tagged | admit-only-vlan-tagged; Default: admit-all) | 指定网桥端口上允许的帧类型。此属性仅在 vlan-filtering 设置为 yes 时生效。 |
| igmp-snooping (yes | no; Default: no) | 启用多播组和端口学习,以防止多播流量泛洪到网桥中的所有接口。 |
| igmp-version (2 | 3; Default: 2) | 当网桥接口充当 IGMP 查询器时,选择将生成 IGMP 成员资格查询的 IGMP 版本。此属性仅在 igmp-snooping 和 multicast-querier 设置为 yes 时生效。 |
| ingress-filtering (yes | no; Default: yes) | 启用或禁用 VLAN 入口过滤,它会检查入口端口是否是网桥 VLAN 表中收到的 VLAN ID 的成员。默认情况下,网桥 VLAN 表中不存在的 VLAN 会在发出(出口)之前被丢弃,但此属性允许您在收到数据包时(入口)丢弃它们。应与 frame-types 一起使用,以指定入口流量应为已标记还是未标记。此属性仅在 vlan-filtering 设置为 yes 时生效。自 RouterOS v7 起,该设置默认启用。 |
| ip-source-guard (yes | no; Default: no) | 启用或禁用 IP Source Guard。启用后,网桥会根据 DHCP snooping 绑定数据库验证到达非信任端口的 IPv4 数据包的源 IP 地址。源 MAC–IP 对与入口端口的绑定条目不匹配的数据包将被丢弃。在信任端口上,所有数据包都无需验证即可转发。此属性仅在 dhcp-snooping 设置为 yes 时生效。 |
| l2mtu (read-only; Default: ) | L2MTU 表示此接口可以发送的不含 MAC 报头的帧的最大大小。L2MTU 值将由网桥自动设置,它将使用所有关联网桥端口中最小的 L2MTU 值。此值无法手动更改。 |
| last-member-interval (time; Default: 1s) | 当网桥端口上的最后一个客户端取消订阅某个多播组且网桥充当活动查询器时,网桥将发送特定于组的 IGMP/MLD 查询,以确保没有其他客户端仍处于订阅状态。该设置会更改这些查询的响应时间。如果在某个时间段内(last-member-interval * last-member-query-count)没有收到成员资格报告,则该多播组将从多播数据库(MDB)中移除。如果网桥端口配置了 fast-leave,则多播组将立即移除,而不发送任何查询。此属性仅在 igmp-snooping 和 multicast-querier 设置为 yes 时生效。 |
| last-member-query-count (integer: 0..4294967295; Default: 2) | 在 IGMP/MLD snooping 网桥停止转发某个多播流之前,last-member-interval 应经过多少次。此属性仅在 igmp-snooping 和 multicast-querier 设置为 yes 时生效。 |
| max-hops (integer: 6..40; Default: 20) | 在启用 MSTP 的网络中,BPDU 在同一区域被忽略之前可以经过的网桥数量。此属性仅在 protocol-mode 设置为 mstp 时生效。 |
| max-learned-entries (integer: 0..4294967295 | auto | unlimited; Default: auto) | 设置网桥接口可学习的最大主机数。默认值为 auto,它取决于已安装的 RAM 大小。可以设置高于默认值的值或选择 unlimited 选项,但这会增加内存耗尽的风险。某些 RAM 大小的默认值:64 MB 为 8192;128 MB 为 16384;256 MB 为 32768;512 MB 为 65536;1024 MB 或更高为 131072。此限制专门适用于网桥接口,而不是交换机 FDB 表上的硬件限制。即使达到网桥限制,交换机仍可以在其硬件限制内继续学习主机并做出正确的转发决策。但是,这些额外的主机不会显示在 /interface/bridge/host 表中,也无法被监控。此外,达到此限制可能会影响 MLAG 主机同步。此设置自 RouterOS 7.16 版本起可用。 |
| max-message-age (time: 6s..40s; Default: 00:00:20) | 更改由根网桥传输的 BPDU 数据包中的 Max Age 值。根网桥发送的 BPDU 将 Max Age 设置为 max-message-age 值,Message Age 为 0。每个后续网桥在发送其 BPDU 之前都会增加 Message Age。一旦网桥收到 Message Age 等于或大于 Max Age 的 BPDU,该 BPDU 将被忽略。此属性仅在 protocol-mode 设置为 stp 或 rstp 时生效。 |
| membership-interval (time; Default: 4m20s) | 如果网桥端口上没有收到 IGMP/MLD 成员资格报告,则多播数据库(MDB)中的条目被移除之后的时间量。此属性仅在 igmp-snooping 设置为 yes 时生效。 |
| mld-version (1 | 2; Default: 1) | 当网桥接口充当 MLD 查询器时,选择将生成 MLD 成员资格查询的 MLD 版本。此属性仅在网桥具有活动 IPv6 地址、igmp-snooping 和 multicast-querier 设置为 yes 时生效。 |
| mtu (integer; Default: auto) | 最大传输单元。默认情况下,网桥将自动设置 MTU,它将使用所有关联网桥端口中最小的 MTU 值。未添加任何网桥端口时,默认网桥 MTU 值为 1500。MTU 值可以手动设置,但不能超过网桥 L2MTU 或最小网桥端口 L2MTU。如果添加的新网桥端口的 L2MTU 小于网桥的 actual-mtu(由 mtu 属性设置),则手动设置的值将被忽略,网桥将表现得如同设置了 mtu=auto。在网桥上添加 VLAN 接口时,并且当 VLAN 使用高于默认 1500 的 MTU 时,建议手动设置网桥的 MTU。 |
| multicast-querier (yes | no; Default: no) | 多播查询器会生成周期性的 IGMP/MLD 通用成员资格查询,所有支持 IGMP/MLD 的设备都会以 IGMP/MLD 成员资格报告进行响应。通常,PIM(多播)路由器或 IGMP 代理会生成这些查询。通过使用此属性,您可以使启用了 IGMP/MLD snooping 的网桥生成 IGMP/MLD 通用成员资格查询。当第 2 层网络中没有活动查询器(PIM 路由器或 IGMP 代理)时,应使用此属性。第 2 层网络中没有多播查询器时,多播数据库(MDB)不会更新;已学习的条目将超时,IGMP/MLD snooping 将无法正常工作。仅生成未标记的 IGMP/MLD 通用成员资格查询。IGMP 查询以网桥接口自身的 IPv4 地址作为源地址发送(请参阅 querier-uses-bridge-address),MLD 查询以网桥接口的 IPv6 链路本地地址发送。如果检测到外部 IGMP/MLD 查询器,网桥将不会发送查询(请参阅监控值 igmp-querier 和 mld-querier)。此属性仅在 igmp-snooping 设置为 yes 时生效。 |
| multicast-router (disabled | permanent | temporary-query; Default: temporary-query) | 多播路由器端口是连接多播路由器或查询器的端口。在此端口上,将发送未注册的多播流和 IGMP/MLD 成员资格报告。此设置更改网桥接口本身的多播路由器状态。此属性可用于向网桥接口发送 IGMP/MLD 成员资格报告,以进行进一步的多播路由或代理。此属性仅在 igmp-snooping 设置为 yes 时生效。<code>disabled</code> - 禁用网桥接口上的多播路由器状态。无论网桥接口上配置了什么,未注册的多播和 IGMP/MLD 成员资格报告都不会发送到网桥接口。<code>permanent</code> - 启用网桥接口上的多播路由器状态。无论网桥接口上配置了什么,未注册的多播和 IGMP/MLD 成员资格报告都会发送到网桥接口本身。<code>temporary-query</code> - 使用 IGMP/MLD 查询自动检测网桥接口上的多播路由器状态。 |
| name (text; Default: bridgeN) | 网桥接口的名称。 |
| port-cost-mode (long | short; Default: long) | 更改桥接端口的端口路径成本和内部路径成本模式,利用基于接口速度的自动值。此设置不会影响手动配置了 path-cost 或 internal-path-cost 属性的桥接端口。以下示例说明了与特定数据速率相对应的路径成本(中间速率按比例计算):<details><summary>路径成本表</summary>Data rateLongShort10 Mbps2,000,000100100 Mbps200,000191 Gbps20,000410 Gbps2,000225 Gbps800140 Gbps500150 Gbps4001100 Gbps2001</details> 对于硬件卸载的绑定接口,将应用所有绑定成员端口中最大的路径成本;此值不受绑定总链路速度的影响。对于虚拟接口(如 VLAN、EoIP、VXLAN 和非硬件卸载的绑定接口),以及 wifi、wireless 和 60GHz 接口,long 模式分配路径成本 20,000,short 模式分配 10。对于动态桥接的接口(例如 wifi、wireless、PPP、VPLS),long 模式的路径成本默认为 20,000,short 模式为 10。但是,这可以由动态向网桥添加接口的服务手动覆盖,例如通过 CAPsMAN 的 datapath.bridge-cost 设置。使用 端口监控 观察应用的路径成本。当 protocol-mode 设置为 stp、rstp 或 mstp 时,此属性生效。 |
| priority (integer: 0..65535 decimal format or 0x0000-0xffff hex format; Default: 32768 / 0x8000) | 网桥优先级,由 R/STP 用于确定根网桥,由 MSTP 用于确定 CIST 和 IST 区域根网桥。当 protocol-mode 设置为 none 时,此属性无效。有效值: 网桥优先级必须以 4096(0x1000)为步长设置。最低的 12 位被忽略。有效值为:0x0000、0x1000、0x2000、0x3000、0x4000、0x5000、0x6000、0x7000、0x8000、0x9000、0xa000、0xb000、0xc000、0xd000、0xe000、0xf000(或其十进制等价值:0、4096、8192、12288、16384、20480、24576、28672、32768、36864、40960、45056、49152、53248、57344、61440)。 |
| protocol-mode (none | rstp | stp | mstp; Default: rstp) | 选择生成树协议(STP)或快速生成树协议(RSTP),以确保任何桥接 LAN 的无环拓扑。RSTP 在拓扑变化后提供更快的生成树收敛。选择 MSTP 以确保跨多个 VLAN 的无环拓扑。01:80:C2:00:00:0x 范围内保留 MAC 地址的转发已与 protocol-mode=none 分离,自 RouterOS v7.16 起作为可控属性 forward-reserved-addresses 提供。 |
| pvid (integer: 1..4094; Default: 1) | 端口 VLAN ID(pvid)指定未标记入口流量被分配到哪个 VLAN。例如,它适用于从网桥 IP 发送并指向网桥端口的帧。此属性仅在 vlan-filtering 设置为 yes 时生效。 |
| querier-interval (time; Default: 4m15s) | 更改检测到的查询器和多播路由器端口的超时时间。此属性仅在 igmp-snooping 设置为 yes 时生效。 |
| querier-uses-bridge-address (yes | no; Default: yes) | 启用后,网桥 IGMP 查询器使用网桥接口自身的 IPv4 地址作为 IGMP 查询数据包的源地址,而不是默认的 0.0.0.0。某些多播客户端认为来自 0.0.0.0 的查询无效并不予响应,这可能导致 snooping 表条目超时时多播流中断。此属性仅在 igmp-snooping 和 multicast-querier 设置为 yes 且网桥接口已分配 IPv4 地址时生效。此设置仅适用于 IPv4(IGMP)。MLD 查询始终使用网桥接口的 IPv6 链路本地地址。 |
| query-interval (time; Default: 2m5s) | 当网桥接口充当 IGMP/MLD 查询器时,更改发送 IGMP/MLD 通用成员资格查询的时间间隔。该间隔在发送最后一个启动查询之后开始。此属性仅在 igmp-snooping 和 multicast-querier 设置为 yes 时生效。 |
| query-response-interval (time; Default: 10s) | 当网桥作为 IGMP/MLD 查询器处于活动状态时,该设置更改通用 IGMP/MLD 查询的响应时间。此属性仅在 igmp-snooping 和 multicast-querier 设置为 yes 时生效。 |
| region-name (text; Default: ) | MSTP 区域名称。此属性仅在 protocol-mode 设置为 mstp 时生效。 |
| region-revision (integer: 0..65535; Default: 0) | MSTP 配置修订号。此属性仅在 protocol-mode 设置为 mstp 时生效。 |
| ra-guard (yes | no; Default: no) | RA guard - 一种安全功能,根据授权的信任端口列表验证传入的路由器通告。 |
| startup-query-count (integer: 0..4294967295; Default: 2) | 指定当网桥接口启用或活动查询器超时时,必须发送通用 IGMP/MLD 查询的次数。此属性仅在 igmp-snooping 和 multicast-querier 设置为 yes 时生效。 |
| startup-query-interval (time; Default: 31s250ms) | 指定启动通用 IGMP/MLD 查询之间的间隔。此属性仅在 igmp-snooping 和 multicast-querier 设置为 yes 时生效。 |
| transmit-hold-count (integer: 1..10; Default: 6) | 端口传输状态机用于限制传输速率的 Transmit Hold Count。 |
| vlan-filtering (yes | no; Default: no) | 全局启用或禁用网桥的 VLAN 功能。 |
危险
更改某些属性可能导致网桥临时禁用所有端口。在生产环境中更改此类属性时必须考虑到这一点,因为它可能导致所有数据包被临时丢弃。此类属性包括
vlan-filtering、protocol-mode、igmp-snooping、fast-forward等。
示例
以下示例演示如何创建并验证一个用于简单第 2 层交换的基本网桥接口。此配置创建一个网桥,将多个以太网端口组合成一个交换网段。
[admin@MikroTik] > /interface/bridge/add
[admin@MikroTik] > interface bridge print
Flags: X - disabled, R - running
0 R name="bridge1" mtu=auto actual-mtu=1500 l2mtu=65535 arp=enabled arp-timeout=auto mac-address=5E:D2:42:95:56:7F protocol-mode=rstp fast-forward=yes
igmp-snooping=no auto-mac=yes ageing-time=5m priority=0x8000 max-message-age=20s forward-delay=15s transmit-hold-count=6 vlan-filtering=no
dhcp-snooping=no
网桥监控
要监控网桥接口的当前状态,请使用 monitor 命令。
子菜单: /interface/bridge/monitor
| Property | Description |
|---|---|
| bridge-id (priority.MAC address) | 本地网桥标识符,其形式为 bridge-priority.bridge-MAC-address。 |
| current-mac-address (MAC address) | 网桥的当前 MAC 地址。 |
| designated-port-count (integer) | 指定网桥端口的数量。 |
| declared-vlan-ids (integer 1..4094) | 通过 MVRP 协议 在网桥接口上声明的 VLAN。 |
| fast-forward (yes | no) | 网桥 fast-forward 是否处于活动状态。 |
| igmp-querier (none | interface & IPv4 address) | 显示检测到的 IGMP 查询器的网桥端口和源 IP 地址。仅显示检测到的外部 IGMP 查询器,本地网桥 IGMP 查询器(包括 IGMP 代理和 PIM)将不会显示。仅当启用 igmp-snooping 时才显示监控值。 |
| mld-querier (none | interface & IPv6 address) | 显示检测到的 MLD 查询器的网桥端口和源 IPv6 地址。仅显示检测到的外部 MLD 查询器,本地网桥 MLD 查询器将不会显示。仅当启用 igmp-snooping 且网桥具有活动 IPv6 地址时才显示监控值。 |
| mst-config-digest (integer) | VLAN 到 MST 实例 ID 映射的计算哈希值。 |
| multicast-router (yes | no) | 显示是否在端口上检测到多播路由器。仅当启用 igmp-snooping 时才显示监控值。 |
| port-count (integer) | 网桥端口的数量。 |
| regional-root-bridge-id (priority.MAC address) | 区域根网桥 ID,其形式为 bridge-priority.bridge-MAC-address。仅当启用 MSTP 时适用。 |
| registered-vlan-ids (integer 1..4094) | 通过 MVRP 协议 在网桥接口上注册的 VLAN。 |
| root-bridge (yes | no) | 显示网桥是否为生成树的根网桥。 |
| root-bridge-id (priority.MAC address) | 根网桥 ID,其形式为 bridge-priority.bridge-MAC-address。 |
| root-path-cost (integer) | 到根网桥路径的总成本。 |
| root-port (name) | 根网桥所连接的端口。 |
| state (enabled | disabled) | 网桥状态。 |
[admin@MikroTik] /interface/bridge/monitor bridge1
state: enabled
current-mac-address: 2C:C8:1B:FF:92:F4
bridge-id: 0x1000.2C:C8:1B:FF:92:F4
root-bridge: yes
root-bridge-id: 0x1000.2C:C8:1B:FF:92:F4
regional-root-bridge-id: 0x1000.2C:C8:1B:FF:92:F4
root-path-cost: 0
root-port: none
port-count: 2
designated-port-count: 2
mst-config-digest: d2b171a8ad95f593c241fc33d419a88c
fast-forward: no
multicast-router: no
igmp-querier: none
mld-querier: none
declared-vlan-ids: 1
registered-vlan-ids: 1
生成树协议
RouterOS 网桥接口能够运行生成树协议,以确保无环且冗余的拓扑。对于只有 2 个网桥的小型网络,STP 不会带来很多好处,但对于较大的网络,正确配置 STP 至关重要,即使只有一个网桥发生故障,将 STP 相关值保留为默认值也可能导致网络完全不可达。要实现正确的无环且冗余拓扑,有必要正确设置网桥优先级、端口路径成本和端口优先级。
危险
在 RouterOS 中,可以为网桥优先级设置 0 到 65535 之间的任何值,而 IEEE 802.1W 标准规定网桥优先级必须以 4096 为步长。这可能导致不支持此类值的设备之间出现兼容性问题。为避免兼容性问题,建议仅使用这些优先级:0、4096、8192、12288、16384、20480、24576、28672、32768、36864、40960、45056、49152、53248、57344、61440 STP 有多个变体;目前 RouterOS 支持 STP、RSTP 和 MSTP。根据需要,可以使用其中任何一种;某些设备能够使用硬件卸载运行其中一些协议;有关哪些设备支持它的详细信息可以在硬件卸载部分找到。STP 被认为已过时且缓慢;在所有网络拓扑中它几乎已完全被 RSTP 取代,RSTP 与 STP 向后兼容。对于依赖 VLAN 的网络拓扑,建议使用 MSTP,因为它是一种 VLAN 感知协议,能够按 VLAN 组进行负载均衡。在设计启用 STP 的网络时,需要考虑很多因素,更详细的案例研究可以在 生成树协议 文章中找到。在 RouterOS 中,
protocol-mode属性控制所使用的 STP 变体。
信息
RouterOS 网桥不支持 PVST 及其变体。PVST BPDU(目的 MAC 为 01:00:0C:CC:CC:CD)会被 RouterOS 网桥视为典型的多播数据包。简而言之,它们会经过 RouterOS 网桥/交换机转发逻辑,并可能被标记或去标记。 信息
根据 IEEE 802.1ad 标准,符合 IEEE 802.1Q 的网桥的 BPDU 与 IEEE 802.1ad 网桥不兼容。这意味着在单个第 2 层域中的所有网桥上应使用相同的网桥 VLAN 协议;否则 (R/M)STP 将无法正常工作。
按端口 STP
在某些情况下,您可能希望限制单个或多个端口上的 STP 功能。下面是不同用例的示例。
危险
更改默认 (R/M)STP 功能时要小心;确保您理解 STP 和 BPDU 的工作原理。配置错误的 (R/M)STP 可能导致意外行为。
创建边缘端口
边缘端口用于连接没有附加其他网桥的终端设备,例如工作站或路由器。将网桥端口设置为边缘端口将限制其发送 BPDU(网桥协议数据单元),并使其忽略任何收到的 BPDU。这允许端口直接转换到转发状态,绕过标准的 STP 学习和监听阶段,从而减少网络收敛时间。
/interface/bridge
add name=bridge1
/interface/bridge/port
add bridge=bridge1 interface=ether1 edge=yes
add bridge=bridge1 interface=ether2
丢弃收到的 BPDU
当网桥启用了 STP/RSTP/MSTP 时,网桥防火墙过滤器和 NAT 规则无法丢弃 BPDU,因为 BPDU 在网桥内会接受特殊处理。但是,可以在某些交换机芯片上使用 ACL 规则来丢弃特定端口上收到的 BPDU:
在配备 Marvell Prestera 交换芯片的 MikroTik 设备上:
/interface/ethernet/switch/rule
add dst-mac-address=01:80:C2:00:00:00/FF:FF:FF:FF:FF:FF new-dst-ports="" port=ether1 switch=switch1
在支持访问控制列表(ACL)的 CRS1xx/CRS2xx 系列设备上:
/interface/ethernet/switch/acl
add action=drop mac-dst-address=01:80:C2:00:00:00 src-ports=ether1
此配置会丢弃 ether1 上收到的所有 BPDU。
危险
如果您打算在某个端口上丢弃收到的 BPDU,请确保同时阻止 BPDU 从该端口所连接的接口发出。根网桥始终发送 BPDU,并通常等待更优的 BPDU(来自网桥 ID 更低的网桥)。但是,当从根网桥转换到指定网桥时,网桥必须临时禁用新的根端口。如果您只在一侧阻塞 BPDU,端口将不断在状态之间抖动。
启用 BPDU guard
BPDU Guard 功能为网桥端口提供了额外的安全层。它旨在通过在该端口收到 BPDU(网桥协议数据单元,表示连接了未经授权的网桥设备)时阻塞该端口来防止潜在的网络问题。这对于只应连接终端设备的边缘端口特别有用。在此示例中,如果 ether1 收到 BPDU,该端口将被自动阻塞,并且需要手动干预才能重新启用。
/interface/bridge
add name=bridge1
/interface/bridge/port
add bridge=bridge1 interface=ether1 bpdu-guard=yes
add bridge=bridge1 interface=ether2
启用 Root Guard
Root Guard 是一种生成树安全功能,可防止端口成为根端口,从而保护活动生成树拓扑不受外部网桥的影响。在此示例中,ether1 配置了 restricted-role=yes。此设置阻止该端口成为 CIST 或任何 MSTI 的根端口,无论其最佳生成树优先级向量如何。此类端口将被选为替代端口(处于丢弃状态),并且只要它继续收到更优的 BPDU,就会保持该状态。当它不再检测到更优的根路径时,将自动转换到转发状态。网络管理员可以启用此设置,以防止外部网桥影响活动生成树。
/interface/bridge
add name=bridge1
/interface/bridge/port
add bridge=bridge1 interface=ether1 restricted-role=yes
add bridge=bridge1 interface=ether2
[admin@MikroTik] /interface/bridge/port/monitor [find]
interface: ether1 ether2
status: in-bridge in-bridge
port-id: 0x80.1 0x80.2
role: alternate-port designated-port
edge-port: no yes
edge-port-discovery: yes yes
point-to-point-port: yes yes
external-fdb: no no
sending-rstp: yes yes
learning: no yes
forwarding: no yes
actual-path-cost: 2000 2000
internal-root-path-cost: 2000
designated-bridge-id: 0x7000.64:D1:54:C7:3A:6E
designated-internal-cost: 0 0
designated-port-id: 0x80.1 0x80.2
designated-remaining-hops: 20 20
tx-rx-bpdu: 2/363 4/1049
discard-transitions: 0 0
forward-transitions: 0 0
tx-rx-tc: 0/2 2/4
topology-changes: 0 1
last-topology-change: 34m53s
multicast-router: no yes
hw-offload-group: switch1 switch1
declared-vlan-ids:
registered-vlan-ids:
网桥设置
在网桥设置菜单下,可以控制所有网桥接口的某些功能并监控全局网桥计数器。
子菜单: /interface/bridge/settings
| Property | Description |
|---|---|
| use-ip-firewall (yes | no; Default: no) | 将桥接流量定向到 IP/IPv6 防火墙(IP/IPv6 路由的 prerouting、forward 和 postrouting 部分,更多详细信息请参阅 数据包流 文章)。以下是可以启用此设置以完成某些任务的一些用例:当您想为通过桥接端口的流量分配 Simple Queue 或全局 Queue Tree 时。当您想为通过桥接端口(通常会绕过 IP/IPv6 防火墙)的流量使用 IP/IPv6 防火墙功能时。注意: 启用 use-ip-firewall 功能将关闭网桥 Fast Path,进而影响通过该网桥的连接进行 fasttrack 的能力。而且由于此设置引入了额外的处理步骤(prerouting、forward 和 postrouting 链),转发数据包时将更多地增加 CPU 使用率。路由流量,包括来自 VLAN 接口(例如在网桥上创建的 /interface/vlan)的流量,已经由 IP 防火墙处理。在这种情况下,启用此设置没有额外效果。 |
| use-ip-firewall-for-pppoe (yes | no; Default: no) | 将桥接的未加密 PPPoE 封装流量定向到 IP/IPv6 防火墙。此属性仅在 use-ip-firewall 设置为 yes 时生效。 |
| use-ip-firewall-for-vlan (yes | no; Default: no) | 将桥接的 VLAN 标记流量定向到 IP/IPv6 防火墙。此属性仅在 use-ip-firewall 设置为 yes 时生效。如果您需要使用 IP/IPv6 防火墙并且启用了网桥 vlan-filtering(涉及 VLAN 标记处理),那么您还应启用 use-ip-firewall-for-vlan=yes。当启用此设置且数据包在 VLAN 接口(例如 /interface/vlan)之间路由时,IP 防火墙 prerouting 链中的 in-interface 将匹配网桥接口而不是单个 VLAN 接口。 |
| allow-fast-path (yes | no; Default: yes) | 是否全局启用网桥 Fast Path。 |
| bridge-fast-path-active (yes | no; Default: ) | 显示网桥 Fast Path 是否全局处于活动状态。不显示每个网桥接口的 Fast Path 状态。 |
| bridge-fast-path-packets (integer; Default: ) | 显示由网桥 Fast Path 转发的数据包计数。 |
| bridge-fast-path-bytes (integer; Default: ) | 显示由网桥 Fast Path 转发的字节计数。 |
| bridge-fast-forward-packets (integer; Default: ) | 显示由网桥 Fast Forward 转发的数据包计数。 |
| bridge-fast-forward-bytes (integer; Default: ) | 显示由网桥 Fast Forward 转发的字节计数。 |
警告
如果您想为网桥转发的流量分配 Simple Queue 或全局 Queue Tree,那么您需要启用
use-ip-firewall属性。不使用此属性,网桥流量将永远不会到达 postrouting 链。Simple Queue 和全局 Queue Tree 在 postrouting 链中工作。要为网桥中的 VLAN 或 PPPoE 流量分配 Simple Queue 或全局 Queue Tree,您还应启用相应的属性。
端口设置
Port 子菜单用于将接口添加到特定网桥。
子菜单: /interface/bridge/port
| Property | Description |
|---|---|
| auto-isolate (yes | no; Default: no) | 启用后,如果未从相邻网桥收到 BPDU,它会阻止端口从丢弃状态转换到转发状态。仅当收到 BPDU 时,端口才会转换为转发状态。此属性仅在 protocol-mode 设置为 rstp 或 mstp 且 edge 设置为 no 时生效。 |
| bpdu-guard (yes | no; Default: no) | 在端口上启用或禁用 BPDU Guard 功能。如果收到 BPDU,此功能会将端口置于禁用角色;如果收到 BPDU,则需要手动禁用并启用以恢复端口。它应用于防止网桥受到与 BPDU 相关的攻击。当 protocol-mode 设置为 none 时,此属性无效。 |
| bridge (name; Default: none) | 相应接口所分组的网桥接口。 |
| broadcast-flood (yes | no; Default: yes) | 启用后,网桥会将广播流量泛洪到所有网桥出口端口。禁用后,网桥在出口端口上丢弃广播流量。它可用于过滤出口端口上的所有广播流量。广播流量被视为使用 FF:FF:FF:FF:FF:FF 作为目的 MAC 地址的流量。此类流量对许多协议至关重要,例如 DHCP、ARP、NDP、BOOTP(Netinstall)等。此选项不会限制到 CPU 的流量泛洪。 |
| edge (auto | no | no-discover | yes | yes-discover; Default: auto) | 将端口设置为边缘端口或非边缘端口,或启用边缘发现。边缘端口连接到没有附加其他网桥的 LAN。边缘端口将跳过 STP 中的学习和监听状态,并直接转换到转发状态。这减少了 STP 初始化时间。如果端口配置为发现边缘端口,那么一旦网桥检测到发往边缘端口的 BPDU,该端口将变为非边缘端口。当 protocol-mode 设置为 none 时,此属性无效。<code>no</code> - 禁用发现的非边缘端口。它将参与 STP 中的学习和监听状态。在它交换 BPDU 并与所连接的网桥达成一致之前,不会转换到转发状态。如果未收到 BPDU,该端口可能无限期地保持非转发状态。<code>no-discover</code> - 启用发现的非边缘端口。它将参与 STP 中的学习和监听状态。如果未收到 BPDU,端口可以成为边缘端口。<code>yes</code> - 不带发现的边缘端口。它将直接转换到转发状态。<code>yes-discover</code> - 启用发现的边缘端口。它将直接转换到转发状态。<code>auto</code> - 与 <code>no-discover</code> 相同,但还会检测网桥端口是否是禁用了 bridge-mode 的无线接口。此类接口将自动设置为不带发现的边缘端口。 |
| fast-leave (yes | no; Default: no) | 在网桥端口上启用 IGMP/MLD fast leave 功能。当收到 IGMP/MLD leave 消息时,网桥将停止向该网桥端口转发多播流量。此属性仅在 igmp-snooping 设置为 yes 时生效。 |
| frame-types (admit-all | admit-only-untagged-and-priority-tagged | admit-only-vlan-tagged; Default: admit-all) | 指定网桥端口上允许的入口帧类型。此属性仅在 vlan-filtering 设置为 yes 时生效。 |
| ingress-filtering (yes | no; Default: yes) | 启用或禁用 VLAN 入口过滤,它会检查入口端口是否是网桥 VLAN 表中收到的 VLAN ID 的成员。应与 frame-types 一起使用,以指定入口流量应为已标记还是未标记。此属性仅在 vlan-filtering 设置为 yes 时生效。自 RouterOS v7 起,该设置默认启用。 |
| learn (auto | no | yes; Default: auto) | 更改网桥端口上的 MAC 学习行为<code>yes</code> - 启用 MAC 学习<code>no</code> - 禁用 MAC 学习<code>auto</code> - 检测网桥端口是否为无线接口,并使用无线注册表代替 MAC 学习,如果无线接口设置为 <code>ap-bridge</code>、<code>bridge</code>、<code>wds-slave</code> 模式之一且无线接口的 bridge 模式被禁用,则使用无线注册表。 |
| multicast-router (disabled | permanent | temporary-query; Default: temporary-query) | 多播路由器端口是连接多播路由器或查询器的端口。在此端口上,将发送未注册的多播流和 IGMP/MLD 成员资格报告。此设置更改网桥端口的多播路由器状态。此属性可用于向某些网桥端口发送 IGMP/MLD 成员资格报告,以进行进一步的多播路由或代理。此属性仅在 igmp-snooping 设置为 yes 时生效。<code>disabled</code> - 禁用网桥端口上的多播路由器状态。无论连接到该端口的是什么,未注册的多播和 IGMP/MLD 成员资格报告都不会发送到该网桥端口。<code>permanent</code> - 启用网桥端口上的多播路由器状态。无论连接到该端口的是什么,未注册的多播和 IGMP/MLD 成员资格报告都会发送到该网桥端口。<code>temporary-query</code> - 使用 IGMP/MLD 查询自动检测网桥端口上的多播路由器状态。 |
| horizon (integer 0..429496729; Default: none) | 使用 split horizon 桥接以防止桥接环路。为一组端口设置相同的值,以防止它们向具有相同 horizon 值的端口发送数据。Split horizon 是一种会禁用硬件卸载的软件功能。 |
| hw (yes | no; Default: yes) | 允许在支持硬件卸载的接口上启用或禁用硬件卸载。对于 EoIP 或 VLAN 等软件接口,此设置被忽略且无效。某些网桥或端口功能会自动禁用硬件卸载,请使用 print 命令查看 "H" 标志是否处于活动状态。 |
| internal-path-cost (integer: 1..200000000; Default: ) | 区域内 MSTI0 的接口路径成本。如果未手动配置,网桥会根据接口速度和 port-cost-mode 设置自动确定 internal-path-cost。要恢复为自动确定并移除任何手动应用的值,只需在 internal-path-cost 属性前使用感叹号。此属性仅在 protocol-mode 设置为 mstp 时生效。/interface/bridge/port/set [find interface=sfp28-1] !internal-path-cost 使用 端口监控 观察应用的 internal-path-cost。 |
| interface (name; Default: none) | 接口或接口列表的名称。 |
| path-cost (integer: 1..200000000; Default: ) | 接口的路径成本,由 STP 和 RSTP 用于确定最佳路径,由 MSTP 用于确定区域之间的最佳路径。如果未手动配置,网桥会根据接口速度和 port-cost-mode 设置自动确定路径成本。要恢复为自动确定并移除任何手动应用的值,只需在 path-cost 属性前使用感叹号。当 protocol-mode 设置为 none 时,此属性无效。/interface/bridge/port/set [find interface=sfp28-1] !path-cost 使用 端口监控 观察应用的路径成本。 |
| point-to-point (auto | yes | no; Default: auto) | 指定网桥端口是否通过点对点链路连接到网桥,以便在发生故障时更快地收敛。将此属性设置为 yes,会强制该链路成为点对点链路,这将跳过检查机制,该机制会检测并等待此单一链路上来自其他设备的 BPDU。将此属性设置为 no,表示您预期该链路可能从多个设备接收 BPDU。将属性设置为 yes 可以显著改善 (R/M)STP 收敛时间。通常,仅当有可能另一台设备连接到该链路时,才应将此属性设置为 no。这主要与无线介质和以太网集线器相关。如果以太网链路是全双工,auto 会启用点对点功能。当 protocol-mode 设置为 none 时,此属性无效。 |
| priority (0x00 | 0x10 | 0x20 | 0x30 | 0x40 | 0x50 | 0x60 | 0x70 | 0x80 | 0x90 | 0xa0 | 0xb0 | 0xc0 | 0xd0 | 0xe0 | 0xf0; Default: 0x80) | 接口的优先级,由 STP 用于确定根端口,由 MSTP 用于确定区域之间的根端口。必须以 16(0x10)为步长设置。 |
| pvid (integer 1..4094; Default: 1) | 端口 VLAN ID(pvid)指定未标记入口流量被分配到哪个 VLAN。此属性仅在 vlan-filtering 设置为 yes 时生效。 |
| restricted-role (yes | no; Default: no) | 在端口上启用或禁用受限角色。启用后,它阻止该端口成为 CIST 或任何 MSTI 的根端口,无论其最佳生成树优先级向量如何。此类端口将被选为替代端口(丢弃状态),并且只要它继续收到更优的 BPDU,就会保持该状态。当它不再检测到更优的根路径时,将自动转换到转发状态。网络管理员可以启用此设置,以防止外部网桥影响活动生成树,此功能也称为 root-guard 或 root-protection。当 protocol-mode 设置为 stp、rstp 或 mstp 时,此属性生效(自 RouterOS v7.14 起支持 STP 和 RSTP)。 |
| restricted-tcn (yes | no; Default: no) | 在端口上启用或禁用拓扑变化通知(TCN)处理。启用后,它会使该端口不将收到的拓扑变化通知传播到其他端口,并且由端口本身引起的任何变化都不会向其他端口产生拓扑变化通知。此参数默认禁用。网络管理员可以设置它以阻止外部网桥在本地网络中引起 MAC 地址刷新。当 protocol-mode 设置为 stp、rstp 或 mstp 时,此属性生效(自 RouterOS v7.14 起支持 STP 和 RSTP)。 |
| tag-stacking (yes | no; Default: no) | 强制将所有数据包视为未标记数据包。入口端口上的数据包将被打上另一个 VLAN 标记,无论是否已存在 VLAN 标记。数据包将使用与 pvid 值匹配的 VLAN ID 进行标记,并使用 ether-type 中指定的 EtherType。此属性仅在 vlan-filtering 设置为 yes 时生效。 |
| trusted (yes | no; Default: no) | 启用后,它允许 DHCP 数据包通过此端口转发到 DHCP 服务器。主要用于防止未经授权的服务器向用户提供恶意信息。此属性仅在 dhcp-snooping 设置为 yes 时生效。 |
| trusted-arp (yes | no; Default: no) | 启用后,到达此端口的 ARP 数据包将无需根据 DHCP snooping 绑定数据库进行验证即可转发。禁用后,到达此端口的 ARP 数据包会根据 DHCP snooping 绑定数据库进行验证,发送方 MAC–IP 对与绑定条目不匹配的数据包将被丢弃。此属性仅在 arp-inspection 设置为 yes 时生效。 |
| trusted-dhcpv6 (yes | no; Default: no) | 启用后,它允许 DHCPv6 数据包通过此端口转发到 DHCP 服务器。主要用于防止未经授权的服务器向用户提供恶意信息。此属性仅在 dhcpv6-snooping 设置为 yes 时生效。 |
| trusted-ra (yes | no; Default: no) | 指定是否允许该端口转发 IPv6 路由器通告消息;对于连接到合法路由器的端口设置为 yes,设置为 no 以阻止未经授权的来源。此属性仅在 ra-guard 设置为 yes 时生效。 |
| unknown-multicast-flood (yes | no; Default: yes) | 更改网桥端口上的多播泛洪选项,仅控制出口流量。启用后,网桥允许将多播数据包泛洪到指定网桥端口,但禁用后,网桥会限制多播流量泛洪到指定网桥端口。该设置影响所有多播流量。这包括非 IP、IPv4、IPv6 以及链路本地多播范围(例如 224.0.0.0/24 和 ff02::1)。请注意,当启用 igmp-snooping 且检测到 IGMP/MLD 查询器时,网桥会自动限制未知 IP 多播的泛洪,因此对于 IGMP/MLD snooping 设置来说该设置不是必需的。当将此设置与 igmp-snooping 一起使用时,网桥端口上允许的唯一多播流量是来自 MDB 表的已知多播。 |
| unknown-unicast-flood (yes | no; Default: yes) | 更改网桥端口上的未知单播泛洪选项,仅控制出口流量。启用后,网桥允许将未知单播数据包泛洪到指定网桥端口,但禁用后,网桥会限制未知单播流量泛洪到指定网桥端口。如果在主机表中未学习到某个 MAC 地址,则该流量被视为未知单播流量,并将被泛洪到所有端口。一旦在网桥端口上收到数据包并将源 MAC 地址添加到网桥主机表,就会学习到该 MAC 地址。由于网桥需要在网桥端口上至少接收一个数据包才能学习 MAC 地址,因此建议使用静态网桥主机条目,以避免在 MAC 地址被学习之前数据包被丢弃。 |
信息
RouterOS 每个网桥最多可以处理 1024 个桥接接口;此限制是固定的,无法修改。如果您尝试添加更多接口作为网桥端口,可能会导致不可预测的行为。
示例
此示例演示如何将以太网端口添加到现有网桥接口以创建简单的第 2 层交换设置。通过将 ether1 和 ether2 添加到 bridge1,这些物理端口成为单个交换网段的一部分,允许连接到任一端口的设备相互通信,就像它们在同一 LAN 上一样。
首先,将每个端口添加到网桥接口:
[admin@MikroTik] /interface/bridge/port/add bridge=bridge1 interface=ether1
[admin@MikroTik] /interface/bridge/port/add bridge=bridge1 interface=ether2
通过显示网桥端口表来验证配置:
[admin@MikroTik] /interface/bridge/port/print
Flags: X - disabled, I - inactive, D - dynamic, H - hw-offload
# INTERFACE BRIDGE HW PVID PRIORITY PATH-COST INTERNAL-PATH-COST HORIZON
0 ether1 bridge1 yes 100 0x80 10 10 none
1 ether2 bridge1 yes 200 0x80 10 10 none
输出确认两个端口现在已桥接在一起。H 标志表示硬件卸载处于活动状态,这意味着交换机芯片正在处理数据包转发以获得最佳性能。每个端口分别分配了默认 PVID(端口 VLAN ID)100 和 200,并且都使用标准 STP 优先级 0x80。
接口列表
从 RouterOS v6.41 开始,可以将接口列表添加为网桥端口并进行排序。接口列表通过将多个接口分组在一起来简化防火墙规则配置。以下示例演示如何将接口列表添加到网桥:
/interface/list
add name=LAN1
add name=LAN2
/interface/list/member
add interface=ether1 list=LAN1
add interface=ether2 list=LAN1
add interface=ether3 list=LAN2
add interface=ether4 list=LAN2
/interface/bridge/port
add bridge=bridge1 interface=LAN1
add bridge=bridge1 interface=LAN2
当接口列表被添加到网桥时,这些列表中的各个端口会显示为动态端口条目:
[admin@MikroTik] /interface/bridge/port> pr
Flags: X - disabled, I - inactive, D - dynamic, H - hw-offload
# INTERFACE BRIDGE HW PVID PRIORITY PATH-COST INTERNAL-PATH-COST HORIZON
0 LAN1 bridge1 yes 1 0x80 10 10 none
1 D ether1 bridge1 yes 1 0x80 10 10 none
2 D ether2 bridge1 yes 1 0x80 10 10 none
3 LAN2 bridge1 yes 1 0x80 10 10 none
4 D ether3 bridge1 yes 1 0x80 10 10 none
5 D ether4 bridge1 yes 1 0x80 10 10 none
接口列表出现的顺序可以使用 move 命令重新排列。第二个参数指定所选接口列表应放置在哪个位置之前。以下示例演示如何对接口列表进行排序:
[admin@MikroTik] > /interface/bridge/port/move 3 0
[admin@MikroTik] > /interface/bridge/port/print
Flags: X - disabled, I - inactive, D - dynamic, H - hw-offload
# INTERFACE BRIDGE HW PVID PRIORITY PATH-COST INTERNAL-PATH-COST HORIZON
0 LAN2 bridge1 yes 1 0x80 10 10 none
1 D ether3 bridge1 yes 1 0x80 10 10 none
2 D ether4 bridge1 yes 1 0x80 10 10 none
3 LAN1 bridge1 yes 1 0x80 10 10 none
4 D ether1 bridge1 yes 1 0x80 10 10 none
5 D ether2 bridge1 yes 1 0x80 10 10 none
警告
使用
move命令时,第二个参数表示 "before id" 位置,它决定所选接口列表将被移动到何处。如果将第一个接口列表移动到第二个接口列表的位置,该命令将没有效果,因为第一个列表本已位于第二个列表之前。
VLAN 表中的接口列表
从 RouterOS 7.17 版本开始,您可以在网桥 VLAN 表的 tagged 和 untagged 属性中使用接口列表。此增强功能允许通过简单地修改接口列表成员来更灵活地为端口分配 VLAN,而无需单独更新每个网桥 VLAN 条目。
如果为 tagged 和 untagged 设置指定了不同的接口列表,并且接口成员之间存在重叠,则 untagged 列表优先。您可以使用 print 命令通过 current-tagged 和 current-untagged 属性检查当前接口配置。
以下示例演示如何将新接口添加到现有接口列表,自动更新网桥端口和 VLAN 表,而无需直接修改这些菜单中的设置:
/interface/list
add name=vlan10_untagged
add name=vlan20_untagged
add name=vlan_tagged
/interface/list/member
add interface=ether2 list=vlan10_untagged
add interface=ether3 list=vlan10_untagged
add interface=ether4 list=vlan20_untagged
add interface=sfp-sfpplus1 list=vlan_tagged
/interface/bridge
add frame-types=admit-only-vlan-tagged name=bridge1 vlan-filtering=yes
/interface/bridge/port
add bridge=bridge1 frame-types=admit-only-untagged-and-priority-tagged interface=vlan10_untagged pvid=10
add bridge=bridge1 frame-types=admit-only-untagged-and-priority-tagged interface=vlan20_untagged pvid=20
add bridge=bridge1 frame-types=admit-only-vlan-tagged interface=vlan_tagged
/interface/bridge/vlan
add bridge=bridge1 tagged=vlan_tagged vlan-ids=10
add bridge=bridge1 tagged=vlan_tagged vlan-ids=20
[admin@MikroTik] /interface/bridge/port/print
Flags: D - DYNAMIC; H - HW-OFFLOAD
Columns: INTERFACE, BRIDGE, HW, PVID, PRIORITY, HORIZON
# INTERFACE BRIDGE HW PVID PRIORITY HORIZON
0 vlan10_untagged bridge1 yes 10 0x80 none
1 DH ether2 bridge1 yes 10 0x80 none
2 DH ether3 bridge1 yes 10 0x80 none
3 vlan20_untagged bridge1 yes 20 0x80 none
4 DH ether4 bridge1 yes 20 0x80 none
5 vlan_tagged bridge1 yes 1 0x80 none
6 DH sfp-sfpplus1 bridge1 yes 1 0x80 none
[admin@MikroTik] /interface/bridge/vlan/print
Flags: D - DYNAMIC
Columns: BRIDGE, VLAN-IDS, CURRENT-TAGGED, CURRENT-UNTAGGED
# BRIDGE VLAN-IDS CURRENT-TAGGED CURRENT-UNTAGGED
;;; added by pvid
0 D bridge1 10 ether2
ether3
;;; added by pvid
1 D bridge1 20 ether4
2 bridge1 10 sfp-sfpplus1
3 bridge1 20 sfp-sfpplus1
# make necessary changes to interface list members:
/interface/list/member/add list=vlan20_untagged interface=ether5
/interface/list/member/add list=vlan_tagged interface=sfp-sfpplus2
# verify changes in bridge port and vlan menus:
[admin@MikroTik] > /interface/bridge/port/print
Flags: D - DYNAMIC; H - HW-OFFLOAD
Columns: INTERFACE, BRIDGE, HW, PVID, PRIORITY, HORIZON
# INTERFACE BRIDGE HW PVID PRIORITY HORIZON
0 vlan10_untagged bridge1 yes 10 0x80 none
1 DH ether2 bridge1 yes 10 0x80 none
2 DH ether3 bridge1 yes 10 0x80 none
3 vlan20_untagged bridge1 yes 20 0x80 none
4 DH ether4 bridge1 yes 20 0x80 none
5 DH ether5 bridge1 yes 20 0x80 none
6 vlan_tagged bridge1 yes 1 0x80 none
7 DH sfp-sfpplus1 bridge1 yes 1 0x80 none
8 DH sfp-sfpplus2 bridge1 yes 1 0x80 none
[admin@MikroTik] > /interface/bridge/vlan/print
Flags: D - DYNAMIC
Columns: BRIDGE, VLAN-IDS, CURRENT-TAGGED, CURRENT-UNTAGGED
# BRIDGE VLAN-IDS CURRENT-TAGGED CURRENT-UNTAGGED
;;; added by pvid
0 D bridge1 10 ether2
ether3
;;; added by pvid
1 D bridge1 20 ether4
ether5
2 bridge1 10 sfp-sfpplus1
sfp-sfpplus2
3 bridge1 20 sfp-sfpplus1
sfp-sfpplus2
网桥端口监控
要监控网桥端口的当前状态,请使用 monitor 命令。
子菜单: /interface/bridge/port/monitor
| Property | Description |
|---|---|
| actual-path-cost (integer: 1..200000000) | 显示实际端口路径成本。可能是手动应用的,也可能是根据接口速度和 port-cost-mode 设置自动确定的。 |
| declared-vlan-ids (integer 1..4094) | 接口通过 MVRP 协议 声明的 VLAN。 |
| designated-bridge-id (priority.MAC address) | 显示指定网桥标识符,由端口的优先级向量确定。 |
| designated-cost (integer) | 显示指定根路径成本,由端口的优先级向量确定。 |
| designated-internal-cost (integer) | 显示指定内部根路径成本,由端口的优先级向量确定。 |
| designated-message-age(time) | 显示指定消息年龄,由端口的优先级向量确定。 |
| designated-max-age (time) | 显示指定最大年龄,由端口的优先级向量确定。BPDU 数据包可以经过的网桥数量由 max-message-age 参数指定。 |
| designated-port-id (priority.integer) | 显示指定端口标识符,由端口的优先级向量确定。 |
| designated-remaining-hops (integer) | 显示指定剩余跳数,由端口的优先级向量确定。数据包在到达目的地之前允许经过的跳数。 |
| discard-transitions (integer) | 计数器,记录端口转换到丢弃状态的次数。 |
| edge-port (yes | no) | 端口是否为边缘端口。 |
| edge-port-discovery (yes | no) | 端口是否设置为自动检测边缘端口。 |
| external-fdb (yes | no) | 是否使用注册表代替转发表。 |
| forwarding (yes | no) | 显示端口是否未被 (R/M)STP 阻塞。 |
| forward-transitions (integer) | 计数器,记录端口转换到转发状态的次数 |
| hw-offload-group (switchX) | 端口使用的交换机芯片。 |
| interface (name) | 接口名称。 |
| last-topology-change (time) | 上次拓扑变化计时器,记录自上次变化以来的时间。 |
| learning (yes | no) | 显示端口是否能够学习 MAC 地址。 |
| multicast-router (yes | no) | 显示是否在端口上检测到多播路由器。仅当启用 igmp-snooping 时才显示监控值。 |
| registered-vlan-ids (integer 1..4094) | 接口通过 MVRP 协议 注册的 VLAN。 |
| port-id (priority.integer) | 在生成树协议中,每个端口都有唯一的端口标识符。优先级[十六进制] + 端口号。 |
| point-to-point-port (yes | no) | 端口是否使用全双工(yes)或半双工(no)连接到网桥端口。 |
| role (designated | root-port | alternate | backup | disabled) | (R/M)STP 算法分配的端口角色:<code>disabled-port</code> - 已禁用或非活动端口。<code>root-port</code> - 面向根网桥且具有到根网桥最佳(最低成本)路径的端口。每个网桥只选举一个根端口(根网桥本身除外)。<code>alternative-port</code> - 面向根网桥但不转发流量的端口。如果当前根端口发生故障,该端口提供到根网桥的备用路径。<code>designated-port</code> - 背向根网桥并将流量从根网桥转发到下游设备的端口。<code>backup-port</code> - 背向根网桥但会转发流量的端口。作为同一网段上指定端口备用的端口。在 RouterOS 中,role 监控属性会显示 RSTP 角色,例如 alternate-port 和 backup-port,即使启用了 STP 模式也是如此。虽然这在技术上不正确,但不会影响 STP 的运行。这是因为 STP 对所有被阻塞的端口一视同仁,不区分它们的用途(例如作为潜在备用路径)。显示的这些角色只是 RSTP 功能的反映,在 STP 使用时没有实际影响。更多详细信息请参阅 STP 和 RSTP 页面。 |
| root-path-cost (integer) | 到根网桥路径的总成本。 |
| sending-rstp (yes | no) | 端口使用的是 RSTP 还是 MSTP BPDU 类型。当启用了 RSTP/MSTP 的端口收到 STP BPDU 时,该端口将转换为 STP 类型。此设置并不表示 BPDU 是否实际被发送。 |
| status (in-bridge | inactive) | 端口状态:<code>in-bridge</code> - 端口已启用<code>inactive</code> - 端口已禁用。 |
| tx-rx-bpdu (integer) | 已发送/已接收 BPDU 消息计数器。 |
| tx-rx-tc (integer) | 已发送/已接收的拓扑变化消息。 |
| topology-changes (integer) | 拓扑变化计数器。 |
[admin@MikroTik] /interface/bridge/port/monitor [find interface=ether1]
interface: ether1
status: in-bridge
port-id: 0x80.1
role: root-port
edge-port: no
edge-port-discovery: yes
point-to-point-port: yes
external-fdb: no
sending-rstp: yes
learning: yes
forwarding: yes
actual-path-cost: 20000
internal-root-path-cost: 20000
designated-bridge-id: 0x1000.2C:C8:1B:FF:92:F4
designated-internal-cost: 0
designated-port-id: 0x80.1
designated-remaining-hops: 20
tx-rx-bpdu: 3/63
discard-transitions: 0
forward-transitions: 1
tx-rx-tc: 2/0
topology-changes: 1
last-topology-change: 2m5s
multicast-router: no
hw-offload-group: switch1
declared-vlan-ids: 1
registered-vlan-ids: 1
主机表
主机表显示在网桥接口上学习到的 MAC 地址。此表还显示提供每个主机条目附加信息的各种标志。通过 /interface/bridge/host 子菜单访问主机表。
子菜单: /interface/bridge/host
| Property | Description |
|---|---|
| bridge (read-only: name) | 主机条目所属的网桥 |
| disabled (read-only: flag) | 指示静态主机条目是否已禁用 |
| dynamic (read-only: flag) | 指示主机是否是动态学习到的 |
| external (read-only: flag) | 指示主机是否从外部表(例如交换机芯片或无线注册表)学习到。在硬件卸载网桥端口上添加的静态主机条目不会显示此标志 |
| invalid (read-only: flag) | 指示主机条目是否无效。此标志可能出现在已被移除的接口上静态配置的主机 |
| local (read-only: flag) | 指示主机条目是否从网桥本身创建,这会显示所有本地接口 |
| mac-address (read-only: MAC address) | 主机的 MAC 地址 |
| on-interface (read-only: name) | 主机所连接的网桥端口 |
监控
要查看活动主机表,请使用 print 命令。该表显示在网桥接口上学习到的所有 MAC 地址,以及标志指示器和连接详细信息。
[admin@MikroTik] /interface/bridge/host/print
Flags: X - disabled, I - invalid, D - dynamic, L - local, E - external
# MAC-ADDRESS VID ON-INTERFACE BRIDGE
0 D B8:69:F4:C9:EE:D7 ether1 bridge1
1 D B8:69:F4:C9:EE:D8 ether2 bridge1
2 DL CC:2D:E0:E4:B3:38 bridge1 bridge1
3 DL CC:2D:E0:E4:B3:39 ether2 bridge1
输出显示:
- D 标志:动态学习到的 MAC 地址
- DL 标志:本地接口 MAC 地址(网桥本身及其端口接口)
- VID:与主机条目关联的 VLAN ID
- ON-INTERFACE:学习到主机的网桥端口
- BRIDGE:主机所属的网桥接口
静态条目
网桥主机表支持静态 MAC 地址条目配置。静态条目在两个主要场景中很有用:将特定流量引导通过指定端口,以及通过禁用动态 MAC 学习并仅依赖预配置的静态条目来保护设备资源。
下表列出了静态 MAC 地址条目的所有可配置参数:
子菜单: /interface/bridge/host
| Property | Description |
|---|---|
| bridge (name; Default: none) | 分配该 MAC 地址的网桥接口。 |
| disabled (yes | no; Default: no) | 启用或禁用静态 MAC 地址条目。 |
| interface (name; Default: none) | MAC 地址流量所转发到的接口名称。 |
| mac-address (MAC address; Default: ) | 要静态添加到主机表的 MAC 地址。 |
| vid (integer: 1..4094; Default: ) | 与静态 MAC 地址条目关联的 VLAN ID。 |
示例: 要将所有发往 MAC 地址 4C:5E:0C:4D:12:43 的流量只通过 ether2 转发,请使用以下命令:
/interface/bridge/host
add bridge=bridge1 interface=ether2 mac-address=4C:5E:0C:4D:12:43
多播表
多播表显示通过 IGMP/MLD snooping 学习到的多播组成员资格信息。当网桥上启用了 IGMP/MLD snooping 时,设备会主动监控 IGMP/MLD 网络通信,以构建活动多播组及其订阅端口成员的多播数据库(MDB)。然后网桥使用此信息智能地将多播流量仅转发到连接了感兴趣接收设备的端口,而不是将多播流量泛洪到所有端口。
请注意,发往链路本地多播组 224.0.0.0/24 和 ff02::1 的数据包是此行为的例外——这些地址始终无限制地泛洪到所有端口和 VLAN,因为它们用于网络协议操作。
要查看当前多播数据库条目表,请使用多播数据库子菜单中的 print 命令。
子菜单: /interface/bridge/mdb
| Property | Description |
|---|---|
| bridge (read-only: name) | 显示条目所属的网桥接口。 |
| group (*read-only:*ipv4 | ipv6 |
| on-interface (read-only: name) | 显示订阅了该多播组的网桥端口。 |
| vid (read-only: integer) | 显示多播组的 VLAN ID,仅在启用 vlan-filtering 时适用。 |
[admin@MikroTik] /interface/bridge/mdb/print
Flags: D - DYNAMIC
Columns: GROUP, VID, ON-PORTS, BRIDGE
# GROUP VID ON-PORTS BRIDGE
0 D ff02::2 1 bridge1 bridge1
1 D ff02::6a 1 bridge1 bridge1
2 D ff02::1:ff00:0 1 bridge1 bridge1
3 D ff02::1:ff01:6a43 1 bridge1 bridge1
4 D 229.1.1.1 10 ether2 bridge1
5 D 229.2.2.2 10 ether3 bridge1
ether2
6 D ff02::2 10 ether5 bridge1
ether3
ether2
ether4
静态条目
自 RouterOS 7.7 版本起,可以为 IPv4 和 IPv6 多播组创建静态 MDB 条目。
子菜单: /interface/bridge/mdb
| Property | Description |
|---|---|
| bridge (name; Default: ) | 将要分配该 MDB 条目的网桥接口。 |
| disabled (yes | no; Default: no) | 禁用或启用静态 MDB 条目。 |
| group (ipv4 | ipv6 | MAC address; Default: ) | IPv4、IPv6 或 MAC 多播地址。无法为链路本地多播组 224.0.0.0/24 和 ff02::1 创建静态条目,因为这些数据包始终泛洪到所有端口和 VLAN。 |
| interface (name; Default: ) | 多播组将被转发到的网桥端口列表。 |
| vid (integer: 1..4094; Default: ) | 将在其上创建 MDB 条目的 VLAN ID,仅在启用 vlan-filtering 时适用。未指定 VLAN ID 时,该条目将以共享 VLAN 模式工作,并动态应用于特定端口的所有已定义 VLAN ID。 |
例如,要在 VLAN 10 的端口 ether2 和 ether3 上为多播组 229.10.10.10 创建静态 MDB 条目,请使用以下命令:
/interface/bridge/mdb
add bridge=bridge1 group=229.10.10.10 interface=ether2,ether3 vid=10
使用 print 命令验证结果:
[admin@MikroTik] > /interface/bridge/mdb/print where group=229.10.10.10
Columns: GROUP, VID, ON-PORTS, BRIDGE
# GROUP VID ON-PORTS BRIDGE
12 229.10.10.10 10 ether2 bridge1
ether3
如果某个 IPv6 多播组不需要被 snooping,并且希望它被泛洪到所有端口和 VLAN,则可以在所有 VLAN 和端口(包括网桥接口本身)上创建静态 MDB 条目。使用以下命令为多播组 ff02::2 在所有 VLAN 和端口上创建静态 MDB 条目(请根据您的具体设置修改 ports 设置):
/interface/bridge/mdb
add bridge=bridge1 group=ff02::2 interface=bridge1,ether2,ether3,ether4,ether5
[admin@MikroTik] > /interface/bridge/mdb/print where group=ff02::2
Flags: D - DYNAMIC
Columns: GROUP, VID, ON-PORTS, BRIDGE
# GROUP VID ON-PORTS BRIDGE
0 ff02::2 bridge1
15 D ff02::2 1 bridge1 bridge1
16 D ff02::2 10 bridge1 bridge1
ether2
ether3
ether4
ether5
17 D ff02::2 20 bridge1 bridge1
ether2
ether3
18 D ff02::2 30 bridge1 bridge1
ether2
ether3
网桥硬件卸载
如果设备具有内置交换机芯片,则可以同时交换多个端口。虽然网桥是一种会消耗 CPU 资源的软件功能,但网桥硬件卸载将允许您使用内置交换机芯片以线速转发数据包。如果配置正确,这可以让您实现更高的吞吐量。

由其中一个端口收到的数据包总是首先经过交换逻辑。交换逻辑决定数据包应发往哪些端口——通常基于目的 MAC 地址。硬件转发的数据包对 RouterOS 不可见(只有统计信息会显示有数据包经过)。这是因为数据包已由交换机芯片处理,从未到达 CPU。
数据包可以通过交换机 CPU 端口转发到 CPU,用于管理访问、路由、防火墙规则或流量控制。这需要针对您的设备和用例进行特定配置。请查看您的特定设备的手册页:
危险
某些网桥和以太网端口属性与交换机芯片设置直接相关。更改此类属性可能会触发交换机芯片重置,临时禁用所有以太网端口。在生产环境中更改属性时必须考虑到这一点。此类属性包括 DHCP Snooping、IGMP Snooping、VLAN filtering、L2MTU、Flow Control 等。可能触发交换机芯片重置的确切设置取决于设备型号。 警告
CRS1xx/2xx 系列交换机 支持每个交换机芯片多个硬件卸载网桥。所有其他设备仅支持一个。使用
/interface/bridge/port下的hw=yes/no来选择哪个网桥使用硬件卸载。 下表列出了每种交换机芯片类型支持硬件卸载(✓)或禁用硬件卸载(✗)的网桥功能:
配备 Marvell Prestera 交换芯片的 MikroTik 设备
例如:CRS3xx、CRS4xx、CRS5xx、CRS8xx、CCR2116、CCR2216、RDS2216。请参阅 Marvell Prestera 交换机芯片功能。
| Feature | HW Offload |
|---|---|
| STP/RSTP | ✓ |
| MSTP | ✓ |
| VLAN Filtering | ✓ |
| IGMP Snooping | ✓ |
| DHCP Snooping | ✓ |
| ARP Inspection | ✓ |
| IP Source Guard | ✓ |
| DHCPv6 Snooping | ✓ |
| RA Guard | ✓ |
| Bonding¹ | ✓ |
| MLAG | ✓ |
| Horizon | ✗ |
¹ 仅 mode=802.3ad(LACP)、mode=balance-xor(静态 LAG)和 mode=active-backup 绑定接口会被硬件卸载。其他模式不支持硬件卸载。交换机始终使用 Layer2+Layer3+Layer4 作为发送哈希策略,更改发送哈希策略没有效果。
88E6393X、88E6191X、88E6190
例如:RB5009 系列、L009 系列、CCR2004-16G-2S+。请参阅 交换机芯片功能。
| Feature | HW Offload |
|---|---|
| STP/RSTP | ✓ |
| MSTP | ✓ |
| VLAN Filtering¹ | ✓ |
| IGMP Snooping² | ✓ |
| DHCP Snooping² | ✓ |
| ARP Inspection | ✗ |
| IP Source Guard | ✗ |
| Bonding³ | ✓ |
| DHCPv6 Snooping | ✗ |
| RA Guard | ✗ |
| MLAG | ✗ |
| Horizon | ✗ |
¹ 不支持 ether-type=0x88a8 或 ether-type=0x9100(仅支持默认的 ether-type=0x8100)。不支持 tag-stacking=yes。使用这些功能会禁用硬件卸载。
² 不支持 QinQ,仅解析第一个 VLAN 标记。双标记的 DHCP 或 IGMP 数据包可能会被错误处理。
³ 仅 mode=802.3ad(LACP)、mode=balance-xor(静态 LAG)和 mode=active-backup 绑定接口会被硬件卸载。其他模式不支持硬件卸载。限于 Layer2 发送哈希,更改发送哈希策略没有效果。
MT7621、MT7531、EN7523、RTL8367
例如:hEX S、hAP ax lite、hEX Refresh、RBM33G、RB4011、RB1100AHx4。请参阅 交换机芯片功能。
| Feature | HW Offload |
|---|---|
| STP/RSTP | ✓ |
| MSTP | ✓ |
| VLAN Filtering¹ | ✓ |
| IGMP Snooping | ✗ |
| DHCP Snooping | ✗ |
| ARP Inspection | ✗ |
| IP Source Guard | ✗ |
| DHCPv6 Snooping | ✗ |
| RA Guard | ✗ |
| Bonding | ✗ |
| MLAG | ✗ |
| Horizon | ✗ |
¹ 不支持 ether-type=0x88a8 或 ether-type=0x9100(仅支持默认的 ether-type=0x8100)。不支持 tag-stacking=yes。使用这些功能会禁用硬件卸载。
CRS1xx/CRS2xx 系列
例如:CRS105、CRS106、CRS109、CRS112、CRS125、CRS210、CRS212、CRS226。请参阅 CRS1xx/2xx 系列交换机。
| Feature | HW Offload |
|---|---|
| STP/RSTP | ✓ |
| IGMP Snooping¹ | ✓ |
| DHCP Snooping¹ | ✓ |
| ARP Inspection | ✗ |
| IP Source Guard | ✗ |
| MSTP | ✗ |
| VLAN Filtering | ✗ |
| DHCPv6 Snooping | ✗ |
| RA Guard | ✗ |
| Bonding | ✗ |
| MLAG | ✗ |
| Horizon | ✗ |
¹ 该功能在 VLAN 交换设置中无法正常工作。
QCA8337、Atheros8327、Atheros8316
例如:RB3011、RB1100AHx2、RB850Gx2、cAP ac、wAP ac、Audience、mANTBox、CCR1009。请参阅 交换机芯片功能。
| Feature | HW Offload |
|---|---|
| STP/RSTP | ✓ |
| DHCP Snooping¹ | ✓ |
| ARP Inspection | ✗ |
| IP Source Guard | ✗ |
| MSTP | ✗ |
| VLAN Filtering | ✗ |
| IGMP Snooping | ✗ |
| DHCPv6 Snooping | ✗ |
| RA Guard | ✗ |
| Bonding | ✗ |
| MLAG | ✗ |
| Horizon | ✗ |
¹ 该功能在 VLAN 交换设置中无法正常工作。
Atheros8227、Atheros7240
例如:hAP lite、hEX lite、PowerBox、wsAP ac lite、RBmAP2nD。请参阅 交换机芯片功能。
| Feature | HW Offload |
|---|---|
| STP/RSTP | ✓ |
| MSTP | ✗ |
| VLAN Filtering | ✗ |
| IGMP Snooping | ✗ |
| DHCP Snooping | ✗ |
| ARP Inspection | ✗ |
| IP Source Guard | ✗ |
| DHCPv6 Snooping | ✗ |
| RA Guard | ✗ |
| Bonding | ✗ |
| MLAG | ✗ |
| Horizon | ✗ |
IPQ-PPE、QCA8386、PIPE 98PX1012
例如:hAP ax 系列、cAP ax、Chateau ax 系列、hAP be³ Media、CCR2004-1G-12S+2XS。请参阅 交换机芯片功能。
| Feature | HW Offload |
|---|---|
| STP/RSTP | ✗ |
| MSTP | ✗ |
| VLAN Filtering | ✗ |
| IGMP Snooping | ✗ |
| DHCP Snooping | ✗ |
| ARP Inspection | ✗ |
| IP Source Guard | ✗ |
| DHCPv6 Snooping | ✗ |
| RA Guard | ✗ |
| Bonding | ✗ |
| MLAG | ✗ |
| Horizon | ✗ |
危险
在 IPQ-PPE 上使用
protocol-mode=none会启用硬件卸载网桥,并可能导致问题。
建议通过保留默认的protocol-mode=rstp设置或在/interface/bridge/port下手动设置hw=no来使用非硬件卸载网桥。
示例
以下示例演示如何使用启用了硬件卸载的网桥配置端口交换。此配置创建一个网桥接口并添加多个以太网接口作为网桥端口。默认使用 hw=yes 网桥端口设置。
/interface bridge
add name=bridge1
/interface bridge port
add bridge=bridge1 interface=ether2
add bridge=bridge1 interface=ether3
add bridge=bridge1 interface=ether4
add bridge=bridge1 interface=ether5
通过检查网桥端口表中的 H 标志来验证硬件卸载是否处于活动状态:
[admin@MikroTik] /interface/bridge/port/print
Flags: H - HW-OFFLOAD
Columns: INTERFACE, BRIDGE, HW, HORIZON, TRUSTED, TRUSTED-RA, TRUSTED-DHCPV6, FAST-LEAVE, BPDU-GUARD, EDGE, POINT-TO-POINT, PVID, FRAME-TYPES
# INTERFACE BRIDGE HW HORIZON TRUSTED TRUSTED-RA TRUSTED-DHCPV6 FAST-LEAVE BPDU-GUARD EDGE POINT-TO-POINT PVID FRAME-TYPES
0 H ether2 bridge1 yes none no no no no no auto auto 1 admit-all
1 H ether3 bridge1 yes none no no no no no auto auto 1 admit-all
2 H ether4 bridge1 yes none no no no no no auto auto 1 admit-all
3 H ether5 bridge1 yes none no no no no no auto auto 1 admit-all
网桥 VLAN 过滤
网桥 VLAN 过滤启用 VLAN 感知的第 2 层转发,并允许在网桥内修改 VLAN 标记。此功能使网桥更像传统的以太网交换机一样工作,并有助于解决桥接 VLAN 接口时可能出现的生成树兼容性问题。强烈建议配置网桥 VLAN 过滤以符合 STP(IEEE 802.1D)和 RSTP(IEEE 802.1W)标准,并且在 RouterOS 中启用 MSTP(IEEE 802.1s)支持是强制性的。
主要的 VLAN 设置是 vlan-filtering,它全局控制网桥的 VLAN 感知和 VLAN 标记处理。当 vlan-filtering 设置为 no 时,网桥忽略 VLAN 标记,以共享 VLAN 学习(SVL)模式运行,并且无法修改数据包的 VLAN 标记。启用 vlan-filtering 会激活所有网桥 VLAN 相关功能并切换到独立 VLAN 学习(IVL)模式。除了加入端口以进行第 2 层转发外,网桥本身还充当接口,因此具有端口 VLAN ID(pvid)。
警告
目前,配备 Marvell Prestera 交换芯片和 RTL8367、88E6393X、88E6191X、88E6190、MT7621、MT7531 和 EN7523 交换机芯片的 MikroTik 设备(自 RouterOS v7 起)可以同时使用网桥 VLAN 过滤和硬件卸载。其他设备在启用网桥 VLAN 过滤时无法利用内置交换机芯片的优势。这些设备应按照基础 VLAN 交换指南中描述的方法进行配置。使用不当的配置方法可能会导致网络中的吞吐量问题。
网桥 VLAN 表
网桥 VLAN 表定义每个 VLAN 的端口成员资格,并为出口流量指定 VLAN 标记操作。配置为 tagged 的端口发送带有相应 VLAN ID 的帧,而配置为 untagged 的端口在发送帧之前移除 VLAN 标记。frame-types 设置为 admit-all 或 admit-only-untagged-and-priority-tagged 的网桥端口将自动添加为其配置的 PVID 的未标记端口。
子菜单: /interface/bridge/vlan
| Property | Description |
|---|---|
| bridge (name; Default: none) | 此 VLAN 条目所应用到的网桥接口。 |
| disabled (yes | no; Default: no) |
| tagged (interface; Default: none) | 发送带有 VLAN 标记的帧的接口或接口列表。此设置接受逗号分隔的值,例如 tagged=ether1,ether2。 |
| untagged (interface; Default: none) | 发送不带 VLAN 标记的帧的接口或接口列表。此设置接受逗号分隔的值,例如 untagged=ether3,ether4。 |
| vlan-ids (integer 1..4094; Default: 1) | 此端口配置的 VLAN ID 或 VLAN ID 列表。此设置接受 VLAN ID 范围以及逗号分隔的值,例如 vlan-ids=100-115,120,122,128-130。 |
危险
vlan-ids参数可以指定一组或一段范围的 VLAN,但这只应用于已标记端口配置。当为接入端口配置指定多个 VLAN 时,无论 PVID 值如何,已标记数据包都可能通过错误的接入端口作为未标记数据包发送。 警告使用网桥 VLAN 过滤时,请确保将所有必需的接口添加到网桥 VLAN 表。
要使路由功能在同一设备上通过使用网桥 VLAN 过滤的端口正常工作,您必须允许访问网桥接口(当使用硬件卸载 VLAN 过滤时,这包括 switch-cpu 端口)。这可以通过手动将网桥接口本身作为已标记端口添加到 VLAN 表来完成。自 RouterOS v7.16 起,当将 VLAN 接口添加到启用了 VLAN 过滤的网桥时,会自动完成此操作(
/interface/bridge/vlan菜单下会出现一个注释为 "added by vlan on bridge" 的动态条目)。更多示例可以在 VLAN 间路由和管理访问部分找到。自 RouterOS 7.20 起,当相同的 VLAN ID 跨越多个交换机芯片或在硬件和软件端口上同时使用时,会添加一个名为 "added by switch-cpu" 的动态已标记条目。 危险
允许访问 CPU 时,您就允许从特定端口访问路由器/交换机本身。这并不总是理想的。当允许从特定 VLAN ID 和端口访问 CPU 时,请确保实施适当的防火墙过滤规则来保护您的设备。使用防火墙过滤规则仅允许访问所需的服务。 警告
配置不当的网桥 VLAN 过滤可能导致安全问题。在生产环境中部署设备之前,请确保您完全理解 网桥 VLAN 表 的工作方式。
网桥端口设置
每个网桥端口都有多个与 VLAN 相关的设置,用于控制未标记 VLAN 成员资格、VLAN 标记和去标记行为,以及基于 VLAN 标记存在与否的数据包过滤。
子菜单: /interface/bridge/port
| Property | Description |
|---|---|
| frame-types (admit-all | admit-only-untagged-and-priority-tagged |
| ingress-filtering (yes | no; Default: yes) |
| pvid (integer: 1..4094; Default: 1) | 端口 VLAN ID(pvid)指定未标记入口流量被分配到哪个 VLAN。此属性仅在 vlan-filtering 设置为 yes 时生效。 |
| tag-stacking (yes | no; Default: no) |
网桥主机表
网桥主机表显示在网桥接口上学习到的 MAC 地址。启用 vlan-filtering 时,该表还显示与每个学习到的 MAC 地址关联的 VLAN ID,从而启用独立 VLAN 学习(IVL)模式。
[admin@MikroTik] > /interface/bridge/host/print where !local
Flags: X - disabled, I - invalid, D - dynamic, L - local, E - external
# MAC-ADDRESS VID ON-INTERFACE BRIDGE
0 D CC:2D:E0:E4:B3:AA 300 ether3 bridge1
1 D CC:2D:E0:E4:B3:AB 400 ether4 bridge1
VLAN 示例:干道端口和接入端口
本节演示如何配置具有一个干道端口和多个接入端口的基本 VLAN 设置。干道端口(ether2)在交换机之间或到路由器之间承载已标记的 VLAN 流量,而接入端口(ether6、ether7、ether8)连接到终端设备并使用未标记的 VLAN 流量。

步骤 1:创建网桥接口
创建一个禁用 vlan-filtering 的网桥接口。这一点很重要,因为启用 VLAN 过滤会立即限制流量,可能会在配置完成之前将您锁在设备之外。有关在 VLAN 配置期间管理对设备访问的详细信息,请参阅 管理访问配置 部分。
/interface/bridge
add name=bridge1 vlan-filtering=no
步骤 2:添加网桥端口并配置 PVID
将物理接口添加到网桥,并为接入端口配置端口 VLAN ID(pvid)。pvid 决定未标记流量进入网桥时被分配到哪个 VLAN。frame-types 设置控制每个端口接受何种流量:仅已标记、仅未标记或两者皆可。
/interface/bridge/port
add bridge=bridge1 interface=ether2 frame-types=admit-only-vlan-tagged
add bridge=bridge1 interface=ether6 pvid=200 frame-types=admit-only-untagged-and-priority-tagged
add bridge=bridge1 interface=ether7 pvid=300 frame-types=admit-only-untagged-and-priority-tagged
add bridge=bridge1 interface=ether8 pvid=400 frame-types=admit-only-untagged-and-priority-tagged
步骤 3:创建网桥 VLAN 表条目
创建网桥 VLAN 表条目。干道端口(ether2)必须配置为已标记成员,这意味着它将发送和接收带有 VLAN 标记的帧。接入端口会根据其 pvid 设置自动添加为未标记成员,因此您只需在每个 VLAN 条目中指定已标记端口。
/interface/bridge/vlan
add bridge=bridge1 tagged=ether2 vlan-ids=200
add bridge=bridge1 tagged=ether2 vlan-ids=300
add bridge=bridge1 tagged=ether2 vlan-ids=400
步骤 4:启用 VLAN 过滤
配置完所有 VLAN 设置后,在网桥上启用 VLAN 过滤以激活 VLAN 功能。
/interface/bridge/set bridge1 vlan-filtering=yes
步骤 5:(可选)拒绝未标记流量
作为可选的安全措施,您可以通过更改 frame-type 来设置网桥拒绝未标记流量。这会阻止使用默认 VLAN 1(pvid=1),并确保只接受正确标记的流量。
/interface/bridge/set bridge1 frame-types=admit-only-vlan-tagged
VLAN 示例 - 干道端口和混合端口

创建一个禁用了 vlan-filtering 的网桥,以避免在 VLAN 完全配置之前失去对路由器的访问。如果您需要对网桥进行管理访问,请参阅 管理访问配置 部分。
/interface/bridge
add name=bridge1 vlan-filtering=no
添加网桥端口并在混合 VLAN 端口上指定 pvid,以将未标记流量分配到预期的 VLAN。使用 frame-types 设置仅在 ether2 上接受已标记数据包。
/interface/bridge/port
add bridge=bridge1 interface=ether2 frame-types=admit-only-vlan-tagged
add bridge=bridge1 interface=ether6 pvid=200
add bridge=bridge1 interface=ether7 pvid=300
add bridge=bridge1 interface=ether8 pvid=400
添加网桥 VLAN 条目并在其中指定已标记端口。在此示例中,出口 VLAN 标记也在 ether6、ether7、ether8 端口上完成,使它们成为混合端口。frame-types 设置为 admit-all 的网桥端口将自动添加为 pvid VLAN 的未标记端口。
/interface/bridge/vlan
add bridge=bridge1 tagged=ether2,ether7,ether8 vlan-ids=200
add bridge=bridge1 tagged=ether2,ether6,ether8 vlan-ids=300
add bridge=bridge1 tagged=ether2,ether6,ether7 vlan-ids=400
最后,当 VLAN 配置完成时,启用网桥 VLAN 过滤。
/interface/bridge/set bridge1 vlan-filtering=yes
一个可选的步骤是在网桥接口上设置 frame-types=admit-only-vlan-tagged,以禁用默认的未标记 VLAN 1(pvid=1)。
/interface/bridge/set bridge1 frame-types=admit-only-vlan-tagged
危险
您不必将接入端口添加为未标记端口,因为它们将根据
pvid中指定的 VLAN ID 动态添加为未标记端口,您只需将干道端口指定为已标记端口即可。所有设置了相同pvid的端口都将在单个条目中作为未标记端口添加。您必须考虑到网桥本身也是一个端口,并且它也有pvid值,这意味着网桥端口也将作为具有相同pvid的端口的未标记端口添加。您可以通过在所有端口(甚至干道端口和网桥本身)上设置不同的pvid,或者使用设置为accept-only-vlan-tagged的frame-type来规避此行为。
VLAN 示例 - 通过网桥进行 VLAN 间路由

创建一个禁用了 vlan-filtering 的网桥,以避免在 VLAN 完全配置之前失去对路由器的访问。如果您需要对网桥进行管理访问,请参阅 管理访问配置 部分。
/interface/bridge
add name=bridge1 vlan-filtering=no
添加网桥端口并为 VLAN 接入端口指定 pvid,以将其未标记流量分配到预期的 VLAN。使用 frame-types 设置仅接受未标记数据包。
/interface/bridge/port
add bridge=bridge1 interface=ether6 pvid=200 frame-types=admit-only-untagged-and-priority-tagged
add bridge=bridge1 interface=ether7 pvid=300 frame-types=admit-only-untagged-and-priority-tagged
add bridge=bridge1 interface=ether8 pvid=400 frame-types=admit-only-untagged-and-priority-tagged
添加网桥 VLAN 条目并在其中指定已标记端口。在此示例中,bridge1 接口是将流量进一步发送以进行 VLAN 间路由的 VLAN 干道。frame-types 设置为 admit-only-untagged-and-priority-tagged 的网桥端口将自动添加为 pvid VLAN 的未标记端口。
/interface/bridge/vlan
add bridge=bridge1 tagged=bridge1 vlan-ids=200
add bridge=bridge1 tagged=bridge1 vlan-ids=300
add bridge=bridge1 tagged=bridge1 vlan-ids=400
在 bridge1 上配置 VLAN 接口,以允许在路由层面处理已标记的 VLAN 流量,并设置 IP 地址以确保按计划在 VLAN 之间进行路由。
/interface/vlan
add interface=bridge1 name=VLAN200 vlan-id=200
add interface=bridge1 name=VLAN300 vlan-id=300
add interface=bridge1 name=VLAN400 vlan-id=400
/ip/address
add address=20.0.0.1/24 interface=VLAN200
add address=30.0.0.1/24 interface=VLAN300
add address=40.0.0.1/24 interface=VLAN400
最后,当 VLAN 配置完成时,启用网桥 VLAN 过滤:
/interface/bridge/set bridge1 vlan-filtering=yes
一个可选的步骤是在网桥接口上设置 frame-types=admit-only-vlan-tagged,以禁用默认的未标记 VLAN 1(pvid=1)。
/interface/bridge/set bridge1 frame-types=admit-only-vlan-tagged
自 RouterOS v7 起,可以在某些设备上使用 L3 硬件卸载来路由流量。更多详细信息请参阅 L3 硬件卸载。
管理访问配置
在使用网桥 VLAN 过滤的设备上,有多种方法可以设置管理访问。以下是正确启用对路由器/交换机访问的一些最常用方法。首先创建一个未启用 VLAN 过滤的网桥:
/interface/bridge
add name=bridge1 vlan-filtering=no
不启用 VLAN 过滤的未标记访问
在网桥上未启用 VLAN 过滤且需要通过未标记流量进行管理访问的情况下,配置很简单。唯一需要的步骤是直接将 IP 地址分配给网桥接口本身。由于网桥在第 2 层运行且没有 VLAN 标记,进入网桥端口的任何未标记流量都将能够与分配给网桥接口的 IP 地址通信,无需额外配置。
/ip/address
add address=192.168.99.1/24 interface=bridge1
当 VLAN 过滤不属于网络设计的一部分时,此方法提供了访问路由器或交换机进行管理的最简单方式。
不启用 VLAN 过滤的已标记访问
当您想使用已标记的 VLAN 流量管理路由器/交换机,但不启用网桥 VLAN 过滤时,使用此方法。在此场景中,在网桥之上创建一个单独的 VLAN 接口来处理已标记的管理流量。当您需要通过特定 VLAN ID 访问设备,同时保持网桥配置简单明了时,此方法很有用。
要配置已标记管理访问,首先在网桥上创建一个具有所需 VLAN ID 的 VLAN 接口,然后为该 VLAN 接口分配 IP 地址。这允许通过已标记 VLAN 访问路由器,同时保持网桥处于默认状态(未启用 VLAN 过滤)。VLAN 接口充当逻辑子接口,从父网桥接口继承 MAC 地址。
/interface/vlan
add interface=bridge1 name=MGMT vlan-id=99
/ip/address
add address=192.168.99.1/24 interface=MGMT
此配置在网桥上创建一个管理 VLAN(VLAN 99),使设备可通过任何承载 VLAN 99 已标记流量的端口在 IP 地址 192.168.99.1 上访问。
启用 VLAN 过滤的已标记访问
在网桥上启用了 VLAN 过滤且需要通过已标记流量进行管理访问的场景中,需要额外的配置步骤。此方法允许您通过指定端口上的已标记流量,使用特定 VLAN ID(此示例中为 VLAN 99)访问路由器/交换机管理接口。
首先,在网桥之上创建一个 VLAN 接口并为其分配 IP 地址。此 VLAN 接口将处理已标记的管理流量:
/interface/vlan
add interface=bridge1 name=MGMT vlan-id=99
/ip/address
add address=192.168.99.1/24 interface=MGMT
接下来,您必须向网桥 VLAN 表添加适当的条目,以允许在将发起管理访问的端口上传输已标记流量。例如,如果您需要使用 VLAN 99 已标记流量从端口 ether3、ether4 和 sfp-sfpplus1 访问设备,请将 bridge1 接口本身包含在已标记端口列表中(网桥接口必须被标记,以允许 VLAN 接口与交换机 CPU 通信):
/interface/bridge/vlan
add bridge=bridge1 tagged=bridge1,ether3,ether4,sfp-sfpplus1 vlan-ids=99
一旦 VLAN 表配置正确,您就可以在网桥上启用 VLAN 过滤:
/interface/bridge/set bridge1 vlan-filtering=yes
此配置通过已标记的 VLAN 99 流量启用管理访问,同时保持 VLAN 过滤的安全优势。网桥接口本身被包含为已标记成员,以确保 VLAN 接口与交换机 CPU 之间的正确通信,用于路由和管理目的。
启用 VLAN 过滤的未标记访问
当启用网桥 VLAN 过滤且您需要使用未标记流量访问设备时,必须确保管理 VLAN 接口使用与未标记端口 VLAN ID(通过 pvid 参数配置)相同的 VLAN ID。这确保来自接入端口的未标记流量能够与路由器的管理接口正确通信。
首先,在网桥上创建一个 VLAN 接口并为其分配 IP 地址,就像前面的示例一样。此 VLAN 接口将处理管理流量:
/interface/vlan
add interface=bridge1 name=MGMT vlan-id=99
/ip/address
add address=192.168.99.1/24 interface=MGMT
例如,如果您希望未标记端口 ether2 和 ether3 能够与 VLAN 99 管理接口通信,则这些端口必须配置与管理员 VLAN ID 匹配的 pvid 值。此外,您需要将网桥接口本身作为已标记端口成员添加到 VLAN 表中,这允许路由器处理已标记的管理流量。如果您特定的网络拓扑需要,您还可以添加额外的已标记端口(有关已标记端口配置的更多详细信息,请参阅前面的示例):
/interface/bridge/port
set [find interface=ether2] pvid=99
set [find interface=ether3] pvid=99
/interface/bridge/vlan
add bridge=bridge1 tagged=bridge1 untagged=ether2,ether3 vlan-ids=99
完成 VLAN 表配置后,您可以在网桥上启用 VLAN 过滤。这将激活所有 VLAN 相关功能并开始根据您的 VLAN 设置过滤流量:
/interface/bridge/set bridge1 vlan-filtering=yes
更改网桥接口的未标记 VLAN
在使用 VLAN 过滤的情况下,可以使用 pvid 设置更改网桥接口的未标记 VLAN ID。请注意,创建可路由的 VLAN 接口并允许网桥上的已标记流量是更灵活且通常推荐的选择。
首先,在网桥接口上创建一个 IP 地址。
/ip/address
add address=192.168.99.1/24 interface=bridge1
例如,未标记的 bridge1 流量应能够与 VLAN 99 中未标记的 ether2 和 ether3 端口以及已标记的 sfp-sfpplus1 端口通信。为实现这一点,bridge1、ether2、ether3 应配置相同的 pvid,并且 sfp-sfpplus1 应添加为已标记成员。
/interface/bridge
set [find name=bridge1] pvid=99
/interface/bridge/port
set [find interface=ether2] pvid=99
set [find interface=ether3] pvid=99
/interface/bridge/vlan
add bridge=bridge1 tagged=sfp-sfpplus1 untagged=bridge1,ether2,ether3 vlan-ids=99
之后您可以启用 VLAN 过滤:
/interface/bridge/set bridge1 vlan-filtering=yes
警告
如果不需要通过 IP 地址连接路由器/交换机,则可以跳过添加 IP 地址的步骤,因为通过第 2 层协议(例如 MAC-telnet)连接路由器/交换机无论如何都可以正常工作。
VLAN 隧道(QinQ)
自 RouterOS v6.43 起,RouterOS 网桥符合 IEEE 802.1ad,可以根据服务 VLAN ID(0x88a8)而不是客户 VLAN ID(0x8100)过滤 VLAN ID。可以应用与 IEEE 802.1Q VLAN 过滤相同的原则(可以使用相同的设置示例)。以下是常见 Provider bridge(提供商网桥) 的拓扑:

在此示例中,R1、R2、R3 和 R4 可能通过 802.1Q(CVID)发送任何 VLAN 标记流量,但 SW1 和 SW2 需要以某种方式隔离路由器之间的流量,使 R1 只能与 R3 通信,R2 只能与 R4 通信。为此,您可以使用 SVID 标记所有入口流量,并仅允许这些 VLAN 在某些端口上。首先在网桥上启用由 802.1ad 引入的服务标签 0x88a8。在 SW1 和 SW2 上使用以下命令:
/interface/bridge
add name=bridge1 vlan-filtering=no ether-type=0x88a8
在此设置中,ether1 和 ether2 将成为接入端口(未标记),使用 pvid 参数标记每个端口上的所有入口流量,在 SW1 和 SW2 上使用以下命令:
/interface/bridge/port
add interface=ether1 bridge=bridge1 pvid=200
add interface=ether2 bridge=bridge1 pvid=300
add interface=ether3 bridge=bridge1
在网桥 VLAN 表中指定已标记和未标记端口。在 SW1 和 SW2 上使用以下命令:
/interface/bridge/vlan
add bridge=bridge1 tagged=ether3 untagged=ether1 vlan-ids=200
add bridge=bridge1 tagged=ether3 untagged=ether2 vlan-ids=300
配置网桥 VLAN 表后,您可以启用网桥 VLAN 过滤。在 SW1 和 SW2 上使用以下命令:
/interface/bridge/set bridge1 vlan-filtering=yes
危险
启用 vlan-filtering 会过滤发往 CPU 的流量。在启用 VLAN 过滤之前,您应确保已设置管理端口。
请注意,如果您使用新的 EtherType/TPID 0x88a8(服务标签)并且您的服务 VLAN 也需要 VLAN 接口,那么您还必须在 VLAN 接口上应用
use-service-tag参数。 危险当配置
ether-type=0x8100时,网桥会检查外层 VLAN 标记以查看它是否使用 EtherType0x8100。如果网桥收到外层标记具有不同 EtherType 的数据包,它会将该数据包标记为untagged。由于 RouterOS 仅检查数据包的外层标记,因此在使用 802.1ad 协议时无法过滤 802.1Q 数据包。 警告目前,只有配备 Marvell Prestera 交换芯片的 MikroTik 设备能够使用服务标签、EtherType/TPID
0x88a8进行硬件卸载 VLAN 过滤。 危险配备 Marvell-98DX3257 交换机芯片的设备(例如 CRS354 系列)不支持在 1Gbps 以太网接口上对其他 VLAN 类型(
0x88a8和0x9100)进行 VLAN 过滤。
标记堆叠
自 RouterOS v6.43 起,可以在任何现有 VLAN 标记之上强制添加新的 VLAN 标记。此功能可用于实现 CVID 堆叠设置,即在现有 CVID 标记之前添加一个 CVID(0x8100)标记。这种设置类型与 Provider bridge 设置非常相似。要实现相同但具有多个 CVID 标记(CVID 堆叠)的设置,我们可以使用相同的拓扑:

在此示例中,R1、R2、R3 和 R4 可能发送任何 VLAN 标记流量,它可以是 802.1ad、802.1Q 或任何其他类型的流量,但 SW1 和 SW2 需要以某种方式隔离路由器之间的流量,使 R1 只能与 R3 通信,R2 只能与 R4 通信。为此,您可以使用新的 CVID 标记标记所有入口流量,并仅允许这些 VLAN 在某些端口上。首先选择正确的 EtherType,在 SW1 和 SW2 上使用以下命令:
/interface/bridge
add name=bridge1 vlan-filtering=no ether-type=0x8100
在此设置中,ether1 和 ether2 将忽略任何存在的 VLAN 标记并添加新的 VLAN 标记。使用 pvid 参数标记每个端口上的所有入口流量,并在这些端口上允许 tag-stacking。在 SW1 和 SW2 上使用以下命令:
/interface/bridge/port
add interface=ether1 bridge=bridge1 pvid=200 tag-stacking=yes
add interface=ether2 bridge=bridge1 pvid=300 tag-stacking=yes
add interface=ether3 bridge=bridge1
在网桥 VLAN 表中指定已标记和未标记端口。您只需指定外层标记的 VLAN ID。在 SW1 和 SW2 上使用以下命令:
/interface/bridge/vlan
add bridge=bridge1 tagged=ether3 untagged=ether1 vlan-ids=200
add bridge=bridge1 tagged=ether3 untagged=ether2 vlan-ids=300
配置网桥 VLAN 表后,您可以启用网桥 VLAN 过滤,这是使 pvid 参数生效所必需的。在 SW1 和 SW2 上使用以下命令:
/interface/bridge/set bridge1 vlan-filtering=yes
危险
启用 vlan-filtering 会过滤发往 CPU 的流量;在启用 VLAN 过滤之前,您应确保已设置管理端口。
MVRP
多 VLAN 注册协议(MVRP)是一种基于多注册协议(MRP)的协议,它允许向桥接 LAN 的其他成员注册属性(在 MVRP 的情况下为 VLAN ID)。
MRP 应用程序可以做出或撤回属性声明,这会导致与其他 MRP 参与者的这些属性被注册或离开。
其工作原理如下。
MRP 由两部分组成:
- Applicant(申请者) - 负责发送声明(或离开)。其行为可以使用名为
mvrp-applicant-state的设置按端口配置,并使用mvrp-forbidden设置按 VLAN 配置。 - Registrar(注册者) - 负责注册传入的声明。其配置可以使用
mvrp-registrar-state设置按端口配置,并使用mvrp-forbidden设置按 VLAN 配置。
注册传播: 网桥端口上的传入注册会动态地使该特定端口成为已标记 VLAN 成员。此外,与此注册关联的属性会作为声明传播到所有活动(转发)网桥端口。
声明操作: 在 MVRP 的情况下,配置的 VLAN 会在每个端口上被声明,但只有当从 LAN 收到声明时(注册者将注册该 VLAN),它们才会被配置为这些 VLAN 的成员。从终端站的角度来看,单个声明将在整个 LAN 的每个上游端口上注册。当另一个终端站声明相同的属性时,两个(或更多)终端站之间将建立一条注册路径,请参见下图。
MVRP 有助于在整个桥接网络中动态传播 VLAN 信息,并仅在需要的端口上配置 VLAN。通过避免不必要的流量泛洪,这使网络更加高效。
如前所述,MVRP 仅在转发的端口上处于活动状态。在 MSTP 的情况下,只有当端口在 VLAN 所映射的 MSTI 中转发时,才会进行声明和注册。
点对点端口可加速注册(或离开)过程。手动配置 point-to-point=yes 对非以太网接口可能有利。

属性参考
子菜单: /interface/bridge
| Property | Description |
|---|---|
| mvrp (yes | no; Default: no) | 为网桥启用 MVRP。它确保 MAC 地址 01:80:C2:00:00:21 被捕获而不被转发。必须启用 vlan-filtering。 |
子菜单: /interface/bridge/port
端口菜单允许按端口控制申请者和注册者设置。
| Property | Description |
|---|---|
| mvrp-applicant-state (non-participant | normal-participant; Default: normal-participant) | MVRP 申请者选项:non-participant - 端口不发送任何 MRP 消息;normal-participant - 端口正常参与 MRP 交换。 |
| mvrp-registrar-state (fixed | normal; Default: normal) | MVRP 注册者选项:fixed - 端口忽略所有 MRP 消息,并在所有已配置的 VLAN 中保持 Registered(IN)。normal - 端口接收 MRP 消息并根据标准处理它们。 |
要监控当前已声明和已注册的 VLAN ID,请使用 monitor 命令。
[admin@MikroTik] > /interface/bridge/port/monitor [find interface=sfp-sfpplus1]
interface: sfp-sfpplus1
status: in-bridge
port-number: 1
role: designated-port
edge-port: no
edge-port-discovery: yes
point-to-point-port: yes
external-fdb: no
sending-rstp: yes
learning: yes
forwarding: yes
actual-path-cost: 2000
hw-offload-group: switch1
declared-vlan-ids: 1,10,20-21
registered-vlan-ids: 1,10,20,30-33
子菜单: /interface/bridge/vlan
作为静态 VLAN 成员或由端口 pvid 设置创建的动态未标记 VLAN 成员的所有端口都被视为 "fixed"。这意味着注册者忽略所有 MRP 消息,并对这些 VLAN 保持注册(IN)状态。
当 VLAN 既未手动配置也不是由端口 pvid 设置创建时,网桥端口上的传入注册可以动态地将该特定端口指定为已标记 VLAN 成员。mvrp-forbidden 功能允许创建被限制注册特定 VLAN ID 的端口列表。
静态或动态 VLAN 将由申请者声明,除非此功能被端口的 mvrp-applicant-state 或 VLAN 的 mvrp-forbidden 设置禁用。
| Property | Description |
|---|---|
| mvrp-forbidden (interfaces; Default: ) | 忽略所有 MRP 消息并保持 Not Registered(MT)的端口,同时禁止申请者声明特定 VLAN ID。 |
子菜单: /interface/bridge/vlan/mvrp
MVRP 属性菜单可用于查看内部 MVRP 属性状态,如 IEEE 802.1Q-2011 中所规定。
| Property | Description |
|---|---|
| applicant-state | 声明属性的 Applicant 状态机。其状态可以是 VO、VP、VN、AN、AA、QA、LA、AO、QO、AP、QP 或 LO。每个状态由两个字母组成。第一个字母表示状态:V—Very anxious(非常急切);A—Anxious(急切);Q—Quiet(安静);L—Leaving(离开)。第二个字母表示成员资格状态:A - Active member(活动成员);P - Passive member(被动成员);O - Observer(观察者);N - New(新)。例如,VP 表示 "Very anxious, Passive member"。 |
| registrar-state | 记录其他参与者声明的属性注册状态的 Registrar 状态机。其状态可以是 IN、LV 或 MT:IN—Registered(已注册);LV—Previously registered, but now being timed out(先前已注册,但现在正在超时);MT—Not registered(未注册)。 |
[admin@Mikrotik] /interface/bridge/vlan/mvrp/print where vlan-id=10
Columns: BRIDGE, PORT, VLAN-ID, REGISTRAR-STATE, APPLICANT-STATE, LAST-EVENT
# BRIDGE PORT VLAN-ID REGISTRAR-STATE APPLICANT-STATE LAST-EVENT
1 bridge67 sfp-sfpplus1 10 IN Quiet Active JoinIn
9 bridge67 sfp-sfpplus5 10 MT Quiet Active JoinEmpty
17 bridge67 sfp-sfpplus9 10 MT Quiet Active JoinEmpty
25 bridge67 sfp-sfpplus13 10 IN Quiet Active JoinIn
Fast Forward
Fast Forward 允许在特殊条件下更快地转发数据包。启用 Fast Forward 后,网桥可以更快地处理数据包,因为它可以跳过多个与网桥相关的检查,包括 MAC 学习。以下列出了 Fast Forward 处于活动状态必须满足的条件:
- 网桥的
fast-forward设置为yes。 - 网桥只有 2 个正在运行的端口。
- 两个网桥端口都支持 Fast Path,Fast Path 在端口上和网桥全局都处于活动状态。
- 网桥硬件卸载已禁用。
- 网桥 VLAN 过滤已禁用。
- 网桥 DHCP snooping 已禁用。
unknown-multicast-flood设置为yes。unknown-unicast-flood设置为yes。broadcast-flood设置为yes。- 网桥的 MAC 地址与其中一个网桥从属端口的 MAC 地址匹配。
- 两个端口的
horizon都设置为none。
警告
Fast Forward 会禁用 MAC 学习;这是为了实现更快的数据包转发而设计的。MAC 学习防止流量泛洪到多个接口,但当数据包只能通过一个接口发送时,不需要 MAC 学习。 危险
启用硬件卸载时,Fast Forward 被禁用。硬件卸载在活动时可以实现完整的线速性能,因为它将使用内置交换机芯片(如果您的设备存在这样的芯片)。Fast forward 使用 CPU 转发数据包。在比较吞吐量结果时,您会得到这样的结果:硬件卸载 > Fast Forward > Fast Path > Slow Path。 可以检查 Fast Forward 处理了多少数据包:
[admin@MikroTik] /interface/bridge/settings> pr
use-ip-firewall: no
use-ip-firewall-for-vlan: no
use-ip-firewall-for-pppoe: no
allow-fast-path: yes
bridge-fast-path-active: yes
bridge-fast-path-packets: 0
bridge-fast-path-bytes: 0
bridge-fast-forward-packets: 16423
bridge-fast-forward-bytes: 24864422
警告
如果数据包由 Fast Path 处理,则 Fast Forward 未处于活动状态。数据包计数可以用作指示 Fast Forward 是否处于活动状态。 自 RouterOS 6.44 起,可以监控 Fast Forward 状态,例如:
[admin@MikroTik] /interface/bridge/monitor bridge1
state: enabled
current-mac-address: B8:69:F4:C9:EE:D7
root-bridge: yes
root-bridge-id: 0x8000.B8:69:F4:C9:EE:D7
root-path-cost: 0
root-port: none
port-count: 2
designated-port-count: 2
fast-forward: yes
危险
禁用或启用 fast-forward 将临时禁用所有网桥端口,以使设置生效。在生产环境中更改此属性时必须考虑到这一点,因为它可能导致所有数据包被临时丢弃。
IGMP/MLD Snooping
网桥支持 IGMP/MLD snooping。它控制多播流并防止多播在不必要的端口上泛洪。其设置位于网桥菜单中,并且独立地在每个网桥接口上工作。软件驱动的实现适用于所有运行 RouterOS 的设备,但配备 Marvell Prestera 交换芯片以及 88E6393X、88E6191X、88E6190 交换机芯片的 MikroTik 设备还支持带硬件卸载的 IGMP/MLD snooping。更多详细信息请参阅 IGMP/MLD snooping 手册。
DHCP Snooping 和 DHCP Option 82
网桥支持 DHCP Snooping 和 DHCP Option 82。DHCP Snooping 是一种第 2 层安全功能,可防止未经授权的 DHCP 服务器向用户提供恶意信息。在 RouterOS 中,您可以指定哪些网桥端口是信任的(已知 DHCP 服务器所在且应转发 DHCP 消息的位置),哪些是非信任的(通常用于接入端口,收到的 DHCP 服务器消息将被丢弃)。DHCP Option 82 是由启用了 DHCP Snooping 的设备提供的附加信息(Agent Circuit ID 和 Agent Remote ID),允许识别设备本身和 DHCP 客户端。

在此示例中,SW1 和 SW2 是启用了 DHCP Snooping 和 Option 82 的设备。首先,我们需要创建一个网桥,分配接口并标记信任端口。在 SW1 上使用以下命令:
/interface/bridge
add name=bridge
/interface/bridge/port
add bridge=bridge interface=ether1
add bridge=bridge interface=ether2 trusted=yes
对于 SW2,配置将类似,但我们还需要将 ether1 标记为信任,因为此接口将接收已添加 Option 82 的 DHCP 消息。如果端口将接收已添加 Option 82 的 DHCP 消息,则需要将所有此类端口标记为信任,否则这些消息将被丢弃。此外,我们将 ether3 添加到同一个网桥并将此端口保持为非信任,假设存在未经授权(流氓)的 DHCP 服务器。在 SW2 上使用以下命令:
/interface/bridge
add name=bridge
/interface/bridge/port
add bridge=bridge interface=ether1 trusted=yes
add bridge=bridge interface=ether2 trusted=yes
add bridge=bridge interface=ether3
然后我们需要启用 DHCP Snooping 并配置 Option 82。从 RouterOS 7.23 版本开始,可以使用预定义变量(如 BRIDGEMAC、HOSTNAME、INTERFACE、VID)配置自定义 Remote ID 和 Circuit ID 值。有关详细信息,请参阅 dhcp-agent-circuit-id、dhcp-agent-remote-id 属性。如果您的 DHCP 服务器不支持 DHCP Option 82,或者您没有实施任何与 Option 82 相关的策略,则此步骤不是必需的。在此配置示例中,我们在 SW1 和 SW2 上使用以下命令:
/interface/bridge
set [find where name="bridge"] dhcp-snooping=yes dhcp-agent-circuit-id="interface: \$(INTERFACE), vlan: \$(VID)" dhcp-agent-remote-id="ip: 192.168.88.1, identity: \$(HOSTNAME), mac: \$(BRIDGEMAC)"
现在两台设备都将分析在网桥端口上收到哪些 DHCP 消息。SW1 负责添加和移除 DHCP Option 82。SW2 将限制流氓 DHCP 服务器接收任何发现消息,并丢弃来自 ether3 的恶意 DHCP 服务器消息。
警告
目前,配备 Marvell Prestera 交换芯片和 88E6393X、88E6191X、88E6190 交换机芯片的 MikroTik 设备完全支持硬件卸载 DHCP Snooping 和 Option 82。对于 CRS1xx 和 CRS2xx 系列交换机,可以将 DHCP Snooping 与 VLAN 交换一起使用,但随后您需要确保使用出口 ACL 规则以正确的 VLAN 标记发送 DHCP 数据包。其他设备能够将 DHCP Snooping 和 Option 82 功能与硬件卸载一起使用,但您必须确保设备上没有应用任何与 VLAN 相关的配置,否则 DHCP Snooping 和 Option 82 可能无法正常工作。请参阅网桥硬件卸载部分及支持的功能。 信息
从 RouterOS v7.17 开始,绑定接口上的硬件卸载支持 DHCP snooping。
DHCP Snooping 绑定表
DHCP snooping 绑定数据库是由网桥生成的运行时表,用于存储连接到信任端口的 DHCP 服务器提供的 DHCP 租约。每个条目记录客户端的 MAC 地址、分配的 IP 地址、租约到期时间、VLAN ID 以及看到客户端的物理接口。网桥可以利用此数据库增强安全性。即,当帧到达非信任端口时,交换机会验证源 MAC/IP 对是否与存储的绑定匹配,然后再转发数据包,从而阻止来自流氓 DHCP 服务器或伪造主机的流量,防止地址盗用攻击,并启用 IP‑Source‑Guard、ARP‑Inspection 等功能。
当前 DHCPv4 snooping 绑定表的实现建立在现有的 /interface/bridge/host 表之上。相关 DHCP 信息从通过网桥的 DHCP 消息中获取。
危险
每当网桥接口配置发生更改时,DHCP snooping 绑定表都会被清除,包括启用
arp-inspection或ip-source-guard功能。结果,非信任端口上的 IPv4 和 ARP 流量会中断,直到客户端获取或续订其 DHCP 租约。要更快地重新填充绑定表,请禁用并重新启用非信任以太网接口或重启交换机。 DHCP 客户端的当前状态由dhcpv4-status指示。可能的状态值如下:searching、requesting、bound、renewing、rebinding、expired和relay-agent。最后一个仅当从隐藏在 relay agent 后面的 DHCP 客户端收到 DHCP 请求消息时才会出现。
dhcpv4-ip 显示 DHCP 服务器授予的 IP 地址,而 dhcpv4-server-id 列指示服务器 ID。dhcpv4-expires-after 列显示 DHCP 服务器提供给客户端的当前租约期结束前剩余的时间。
当网桥上启用 VLAN 过滤时,每个主机不仅通过其 MAC 地址标识,还通过 MAC - VLAN ID 对标识。
Winbox 中的活动 DHCP 绑定表条目:

控制台中的活动 DHCP 绑定表条目:

ARP Inspection 和 IP Source Guard
ARP Inspection 和 IP Source Guard 是使用 DHCP snooping 绑定表来防止地址欺骗攻击的第 2 层安全功能。ARP Inspection 根据绑定数据库验证 ARP 数据包,丢弃任何不匹配的数据包。IP Source Guard 验证 IPv4 数据包的源 IP 地址,丢弃在入口端口的绑定条目中找不到的数据包。在信任端口上,所有 ARP 数据包和 IP 流量都无需验证即可转发。
首先,在网桥上启用 DHCP snooping,并将连接到 DHCP 服务器的端口标记为信任:
/interface/bridge/set [find name="bridge1"] dhcp-snooping=yes
/interface/bridge/port/set [find interface=ether1] trusted=yes
启用 ARP inspection 并指定信任的 ARP 端口:
/interface/bridge/set [find name="bridge1"] arp-inspection=yes
/interface/bridge/port/set [find interface=ether1] trusted-arp=yes
启用 IP Source Guard:
/interface/bridge/set [find name="bridge1"] ip-source-guard=yes
危险
每当网桥接口配置发生更改时,DHCP snooping 绑定表都会被清除,包括启用
arp-inspection或ip-source-guard功能。结果,非信任端口上的 IPv4 和 ARP 流量会中断,直到客户端获取或续订其 DHCP 租约。要更快地重新填充绑定表,请禁用并重新启用非信任以太网接口或重启交换机。 打印网桥主机表以验证 DHCP 绑定正在被学习:
/interface/bridge/host/print where dhcpv4-status
检查 /interface/ethernet/switch/rule 以验证交换机 ACL 规则已应用(仅在 Marvell Prestera 交换机芯片上支持):
[admin@MikroTik] > /interface/ethernet/switch/rule/print
Flags: D - DYNAMIC
0 D switch=switch1 mac-protocol=ip protocol=udp src-port=67-68 dst-port=67-68 copy-to-cpu=no redirect-to-cpu=yes mirror=no
1 D switch=switch1 ports=ether2,ether3,ether4 mac-protocol=arp copy-to-cpu=no redirect-to-cpu=yes mirror=no
2 D ;;; IPSG (Pass Untrusted)
switch=switch1 ports=ether2 src-mac-address=D6:3F:38:20:8D:2B/FF:FF:FF:FF:FF:FF mac-protocol=ip src-address=192.168.88.8/255.255.255.255 copy-to-cpu=no redirect-to-cpu=no mirror=no
3 D ;;; IPSG (Pass Untrusted)
switch=switch1 ports=ether3 src-mac-address=6C:3B:6B:EB:76:AA/FF:FF:FF:FF:FF:FF mac-protocol=ip src-address=192.168.88.9/255.255.255.255 copy-to-cpu=no redirect-to-cpu=no mirror=no
4 D ;;; IPSG (Drop Untrusted)
switch=switch1 ports=ether2,ether3,ether4 mac-protocol=ip copy-to-cpu=no redirect-to-cpu=no mirror=no new-dst-ports=""
查找 bridge,warning 日志条目以检测被丢弃的数据包:
/log/print where topics~"bridge" and topics~"warning"
2026-07-26 12:08:29 bridge,warning ether2: dropped IP packet on untrusted port - MAC/IP does not match binding table entry (IP=192.168.88.55, MAC=6c:3b:6b:eb:76:aa)
2026-07-26 13:55:02 bridge,warning ether2: dropped ARP packet on untrusted port - unknown MAC/IP combination (src IP=192.168.88.55, MAC=6c:3b:6b:eb:76:aa)
DHCPv6 Snooping / DHCPv6 Shield
DHCPv6 Snooping 是一种第 2 层安全功能,可防止未经授权的 DHCPv6 服务器向用户提供恶意信息。在 RouterOS 中,您可以指定哪些网桥端口是信任的(已知 DHCPv6 服务器所在且应转发 DHCPv6 消息的位置),哪些是非信任的(通常用于接入端口,收到的 DHCPv6 服务器消息将被丢弃,从而有效实现 DHCPv6-Shield)。
DHCPv6 Option 18(Interface-Id)和 Option 37(Remote-Id)是由启用了 DHCPv6 Snooping 的设备提供的附加信息,允许识别设备本身和 DHCPv6 客户端。
IPv6 允许对 DHCPv6 Relay agent 过程采取更细粒度的方法以及更大的灵活性。在功能上,这些与 IPv4 的 Option 82 目的完全相同:Option 18 充当 Circuit ID(标识客户端所连接的具体端口/VLAN),Option 37 充当 Remote ID(标识 relay agent 或交换机硬件本身)。
- Option 18 - 标识收到客户端消息的具体接口(端口)。它确保服务器确切知道请求来自哪里,以便应用正确的策略。
- Option 37 - 标识 relay agent(交换机或路由器)本身。它包含唯一的主叫方 ID(例如 DUID—DHCP 唯一标识符)。它告诉服务器网络中的哪个具体设备正在与它通信。
RA Guard
RA guard 功能旨在丢弃包含路由器通告(RA)消息的 IPv6 数据包,这些数据包到达用户指定为非信任的网桥端口,从而可以防止潜在的基于流氓 RA 消息的攻击或意外的网络错误配置。启用后,可以将每个网桥端口设置为信任或非信任(默认情况下所有网桥端口都设置为 RA 非信任)。
以下是 IPv6 RA Guard(路由器通告防护)背后的网络方案和核心原理。

#Layer 2 Access Switch - enabling RA guard on the main bridge``/interface/bridge``add name=bridge``/interface/bridge``set [find where name="bridge"] ra-guard=yes``/interface/bridge/port``add bridge=bridge interface=etherUplink Trusted RA=yes``add bridge=bridge interface=etherX``add bridge=bridge interface=etherY``add bridge=bridge interface=etherZ |
问题:为什么需要这个?
在 IPv6 中,设备使用 ICMPv6 来自动配置自身。
路由器通告(Type 134):路由器广播这些消息以告诉主机:"我是网关,这是您的网络前缀。"
威胁:如果用户意外地将消费级路由器(如家庭 Wi-Fi 路由器)连接到接入端口,或者恶意行为者在接入端口上启动工具(如 Rogue RA),该设备将开始广播 RA。
结果:网络上的其他主机将根据流氓设备自动配置其 IPv6 地址,并将该流氓设备设置为其默认网关。这会导致中间人攻击或完全拒绝服务。
以下是 IPv6 RA Guard(路由器通告防护)背后的网络方案和核心原理。
核心原理:"信任 vs. 非信任"
IPv6 RA Guard 的基本原理在逻辑上与 IPv4 中的 DHCP Snooping 相同。它通过将交换机端口分为两种角色,在第 2 层交换基础设施内创建安全边界:
- 信任端口:连接到合法、授权 IPv6 路由器的端口。允许这些端口发送路由器通告(RA)数据包。
- 非信任端口:连接到终端用户主机的端口。阻止这些端口发送 RA 数据包。
数据包解析过程
对于未配置为 RA Trusted 的端口,RA Guard 解析器会遍历扩展报头链,直到遇到非扩展报头。解析过程和后续操作由以下规则控制:
传输层终止:如果解析器遇到有效的传输层报头——例如 TCP、UDP、ESP、RSVP 或封装的 IPv4/IPv6 报头——解析将终止,数据包被转发(受标准网桥检查约束)。
- 丢弃条件 - 在以下情况下数据包被丢弃:
- 它不包含传输层报头。
- 链中的最后一个扩展报头在其 "Next Header" 字段中未指定 NO_NEXT_HEADER(59)。
- 如果发现 ICMP 消息类型为 134,则丢弃数据包。
- 分片处理:这些解析规则仅适用于分片 IPv6 数据包的第一个分片。后续分片无论其内容如何都会被转发,因为它们不包含识别 RA 所需的协议报头。
网桥防火墙
网桥防火墙实现数据包过滤,从而提供用于管理进出网桥以及穿过网桥的数据流的安全功能。
数据包流图 显示了数据包如何通过路由器处理。可以强制网桥流量经过 /ip/firewall/filter 规则(请参阅网桥设置)。
有两个网桥防火墙表:
- filter - 具有三个预定义链的网桥防火墙:
- input - 过滤目的地址为网桥的数据包(包括那些将被路由的数据包,因为它们无论如何都发往网桥 MAC 地址)。
- output - 过滤来自网桥的数据包(包括那些已正常路由的数据包)。
- forward - 过滤将要桥接的数据包(注意:此链不应用于应通过路由器路由的数据包,仅应用于在同一网桥的端口之间穿行的数据包)。
- nat - 网桥网络地址转换提供了更改穿过网桥的数据包的源/目的 MAC 地址的方法。有两个内置链:
- srcnat - 用于将主机或网络"隐藏"在不同的 MAC 地址后面。此链应用于通过桥接接口离开路由器的数据包。
- dstnat - 用于将某些数据包重定向到其他目的地。
您可以在网桥防火墙(filter 和 NAT)中放置数据包标记,它们与由 '/ip/firewall/mangle' 配置的 IP 防火墙中的数据包标记相同。这样,网桥防火墙放置的数据包标记可以在 'IP 防火墙' 中使用,反之亦然。
本节描述了一般的网桥防火墙属性。nat 和 filter 规则之间不同的一些参数将在后续部分中描述。
子菜单: /interface/bridge/filter, /interface/bridge/nat
| Property | Description |
|---|---|
| 802.3-sap (integer; Default: ) | DSAP(Destination Service Access Point,目的服务访问点)和 SSAP(Source Service Access Point,源服务访问点)是 2 个单字节字段,用于标识使用链路层服务的网络协议实体。这些字节始终相等。可以在此处指定两个十六进制数字以匹配 SAP 字节。 |
| 802.3-type (integer; Default: ) | 以太网协议类型,放置在 IEEE 802.2 帧报头之后。仅当 802.3-sap 为 0xAA(SNAP - Sub-Network Attachment Point 报头)时才有效。例如,AppleTalk 可以由 0xAA 的 SAP 代码后跟 0x809B 的 SNAP 类型代码指示。 |
| action (accept | drop | jump | log | mark-packet | passthrough | return | set-priority; Default: ) | 如果数据包与规则匹配时要执行的操作:accept - 接受数据包。数据包不会传递给下一个防火墙规则drop - 静默丢弃数据包jump - 跳转到由 <code>jump-target</code> 参数值指定的用户定义链log - 向系统日志添加包含以下数据的消息:in-interface、out-interface、src-mac、protocol、src-ip:port->dst-ip:port 和数据包长度。数据包匹配后,它会被传递给列表中的下一个规则,类似于 <code>passthrough</code>mark-packet - 将 new-packet-mark 参数指定的标记放置在匹配规则的数据包上passthrough - 如果数据包与规则匹配,则增加计数器并转到下一个规则(对统计有用)return - 将控制权传回进行跳转的链set-priority - 在通过能够传输优先级的链路(VLAN 或支持 WMM 的无线接口)发送的数据包上设置 new-priority 参数指定的优先级。阅读更多 |
| arp-dst-address (IP address; Default: ) | ARP 目的 IP 地址。 |
| arp-dst-mac-address (MAC address; Default: ) | ARP 目的 MAC 地址。 |
| arp-gratuitous (yes | no; Default: ) | 匹配 ARP 无故(gratuitous)数据包。 |
| arp-hardware-type (integer; Default: 1) | ARP 硬件类型。通常为以太网(Type 1)。 |
| arp-opcode (arp-nak | drarp-error | drarp-reply | drarp-request | inarp-reply | inarp-request | reply | reply-reverse | request | request-reverse; Default: ) | ARP 操作码(数据包类型)arp-nak - 否定 ARP 回复(很少使用,主要用于 ATM 网络)drarp-error - 动态 RARP 错误代码,表示无法为给定的 MAC 地址分配 IP 地址drarp-reply - 动态 RARP 回复,为主机分配临时 IP 地址drarp-request - 动态 RARP 请求,为给定的 MAC 地址分配临时 IP 地址inarp-reply - InverseARP 回复inarp-request - InverseARP 请求reply - 带有 MAC 地址的标准 ARP 回复reply-reverse - 带有分配 IP 地址的反向 ARP(RARP)回复request - 向已知 IP 地址发送的标准 ARP 请求,以查明未知 MAC 地址request-reverse - 向已知 MAC 地址发送的反向 ARP(RARP)请求,以查明未知 IP 地址(旨在供主机查明自己的 IP 地址,类似于 DHCP 服务) |
| arp-packet-type (integer 0..65535 | hex 0x0000-0xffff; Default: ) | ARP 数据包类型。 |
| arp-src-address (IP address; Default: ) | ARP 源 IP 地址。 |
| arp-src-mac-address (MAC addres; Default: ) | ARP 源 MAC 地址。 |
| chain (text; Default: ) | 过滤器在其中起作用的网桥防火墙链(内置链或用户定义链)。 |
| dst-address (IP address; Default: ) | 目的 IP 地址(仅当 MAC 协议设置为 IP 时)。 |
| dst-address6 (IPv6 address; Default: ) | 目的 IPv6 地址(仅当 MAC 协议设置为 IPv6 时)。 |
| dst-mac-address (MAC address; Default: ) | 目的 MAC 地址。 |
| dst-port (integer 0..65535; Default: ) | 目的端口号或范围(仅适用于 TCP 或 UDP 协议)。 |
| in-bridge (name; Default: ) | 数据包进入所经过的网桥接口。 |
| in-bridge-list (name; Default: ) | 在接口列表中定义的网桥接口集。工作方式与 in-bridge 相同。 |
| in-interface (name; Default: ) | 数据包进入所经过的物理接口(即网桥端口)。 |
| in-interface-list (name; Default: ) | 在接口列表中定义的接口集。工作方式与 in-interface 相同。 |
| ingress-priority (integer 0..63; Default: ) | 匹配入口数据包的优先级。优先级可以源自 VLAN、WMM、DSCP 或 MPLS EXP 位。阅读更多 |
| ip-protocol (dccp | ddp | egp | encap | etherip | ggp | gre | hmp | icmp | icmpv6 | idpr-cmtp | igmp | ipencap | ipip | ipsec-ah | ipsec-esp | ipv6 | ipv6-frag | ipv6-nonxt | ipv6-opts | ipv6-route | iso-tp4 | l2tp | ospf | pim | pup | rdp | rspf | rsvp | sctp | st | tcp | udp | udp-lite | vmtp | vrrp | xns-idp | xtp; Default: ) | IP 协议(仅当 MAC 协议设置为 IPv4 时)dccp - Datagram Congestion Control Protocolddp - Datagram Delivery Protocolegp - Exterior Gateway Protocolencap - Encapsulation Headeretherip - Ethernet-within-IP Encapsulationggp - Gateway-to-Gateway Protocolgre - Generic Routing Encapsulationhmp - Host Monitoring Protocolicmp - IPv4 Internet Control Message Protocolicmpv6 - IPv6 Internet Control Message Protocolidpr-cmtp - Inter-Domain Policy Routing Control Message Transport Protocoligmp - Internet Group Management Protocolipencap - IP in IP(封装)ipip - IP-within-IP Encapsulation Protocolipsec-ah - IPsec Authentication Headeripsec-esp - IPsec Encapsulating Security Payloadipv6 - Internet Protocol version 6ipv6-frag - Fragment Header for IPv6ipv6-nonxt - No Next Header for IPv6ipv6-opts - Destination Options for IPv6ipv6-route - Routing Header for IPv6iso-tp4 - ISO Transport Protocol Class 4l2tp - Layer Two Tunneling Protocolospf - Open Shortest Path Firstpim - Protocol Independent Multicastpup - PARC Universal Packetrdp - Reliable Data Protocolrspf - Radio Shortest Path Firstrsvp - Reservation Protocolsctp - Stream Control Transmission Protocolst - Internet Stream Protocoltcp - Transmission Control Protocoludp - User Datagram Protocoludp-lite - Lightweight User Datagram Protocolvmtp - Versatile Message Transaction Protocolvrrp - Virtual Router Redundancy Protocolxns-idp - Xerox Network Systems Internet Datagram Protocolxtp - Xpress Transport Protocol |
| jump-target (name; Default: ) | 如果指定了 action=jump,则指定用于处理数据包的用户定义防火墙链。 |
| limit (integer/time,integer; Default: ) | 匹配达到有限速率的数据包。使用此匹配器的规则将一直匹配,直到达到此限制。count - 最大平均数据包速率,以每秒数据包数(pps)为单位,除非后跟 Time 选项time - 指定测量数据包速率的时间间隔burst - 在突发中匹配的数据包数量 |
| log(*yes | no; Default:*no) | 向系统日志添加包含以下数据的消息:in-interface、out-interface、src-mac、dst-mac、eth-protocol、ip-protocol、src-ip:port->dst-ip:port 以及数据包长度。 |
| log-prefix (text; Default: ) | 定义在日志信息之前打印的前缀。 |
| mac-protocol (802.2 | arp | capsman | dot1x | homeplug-av | ip | ipv6 | ipx | lacp | length | lldp | loop-protect | macsec | mpls-multicast | mpls-unicast | mvrp | packing-compr | packing-simple | pppoe | pppoe-discovery | rarp | romon | service-vlan | vlan | integer 0..65535 | hex 0x0000-0xffff; Default: ) | 以太网有效载荷类型(MAC 级协议)。要匹配 VLAN 封装帧(0x8100 或 0x88a8)的协议类型,应使用 vlan-encap 属性。802.2 - 802.2 Frames (0x0004)arp - Address Resolution Protocol (0x0806)homeplug-av - HomePlug AV MME (0x88E1)ip - Internet Protocol version 4 (0x0800)ipv6 - Internet Protocol Version 6 (0x86DD)ipx - Internetwork Packet Exchange (0x8137)length - Packets with length field (0x0000-0x05DC)lldp - Link Layer Discovery Protocol (0x88CC)loop-protect - Loop Protect Protocol (0x9003)mpls-multicast - MPLS multicast (0x8848)mpls-unicast - MPLS unicast (0x8847)mvrp - Multiple VLAN Registration protocol (0x88F5)packing-compr - Encapsulated packets with compressed IP packing (0x9001)packing-simple - Encapsulated packets with simple IP packing (0x9000)pppoe - PPPoE Session Stage (0x8864)pppoe-discovery - PPPoE Discovery Stage (0x8863)rarp - Reverse Address Resolution Protocol (0x8035)service-vlan - Provider Bridging (IEEE 802.1ad) & Shortest Path Bridging IEEE 802.1aq (0x88A8)vlan - VLAN-tagged frame (IEEE 802.1Q) and Shortest Path Bridging IEEE 802.1aq with NNI compatibility (0x8100) |
| new-packet-mark (string; Default: ) | 设置新的 packet-mark 值。 |
| new-priority (integer | from-ingress; Default: ) | 为数据包设置新的优先级。这可以是 VLAN、WMM 或 MPLS EXP 优先级 阅读更多。此属性还可用于设置内部优先级 |
| out-bridge (name; Default: ) | 传出网桥接口。 |
| out-bridge-list (name; Default: ) | 在接口列表中定义的网桥接口集。工作方式与 out-bridge 相同。 |
| out-interface (name; Default: ) | 数据包离开网桥所经过的接口。 |
| out-interface-list (name; Default: ) | 在接口列表中定义的接口集。工作方式与 out-interface 相同。 |
| packet-mark (name; Default: ) | 匹配具有特定数据包标记的数据包。 |
| packet-type (broadcast | host | multicast | other-host; Default: ) | MAC 帧类型:broadcast - 广播 MAC 数据包host - 数据包发往网桥本身multicast - 多播 MAC 数据包other-host - 数据包发往某个其他单播地址,而非网桥本身 |
| src-address (IP address; Default: ) | 源 IP 地址(仅当 MAC 协议设置为 IPv4 时)。 |
| src-address6 (IPv6 address; Default: ) | 源 IPv6 地址(仅当 MAC 协议设置为 IPv6 时)。 |
| src-mac-address (MAC address; Default: ) | 源 MAC 地址。 |
| src-port (integer 0..65535; Default: ) | 源端口号或范围(仅适用于 TCP 或 UDP 协议)。 |
| stp-flags (topology-change | topology-change-ack; Default: ) | BPDU(网桥协议数据单元)标志。网桥定期交换名为 BPDU 的配置消息以防止环路topology-change - 当网桥检测到端口状态变化时设置拓扑变化标志,以强制所有其他网桥丢弃其主机表并重新计算网络拓扑topology-change-ack - 在通知数据包的回复中发送拓扑变化确认标志 |
| stp-forward-delay (integer 0..65535; Default: ) | 转发延迟计时器。 |
| stp-hello-time (integer 0..65535; Default: ) | STP hello 数据包时间。 |
| stp-max-age (integer 0..65535; Default: ) | 最大 STP 消息年龄。 |
| stp-msg-age (integer 0..65535; Default: ) | STP 消息年龄。 |
| stp-port (integer 0..65535; Default: ) | STP 端口标识符。 |
| stp-root-address (MAC address; Default: ) | 根网桥 MAC 地址。 |
| stp-root-cost (integer 0..65535; Default: ) | 根网桥成本。 |
| stp-root-priority (integer 0..65535; Default: ) | 根网桥优先级。 |
| stp-sender-address (MAC address; Default: ) | STP 消息发送方 MAC 地址。 |
| stp-sender-priority (integer 0..65535; Default: ) | STP 发送方优先级。 |
| stp-type (config | tcn; Default: ) | BPDU 类型:config - 配置 BPDUtcn - 拓扑变化通知 |
| tls-host (string; Default: ) | 允许基于 TLS SNI 主机名匹配 https 流量。接受 GLOB 语法进行通配符匹配。请注意,如果 TLS 握手帧被分片为多个 TCP 段(数据包),匹配器将无法匹配主机名。 |
| vlan-encap (802.2 | arp | ip | ipv6 | ipx | length | mpls-multicast | mpls-unicast | pppoe | pppoe-discovery | rarp | vlan | integer 0..65535 | hex 0x0000-0xffff; Default: ) | 匹配封装在 VLAN 帧中的 MAC 协议类型。 |
| vlan-id (integer 0..4095; Default: ) | 匹配 VLAN 标识符字段。 |
| vlan-priority (integer 0..7; Default: ) | 匹配 VLAN 优先级(优先级代码点) |
脚注:
-
STP 匹配器仅在目的 MAC 地址为
01:80:C2:00:00:00/FF:FF:FF:FF:FF:FF(Bridge Group 地址)时有效,此外应启用 STP。 -
ARP 匹配器仅在 mac-protocol 为
arp或rarp时有效。 -
VLAN 匹配器仅对
0x8100或0x88a8以太网协议有效。 -
IP 或 IPv6 相关匹配器仅在 mac-protocol 设置为
ip或ipv6时有效。 -
802.3 匹配器仅当实际帧符合 IEEE 802.2 和 IEEE 802.3 标准时才会被查询。对于其他数据包,这些匹配器将被忽略。
网桥数据包过滤器
本节描述特定的网桥 filter 选项。
子菜单: /interface/bridge/filter
| Property | Description |
|---|---|
| action (accept | drop | jump | log | mark-packet | passthrough | return | set-priority; Default: accept) | 如果数据包与规则匹配时要执行的操作:accept - 接受数据包。无操作,即数据包直接通过而不执行任何操作,并且不再处理相关列表/链中的更多规则drop - 静默丢弃数据包(不发送 ICMP 拒绝消息)jump - 跳转到由 jump-target 参数值指定的链log - 向系统日志添加包含以下数据的消息:in-interface、out-interface、src-mac、dst-mac、eth-proto、protocol、src-ip:port->dst-ip:port 和数据包长度。数据包匹配后,它会被传递给列表中的下一个规则,类似于 passthroughmark - 标记数据包以便稍后使用该标记passthrough - 忽略此规则并继续下一个规则。除能够计数数据包外,其行为与禁用规则相同return - 返回上一个链,即进行跳转的位置set-priority - 在通过能够传输优先级的链路(VLAN 或支持 WMM 的无线接口)发送的数据包上设置 new-priority 参数指定的优先级。阅读更多 |
网桥 NAT
本节描述特定的网桥 NAT 选项。
子菜单: /interface/bridge/nat
| Property | Description |
|---|---|
| action (accept | drop | jump | mark-packet | redirect | set-priority | arp-reply | dst-nat | log | passthrough | return | src-nat; Default: accept) | 如果数据包与规则匹配时要执行的操作:accept - 接受数据包。无操作,即数据包直接通过而不执行任何操作,并且不再处理相关列表/链中的更多规则arp-reply - 使用指定的 MAC 地址向 ARP 请求发送回复(任何其他数据包将被此规则忽略)(仅在 dstnat 链中有效)drop - 静默丢弃数据包(不发送 ICMP 拒绝消息)dst-nat - 更改数据包的目的 MAC 地址(仅在 dstnat 链中有效)jump - 跳转到由 jump-target 参数值指定的链log - 记录数据包mark - 标记数据包以便稍后使用该标记passthrough - 忽略此规则并继续下一个规则。除能够计数数据包外,其行为与禁用规则相同redirect - 将数据包重定向到网桥本身(仅在 dstnat 链中有效)return - 返回上一个链,即进行跳转的位置set-priority - 在通过能够传输优先级的链路(VLAN 或支持 WMM 的无线接口)发送的数据包上设置 new-priority 参数指定的优先级。阅读更多src-nat - 更改数据包的源 MAC 地址(仅在 srcnat 链中有效) |
| to-arp-reply-mac-address (MAC address; Default: ) | 当选择 action=arp-reply 时,要放入以太网帧和 ARP 有效载荷中的源 MAC 地址 |
| to-dst-mac-address (MAC address; Default: ) | 当选择 action=dst-nat 时,要放入以太网帧中的目的 MAC 地址 |
| to-src-mac-address (MAC address; Default: ) | 当选择 action=src-nat 时,要放入以太网帧中的源 MAC 地址 |