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

观看视频教程。