とある作業でSNMP接続を試したかったけど手持ちの環境でSNMPサーバーが無かったので、Arista EOSのコンテナ版cEOS-labでSNMPサーバーを有効にして外部SNMPマネージャー(snmpwalk
)から値を取得できるようにしてみた。
Linuxサーバーに入れても良かったけど、仕事ではAWS上のCisco CSR(Cloud Service Router)で同じことをしたため、手元のcEOSでも同じことできるのかなーと試してみた。
SNMP用161/UDPのpublish設定
SNMPエージェントは161/UDPを使用するため、Dockerコンテナの起動オプションで161/UDPをpublishするように以下のオプションでコンテナ起動。
UDPの場合のpublish設定はポート番号の後ろに/udp
を付与する。
docker run --name=ceos-snmp \ --privileged \ -p 45022:22 \ -p 45161:161/udp \ -e CEOS=1 \ -e container=docker \ -e EOS_PLATFORM=ceoslab \ -e SKIP_ZEROTOUCH_BARRIER_IN_SYSDBINIT=1 \ -e ETBA=1 \ -e INTFTYPE=eth \ -d \ ceos:4.21.12M /sbin/init
以下実行結果。
[zaki@cloud-dev image]$ docker run --name=ceos-snmp \ > --privileged \ > -p 45022:22 \ > -p 45161:161/udp \ > -e CEOS=1 \ > -e container=docker \ > -e EOS_PLATFORM=ceoslab \ > -e SKIP_ZEROTOUCH_BARRIER_IN_SYSDBINIT=1 \ > -e ETBA=1 \ > -e INTFTYPE=eth \ > -d \ > ceos:4.21.12M /sbin/init 0380ca057b80ce29cb37d2b469573d095e44ab4fbf31c085cf5986186ce99446
起動したらコンテナのシェルを起動して初期設定(ユーザー作成)を行う。 (前回と同じ内容)
[zaki@cloud-dev image]$ docker exec -it ceos-snmp bash bash-4.3# Cli 0380ca057b80>enable localhost#configure localhost(config)#username lab-user privilege 15 secret p@ssword localhost(config)#exit localhost#exit bash-4.3# exit exit [zaki@cloud-dev image]$ [zaki@cloud-dev image]$ ssh lab-user@localhost -p 45022 The authenticity of host '[localhost]:45022 ([::1]:45022)' can't be established. ECDSA key fingerprint is SHA256:BVnPKEnu8jkuxHBJxLP225oto+2nI4UWSUe6Km3A4us. ECDSA key fingerprint is MD5:f6:8d:f5:4b:ca:ed:00:b2:83:a4:a4:50:81:38:50:02. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '[localhost]:45022' (ECDSA) to the list of known hosts. Password: localhost>en localhost#
※ SNMPの有効化だけであれば、機器設定用のユーザー作ってsshしなくてもdocker exec -it
で入った状態でCli
してenable
してconfigure
のあとに以下の作業は可能。
SNMPの有効化
SNMPの状態を確認。
(この表示だと有効なんだか無効なんだか。。。)
localhost>show snmp SNMP agent enabled in VRFs: default Transmit message maximum size: 65536 SNMP agent disabled: no communities or users configured
SNMPエージェントを有効にする。
localhost>enable localhost#configure localhost(config)# localhost(config)#snmp-server community public ro
状態を確認。
(478
となっているパケット数は状況によって増える)
localhost(config)#show snmp 478 SNMP packets input 0 Bad SNMP version errors 0 Unknown community name 0 Illegal operation for community name supplied 0 Encoding errors 478 Number of requested variables 0 Number of altered variables 0 Get-request PDUs 478 Get-next PDUs 0 Set-request PDUs 478 SNMP packets output 0 Too big errors 0 No such name errors 0 Bad value errors 0 General errors 478 Response PDUs 0 Trap PDUs Access Control 0 Users 0 Groups 0 Views SNMP logging: disabled SNMP agent enabled in VRFs: default Transmit message maximum size: 65536
show running-config
でも確認。
(include
についてはこちら)
localhost#show running-config | include snmp snmp-server community public ro
ちなみに(docker exec -it
でbashシェルを起動して)ポートのListen状態を確認するとこんな感じ。
bash-4.3# ss -anpu State Recv-Q Send-Q Local Address:Port Peer Address:Port UNCONN 0 0 *:161 *:* users:(("snmpd",pid=2270,fd=7)) UNCONN 0 0 :::161 :::* users:(("snmpd",pid=2270,fd=10))
SNMPエージェントを無効にするには、有効にした時のコマンドの頭にno
を付けて実行すれば良い。(SNMPに限らず機能共通)
localhost(config)#no snmp-server community public ro
snmpwalkの実行
インストール
yum
で入れる場合はnet-snmp-utils
パッケージをインストール。(net-snmp
だと入らない)
apt
の場合はsnmp
パッケージで入る。
実行
デフォルトは161/UDPを使用するけど今回は45161/UDPに変更しているので、ホスト名の後ろにポート番号を明示する。
[zaki@cloud-dev ~]$ snmpwalk -v1 -c public localhost:45161 SNMPv2-MIB::sysDescr.0 = STRING: Linux localhost 3.10.0-1160.11.1.el7.x86_64 #1 SMP Fri Dec 18 16:34:56 UTC 2020 x86_64 SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.30065.1.2600 DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (81009) 0:13:30.09 SNMPv2-MIB::sysContact.0 = STRING: SNMPv2-MIB::sysName.0 = STRING: SNMPv2-MIB::sysLocation.0 = STRING: SNMPv2-MIB::sysServices.0 = INTEGER: 14 SNMPv2-MIB::sysORLastChange.0 = Timeticks: (18932) 0:03:09.32 SNMPv2-MIB::sysORID.1 = OID: TCP-MIB::tcpMIB SNMPv2-MIB::sysORID.2 = OID: UDP-MIB::udpMIB SNMPv2-MIB::sysORID.3 = OID: SNMPv2-MIB::snmpMIB SNMPv2-MIB::sysORID.4 = OID: SNMP-VIEW-BASED-ACM-MIB::vacmBasicGroup : : SNMPv2-SMI::mib-2.47.1.1.1.1.2.1 = STRING: "cEOSLab" SNMPv2-SMI::mib-2.47.1.1.1.1.2.1100004000 = STRING: "Chip Container" SNMPv2-SMI::mib-2.47.1.1.1.1.2.1100006000 = STRING: "Sensor Container" SNMPv2-SMI::mib-2.47.1.1.1.1.2.1100140000 = STRING: "Port Container" SNMPv2-SMI::mib-2.47.1.1.1.1.2.1100300000 = STRING: "Xcvr Slot Container" SNMPv2-SMI::mib-2.47.1.1.1.1.2.1100600000 = STRING: "Fan Tray Slot Container" SNMPv2-SMI::mib-2.47.1.1.1.1.2.1100700000 = STRING: "Power Supply Slot Container" : :
こんな感じで情報取得できている。
今回はここまで。
関連ドキュメント
試した後にドキュメント探したらあった。
(memo)ESXiのSNMPエージェント
cEOSでお試ししたあとに「もしや…」と思って見てみたら、ホストの「管理」->「サービス」のリストに「SNMPサーバ」ってあった。ESXiでも使えそう…