MOP:Cisco路由器不为人知的二层管理协议

前几年由于RouterOS的bug实在太多,我一怒之下把它们都换成了Cisco ISR1000和CSR1000v。换了以后我一直很怀念RouterOS的MAC Winbox、MAC Telnet的功能:无需console线,找个端口网线捅上去,打开Winbox就能自动发现,点击连接就能开始配置了。这个功能只需要二层通,所以甭管IP配没配,只要端口没关,路由器上没有奇怪的交换芯片ACL,这个功能总是可以用。虽然新路由器都逐渐配备了USB串口,并且我一直都随身带串口线,但是这个只需要网线就能配置的功能我还是很想要。

于是今天在互联网上闲逛的时候我发现,其实Cisco路由器(IOS和IOS XE)确实支持一个二层的远程终端功能。而且这个协议还不是什么新东西,它在八十年代就被设计出来了,IOS也是老早就有了支持,甚至很长一段时间以来它还是默认启用的。直至最新的IOS XE 17.2,这个协议仍然能用!

那么,让我来给大家介绍一下MOP(Maintenance Operation Protocol,直译为“运维协议”)。MOP一开始是设计给VMS系统用的,功能很多,例如远程关机,远程装软件等等。Cisco只实现了远程终端一个功能,而这也正好是我们唯一需要的。MOP数据包是直接封装到以太网帧的,所以它不需要配置IP就能工作,并且可以跨交换机/网桥工作。

让我们动手试试看吧!

MOP服务器配置

Cisco IOS和IOS XE上启用MOP只需要三步:

  • 在接口层级上打开MOP功能
  • 配置AAA和用户帐户
  • 给MOP配置对应的VTY

最小设置如下:

MOP客户端配置

这年头想找个能用的VMS系统还是有点困难的,所以我就用我的Debian 10来做个例子了。我们只需要MOP客户端,因此要把顺便安装的服务器给禁用掉:

然后我们只需要指定网卡和路由器的MAC地址就可以连接上啦:

在看到 Console connected 消息以后,可能需要按下回车让用户名提示显示出来。

注意事项

默认设置

如果一个接口是以太网(不管多快)并且接口层级的配置为空,IOS和IOS XE会默认启用MOP协议。在比较新的系统上,如果接口本来不存在,该接口被检测到时会自动生成 no mop enabled 配置。

Cisco的MOP实现的小问题

如果客户端连接的时候没有打开 -v ,会看到以下报错:

如果接口启用了MOP但是别的配置不对,则会看到这样的报错:

检查MOP都在干些什么

从MOP协议连接的用户会在  show user 里面出现:

MOP包的统计数据可以用 show interface <interface> accounting 查看:

MOP连接日志可以用 debug mop 显示:

MOP系统识别消息

接口层面上还有一个MOP相关的设置命令:

如果启用这个功能的话,IOS会隔一段时间发出一个MOP广播包来宣告自己支持MOP协议。我不觉得这个功能有任何实用价值。


参考: