RoMON
RoMON 是 Router Management Overlay Network(路由器管理覆盖网络),它建立一个独立的 MAC 层网络用于安全的设备管理,使用 EtherType 0x88bf 和 DST-MAC 01:80:c2:00:88:bf。它允许端口以可配置的 ID 和开销参与,支持用于数据包转发的动态 ACL 规则,并使用 MD5 哈希。
RoMON
概述
RoMON 是 "Router Management Overlay Network"(路由器管理覆盖网络)的缩写。RoMON 通过建立一个独立的 MAC 层对等发现和数据转发网络来工作。RoMON 数据包使用 EtherType 0x88bf 和 DST-MAC 01:80:c2:00:88:bf 封装,其网络独立于 L2 或 L3 转发配置运行。启用 RoMON 后,任何收到的 RoMON 数据包都不会被 sniffer 或 torch 工具显示。
RoMON 网络上的每台路由器都被分配一个 RoMON ID。RoMON ID 可以从端口 MAC 地址中选择,或由用户指定。
RoMON 协议不提供加密服务。加密在“应用”层面提供,例如通过使用 ssh 或使用安全的 WinBox。
信息
除非对组播流量有特定限制,RoMON 数据包可以通过网络交换机或 bridge 转发。使用带硬件卸载的 MikroTik bridge 时,这些数据包会被当作普通组播数据包处理,并在网络中泛洪。
从 RouterOS v7.17 起,如果启用了 RoMON 服务且交换芯片支持 ACL 规则,会自动创建动态规则把这些数据包重定向到运行 RoMON 服务的 CPU。但是,如果交换机不支持 ACL 规则且配置不一致(例如 CPU 和 RoMON 未标记数据包不在同一个 VLAN 中),RoMON 服务可能无法按预期工作。
RB5009(switch-chip 88E6393X)不支持此路径。该芯片的 frame-types=admit-only-vlan-tagged 过滤器会在任何 ACL 规则应用之前丢弃 RoMON 帧,因此这些数据包永远无法到达 CPU。
配置
要让设备参与 RoMON 网络,必须启用 RoMON 功能,并指定参与 RoMON 网络的端口。
Romon 从 /tool/romon 菜单配置。
当启用 RoMON 而未指定 ID 时,会自动选择 ID:
[admin@MikroTik] /tool/romon> print
enabled: yes
id: 00:00:00:00:00:00
secrets:
current-id: DC:2C:6E:9E:11:27
参与 RoMON 网络的端口在 /tool/romon/port 菜单中配置。端口列表是一组条目,每个条目匹配某个特定接口或接口列表。每个条目定义匹配的接口是允许还是禁止参与 RoMON 网络。如果允许参与,条目还会指定该端口的开销。
信息
预配置了一个 interface-list 为 "all" 的默认条目。这意味着当启用 RoMON 服务时,默认允许所有接口参与 RoMON 网络。该默认条目无法移除或启用/禁用,但你仍可以修改其
cost、将其设为forbid(禁止)参与,或配置secrets。
Secrets(密钥)
RoMON 协议 secrets 用于消息认证、完整性检查和防重放,方式是用 MD5 对消息内容进行哈希。
对于每个接口,如果接口特定的 secret 列表为空,则使用全局 secret 列表。发送时,如果列表非空且第一个不是 "empty secret"(空字符串 = ""),消息会用列表中的第一个 secret 进行哈希,否则消息以未哈希形式发送。接收时,未哈希消息仅在 secret 列表为空或包含 "empty secret" 时被接受;哈希消息只要用列表中的任意 secret 哈希过就会被接受。
这种设计允许在网络中逐步引入和/或更改 secret 而不中断 RoMON 服务,且可以通过 RoMON 本身完成,例如:
- 最初,所有路由器都没有 secret。
- 逐个把每台路由器配置为 secrets="","mysecret" —— 这使所有路由器仍然发送未保护帧,但它们都准备好接受用 secret "mysecret" 保护的帧。
- 逐个把每台路由器配置为 secrets="mysecret","" —— 这使所有路由器使用 secret "mysecret",但仍接受未保护帧(来自尚未更改的路由器)。
- 把所有路由器配置为 secrets="mysecret" —— 这使所有路由器使用 secret "mysecret",并且只接受用 "mysecret" 保护的帧。
在网络中更改 secret 应采用类似方式,在一段时间内网络中同时使用两个 secret。
对等发现
要发现 RoMON 网络上的所有路由器,必须使用 /tool/romon/discover 命令:
[admin@MikroTik] > /tool/romon/discover
Flags: A - active
Columns: ADDRESS, COST, HOPS, PATH, L2MTU, IDENTITY, VERSION, BOARD
ADDRESS COS H PATH L2MT IDENTITY VERSION BOARD
A 6C:3B:6B:48:0E:8B 200 1 6C:3B:6B:48:0E:8B 1500 hEX 6.47beta7 RB750Gr3
A 6C:3B:6B:ED:83:69 200 1 6C:3B:6B:ED:83:69 1500 CCR1009 6.47beta7 CCR1009-7G-1C-1S+
A B8:69:F4:B3:1B:D2 200 1 B8:69:F4:B3:1B:D2 1500 4K11 6.47beta7 RB4011iGS+5HacQ2HnD
A CC:2D:E0:26:22:4D 200 1 CC:2D:E0:26:22:4D 1500 CCR1036 6.47beta7 CCR1036-8G-2S+
A CC:2D:E0:8D:01:88 200 1 CC:2D:E0:8D:01:88 1500 CRS328 6.47beta7 CRS328-24P-4S+
A E4:8D:8C:1C:D3:0E 200 1 E4:8D:8C:1C:D3:0E 1500 MikroTik 6.47beta7 RB2011iLS
A E4:8D:8C:49:49:DB 200 1 E4:8D:8C:49:49:DB 1500 hAP 6.47beta7 RB962UiGS-5HacT2HnT
配置示例
要让设备参与 RoMON 网络,必须启用 RoMON 功能,并指定参与 RoMON 网络的端口。
/tool/romon/set enabled=yes secrets=testing
参与 RoMON 网络的端口在 the RoMON port 菜单中配置。端口列表是一组条目,每个条目匹配特定端口或所有端口,并指定匹配的端口是否被禁止参与 RoMON 网络;如果该端口被允许参与 RoMON 网络,条目还会指定该端口开销。所有特定端口条目的优先级都高于 interface=all 的通配条目。
例如,以下列表指定所有端口以开销 100 参与 RoMON 网络,而 ether7 接口以开销 200 参与:
[admin@MikroTik] > /tool/romon/port/print
Flags: * - default
Columns: INTERFACE, FORBID, COST
# INTERF FO COS
0 * all no 100
1 ether7 no 200
默认会创建一个 forbid=no 和 cost=100 的通配条目。
应用
可以在 RoMON 网络上运行多个应用。
要测试 RoMON 网络上特定路由器的可达性,可以使用 RoMON ping 命令:
[admin@MikroTik] > /tool/romon/ping id=6C:3B:6B:48:0E:8B count=5
SEQ HOST TIME STATUS
0 6C:3B:6B:48:0E:8B 1ms
1 6C:3B:6B:48:0E:8B 0ms
2 6C:3B:6B:48:0E:8B 1ms
3 6C:3B:6B:48:0E:8B 0ms
4 6C:3B:6B:48:0E:8B 1ms
sent=5 received=5 packet-loss=0% min-rtt=0ms avg-rtt=0ms max-rtt=1ms
要与 RoMON 网络上的路由器建立安全的终端连接,可以使用 RoMON SSH 命令:
[admin@MikroTik] > /tool/romon/ssh 6C:3B:6B:48:0E:8B
通过 CLI 在 WinBox 中运行 RoMON
要在计算机上直接使用命令行建立 RoMON 会话,你必须指定 RoMON 代理和所需的路由器地址。RoMON 代理必须保存在 WinBox 的 Managed routers 列表中才能成功连接:
winbox.exe --romon 192.168.88.1 6C:3B:6B:48:0E:8B admin ""
通过 WinBox GUI 连接 RoMON
观看视频教程。