概述

类似以太网的网络(以太网、IP 以太网、AP 桥接或桥接模式下的 IEEE 802.11、WDS、VLAN)可以使用 MAC 桥接器连接在一起。桥接功能允许连接到单独 LAN 的主机互连(使用 EoIP,如果它们之间存在任何类型的 IP 网络互连,也可以桥接地理分布的网络),就像它们连接到单个 LAN 一样。由于网桥是透明的,它们不会出现在跟踪路由列表中,并且如果这些 LAN 被桥接(取决于 LAN 互连的方式,则没有实用程序可以区分在一个 LAN 中工作的主机和在另一个 LAN 中工作的主机主机之间的延迟和数据速率可能会有所不同)。

网络环路可能会(有意或无意地)出现在复杂的拓扑结构中。如果不进行任何特殊处理,环路会阻止网络正常运行,因为它们会导致雪崩式的数据包倍增。每个网桥都运行一种算法来计算如何防止环路。 (R/M)STP 允许网桥相互通信,因此它们可以协商无环路拓扑。否则会形成环路的所有其他替代连接都处于待命状态,因此如果主连接出现故障,另一个连接可以取代它。该算法定期交换配置消息(BPDU - 网桥协议数据单元),以便所有网桥都更新有关网络拓扑变化的最新信息。 (R/M)STP 选择一个根桥负责网络重新配置,例如阻塞和打开其他桥上的端口。根网桥是具有最低网桥 ID 的网桥。

网桥接口设置

要将多个网络合并到一个网桥中,应创建一个网桥接口(随后,所有需要的接口都应设置为其端口)。从属(辅助)端口的一个MAC地址将被分配给网桥接口,MAC地址将根据 "port-number "自动选择,并且在重启后可能会发生变化。为了避免不必要的MAC地址变化,建议禁用 "auto-mac",并通过 "admin-mac "手动指定MAC。

Sub-menu: /interface bridge

属性 说明
add-dhcp-option82 (yes | no; Default: no) 是否在 DHCP 数据包中添加 DHCP Option-82 信息(Agent Remote ID 和 Agent Circuit ID)。可与支持 Option-82 的 DHCP 服务器一起使用,以分配 IP 地址和实施策略。此属性仅在 dhcp-snooping 设置为 yes 时有效。
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) 地址解析协议设置
- disabled - 接口将不使用 ARP
- enabled - 接口将使用 ARP
- local-proxy-arp - 路由器在接口上执行代理 ARP 并发送回复同一接口
- proxy-arp - 路由器在接口上执行代理 ARP 并向其他接口发送回复
- reply-only - 接口只会回复来自匹配在 IP/ARP 表中作为静态条目输入的 IP 地址/MAC 地址组合。 IP/ARP 表中不会自动存储任何动态条目。因此,要使通信成功,必须已经存在有效的静态条目。
arp-timeout (_auto integer_; Default: auto)
auto-mac (yes | no; Default: yes) 自动选择一个桥接端口的MAC地址作为桥接MAC地址,桥接MAC将从第一个添加的桥接端口中选取。设备重启后,桥接 MAC 会根据端口号发生变化。
comment (string; Default: ) 界面的简短描述。
dhcp-snooping (yes | no; Default: no) 在网桥上启用或禁用 DHCP Snooping。
disabled (yes | no; Default: no) 改变网桥是否被禁用。
ether-type (0x9100 | 0x8100 | 0x88a8; Default: 0x8100) 改变EtherType,它将被用来确定一个数据包是否有VLAN标签。具有匹配EtherType的数据包被认为是有标签的数据包。这个属性只有在vlan-filtering被设置为yes时才有效果。
fast-forward (yes | no; Default: yes) 快速路径的特殊和快速情况,只对有2个接口的网桥起作用(默认情况下只对新网桥启用)。更多细节可以在 "快进"部分找到。
forward-delay (time; Default: 00:00:15) 在网桥接口的初始化阶段(即在路由器启动或启用接口之后),在网桥开始正常工作之前,处于监听/学习状态的时间。
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-snoopingmulticast-querier 设置为 yes 时有效。
ingress-filtering (yes | no; Default: yes) 启用或禁用 VLAN 入口过滤,检查入口端口是否是桥接 VLAN 表中接收到的 VLAN ID 的成员。默认情况下,桥接 VLAN 表中不存在的 VLAN 在发送(出口)之前被丢弃,但此属性允许你在接收到数据包(入口)时丢弃它们。应与 frame-types 一起使用以指定是否应标记或取消标记入口流量。此属性仅在 vlan-filtering 设置为 yes 时有效。该设置自 RouterOS v7 起默认启用。
l2mtu (read-only; Default: ) L2MTU 表示这个接口可以发送的没有 MAC 头的帧的最大尺寸。L2MTU 值将由网桥自动设置, 它将使用任何相关网桥端口的最低 L2MTU 值。这个值不能被手动改变。
last-member-interval (time; Default: 1s) 当网桥端口上的最后一个客户端取消订阅多播组并且网桥充当主动查询器时,网桥将发送组特定的 IGMP/MLD 查询,以确保没有其他客户端仍然订阅。该设置更改了这些查询的响应时间。如果在特定时间段内没有收到成员报告(last-member-interval * last-member-query-count),则多播组将从多播数据库 (MDB) 中删除。
如果桥接端口配置了快速离开,多播组被立即删除而不发送任何查询。
此属性仅在 igmp-snoopingmulticast-querier 设置为 yes 时有效。
last-member-query-count (integer: 0..4294967295; Default: 2) 在 IGMP/MLD 侦听网桥停止转发某个多播流之前,last-member-interval 应该经过多少次。此属性仅在 igmp-snoopingmulticast-querier 设置为 yes 时有效。
max-hops (integer: 6..40; Default: 20) 在 BPDU 被忽略之前,BPDU 可以在同一区域中启用 MSTP 的网络中传递的网桥计数。此属性仅在 protocol-mode 设置为 mstp 时有效。
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 设置为 stprstp 时有效。
membership-interval (time; Default: 4m20s) 如果在网桥端口上未收到 IGMP/MLD 成员报告,则删除多播数据库 (MDB) 中的条目后的时间量。此属性仅在 igmp-snooping 设置为 yes 时有效。
mld-version (1 | 2; Default: 1) 当网桥接口充当 MLD 查询器时,选择将生成 MLD 成员查询的 MLD 版本。此属性仅在网桥具有活动 IPv6 地址时有效,igmp-snoopingmulticast-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 侦听的网桥以生成 IGMP/MLD 一般成员资格查询。只要第 2 层网络中没有活动查询器(PIM 路由器或 IGMP 代理),就应该使用此属性。如果第 2 层网络中没有多播查询器,多播数据库 (MDB) 将不会更新,学习的条目将超时并且 IGMP/MLD 侦听将无法正常运行。
仅生成未标记的 IGMP/MLD 一般成员查询,IGMP查询使用 IPv4 0.0.0.0 源地址发送,MLD 查询使用网桥接口的 IPv6 链路本地地址发送。如果检测到外部 IGMP/MLD 查询器,网桥将不会发送查询(请参阅监控值 igmp-queriermld-querier)。
这属性仅在 igmp-snooping 设置为 yes 时有效。
multicast-router (disabled | permanent | temporary-query; Default: temporary-query) 组播路由器端口是连接组播路由器或查询器的端口。在此端口上,将发送未注册的多播流和 IGMP/MLD 成员报告。此设置更改桥接接口本身的多播路由器的状态。此属性可用于将 IGMP/MLD 成员报告发送到桥接接口,以进行进一步的多播路由或代理。此属性仅在 igmp-snooping 设置为 yes 时有效。
- disabled - 在网桥接口上禁用组播路由器状态。未注册的多播和 IGMP/MLD 成员报告不会发送到网桥接口,无论网桥接口上的配置如何。
- permanent - 在网桥接口上启用多播路由器状态。未注册的多播和 IGMP/MLD 成员报告被发送到网桥接口本身,无论网桥接口上的配置如何。
- temporary-query - 自动检测网桥上的多播路由器状态使用 IGMP/MLD 查询的桥接接口。
name (text; Default: bridgeN) 网桥接口名称
priority (integer: 0..65535 decimal format or 0x0000-0xffff hex format; Default: 32768 \/ 0x8000) 网桥优先级,R/STP用来确定根桥,MSTP用来确定CIST和IST区域根网桥。当 protocol-mode 设置为 none 时,此属性无效。
protocol-mode (none | rstp | stp | mstp; Default: rstp) 选择生成树协议 (STP) 或快速生成树协议 (RSTP) 以确保任何桥接 LAN 的无环路拓扑。 RSTP 在拓扑更改后提供更快的生成树收敛。选择 MSTP 以确保跨多个 VLAN 的无环拓扑。从 RouterOS v6.43 开始,可以转发 01:80:C2:00:00:0X 范围内的保留 MAC 地址,这可以通过将 protocol-mode 设置为 none 来完成.
pvid (integer: 1..4094; Default: 1) 端口 VLAN ID (pvid) 指定未标记的入口流量分配到哪个 VLAN。它适用于例如从网桥 IP 发送并发往网桥端口的帧。此属性仅在 vlan-filtering 设置为 yes 时有效。
querier-interval (time; Default: 4m15s) 更改检测到的查询器和多播路由器端口的超时期限。此属性仅在 igmp-snooping 设置为 yes 时有效。
query-interval (time; Default: 2m5s) 当网桥接口充当 IGMP/MLD 查询器时,更改发送 IGMP/MLD 一般成员资格查询的间隔。间隔发生在发送最后一个启动查询时。此属性仅在 igmp-snoopingmulticast-querier 设置为 yes 时有效。
query-response-interval (time; Default: 10s) 当网桥作为 IGMP/MLD 查询器处于活动状态时,该设置会更改一般 IGMP/MLD 查询的响应时间。此属性仅在 igmp-snoopingmulticast-querier 设置为 yes 时有效。 \
region-name (text; Default: ) MSTP域名。此属性仅在 protocol-mode 设置为 mstp 时有效。
region-revision (integer: 0..65535; Default: 0) MSTP 配置修订号。此属性仅在 protocol-mode 设置为 mstp 时有效。
startup-query-count (integer: 0..4294967295; Default: 2) 指定在启用桥接接口或活动查询器超时时必须发送一般 IGMP/MLD 查询的次数。此属性仅在 igmp-snoopingmulticast-querier 设置为 yes 时有效。
startup-query-interval (time; Default: 31s250ms) 指定启动一般 IGMP/MLD 查询之间的时间间隔。此属性仅在 igmp-snoopingmulticast-querier 设置为 yes 时有效。
transmit-hold-count (integer: 1..10; Default: 6) 端口传输状态机用于限制传输速率的传输保持计数。
vlan-filtering (yes | no; Default: no) 全局启用或禁用网桥的 VLAN 功能。

更改某些属性可能会导致网桥暂时禁用所有端口。每当在生产环境中更改此类属性时都必须考虑到这一点,因为它可能导致所有数据包被暂时丢弃。这些属性包括“vlan-filtering”、“protocol-mode”、“igmp-snooping”、“fast-forward”等。

示例

要添加并启用将转发 L2 数据包的网桥接口:

[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

属性 说明
current-mac-address (MAC address) 网桥的当前MAC
designated-port-count (integer) 目的网桥端口号
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 地址时,才会显示监控值。
multicast-router (yes | no) 显示是否在端口上检测到多播路由器。监控值仅在启用 igmp-snooping 时出现。
port-count (integer) 网桥端口号
root-bridge (yes | no) 显示网桥是否为生成树的根网桥
root-bridge-id (text) 根桥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: CC:2D:E0:E4:B3:38
            root-bridge: yes
         root-bridge-id: 0x8000.CC:2D:E0:E4:B3:38
         root-path-cost: 0
              root-port: none
             port-count: 2
  designated-port-count: 2
           fast-forward: no

生成树协议

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 变体。根据 IEEE 802.1ad 标准,来自网桥的 BPDU符合 IEEE 802.1Q 与 IEEE 802.1ad 网桥不兼容,这意味着相同的网桥 VLAN 协议应该在单个第 2 层域中的所有网桥上使用,否则 (R/M)STP 将无法正常运行。

每个端口的STP

在某些情况下可能希望限制单个或多个端口上的 STP 功能。可以在下面找到一些针对不同用例的示例。

更改默认 (R/M)STP 功能时要小心,确保了解 STP 和 BPDU 的工作原理。 (R/M)STP 配置错误会导致意外行为。

创建边缘端口

把一个网桥端口设置为边缘端口将限制其发送 BPDU, 并忽略任何收到的 BPDU。

/interface bridge
add name=bridge1
/interface bridge port
add bridge=bridge1 interface=ether1 edge=yes
add bridge=bridge1 interface=ether2

丢弃已发送的 BPDU

在此示例中,BPDU 不会通过 ether1 发送出去。如果网桥是根网桥,则环路检测将不会在此端口上工作。如果另一个网桥连接到 ether1,那么另一个网桥将不会收到任何 BPDU,因此它可能成为第二个根网桥。

/interface bridge
add name=bridge1
/interface bridge port
add bridge=bridge1 interface=ether1
add bridge=bridge1 interface=ether2
/interface bridge filter
add action=drop chain=output dst-mac-address=01:80:C2:00:00:00/FF:FF:FF:FF:FF:FF out-interface=ether1

可以使用接口列表来指定多个接口。

丢弃已接收的BPDU包

由于对 BPDU 的特殊处理,当网桥启用 STP/RSTP/MSTP 时,网桥过滤器输入或 NAT 规则不能丢弃收到的 BPDU。但是,可以使用 ACL 规则在某些交换芯片上丢弃某个端口上接收到的 BPDU:

在CRS3xx上:

/interface ethernet switch rule
add dst-mac-address=01:80:C2:00:00:00/FF:FF:FF:FF:FF:FF new-dst-ports="" ports=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防护

在此示例中,如果 ether1 收到 BPDU,将阻止端口并要求手动重新启用它。

/interface bridge
add name=bridge1
/interface bridge port
add bridge=bridge1 interface=ether1 bpdu-guard=yes
add bridge=bridge1 interface=ether2

网桥设置

在网桥设置菜单下,可以控制所有网桥接口的某些功能并监控全局网桥计数器。

Sub-menu: /interface bridge settings

属性 说明
use-ip-firewall (yes | no; Default: no) 强制桥接流量也由 IP 路由的预路由、转发和后路由部分处理(请参阅数据包流文章)。这不适用于路由流量。如果你想分配简单队列 或全局队列树在桥中进行流量。如果使用网桥“vlan-filtering”,则需要属性“use-ip-firewall-for-vlan”。
use-ip-firewall-for-pppoe (yes | no; Default: no) 发送桥接的未加密 PPPoE 流量也由 IP/防火墙处理。此属性仅在 use-ip-firewall 设置为 yes 时有效。如果你想分配简单队列或全局队列树到网桥中的 PPPoE 流量。
use-ip-firewall-for-vlan (yes | no; Default: no) 发送桥接 VLAN 流量也由 IP/防火墙处理。此属性仅在 use-ip-firewall 设置为 yes 时有效。如果你想分配简单队列或全局队列树到网桥中的 VLAN 流量。
allow-fast-path (yes | no; Default: yes) 是否全局启用网桥快速路径。
bridge-fast-path-active (yes | no; Default: ) 显示网桥 FastPath 是否在全局处于活动状态,不显示每个网桥接口的 FastPath 状态。
bridge-fast-path-packets (integer; Default: ) 显示由网桥 Fast Path 转发的数据包计数。
bridge-fast-path-bytes (integer; Default: ) 显示由网桥快速路径转发的字节数。
bridge-fast-forward-packets (integer; Default: ) 显示由网桥 Fast Forward 转发的数据包计数。
bridge-fast-forward-bytes (integer; Default: ) 显示由网桥 Fast Forward 转发的字节数。

如果想将简单队列或全局队列树分配给由网桥转发的流量,则需要启用 use-ip-firewall 属性。如果不使用此属性,网桥流量将永远不会到达路由postrouting chain,简单队列和全局队列树在路由postrouting chain中工作。要为网桥中的 VLAN 或 PPPoE 流量分配简单队列或全局队列树,还应该启用适当的属性。

端口设置

端口Submenu用于在特定网桥中添加接口。

Sub-menu: /interface bridge port

属性 说明
auto-isolate (yes | no; Default: no) 启用后,如果未从相邻网桥接收到 BPDU,则防止端口从丢弃状态变为转发状态。只有当收到 BPDU 时,端口才会变为转发状态。此属性仅在 protocol-mode 设置为 rstpmstp 并且 edge 设置为 no 时有效。
bpdu-guard (yes | no; Default: no) 启用或禁用端口上的 BPDU 防护功能。如果端口收到 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(网络安装)等.此选项不限制流向 CPU 的流量。
edge (auto | no | no-discover | yes | yes-discover; Default: auto) 将端口设置为边缘端口或非边缘端口,或启用边缘发现。边缘端口连接到没有连接其他网桥的 LAN。边缘端口会跳过STP中的学习和监听状态,直接进入转发状态,减少了STP的初始化时间。如果端口配置为发现边缘端口,那么一旦网桥检测到到达边缘端口的 BPDU,该端口就会成为非边缘端口。当 protocol-mode 设置为 none 时,此属性无效。
- no - 非边缘端口,将参与 STP 中的学习和监听状态。
- no-discover - 启用发现的非边缘端口,将参与学习和监听状态在 STP 中,如果没有收到 BPDU,端口可以成为边缘端口。
- yes - 没有发现的边缘端口,将直接过渡到转发状态。
- yes-discover - 边缘端口启用发现后,将直接过渡到转发状态。
- auto - 与 no-discover 相同,但会额外检测桥接端口是否为禁用桥接模式的无线接口,此类接口将是自动设置为边缘端口而无需发现。
fast-leave (yes | no; Default: no) 在桥接端口上启用 IGMP/MLD 快速离开功能。当收到 IGMP/MLD 离开消息时,网桥将停止向网桥端口转发多播流量。此属性仅在 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 学习行为
- yes - 启用 MAC 学习
- no - 禁用 MAC 学习
- auto - 检测桥接端口是否为无线接口并且使用无线注册表而不是 MAC 学习,如果无线接口设置为 ap-bridgebridgewds-slave 模式之一并且禁用无线接口的桥接模式,则将使用无线注册表。
multicast-router (disabled | permanent | temporary-query; Default: temporary-query) 组播路由器端口是连接组播路由器或查询器的端口。在此端口上,将发送未注册的多播流和 IGMP/MLD 成员报告。此设置更改桥接端口的多播路由器的状态。此属性可用于将 IGMP/MLD 成员报告发送到某些网桥端口,以进行进一步的多播路由或代理。此属性仅在 igmp-snooping 设置为 yes 时有效。
- disabled - 在桥接端口上禁用组播路由器状态。未注册的多播和 IGMP/MLD 成员报告不会发送到桥接端口,无论连接的是什么。
- permanent - 在桥接端口上启用多播路由器状态。未注册的多播和 IGMP/MLD 成员报告将发送到桥接端口,无论连接的是什么。
- temporary-query - 使用 IGMP/MLD 查询自动检测桥接端口上的多播路由器状态。
horizon (integer 0..429496729; Default: none) 使用水平分割桥接来防止桥接环路。为一组端口设置相同的值,防止它们向具有相同水平值的端口发送数据。水平分割是一种禁用硬件卸载的软件功能。详细了解桥接水平分割
internal-path-cost (integer: 0..4294967295; Default: 10) 区域内 MSTI0 接口的路径成本。此属性仅在 protocol-mode 设置为 mstp 时有效。
interface (name; Default: none) 接口名称
path-cost (integer: 0..4294967295; Default: 10) 接口的路径开销,STP 使用它来确定最佳路径,MSTP 使用它来确定区域之间的最佳路径。当 protocol-mode 设置为 none 时,此属性无效。
point-to-point (auto | yes | no; Default: auto) 指定网桥端口是否使用点对点链路连接到网桥,以便在出现故障时更快地收敛。将此属性设置为“是”,你将强制链接成为点对点链接,这将跳过检查机制,该机制会检测并等待来自此单个链接的其他设备的 BPDU。通过将此属性设置为 no,链接可以从多个设备接收 BPDU。将该属性设置为“是”,可以明显缩短 (R/M)STP 收敛时间。通常,如果链路之间可以连接另一台设备,你应该只将此属性设置为no,这主要与无线媒体和以太网集线器有关。如果以太网链路是全双工的,则 auto 会启用点对点功能。当 protocol-mode 设置为 none 时,此属性无效。
priority (integer: 0..240; Default: 128) 接口的优先级,STP用它来确定根端口,MSTP用它来确定区域间的根端口。
pvid (integer 1..4094; Default: 1) 端口 VLAN ID (pvid) 指定未标记的入口流量分配到哪个 VLAN。此属性仅在 vlan-filtering 设置为 yes 时有效。
restricted-role (yes | no; Default: no) 在端口上启用受限角色,STP 使用该角色来禁止端口成为根端口。此属性仅在 protocol-mode 设置为 mstp 时有效。
restricted-tcn (yes | no; Default: no) 禁用拓扑更改通知 (TCN) 在端口上发送,STP 使用它来禁止传播网络拓扑更改。此属性仅在 protocol-mode 设置为 mstp 时有效。
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 时有效。
unknown-multicast-flood (yes | no; Default: yes) 更改桥接端口上的多播泛洪选项,仅控制出口流量。启用时,网桥允许将多播数据包泛滥到指定的网桥端口,但禁用时,网桥会限制多播流量泛滥到指定的网桥端口。该设置会影响所有多播流量,包括非 IP、IPv4、IPv6 和链路本地多播范围(例如 224.0.0.0/24 和 ff02::1)。
请注意,启用“igmp-snooping”时并且检测到 IGMP/MLD 查询器,网桥将自动限制未知 IP 多播被淹没,因此对于 IGMP/MLD 侦听设置来说,该设置不是强制性的。
当此设置与 igmp-snooping 一起使用时,唯一桥接端口上允许的多播流量是 MDB 表中的已知多播。
unknown-unicast-flood (yes | no; Default: yes) 更改桥接端口上的未知单播洪水选项,仅控制出口流量。启用时,网桥允许将未知的单播数据包泛洪到指定的网桥端口,但禁用时,网桥将限制未知的单播流量泛洪到指定的网桥端口。
如果主机表中未学习到 MAC 地址,然后流量被认为是未知的单播流量,将被淹没到所有端口。一旦收到桥接端口上的数据包,MAC 地址就会被学习,源 MAC 地址将被添加到桥接主机表中。由于要求网桥至少在网桥端口上接收到一个数据包才能学习到MAC地址,因此建议使用静态网桥主机表项,以避免在学习到MAC地址之前丢包。

示例

在已经创建的 bridge1 接口中将 ether1 和 ether2 分组。

[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

接口列表

从 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

也可以对列表出现的顺序进行排序。这可以使用“移动”命令来完成。以下是如何对接口列表进行排序的示例:

[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

移动接口列表时的第二个参数被认为是“before id”,第二个参数指定将选择的接口列表移动到哪个接口列表之前。当移动第一个接口列表代替第二个接口列表时,该命令将无效,因为第一个列表将移动到第二个列表之前,无论哪种方式都是当前状态。

桥接端口监控

要监控桥接端口的当前状态,请使用 monitor 命令。

Sub-menu: /interface bridge port monitor

属性 说明
edge-port (yes | no) 该端口是否为边缘端口。
edge-port-discovery (yes | no) 端口是否设置为自动检测边缘端口。
external-fdb (yes | no) 是否使用注册表代替转发数据库。
forwarding (yes | no) 显示端口是否未被 (R/M)STP 阻止。
hw-offload-group (switchX) 端口使用交换芯片。
learning (yes | no) 显示端口是否能够学习 MAC 地址。
multicast-router (yes | no) 显示是否在端口上检测到多播路由器。监控值仅在启用 igmp-snooping 时出现。
port-number (integer 1..4095) 端口号将按照端口添加到网桥的顺序分配,但这仅在重新启动之前有效。重新启动后,将使用内部端口编号。
point-to-point-port (yes | no) 端口使用全双工(是)还是半双工(否)连接到桥接端口。
role (designated | root port | alternate | backup | disabled) (R/M)STP 算法分配端口的角色:
- disabled-port - 严格来说不是 STP 的一部分,网络管理员可以手动禁用端口
- root-port -一个转发端口,它是面向根网桥的最佳端口
- alternative-port - 到根网桥的备用路径
- designated-port - 每个 LAN 段的转发端口
- backup-port - 到另一个网桥端口已经连接的段的备份/冗余路径。
sending-rstp (yes | no) 端口使用的是 RSTP 还是 MSTP BPDU 类型。当启用 RSTP/MSTP 的端口收到 STP BPDU 时,端口将转换为 STP 类型。此设置并不表示是否实际发送了 BDPU。
status (in-bridge | inactive) 端口状态:
- in-bridge - 端口已启用
- inactive - 端口已禁用
[admin@MikroTik] /interface bridge port monitor [find interface=ether1]
            interface: ether1
               status: in-bridge
          port-number: 1
                 role: designated-port
            edge-port: yes
  edge-port-discovery: yes
  point-to-point-port: yes
         external-fdb: no
         sending-rstp: yes
             learning: yes
           forwarding: yes

主机表

可以在主机菜单中查看在桥接接口上学习到的 MAC 地址。下面是可以查看的参数和标志表。

Sub-menu: /interface bridge host

属性 说明
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) 主机连接到哪个桥接接口

监控

要获取活动主机表:

[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

静态条目

自从RouterOS v6.42以来,可以在主机表中添加一个静态MAC地址条目。这可以用来通过一个特定的端口转发某种类型的流量。静态主机条目的另一个用例是通过禁用动态学习和只依赖配置的静态主机条目来保护设备资源。下面是在向主机表添加静态MAC地址条目时可以设置的参数表。

Sub-menu: /interface bridge host

属性 说明
bridge (name; Default: none) MAC 地址将被分配的桥接接口。
disabled (yes | no; Default: no) 禁用/启用静态 MAC 地址条目。
interface (name; Default: none) 接口名称
mac-address (MAC address; Default: ) 将被静态地添加到主机表中的MAC地址。
vid (integer: 1..4094; Default: ) 静态添加的MAC地址条目的VLAN ID。

例如,如果要求所有发往 4C:5E:0C:4D:12:43 的流量仅通过 ether2 转发,则可以使用以下命令:

/interface bridge host
add bridge=bridge interface=ether2 mac-address=4C:5E:0C:4D:12:43

组播表

当启用 IGMP/MLD snooping 时,网桥将开始监听IGMP/MLD通信,创建组播数据库(MDB) )条目并根据收到的信息做出转发决定。具有链路本地组播目标地址 224.0.0.0/24 和 ff02::1 的数据包不受限制,并且始终在所有端口和 VLAN 上泛洪。要查看学习到的多播数据库条目,请使用 print 命令。

Sub-menu: /interface bridge mdb

属性 说明
bridge (read-only: name) 显示该条目所属的网桥接口。
group (read-only: ipv4 | ipv6 address) 显示一个组播组地址。
on-ports (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 address; Default: ) IPv4 或 IPv6 组播地址。无法创建链路本地组播组 224.0.0.0/24 和 ff02::1 的静态条目,因为这些数据包始终在所有端口和 VLAN 上泛洪。
ports (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 ports=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 多播组不需要被监听,并且希望在所有端口和 VLAN 上泛洪,则可以在所有 VLAN 和端口上创建一个静态 MDB 条目,包括桥接接口本身。使用以下命令在所有 VLAN 和端口上为多播组 ff02::2 创建一个静态 MDB 条目(针对你的特定设置修改“端口”设置):

/interface bridge mdb
add bridge=bridge1 group=ff02::2 ports=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

网桥硬件卸载

自 RouterOS v6.41 起,如果设备具有内置交换芯片,则可以同时交换多个端口。虽然网桥是一种会消耗 CPU 资源的软件功能,但网桥硬件卸载功能将允许你使用内置交换芯片转发数据包,如果配置正确,这将使你获得更高的吞吐量。

在以前的版本(RouterOS v6.41 之前)中,你必须使用 master-port 属性来同时交換多个端口,但在 RouterOS v6.41 中,此属性被桥接硬件卸载功能所取代,它允许你交換端口和使用一些桥功能,例如,生成树协议

从以前的版本(RouterOS v6.41 之前)升级时,旧的主端口配置会自动转换为新的**桥硬件卸载**配置。从较新版本(RouterOS v6.41 和更新版本)降级到旧版本(在 RouterOS v6.41 之前)配置不会转换回来,取而代之的是没有硬件卸载的网桥,在这种情况下,你需要重新配置设备以使用旧的主端口配置。

以下是支持硬件卸载 (+) 或禁用硬件卸载 (-) 的设备和功能列表:

RouterBoard/[Switch Chip] Model Features in Switch menu Bridge STP/RSTP Bridge MSTP Bridge IGMP Snooping Bridge DHCP Snooping Bridge VLAN Filtering Bonding 4,5 Horizon 4
CRS3xx, CRS5xx series + + + + + + + -
CCR2116, CCR2216 + + + + + + + -
CRS1xx/CRS2xx series + + - + 2 + 1 - - -
[QCA8337] + + - - + 2 - - -
[Atheros8327] + + - - + 2 - - -
[Atheros8316] + + - - + 2 - - -
[Atheros8227] + + - - - - - -
[Atheros7240] + + - - - - - -
[IPQ-PPE] + - - - - - - -
[ICPlus175D] + - - - - - - -
[MT7621, MT7531] + + 3 + 3 - - + 3 - -
[RTL8367] + + 3 + 3 - - + 3 - -
[88E6393X, 88E6191X ] + + + + + + 3 + -

脚注:

  1. 该功能在 VLAN 交换设置中无法正常工作。可以仅针对单个 VLAN 正确侦听 DHCP 数据包,但这需要使用 ACL 规则使用正确的 VLAN 标记标记这些 DHCP 消息,例如,/interface ethernet switch acl add dst-l3-port=67 -68 ip-protocol=udp mac-protocol=ip new-customer-vid=10 src-ports=switch1-cpu。 DHCP 选项 82 将不包含任何有关 VLAN-ID 的信息。

  2. 该功能在 VLAN 交换设置中无法正常工作。

  3. RouterOS 7.1rc1 (for RTL8367) and 7.1rc5 (for MT7621) 版本增加了HW vlan-filtering和R/M/STP。该交换机不支持其他 ether-type 0x88a8 或 0x9100(仅支持 0x8100)并且不支持 tag-stacking。使用这些功能将禁用 HW 卸载。

  4. HW offloading 将只针对特定的网桥端口禁用,而不是整个网桥。

  5. 只有 802.3ad 和 balance-xor 模式可以进行 HW 卸载。其他绑定模式不支持HW卸载。

从旧版本(RouterOS v6.41 之前)升级时,只会转换主端口配置。将为每个主端口创建一个网桥。 VLAN 配置未转换且不应更改,请查看 基本 VLAN 交換 指南以确定应如何进行 VLAN 交換的设备配置。 Bridge Hardware Offloading 应视为端口交換,但具有更多可能的功能。通过启用硬件卸载,你允许内置交换芯片使用其交换逻辑处理数据包。下图说明交換发生在任何与软件相关的操作之前。

由其中一个端口接收的数据包总是首先通过交换机逻辑。交换机逻辑决定数据包应该去往哪些端口(最常见的是根据数据包的目标 MAC 地址做出此决定,但根据数据包和配置可能涉及其他标准)。在大多数情况下,数据包对 RouterOS 是不可见的(只有统计数据会显示数据包已经通过),这是因为数据包已经被交换芯片处理并且从未到达 CPU。

尽管在某些情况下允许数据包由 CPU 处理是可能的,但这通常称为将数据包转发到交换机 CPU 端口(或网桥 VLAN 过滤场景中的网桥接口)。这允许 CPU 处理数据包并让 CPU 转发数据包。将数据包传递到 CPU 端口将使你有机会将数据包路由到不同的网络,执行流量控制等软件相关的数据包处理动作。要允许 CPU 处理数据包,你需要根据你的需要和所使用的设备进行某些配置更改(最常见的是,将数据包传递到 CPU 是 VLAN 过滤设置所必需的)。查看特定设备的手册页:

某些网桥和以太网端口属性与交换芯片设置直接相关,更改此类属性可以触发**交换芯片重置**,这将暂时禁用交换芯片上的所有以太网端口以使设置生效,这每当更改生产环境中的属性时都必须考虑。这些属性包括 DHCP 侦听、IGMP 侦听、VLAN 过滤、L2MTU、流量控制等(可以触发交换芯片重置的具体设置取决于设备的型号)。

CRS1xx/2xx 系列交换机 支持每个交换芯片的多个硬件卸载网桥。所有其他设备每个交换芯片仅支持一个硬件卸载网桥。使用 hw=yes/no 参数选择哪个网桥将使用硬件卸载。

示例

从 RouterOS v6.41 开始,使用网桥配置和启用硬件卸载的端口交換:

/interface bridge
add name=bridge1
/interface bridge port
add bridge=bridge1 interface=ether2 hw=yes
add bridge=bridge1 interface=ether3 hw=yes
add bridge=bridge1 interface=ether4 hw=yes
add bridge=bridge1 interface=ether5 hw=yes

通过检查“H”标志确保硬件卸载已启用并处于活动状态:

[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   H ether2          bridge1      yes    1     0x80         10                 10       none
 1   H ether3          bridge1      yes    1     0x80         10                 10       none
 2   H ether4          bridge1      yes    1     0x80         10                 10       none
 3   H ether5          bridge1      yes    1     0x80         10                 10       none

RouterOS v6.41 和更新版本中的端口交換是使用网桥配置完成的。在 RouterOS v6.41 之前,端口交換是使用 master-port 属性完成的。

网桥VLAN过滤

自 RouterOS v6.41 起的网桥 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) 模式。 除了加入用于二层转发的端口外,网桥本身也是一个接口,因此它具有端口 VLAN ID(pvid)。

目前CRS3xx、CRS5xx系列交换机、CCR2116、CCR2216路由器和RTL8367、88E6393X、88E6191X、MT7621交换机芯片(自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” VLAN 的未标记端口。

Sub-menu: /interface bridge vlan

属性 说明
bridge (name; Default: none) 相应 VLAN 条目用于的桥接接口。
disabled (yes | no; Default: no) 启用或禁用桥接 VLAN 条目。
tagged (interfaces; Default: none) 出口中带有 VLAN 标记添加操作的接口列表。 此设置接受逗号分隔值。 例如 tagged=ether1,ether2
untagged (interfaces; Default: none) 出口中带有 VLAN 标记删除操作的接口列表。 此设置接受逗号分隔值。 例如 untagged=ether3,ether4
vlan-ids (integer 1..4094; Default: 1) 特定端口配置的 VLAN ID 列表。 此设置接受 VLAN ID 范围以及逗号分隔值。 例如 vlan-ids=100-115,120,122,128-130

vlan-ids 参数可用于指定一组或范围的 VLAN,但在单个网桥 VLAN 表条目中指定多个 VLAN 应仅用于标记端口的端口。 如果为访问端口指定了多个 VLAN,则无论 PVID 值如何,标记的数据包都可能通过错误的访问端口作为未标记的数据包发送出去。

使用桥接 VLAN 过滤时,确保已将所有需要的接口添加到桥接 VLAN 表。 为了使路由功能通过使用网桥 VLAN 过滤的端口在同一设备上正常工作,需要允许访问网桥接口(当使用 HW 卸载 vlan 过滤时,会自动包括一个 switch-cpu 端口,例如在 CRS3xx 系列上 交换机),可以通过将网桥接口本身添加到 VLAN 表来完成,对于标记流量,需要将网桥接口添加为标记端口并在网桥接口上创建 VLAN 接口。 可以在 VLAN 间路由和管理端口部分找到示例。

当允许访问 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 | 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 起默认启用。
pvid (integer 1..4094; Default: 1) 端口 VLAN ID (pvid) 指定未标记的入口流量分配到哪个 VLAN。 此属性仅在 vlan-filtering 设置为 yes 时有效。
tag-stacking (yes | no; Default: no) 强制将所有数据包视为未标记的数据包。 入口端口上的数据包将使用另一个 VLAN 标记进行标记,无论 VLAN 标记是否已存在,数据包将使用与 pvid 值匹配的 VLAN ID 进行标记,并将使用在 ether-type 中指定的 EtherType。 此属性仅在 vlan-filtering 设置为 yes 时有效。

网桥主机表

网桥主机表允许监控学习到的 MAC 地址。启用 vlan-filtering 后,它还会显示学习到的 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-filtering 的网桥,以避免在完全配置 VLAN 之前失去对设备的访问权限。 如果你需要对网桥进行管理访问,请参阅 管理访问配置 部分。

/interface bridge
add name=bridge1 vlan-filtering=no

添加桥接端口并为访问端口指定 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

添加桥接 VLAN 条目并在其中指定标记端口。 frame-types 设置为 admit-only-untagged-and-priority-tagged 的桥接端口将自动添加为 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

最后,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

VLAN Example - Trunk and Hybrid Ports

创建一个禁用 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 配置完成后,启用 Bridge VLAN Filtering。

/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 ,或者将``frame-type`` 设置为 accept-only-vlan-tagged 来规避此行为。

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 中继,它将进一步发送流量以进行 InterVLAN 路由。 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 地址。

/ip address
add address=192.168.99.1/24 interface=bridge1

无 VLAN 过滤的标记访问

如果不使用 VLAN 过滤并且需要使用标记流量进行访问,请在网桥上创建可路由的 VLAN 接口并在 VLAN 接口上添加 IP 地址。

/interface vlan
add interface=bridge1 name=MGMT vlan-id=99
/ip address
add address=192.168.99.1/24 interface=MGMT

带 VLAN 过滤的标记访问

如果使用 VLAN 过滤并且需要使用标记的流量进行访问,则需要执行额外的步骤。 在此示例中,将使用 VLAN 99 访问设备。 必须在网桥上创建 VLAN 接口并为其分配 IP 地址。

/interface vlan
add interface=bridge1 name=MGMT vlan-id=99
/ip address
add address=192.168.99.1/24 interface=MGMT

例如,如果希望允许使用标记的 VLAN 99 流量从端口 ether3ether4sfp-sfpplus1 访问设备,则必须将此条目添加到 VLAN 表中。 请注意,bridge1 接口也包含在标记的端口列表中:

/interface bridge vlan
add bridge=bridge1 tagged=bridge1,ether3,ether4,sfp-sfpplus1 vlan-ids=99

此后可以启用VLAN过滤:

/interface bridge set bridge1 vlan-filtering=yes

带 VLAN 过滤的无标记访问

如果使用 VLAN 过滤并且需要使用未标记流量进行访问,则 VLAN 接口必须使用与未标记端口 VLAN ID (pvid) 相同的 VLAN ID。 就像在前面的示例中一样,首先在网桥上创建一个 VLAN 接口并为该 VLAN 添加一个 IP 地址。

/interface vlan
add interface=bridge1 name=MGMT vlan-id=99
/ip address
add address=192.168.99.1/24 interface=MGMT

例如,未标记的端口 ether2ether3 应该能够使用未标记的流量与 VLAN 99 接口通信。 为了实现这一点,这些端口应该配置与管理 VLAN 上的 VLAN ID 相匹配的“pvid”。 请注意,bridge1 接口是标记端口成员,如有必要,可以配置其他标记端口(参见前面的示例)。

/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过滤:

/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 中无标记的 ether2ether3 端口以及标记的 sfp-sfpplus1 端口通信。为了实现这一点,bridge1ether2ether3 应配置相同的 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 过滤相同的原理(可以使用相同的设置示例)。 下面是一个常见的 提供商网桥 的拓扑结构:

在此示例中,R1R2R3R4 可能通过 802.1Q (CVID) 发送任何 VLAN 标记的流量,但**SW1** 和 SW2 需要隔离路由器之间的流量,使得 R1 只能与 R3 通信,而 R2 只能与 R4 通信。 为此,你可以使用 SVID 标记所有入口流量,并仅允许特定端口上的这些 VLAN。 首先在网桥上启用 802.1ad VLAN 协议,在 SW1SW2 上使用这些命令:

/interface bridge
add name=bridge1 vlan-filtering=no ether-type=0x88a8

在此设置中,ether1ether2 将成为访问端口(未标记),使用 pvid 参数标记每个端口上的所有入口流量,在 SW1SW2

/interface bridge port
add interface=ether1 bridge=bridge1 pvid=200
add interface=ether2 bridge=bridge1 pvid=300
add interface=ether3 bridge=bridge1

在桥接 VLAN 表中指定标记和未标记端口,在 SW1SW2 上使用这些命令:

/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 过滤,在 SW1SW2 上使用这些命令:

/interface bridge set bridge1 vlan-filtering=yes

通过启用 vlan 过滤,将过滤掉发往 CPU 的流量,在启用 VLAN 过滤之前,应该确保设置管理端口。 使用不同 EtherType 的区别在于必须使用服务 VLAN 接口。 服务 VLAN 接口可以创建为常规 VLAN 接口,但如果接口将使用服务 VLAN 标签,则 use-service-tag 参数会切换。

配置 ether-type=0x8100 时,网桥会检查外部 VLAN 标记并查看它是否使用 EtherType 0x8100 。 如果网桥接收到带有不同 EtherType 的外部标签的数据包,它将将该数据包标记为“未标记”。 由于 RouterOS 仅检查数据包的外部标记,因此在使用 802.1ad 协议时无法过滤 802.1Q 数据包。

目前,CRS3xx、CRS5xx 系列交换机和 CCR2116、CCR2216 路由器能够在 ether-type 设置为“0x88a8”时基于 SVID(服务 VLAN ID)标记进行硬件卸载 VLAN 过滤。

具有交换芯片 Marvell-98DX3257 的设备(例如 CRS354 系列)不支持在 1Gbps 以太网接口上对其他 VLAN 类型(0x88a80x9100)进行 VLAN 过滤。

标签堆叠

自 RouterOS v6.43 以来,可以在任何现有 VLAN 标签上强制添加新的 VLAN 标签,此功能可用于实现 CVID 堆叠设置,其中在现有 CVID 标签之前添加 CVID (0x8100) 标签。 这种类型的设置与 Provider bridge 设置非常相似,为了实现相同的设置,但对于多个 CVID 标签(CVID 堆叠),我们可以使用相同的拓扑结构:

在此示例中,R1R2R3R4 可能发送任何标记了 VLAN 的流量,它可以是 802.1ad、802.1Q 或任何其他类型的流量, 但是 SW1SW2 需要以一种方式隔离路由器之间的流量,即 R1 只能与 R3 通信,而 R2 只能与 R4 。 为此,你可以使用新的 CVID 标签标记所有入口流量,并仅允许特定端口上的这些 VLAN。 首先选择合适的 EtherType,在 SW1SW2 上使用这些命令:

/interface bridge
add name=bridge1 vlan-filtering=no ether-type=0x8100

在此设置中,ether1ether2 将忽略任何存在的 VLAN 标记并添加新的 VLAN 标记,使用 pvid 参数标记每个端口上的所有入口流量并允许 tag-stacking 在这些端口上,在 SW1SW2 上使用这些命令:

/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,在 SW1SW2 上使用这些命令:

/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 参数生效所必需的,请在 SW1SW2 上使用这些命令:

/interface bridge set bridge1 vlan-filtering=yes

通过启用 vlan 过滤,将过滤掉发往 CPU 的流量,在启用 VLAN 过滤之前,要确保设置了一个管理端口。

快速转发

快速转发允许在特殊条件下更快地转发数据包。 启用快速转发后,网桥可以更快地处理数据包,因为它可以跳过多个与网桥相关的检查,包括 MAC 学习。 可以在下面找到要激活快进必须满足的条件列表:

  • Bridge 已将 fast-forward 设置为 yes

  • Bridge 只有 2 个运行端口

  • 两个桥接端口都支持 Fast Path ,Fast Path 在端口上和桥接器上都处于活动状态

  • 禁用桥接硬件卸载

  • 桥接 VLAN 过滤已禁用

  • 网桥 DHCP 侦听已禁用

  • unknown-multicast-flood 设置为 yes

  • unknown-unicast-flood 设置为 yes

  • broadcast-flood 设置为 yes

  • 网桥的 MAC 地址与来自其中一个网桥从端口的 MAC 地址相匹配

  • 两个端口的 horizon 都设置为 none

快速转发禁用 MAC 学习,这是为了实现更快的数据包转发而设计的。 MAC 学习可防止流量泛洪多个接口,但当数据包只能通过一个接口发送时,则不需要 MAC 学习。

启用硬件卸载时禁用快进。 硬件卸载在激活时可以实现全写速度性能,因为它将使用内置交换芯片(如果你的设备上存在),快进使用 CPU 转发数据包。 比较吞吐量结果时,你会得到这样的结果:Hardware offloading > Fast Forward > Fast Path > Slow Path。

可以检查快速转发处理了多少数据包:

[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 处理,则快速转发未激活。 数据包计数可用作 快速转发是否处于活动状态的指示器。

从 RouterOS 6.44 开始,可以监控快速转发状态,例如:

[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

禁用或启用快进将暂时禁用所有桥接端口以使设置生效。 每当在生产环境中更改此属性时都必须考虑到这一点,因为它可能导致所有数据包暂时丢弃。

IGMP/MLD 侦听

从 RouterOS 版本 6.41 开始,网桥支持 IGMP/MLD 侦听。 它控制多播流并防止不必要端口上的多播泛滥。 它的设置位于桥接菜单中,并且在每个桥接界面中独立工作。 软件驱动的实现适用于所有带有 RouterOS 的设备,但 CRS3xx、CRS5xx 系列交换机、CCR2116、CR2216 路由器和 88E6393X、88E6191X 交换机芯片也支持 IGMP/MLD 侦听和硬件卸载。 请参阅 IGMP/MLD 侦听手册 的更多详细信息。

DHCP 侦听和 DHCP 选项 82

从 RouterOS 版本 6.43 开始,网桥支持 DHCP Snooping 和 DHCP Option 82。DHCP Snooping 是一种第 2 层安全功能,可限制未经授权的 DHCP 服务器向用户提供恶意信息。 在 RouterOS 中,你可以指定哪些桥接端口是可信的(已知 DHCP 服务器所在的位置,应该转发 DHCP 消息),哪些是不可信的(通常用于访问端口,收到的 DHCP 服务器消息将被丢弃)。 DHCP 选项 82 是由支持 DHCP 侦听的设备提供的附加信息(代理电路 ID 和代理远程 ID),允许识别设备本身和 DHCP 客户端。

在此示例中,SW1 和 SW2 是 DHCP 侦听和启用选项 82 的设备。 首先需要创建一个网桥,分配接口并标记可信端口。 在 SW1 上使用这些命令:

/interface bridge
add name=bridge
/interface bridge port
add bridge=bridge interface=ether1
add bridge=bridge interface=ether2 trusted=yes

对于 SW2,配置类似,但还需要将 ether1 标记为受信任,因为该接口将接收已添加选项 82 的 DHCP 消息。 如果所有端口要接收添加了选项 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。如果 DHCP 服务器不支持 DHCP Option 82 或者没有实施任何 Option 82 相关策略,可以禁用此选项。 在 SW1SW2 上使用这些命令:

/interface bridge
set [find where name="bridge"] dhcp-snooping=yes add-dhcp-option82=yes

现在两台设备都将分析在桥接端口上接收到哪些 DHCP 消息。 SW1 负责添加和删除 DHCP 选项 82。SW2 将限制流氓 DHCP 服务器接收任何发现消息,并丢弃来自 ether3 的恶意 DHCP 服务器消息。

目前,CRS3xx、CRS5xx 系列交换机、CCR2116、CR2216 路由器和 88E6393X、88E6191X 交换机芯片完全支持硬件卸载的 DHCP 侦听和选项 82。对于 CRS1xx 和 CRS2xx 系列交换机,可以将 DHCP 侦听与 VLAN 交換一起使用,但随后你 需要确保使用出口 ACL 规则发送带有正确 VLAN 标记的 DHCP 数据包。 其他设备能够使用 DHCP Snooping 和 Option 82 功能以及硬件卸载,但你必须确保设备上没有应用与 VLAN 相关的配置,否则 DHCP Snooping 和 Option 82 可能无法正常工作。 请参阅具有受支持功能的桥接硬件卸载部分。

对于 CRS3xx、CRS5xx 系列交换机和 CCR2116、CR2216 路由器,当创建硬件卸载绑定接口时,DHCP 监听将不起作用。

控制器网桥和端口扩展器

控制器网桥 (CB) 和端口扩展器 (PE) 是 RouterOS 中用于 CRS3xx、CRS5xx 系列交换机和 CCR2116、CCR2216 路由器的 IEEE 802.1BR 标准实施。 它允许使用 PE 设备虚拟扩展 CB 端口,并从单个控制设备管理这些扩展接口。 这样的配置提供了简化的网络拓扑结构、灵活性、增加的端口密度和易管理性。 请参阅 Controller Bridge and Port Extender 手册 了解更多详情。

网桥防火墙

网桥防火墙实现数据包过滤,从而提供用于管理进出网桥和通过网桥的数据流的安全功能。

数据包流程图 显示了数据包是如何通过路由器处理的。 可以强制网桥流量通过 /ip firewall filter 规则(参见网桥设置)。

有两个网桥防火墙表:

  • filter - 具有三个预定义链的桥接防火墙:

    • input - 过滤数据包,其中目的地是网桥(包括那些将被路由的数据包,因为它们无论如何都注定要到达网桥 MAC 地址)

    • output - 过滤来自网桥的数据包(包括那些已正常路由的数据包)

    • forward - 过滤要桥接的数据包(注意:此链不适用于应通过路由器路由的数据包,仅适用于在同一网桥的端口之间传输的数据包)

  • nat - 网桥网络地址转换提供了更改通过网桥的数据包的源/目标 MAC 地址的方法。 有两个内置链:

    • srcnat - 用于将主机或网络“隐藏”在不同的 MAC 地址后面。 此链适用于通过桥接接口离开路由器的数据包

    • dstnat - 用于将一些数据包重定向到其他目的地

可以在网桥防火墙(过滤器和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)是2个单字节字段,标识使用链路层服务的网络协议实体。这些字节总是相等的。可以在此处指定两个十六进制数字来匹配一个 SAP 字节。
802.3-type (integer; Default: ) 以太网协议类型,放在 IEEE 802.2 帧头之后。仅当 802.3-sap 为 0xAA(SNAP - 子网连接点标头)时才有效。例如,AppleTalk 可以由 SAP 代码 0xAA 后跟 SNAP 类型代码 0x809B 表示。
action (accept | drop | jump | log | mark-packet | passthrough | return | set-priority; Default: ) 数据包符合规则时要采取的操作:
- accept - 接受数据包。 数据包不传递到下一个防火墙规则
- drop- 静默丢弃数据包
- jump- 跳转到由jump-target 参数值指定的用户定义链
- log - 向系统日志添加一条消息,其中包含以下数据:in-interface、out-interface、src-mac、协议、src-ip:port->dst-ip:port 和数据包长度。 数据包匹配后,它被传递到列表中的下一个规则,类似于 passthrough
- mark-packet - 在匹配规则的数据包上放置由 new-packet-mark 参数指定的标记< br>- passthrough - 如果数据包与规则匹配,增加计数器并转到下一条规则(对统计有用)
- return - 将控制权从跳转发生的地方传回链
- set-priority - 为通过能够传输优先级的链路(VLAN 或启用 WMM 的无线接口)发出的数据包设置新优先级参数指定的优先级。 阅读更多
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 - 为给定 MAC 地址分配临时 IP 地址的动态 RARP 请求
- inarp-reply - InverseARP 回复
- inarp-request - InverseARP 请求
- replay - 带有 MAC 地址的标准 ARP 回复
- reply-reverse - 反向 ARP (RARP) 回复并分配 IP 地址
- request - 向已知 IP 地址发出标准 ARP 请求以找出未知 MAC 地址
- request-reverse - 反向 ARP (RARP) 请求到一个已知的 MAC 地址以找出未知的 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-mac-address (MAC address; Default: ) 目标MAC地址
dst-port (integer 0..65535; Default: ) 目标端口号或范围(仅适用于 TCP 或 UDP 协议)。
in-bridge (name; Default: ) 数据包传入的网桥接口。
in-interface (name; Default: ) 数据包传入的物理接口(即网桥端口)。
in-interface-list (name; Default: ) Set of interfaces defined in interface list. Works the same as 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 - 数据报拥塞控制协议
- ddp - 数据报传送协议
- egp - 外部网关协议
- encap - 封装头
- etherip - IP 内以太网封装
- ggp - 网关到网关协议
- gre - 通用路由封装
- hmp - 主机监控协议
- icmp - IPv4 互联网控制消息协议
- icmpv6 - IPv6 互联网控制消息协议
- idpr-cmtp - 域间策略路由控制消息传输协议
- igmp - 互联网组管理协议
- ipencap - IP 中的 IP(封装)
- ipip - IP 封装协议
- ipsec-ah - IPsec 身份验证标头
- ipsec-esp - IPsec 封装安全负载
- ipv6 - 互联网协议版本 6
- ipv6-frag - IPv6 的片段标头
- ipv6-nonxt - IPv6 没有下一个标头
- ipv6-opts - IPv6 的目标选项
- ipv6-route - IPv6 的路由标头
- iso-tp4 - ISO 传输协议 4 类
- l2tp - 第二层隧道协议
- ospf - 开放最短路径优先
- pim - 协议独立组播
- pup- PARC 通用数据包
- rdp - 可靠数据协议
- rspf - 无线电最短路径优先
- rsvp - 保留协议
- sctp - 流控制传输协议
- st - 互联网流协议
- tcp - 传输控制协议
- udp - 用户数据报协议
- udp-lite - 轻量级用户数据报协议
- vmtp - 通用消息处理协议
- vrrp - 虚拟路由器冗余协议
- xns-idp - Xerox 网络系统互联网数据报协议
- xtp - Xpress 传输协议
jump-target (name; Default: ) 如果指定了action=jump ,则采用用户定义的防火墙链来处理数据包。
limit (integer/time,integer; Default: ) 将数据包匹配率限制为给定的限制。
- count - 最大平均数据包速率,以每秒数据包数 (pps) 为单位,除非后跟时间选项
- time - 指定测量数据包速率的时间间隔
- burst \ - 突发中匹配的数据包数
log-prefix (text; Default: ) Defines the prefix to be printed before the logging information.
mac-protocol (802.2 | arp | homeplug-av | ip | ipv6 | ipx | length | lldp | loop-protect | mpls-multicast | mpls-unicast | packing-compr | packing-simple | pppoe | pppoe-discovery | rarp | service-vlan | vlan | integer 0..65535 | hex 0x0000-0xffff; Default: ) 以太网负载类型(MAC 级协议)。 要匹配 VLAN 封装帧的协议类型(0x8100 或 0x88a8),应使用 vlan-encap 属性。
- 802.2 - 802.2 帧 (0x0004)
- arp - 地址解析协议 (0x0806)
- homeplug-av- HomePlug AV MME (0x88E1)
- ip - 互联网协议版本 4 (0x0800)
- ipv6 - 互联网协议版本 6 (0x86DD)
- ipx - 互联网数据包交换 (0x8137)
- length - 具有长度字段的数据包 (0x0000-0x05DC)
- lldp - 链路层发现协议 (0x88CC)
- loop-protect- 环路保护协议 (0x9003)
- mpls-multicast- MPLS 多播 (0x8848)
- mpls-unicast- MPLS 单播 (0x8847)
- packing-compr - 压缩包 IP packing (0x9001)
- packing-simple - 使用简单 IP packing封装的数据包 (0x9000)
- pppoe - PPPoE 会话阶段 (0x8864)
- pppoe-discovery - PPPoE 发现阶段 (0x8863)
- rarp - 反向地址解析协议 (0x8035)
- service-vlan - 提供商桥接 (IEEE 802.1ad) 和最短路径桥接 IEEE 802.1aq (0x88A8)
- vlan - VLAN 标记帧 (IEEE 802.1Q) 和具有 NNI 兼容性的最短路径桥接 IEEE 802.1aq (0x8100)
out-bridge (name; Default: ) 传出网桥接口
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-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- 配置 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 优先级(优先级代码点)

脚注:

  • STP 匹配器仅在目标 MAC 地址为 "01:80:C2:00:00:00/FF:FF:FF:FF:FF:FF"(网桥组地址)时才有效,还应启用 STP。

  • ARP 匹配器仅在 mac-protocol 为 arprarp 时有效

  • VLAN 匹配器仅对 0x81000x88a8 以太网协议有效

  • IP 或 IPv6 相关匹配器仅在 mac-protocol 设置为 ipipv6 时有效

  • 只有当实际帧符合 IEEE 802.2 和 IEEE 802.3 标准时,才会咨询 802.3 匹配器。 其他数据包将忽略这些匹配器。

网桥包过滤器

本节介绍特定的桥接滤波器选项。

Sub-menu: /interface bridge filter

属性 说明
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:数据包的端口和长度。 数据包匹配后,它被传递到列表中的下一个规则,类似于 passthrough
- mark - 标记数据包,稍后使用该标记
- passthrough - 忽略这条规则并继续下一条。 与禁用规则的作用相同,除了能够对数据包进行计数
- return - 返回上一个链,从发生跳转的地方开始
- set-priority - 设置通过能够传输优先级的链路(VLAN 或启用 WMM 的无线接口)发出的数据包的新优先级参数指定的优先级。 阅读更多

网桥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 地址(仅在 dstnat 链中有效)发送对 ARP 请求的回复(此规则将忽略任何其他数据包)
- drop - 静默丢弃数据包(不发送 ICMP 拒绝消息)
- dst-nat - 更改数据包的目标 MAC 地址(仅在 dstnat 链中有效)
- jump - 跳转到由 jump-target 参数的值指定的链
- log - 记录数据包
- mark - 标记数据包,稍后使用该标记
- passthrough - 忽略这条规则并继续下一条。 与禁用规则的作用相同,除了能够对数据包进行计数
- redirect - 将数据包重定向到网桥本身(仅在 dstnat 链中有效)
- return - 返回上一个链,从发生跳转的地方开始
- set-priority - 设置通过能够传输优先级的链路(VLAN 或启用 WMM 的无线接口)发出的数据包的新优先级参数指定的优先级。 更多
- src-nat - 更改数据包的源 MAC 地址(仅在 srcnat 链中有效)
to-arp-reply-mac-address (MAC address; Default: ) 选择action=arp-reply时要放入以太网帧中的源MAC地址
to-dst-mac-address (MAC address; Default: ) 选择action=dst-nat时要放入以太网帧中的目标 MAC 地址
to-src-mac-address (MAC address; Default: ) 选择action=src-nat时要放入以太网帧的源 MAC 地址

参考文档