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
最小设置如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
! 配置 AAA
aaa new–model
aaa authorization exec default local
username admin privilege 15 secret super–strong–passw0rd
! 在接口上启用 MOP
interface GigabitEthernet1
no shutdown
mop enable
! 给 MOP 配置对应的 VTY
line vty 1 4
transport input mop
|
MOP客户端配置
这年头想找个能用的VMS系统还是有点困难的,所以我就用我的Debian 10来做个例子了。我们只需要MOP客户端,因此要把顺便安装的服务器给禁用掉:
1
2
|
apt install latd
systemctl disable —now latd
|
然后我们只需要指定网卡和路由器的MAC地址就可以连接上啦:
1
2
3
4
5
6
7
8
9
10
|
root@localhost:~# ip link set eth0 up
root@localhost:~# moprc -i eth0 -v 00:02:00:00:00:00
Maintenance Version: 3.0.0
Console connected (press CTRL/D when finished)
Username: admin
Password:
Router>
|
在看到 Console connected 消息以后,可能需要按下回车让用户名提示显示出来。
注意事项
默认设置
如果一个接口是以太网(不管多快)并且接口层级的配置为空,IOS和IOS XE会默认启用MOP协议。在比较新的系统上,如果接口本来不存在,该接口被检测到时会自动生成 no mop enabled 配置。
Cisco的MOP实现的小问题
如果客户端连接的时候没有打开 -v,会看到以下报错:
1
2
|
root@localhost:~# moprc -i eth0 00:02:00:00:00:01
target does not support remote console
|
如果接口启用了MOP但是别的配置不对,则会看到这样的报错:
1
2
3
4
5
6
|
root@localhost:~# moprc -i eth0 -v 00:02:00:00:00:01
Maintenance Version: 3.0.0
Console connected (press CTRL/D when finished)
Target does not respond
|
检查MOP都在干些什么
从MOP协议连接的用户会在 show user 里面出现:
1
2
3
4
5
6
|
Router#show user
Line User Host(s) Idle Location
* 0 con 0 idle 00:00:00
1 vty 0 admin idle 00:00:06 UNKNOWN
Interface User Mode Idle Peer Address
|
MOP包的统计数据可以用 show interface <interface> accounting 查看:
1
2
3
4
5
6
7
|
Router#show interfaces GigabitEthernet1 accounting
GigabitEthernet1
Protocol Pkts In Chars In Pkts Out Chars Out
Other 0 0 0 0
IP 0 0 0 0
DEC MOP 1945 116700 1899 114110
ARP 0 0 0 0
|
MOP连接日志可以用 debug mop 显示:
1
2
3
4
5
|
*Jul 16 15:20:00.096: MOP: Reserving console for 0002.0000.0002
*Jul 16 15:20:00.098: MOP(GigabitEthernet1): Got request_id message from 0002.0000.0002
*Jul 16 15:20:00.098: MOP(GigabitEthernet1): Sending sysid message to 0002.0000.0002
*Jul 16 15:20:06.427: MOP: Console released by 0002.0000.0002
|
MOP系统识别消息
接口层面上还有一个MOP相关的设置命令:
1
2
|
interface GigabitEthernet1
mop sysid
|
如果启用这个功能的话,IOS会隔一段时间发出一个MOP广播包来宣告自己支持MOP协议。我不觉得这个功能有任何实用价值。