Bridging and Switching
以太网类网络(Ethernet、Ethernet over IP、处于 ap-bridge 或 bridge 模式的 IEEE 802.11、WDS、VLAN)可以通过 MAC 桥连接在一起。bridge 功能允许将连接到不同 LAN 的主机互连……
桥接与交换

以太网类网络(Ethernet、Ethernet over IP、处于 ap-bridge 或 bridge 模式的 IEEE 802.11、WDS、VLAN)可以通过 MAC 桥连接在一起。bridge 功能允许将连接到不同 LAN 的主机互连,就像它们连接在同一个 LAN 上一样(使用 EoIP 时,只要它们之间存在任意类型的 IP 网络互连,地理上分散的网络也可以桥接)。由于网桥是透明的,它们不会出现在 traceroute 列表中;如果这些 LAN 已桥接,任何工具都无法区分一台主机是在其中一个 LAN 中工作还是在另一个 LAN 中工作。不过,根据 LAN 的互连方式,主机之间的延迟和数据速率可能有所不同。
在复杂拓扑中可能出现网络环路(无论是否有意)。如果不做特殊处理,环路会导致数据包雪崩式增殖,从而阻止网络正常运行。每个网桥都会运行一种算法来计算如何防止环路。(R/M)STP 允许网桥相互通信,从而协商出无环拓扑。所有其他原本会形成环路的备用连接都会处于待命状态,以便在主连接发生故障时由另一条连接接替。该算法会周期性交换配置消息(BPDU - Bridge Protocol Data Unit),使所有网桥都能获知网络拓扑变化的最新信息。(R/M)STP 会选择根网桥,由它负责网络重新配置,例如阻塞和打开其他网桥上的端口。根网桥是桥 ID 最低的网桥。
网桥接口设置
要将多个网络组合成一个网桥,应先创建一个网桥接口。随后,将所有需要的接口设置为其端口。默认情况下,网桥 MAC 地址会根据网桥端口配置自动选择。为避免出现不需要的 MAC 地址变更,建议禁用 auto-mac 并使用 admin-mac 手动指定 MAC 地址。
Sub-menu: /interface/bridge
| 属性 | 说明 |
|---|---|
| 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) | 更改用于判断数据包是否带有 VLAN 标签的 EtherType。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 - Spanning Tree Protocol (STP);01:80:C2:00:00:01 - Ethernet Flow Control;01:80:C2:00:00:02 - Link Aggregation Control Protocol (LACP);01:80:C2:00:00:03 - Dot1x client and server;01:80:C2:00:00:08 - Spanning Tree Protocol(用于 802.1ad 网桥,使用 <code>ether-type=0x88a8</code>);01:80:C2:00:00:0D - Multiple VLAN Registration protocol(用于 802.1ad 网桥,使用 <code>ether-type=0x88a8</code>);01:80:C2:00:00:0E - Link Layer Discovery Protocol、Multi-chassis Link Aggregation Group 和 Precision Time Protocol;重要: Flow Control 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 querier 时,选择生成 IGMP 成员查询所用的 IGMP 版本。仅当 igmp-snooping 和 multicast-querier 都设置为 yes 时此属性才生效。 |
| ingress-filtering (yes | no; Default: yes) | 启用或禁用 VLAN 入口过滤,即检查入口端口是否为网桥 VLAN 表中接收到的 VLAN ID 的成员。默认情况下,网桥 VLAN 表中不存在的 VLAN 会在发出(egress)前被丢弃,而此属性允许在接收(ingress)时丢弃数据包。应与 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) | 当网桥端口上的最后一个客户端取消订阅某个组播组,且网桥正作为活动 querier 时,网桥会发送组特定 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) | last-member-interval 必须经过多少次后,IGMP/MLD snooping 网桥才停止转发某个组播流。仅当 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。每经过一个网桥,Message Age 都会在其发送 BPDU 前递增。一旦网桥收到 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 querier 时,选择生成 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 使用的 MTU 高于默认值 1500 时,建议手动设置网桥的 MTU。 |
| multicast-querier (yes | no; Default: no) | 组播 querier 会周期性生成 IGMP/MLD 通用成员查询,所有支持 IGMP/MLD 的设备都会以 IGMP/MLD 成员报告进行响应。通常由 PIM(组播)路由器或 IGMP 代理生成这些查询。 使用此属性可以让启用了 IGMP/MLD snooping 的网桥生成 IGMP/MLD 通用成员查询。当二层网络中没有活动 querier(PIM 路由器或 IGMP 代理)时,应使用此属性。二层网络中若没有组播 querier,组播数据库(MDB)就不会更新;已学习的条目会超时,IGMP/MLD snooping 将无法正常工作。 只会生成无标签的 IGMP/MLD 通用成员查询。IGMP 查询使用网桥接口自身的 IPv4 地址作为源地址发送(参见 querier-uses-bridge-address),MLD 查询使用网桥接口的 IPv6 链路本地地址发送。如果检测到外部 IGMP/MLD querier(参见监控值 igmp-querier 和 mld-querier),网桥将不会发送查询。 仅当 igmp-snooping 设置为 yes 时此属性才生效。 |
| multicast-router (disabled | permanent | temporary-query; Default: temporary-query) | 组播路由器端口是连接组播路由器或 querier 的端口。未注册的组播流和 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>数据速率 Long Short 10 Mbps 2,000,000 100 100 Mbps 200,000 19 1 Gbps 20,000 4 10 Gbps 2,000 2 25 Gbps 800 1 40 Gbps 500 1 50 Gbps 400 1 100 Gbps 200 1</details> 对于硬件卸载的 bond 接口,会应用所有绑定成员端口中最高路径开销;该值不受绑定总链路速率影响。 对于虚拟接口(例如 VLAN、EoIP、VXLAN 和非硬件卸载 bond),以及 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) | 更改检测到的 querier 和组播路由器端口的超时时间。仅当 igmp-snooping 设置为 yes 时此属性才生效。 |
| querier-uses-bridge-address (yes | no; Default: yes) | 启用后,网桥 IGMP querier 会使用网桥接口自身的 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 querier 时发送 IGMP/MLD 通用成员查询的间隔。此间隔从最后一次启动查询发送后开始计算。仅当 igmp-snooping 和 multicast-querier 都设置为 yes 时此属性才生效。 |
| query-response-interval (time; Default: 10s) | 当网桥作为活动 IGMP/MLD querier 时,此设置会更改通用 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 - 一种安全功能,会根据授权可信端口列表验证传入的 Router Advertisement。 |
| startup-query-count (integer: 0..4294967295; Default: 2) | 指定当网桥接口启用或活动 querier 超时时应发送多少次通用 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) | Port Transmit 状态机用于限制传输速率的 Transmit Hold Count。 |
| vlan-filtering (yes | no; Default: no) | 全局启用或禁用网桥的 VLAN 功能。 |
危险
更改某些属性可能导致网桥临时禁用所有端口。在生产环境中更改此类属性时必须考虑这一点,因为它可能导致所有数据包被临时丢弃。此类属性包括
vlan-filtering、protocol-mode、igmp-snooping、fast-forward等。
示例
以下示例演示如何创建并验证一个用于简单二层交换的基本网桥接口。此配置会创建一个网桥,将多个以太网端口组合成单个交换网段。
[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 命令。
Sub-menu: /interface/bridge/monitor
| 属性 | 说明 |
|---|---|
| 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 querier 的网桥端口和源 IP 地址。仅显示检测到的外部 IGMP querier,本地网桥 IGMP querier(包括 IGMP 代理和 PIM)不会显示。仅当启用 igmp-snooping 时才会出现此监控值。 |
| mld-querier (none | interface & IPv6 address) | 显示检测到的 MLD querier 的网桥端口和源 IPv6 地址。仅显示检测到的外部 MLD querier,本地网桥 MLD querier 不会显示。仅当启用 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 被认为已经过时且较慢;在所有网络拓扑中,它几乎已完全被向后兼容 STP 的 RSTP 取代。对于依赖 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 网桥不兼容。这意味着在单个二层域中的所有网桥上应使用相同的网桥 VLAN 协议;否则 (R/M)STP 将无法正常工作。
按端口配置 STP
在某些情况下,你可能希望限制单个端口或多个端口上的 STP 功能。下面列出了不同用例的示例。
危险
更改默认的 (R/M)STP 功能时要小心;请确保你了解 STP 和 BPDU 的工作原理。错误配置的 (R/M)STP 可能导致意外行为。
创建边缘端口并启用 BPDU Guard
边缘端口连接不参与 STP 的终端设备,例如工作站或路由器。设置 edge=yes 允许端口跳过 STP 监听和学习状态,直接进入转发状态。为了保护网络免受连接到边缘端口的未授权网桥或交换机影响,还应启用 bpdu-guard=yes。
/interface/bridge
add name=bridge1
/interface/bridge/port
add bridge=bridge1 interface=ether1 edge=yes bpdu-guard=yes
add bridge=bridge1 interface=ether2
当受保护端口收到 BPDU 时,网桥端口会变为非活动状态,并添加以下日志条目:
2026-09-21 13:46:30 bridge,stp,warning bpdu-guard disabling ether1 due to received bpdu
端口会保持非活动状态,直到手动重新启用。打印网桥端口表以查看 I(非活动)标志和说明性的 BPDU Guard 注释:
[admin@MikroTik] /interface/bridge/port/print
Flags: I - INACTIVE; H - HW-OFFLOAD
Columns: INTERFACE, BRIDGE, HW, HORIZON, TRUSTED, TRUSTED-RA, TRUSTED-DHCPV6, TRUSTED-ARP, FAST-LEAVE, BPDU-GUARD, EDGE, POINT-TO-POINT, PVID, FRAME-TYPES
# INTERFACE BRIDGE HW HORIZON TRUSTED TRUSTED-RA TRUSTED-DHCPV6 TRUSTED-ARP FAST-LEAVE BPDU-GUARD EDGE POINT-TO-POINT PVID FRAME-TYPES
;;; BPDU guard changed port role to disabled due to received BPDU frame, manual bridge port re-enable is required
0 IH ether1 bridge1 yes none no no no no no yes yes auto 1 admit-all
1 H ether2 bridge1 yes none no no no no no no auto auto 1 admit-all
首先移除未授权的网桥或纠正 BPDU 来源。端口重新启用后,非活动标志和 BPDU Guard 注释会被清除:
[admin@MikroTik] /interface/bridge/port/disable [find interface=ether1]
[admin@MikroTik] /interface/bridge/port/enable [find interface=ether1]
[admin@MikroTik] /interface/bridge/port/print
Flags: H - HW-OFFLOAD
Columns: INTERFACE, BRIDGE, HW, HORIZON, TRUSTED, TRUSTED-RA, TRUSTED-DHCPV6, TRUSTED-ARP, FAST-LEAVE, BPDU-GUARD, EDGE, POINT-TO-POINT, PVID, FRAME-TYPES
# INTERFACE BRIDGE HW HORIZON TRUSTED TRUSTED-RA TRUSTED-DHCPV6 TRUSTED-ARP FAST-LEAVE BPDU-GUARD EDGE POINT-TO-POINT PVID FRAME-TYPES
0 H ether1 bridge1 yes none no no no no no yes yes auto 1 admit-all
1 H ether2 bridge1 yes none no no no no no no auto auto 1 admit-all
启用 Root Guard
Root Guard 是一种生成树安全功能,可防止某个端口成为根端口,从而保护活动生成树拓扑免受外部网桥影响。在本示例中,ether1 配置了 restricted-role=yes。此设置可防止该端口成为 CIST 或任何 MSTI 的根端口,无论其最佳生成树优先级向量如何。此类端口会被选为 Alternate Port(丢弃状态),并且只要它继续收到更优的 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:
网桥设置
在 bridge settings 菜单中,可以控制所有网桥接口的某些功能,并监控全局网桥计数器。
Sub-menu: /interface/bridge/settings
| 属性 | 说明 |
|---|---|
| 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 子菜单用于将接口添加到特定网桥。
Sub-menu: /interface/bridge/port
| 属性 | 说明 |
|---|---|
| auto-isolate (yes | no; Default: no) | 启用后,如果未从相邻网桥收到 BPDU,则防止端口从丢弃状态进入转发状态。只有在收到 BPDU 时,端口才会进入转发状态。仅当 protocol-mode 设置为 rstp 或 mstp,且 edge 设置为 no 时此属性才生效。 |
| bpdu-guard (yes | no; Default: no) | 在端口上启用或禁用 BPDU Guard 功能。如果收到 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 的 Wireless 接口。此类接口会自动设置为不带发现的边缘端口。 |
| 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> - 检测网桥端口是否为 Wireless 接口,并使用 Wireless 注册表代替 MAC 学习;如果 Wireless 接口设置为 <code>ap-bridge</code>、<code>bridge</code>、<code>wds-slave</code> 模式之一,且该 Wireless 接口的 bridge mode 被禁用,则使用 Wireless 注册表。 |
| multicast-router (disabled | permanent | temporary-query; Default: temporary-query) | 组播路由器端口是连接组播路由器或 querier 的端口。未注册的组播流和 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) | 使用水平分割桥接来防止桥接环路。为一组端口设置相同的值,可防止它们向具有相同 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。要恢复自动确定并移除任何手动应用的值,只需在 path-cost 属性前使用感叹号。当 protocol-mode 设置为 none 时此属性无效。 /interface/bridge/port/set [find interface=sfp28-1] !path-cost 使用 端口监控 查看实际应用的 path-cost。 |
| point-to-point (auto | yes | no; Default: auto) | 指定网桥端口是否通过点对点链路连接到网桥,以便在故障时更快收敛。将此属性设置为 yes 会强制该链路为点对点链路,从而跳过检查机制,该机制会在此单一链路上检测并等待来自其他设备的 BPDU。将此属性设置为 no 表示预期链路可能收到来自多台设备的 BPDU。将属性设置为 yes 可显著改善 (R/M)STP 收敛时间。通常,只有在链路上可能连接其他设备时才应将其设置为 no。这主要与无线介质和以太网 hub 有关。如果以太网链路为全双工,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 的根端口,无论其最佳生成树优先级向量如何。此类端口会被选为 Alternate Port(丢弃状态),并且只要它继续收到更优的 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 Router Advertisement 消息;对于连接到合法路由器的端口设置为 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 querier 时,网桥会自动限制未知 IP 组播的泛洪,因此对于 IGMP/MLD snooping 设置而言此设置并非必需。 将此设置与 igmp-snooping 一起使用时,网桥端口上唯一允许的组播流量是来自 MDB 表的已知组播。 |
| unknown-unicast-flood (yes | no; Default: yes) | 更改网桥端口上的未知单播泛洪选项,仅控制出口流量。启用时,网桥允许将未知单播数据包泛洪到指定网桥端口;禁用时,网桥限制将未知单播流量泛洪到指定网桥端口。 如果 MAC 地址未在主机表中学习,则该流量被视为未知单播流量,并会泛洪到所有端口。一旦在网桥端口上收到数据包并将源 MAC 地址添加到网桥主机表,就会学习到该 MAC 地址。由于网桥需要在网桥端口上至少收到一个数据包才能学习 MAC 地址,建议使用静态网桥主机条目,以避免在 MAC 地址学习完成前数据包被丢弃。 |
信息
RouterOS 每个网桥最多可处理 1024 个桥接接口;此限制固定,无法修改。如果尝试添加更多接口作为网桥端口,可能会导致不可预测的行为。
示例
此示例演示如何将以太网端口添加到现有网桥接口,以创建一个简单的二层交换设置。通过将 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 命令。
Sub-menu: /interface/bridge/port/monitor
| 属性 | 说明 |
|---|---|
| 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 中,即使启用 STP 模式,role 监控属性也会显示 RSTP 角色,例如 alternate-port 和 backup-port。虽然这在技术上并不准确,但不会影响 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 子菜单访问主机表。
Sub-menu: /interface/bridge/host
| 属性 | 说明 |
|---|---|
| bridge (read-only: name) | 主机条目所属的网桥 |
| disabled (read-only: flag) | 指示静态主机条目是否被禁用 |
| dynamic (read-only: flag) | 指示主机是否为动态学习 |
| external (read-only: flag) | 指示主机是否从外部表学习,例如交换芯片或 Wireless 注册表。在硬件卸载的网桥端口上添加的静态主机条目不显示此标志 |
| 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 地址条目的所有可配置参数:
Sub-menu: /interface/bridge/host
| 属性 | 说明 |
|---|---|
| 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,因为它们用于网络协议操作。
要查看当前组播数据库条目表,请在 multicast database 子菜单中使用 print 命令。
Sub-menu: /interface/bridge/mdb
| 属性 | 说明 |
|---|---|
| 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 条目。
Sub-menu: /interface/bridge/mdb
| 属性 | 说明 |
|---|---|
| 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 条目。使用以下命令在所有 VLAN 和端口上为组播组 ff02::2 创建静态 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 交换芯片功能。
| 功能 | 硬件卸载 |
|---|---|
| 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 的 bonding 接口支持硬件卸载。其他模式不支持硬件卸载。交换机始终使用 Layer2+Layer3+Layer4 作为发送哈希策略,更改发送哈希策略没有效果。
88E6393X、88E6191X、88E6190
例如:RB5009 系列、L009 系列、CCR2004-16G-2S+。请参阅 交换芯片功能。
| 功能 | 硬件卸载 |
|---|---|
| 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 的 bonding 接口支持硬件卸载。其他模式不支持硬件卸载。仅限 Layer2 发送哈希,更改发送哈希策略没有效果。
MT7621、MT7531、EN7523、RTL8367
例如:hEX S、hAP ax lite、hEX Refresh、RBM33G、RB4011、RB1100AHx4。请参阅 交换芯片功能。
| 功能 | 硬件卸载 |
|---|---|
| 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 系列交换机。
| 功能 | 硬件卸载 |
|---|---|
| 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。请参阅 交换芯片功能。
| 功能 | 硬件卸载 |
|---|---|
| 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。请参阅 交换芯片功能。
| 功能 | 硬件卸载 |
|---|---|
| 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。请参阅 交换芯片功能。
| 功能 | 硬件卸载 |
|---|---|
| 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 感知的二层转发,并允许在网桥内修改 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)模式。除了将端口加入二层转发外,网桥本身也作为一个接口运行,因此具有 Port 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 对应的无标签端口。
Sub-menu: /interface/bridge/vlan
| 属性 | 说明 |
|---|---|
| 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 标签的数据包过滤。
Sub-menu: /interface/bridge/port
| 属性 | 说明 |
|---|---|
| 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 示例:Trunk 和 Access 端口
本节演示如何配置一个包含一个 trunk 端口和多个 access 端口的基础 VLAN 设置。trunk 端口(ether2)在交换机之间或连接到路由器时承载带标签 VLAN 流量,而 access 端口(ether6、ether7、ether8)连接到终端设备并使用无标签 VLAN 流量。

步骤 1:创建网桥接口
创建一个禁用 vlan-filtering 的网桥接口。这一点很重要,因为启用 VLAN 过滤会立即限制流量,可能在配置完成前将你锁在设备之外。有关在 VLAN 配置期间管理设备访问的详细信息,请参阅 管理访问配置 一节。
/interface/bridge
add name=bridge1 vlan-filtering=no
步骤 2:添加网桥端口并配置 PVID
将物理接口添加到网桥,并为 access 端口配置 Port 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 表条目。trunk 端口(ether2)必须配置为带标签成员,这意味着它将发送和接收带有 VLAN 标签的帧。Access 端口会根据其 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 示例 - Trunk 和 Hybrid 端口

创建一个禁用 vlan-filtering 的网桥,以避免在 VLAN 完全配置之前失去对路由器的访问。如果需要管理访问网桥,请参阅 管理访问配置 一节。
/interface/bridge
add name=bridge1 vlan-filtering=no
添加网桥端口,并在 hybrid 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 条目并在其中指定带标签端口。在此示例中,ether6、ether7、ether8 端口也会执行出口 VLAN 标签添加,使它们成为 hybrid 端口。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
危险
你不必手动将 access 端口添加为无标签端口,因为它们会以
pvid中指定的 VLAN ID 动态添加为无标签端口,你只需将 trunk 端口指定为带标签端口。所有设置了相同pvid的端口会在单个条目中添加为无标签端口。必须考虑到网桥本身也是一个端口,并且它也有pvid值,这意味着对于具有相同pvid的端口,网桥端口也会被添加为无标签端口。可以通过为所有端口(甚至 trunk 端口和网桥本身)设置不同的pvid,或使用设置为accept-only-vlan-tagged的frame-type来规避此行为。
VLAN 示例 - 通过网桥进行 VLAN 间路由

创建一个禁用 vlan-filtering 的网桥,以避免在 VLAN 完全配置之前失去对路由器的访问。如果需要管理访问网桥,请参阅 管理访问配置 一节。
/interface/bridge
add name=bridge1 vlan-filtering=no
添加网桥端口,并为 VLAN access 端口指定 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 trunk,将流量进一步发送以进行 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 地址分配给网桥接口本身。由于网桥在二层运行且不使用 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。这可确保来自 access 端口的无标签流量能够与路由器管理接口正常通信。
首先,在网桥上创建 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 地址的步骤,因为通过二层协议(例如 MAC-telnet)连接路由器/交换机无论如何都能工作。
VLAN 隧道(QinQ)
自 RouterOS v6.43 起,RouterOS 网桥符合 IEEE 802.1ad,可以基于 Service VLAN ID(0x88a8)而非 Customer VLAN ID(0x8100)过滤 VLAN ID。可以应用与 IEEE 802.1Q VLAN 过滤相同的原则(可以使用相同的设置示例)。下面是常见 Provider bridge 的拓扑:

在此示例中,R1、R2、R3 和 R4 可能发送任何 802.1Q(CVID)带标签流量,但 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 将作为 access 端口(无标签),使用 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(服务标签),并且还需要为 Service 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
Multiple VLAN Registration Protocol(MVRP)是一种基于 Multiple Registration Protocol(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 收到声明时(Registrar 将注册该 VLAN),它们才会被配置为这些 VLAN 的成员。从终端站的角度来看,单个声明会在整个 LAN 的每个上游端口上注册。当另一个终端站声明相同属性时,两个(或多个)终端站之间会形成一条注册路径,如下图所示。
MVRP 有助于在整个桥接网络中动态传播 VLAN 信息,并仅在需要的端口上配置 VLAN。这通过避免不必要的流量泛洪使网络更加高效。
如前所述,MVRP 仅在转发端口上活动。在 MSTP 情况下,只有当端口在 VLAN 所映射的 MSTI 中处于转发状态时,才会进行声明和注册。
点对点端口可以加速注册(或离开)过程。对于非以太网接口,手动配置 point-to-point=yes 可能更有利。

属性参考
Sub-menu: /interface/bridge
| 属性 | 说明 |
|---|---|
| mvrp (yes | no; Default: no) | 为网桥启用 MVRP。它确保 MAC 地址 01:80:C2:00:00:21 被捕获且不被转发。必须启用 vlan-filtering。 |
Sub-menu: /interface/bridge/port
端口菜单允许按端口控制 applicant 和 registrar 设置。
| 属性 | 说明 |
|---|---|
| mvrp-applicant-state (non-participant | normal-participant; Default: normal-participant) | MVRP applicant 选项:non-participant - 端口不发送任何 MRP 消息;normal-participant - 端口正常参与 MRP 交换。 |
| mvrp-registrar-state (fixed | normal; Default: normal) | MVRP registrar 选项: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
Sub-menu: /interface/bridge/vlan
所有作为静态 VLAN 成员或由端口 pvid 设置创建的动态无标签 VLAN 成员的端口都被视为 "fixed"。这意味着 registrar 会忽略所有 MRP 消息,并为这些 VLAN 保持注册(IN)状态。
当某个 VLAN 既未手动配置,也不是由端口 pvid 设置创建时,网桥端口上的传入注册可以动态将该特定端口指定为带标签 VLAN 成员。mvrp-forbidden 功能允许创建一组端口,禁止它们注册特定 VLAN ID。
静态或动态 VLAN 将由 applicant 声明,除非此功能被端口的 mvrp-applicant-state 或 VLAN 的 mvrp-forbidden 设置禁用。
| 属性 | 说明 |
|---|---|
| mvrp-forbidden (interfaces; Default: ) | 忽略所有 MRP 消息并保持 Not Registered (MT) 状态的端口,同时禁止 applicant 声明特定 VLAN ID。 |
Sub-menu: /interface/bridge/vlan/mvrp
MVRP 属性菜单可用于查看内部 MVRP 属性状态,如 IEEE 802.1Q-2011 中所规定。
| 属性 | 说明 |
|---|---|
| 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。它控制组播流并防止组播在不必要的端口上泛洪。其设置位于 bridge 菜单中,并在每个网桥接口上独立工作。软件驱动的实现可在所有运行 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 是一种二层安全功能,可防止未授权 DHCP 服务器向用户提供恶意信息。在 RouterOS 中,可以指定哪些网桥端口可信(已知 DHCP 服务器所在且应转发 DHCP 消息的位置),哪些不可信(通常用于 access 端口,收到的 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 添加到同一个网桥并保持该端口不可信,假设存在未授权(rogue)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 将限制 rogue DHCP 服务器接收任何 discovery 消息,并丢弃来自 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 开始,bonding 接口上的 DHCP snooping 支持硬件卸载。
DHCP Snooping 绑定表
DHCP snooping 绑定数据库是由网桥生成的运行时表,用于存储连接到可信端口的 DHCP 服务器所提供的 DHCP 租约。每个条目记录客户端的 MAC 地址、分配的 IP 地址、租约到期时间、VLAN ID 以及观察到客户端的物理接口。网桥可以利用此数据库增强安全性。具体而言,当帧到达不可信端口时,交换机会在转发数据包之前验证源 MAC/IP 对是否与存储的绑定匹配,从而阻止来自 rogue DHCP 服务器或伪造主机的流量,防止地址盗用攻击,并启用 IP Source Guard、ARP Inspection 等功能。
当前 DHCPv4 snooping 绑定表的实现建立在现有 /interface/bridge/host 表之上。相关 DHCP 信息从经过网桥的 DHCP 消息中获取。
危险
每当网桥接口配置发生变化(包括启用
arp-inspection或ip-source-guard功能)时,DHCP snooping 绑定表都会被清空。因此,不可信端口上的 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 绑定表防止地址欺骗攻击。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
危险
每当网桥接口配置发生变化(包括启用
arp-inspection或ip-source-guard功能)时,DHCP snooping 绑定表都会被清空。因此,不可信端口上的 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 是一种二层安全功能,可防止未授权 DHCPv6 服务器向用户提供恶意信息。在 RouterOS 中,可以指定哪些网桥端口可信(已知 DHCPv6 服务器所在且应转发 DHCPv6 消息的位置),哪些不可信(通常用于 access 端口,收到的 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(交换机或路由器)本身。它包含唯一的 caller ID(例如 DUID - DHCP Unique Identifier)。它告诉服务器网络中的哪台特定设备正在与它通信。
RA Guard
RA guard 功能旨在丢弃到达用户指定为不可信的网桥端口的、包含 router advertisement(RA)消息的 IPv6 数据包,从而防止潜在的 rogue RA 消息攻击或意外的网络错误配置。启用后,可以将每个网桥端口设置为可信或不可信(默认情况下所有网桥端口都设置为 RA 不可信)。
以下是 IPv6 RA Guard(Router Advertisement 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 进行自动配置。
Router Advertisement(类型 134):路由器广播这些消息以告诉主机:"我是网关,这是你的网络前缀。"
威胁:如果用户意外将消费级路由器(例如家庭 Wi-Fi 路由器)连接到 access 端口,或恶意行为者在该端口上启动工具(例如 Rogue RA),该设备就会开始广播 RA。
结果:网络中的其他主机会根据该 rogue 设备自动配置其 IPv6 地址,并将该 rogue 设备设置为默认网关。这会导致中间人攻击或完全拒绝服务。
以下是 IPv6 RA Guard(Router Advertisement Guard)的网络方案和核心原理。
核心原理:"Trust vs. Untrust"
IPv6 RA Guard 的基本原理在逻辑上与 IPv4 中的 DHCP Snooping 相同。它通过将交换机端口分为两种角色,在二层交换基础设施内创建安全边界:
- Trusted Ports:连接到合法、授权 IPv6 路由器的端口。这些端口允许发送 Router Advertisement(RA)数据包。
- Untrusted Ports:连接到最终用户主机的端口。这些端口被阻止发送 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 规则之间不同的一些参数将在后续章节中介绍。
Sub-menu: /interface/bridge/filter, /interface/bridge/nat
| 属性 | 说明 |
|---|---|
| 802.3-sap (integer; Default: ) | DSAP(Destination Service Access Point)和 SSAP(Source Service Access Point)是两个单字节字段,用于标识使用链路层服务的网络协议实体。这两个字节始终相等。此处可以指定两个十六进制数字以匹配 SAP 字节。 |
| 802.3-type (integer; Default: ) | 以太网协议类型,位于 IEEE 802.2 帧头之后。仅当 802.3-sap 为 0xAA(SNAP - Sub-Network Attachment Point 头)时有效。例如,AppleTalk 可以通过 SAP 代码 0xAA 后跟 SNAP 类型代码 0x809B 来表示。 |
| 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 数据包。 |
| arp-hardware-type (integer; Default: 1) | ARP 硬件类型。通常为以太网(类型 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 Reply;inarp-request - InverseARP Request;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 Protocol;ddp - Datagram Delivery Protocol;egp - Exterior Gateway Protocol;encap - Encapsulation Header;etherip - Ethernet-within-IP Encapsulation;ggp - Gateway-to-Gateway Protocol;gre - Generic Routing Encapsulation;hmp - Host Monitoring Protocol;icmp - IPv4 Internet Control Message Protocol;icmpv6 - IPv6 Internet Control Message Protocol;idpr-cmtp - Inter-Domain Policy Routing Control Message Transport Protocol;igmp - Internet Group Management Protocol;ipencap - IP in IP(封装);ipip - IP-within-IP Encapsulation Protocol;ipsec-ah - IPsec Authentication Header;ipsec-esp - IPsec Encapsulating Security Payload;ipv6 - Internet Protocol version 6;ipv6-frag - Fragment Header for IPv6;ipv6-nonxt - No Next Header for IPv6;ipv6-opts - Destination Options for IPv6;ipv6-route - Routing Header for IPv6;iso-tp4 - ISO Transport Protocol Class 4;l2tp - Layer Two Tunneling Protocol;ospf - Open Shortest Path First;pim - Protocol Independent Multicast;pup - PARC Universal Packet;rdp - Reliable Data Protocol;rspf - Radio Shortest Path First;rsvp - Reservation Protocol;sctp - Stream Control Transmission Protocol;st - Internet Stream Protocol;tcp - Transmission Control Protocol;udp - User Datagram Protocol;udp-lite - Lightweight User Datagram Protocol;vmtp - Versatile Message Transaction Protocol;vrrp - Virtual Router Redundancy Protocol;xns-idp - Xerox Network Systems Internet Datagram Protocol;xtp - 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 帧(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 - 带长度字段的数据包(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 - 带压缩 IP packing 的封装数据包(0x9001);packing-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 标签帧(IEEE 802.1Q)以及具有 NNI 兼容性的 Shortest Path Bridging IEEE 802.1aq(0x8100) |
| new-packet-mark (string; Default: ) | 设置新的数据包标记值。 |
| 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(Bridge Protocol Data Unit)标志。网桥会周期性交换名为 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 - 配置 BPDU;tcn - 拓扑变化通知 |
| 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 优先级(priority code point) |
脚注:
-
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 选项。
Sub-menu: /interface/bridge/filter
| 属性 | 说明 |
|---|---|
| action (accept | drop | jump | log | mark-packet | passthrough | return | set-priority; Default: accept) | 当数据包匹配规则时要执行的操作:accept - 接受数据包。不执行操作,即数据包直接通过,不执行任何操作,并且相关列表/链中不再处理更多规则;drop - 静默丢弃数据包(不发送 ICMP reject 消息);jump - 跳转到由 jump-target 参数值指定的链;log - 向系统日志添加一条消息,包含以下数据:in-interface、out-interface、src-mac、dst-mac、eth-proto、protocol、src-ip:port->dst-ip:port 以及数据包长度。匹配后,数据包会传递到列表中的下一条规则,类似 passthrough;mark - 标记数据包以便以后使用该标记;passthrough - 忽略此规则并继续执行下一条规则。行为与禁用规则相同,但能够计数数据包;return - 返回到执行跳转的前一个链;set-priority - 对通过能够传输优先级的链路(VLAN 或支持 WMM 的无线接口)发送的数据包设置由 new-priority 参数指定的优先级。阅读更多 |
网桥 NAT
本节介绍特定的网桥 NAT 选项。
Sub-menu: /interface/bridge/nat
| 属性 | 说明 |
|---|---|
| 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 reject 消息);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 地址 |