Docker環境でSNMPシミュレーション環境を構築する
この記事では、snmpsim
を使用してDocker環境でSNMPシミュレーション環境を構築する方法を紹介します。前回の記事「snmpsimを使用して環境構築 (1)」の続きとして、今回はDockerを利用した構築手順を説明します。
Dockerを使うことにより、管理者権限を使って161ポート番号も使えるようになります。
必要なファイル
以下の2つのファイルを作成します。
1. docker-compose.yml
以下は docker-compose.yml
の内容です。このファイルを使用して、snmpsim
コンテナを構築・起動します。
version: '3.8'
services:
snmpsim:
image: ghcr.io/etingof/snmpsim
container_name: snmpsim
ports:
- "161:161/udp"
volumes:
- ./data:/opt/snmpsim/data
command: >
--data-dir=/opt/snmpsim/data
--agent-udpv4-endpoint=0.0.0.0:161
FROM python:3.9-slim
# Install required dependencies
RUN pip install snmpsim
# Create a directory for SNMP simulation data
RUN mkdir -p /opt/snmpsim/data
# Set the working directory
WORKDIR /opt/snmpsim
# Expose the SNMP port
EXPOSE 161/udp
# Command to run the SNMP simulator
RUN addgroup --system snmpsim && adduser --system --ingroup snmpsim snmpsim
USER snmpsim
CMD ["snmpsim-command-responder", "--data-dir=/opt/snmpsim/data", "--agent-udpv4-endpoint=0.0.0.0:161"]
2. data
ディレクトリ
data
ディレクトリは、SNMPシミュレーションに必要なデータを格納するためのディレクトリです。このディレクトリには、SNMPエージェントが使用するMIBファイルやデータファイルを配置します。
以下のような構成にします。
data/
└── public.snmprec
public.snmprecは、SNMPエージェントが応答するデータを定義するファイルです。
前回と同様の内容を記述しています。
# sysDescr: A textual description of the entity.
1.3.6.1.2.1.1.1.0|4|Simulated SNMPv2-MIB::sysDescr
# sysObjectID: The vendor's authoritative identification of the network management subsystem.
1.3.6.1.2.1.1.2.0|6|1.3.6.1.4.1.8072.3.2.10
# sysUpTime: The time since the network management portion of the system was last re-initialized.
1.3.6.1.2.1.1.3.0|67|123456789
# sysContact: The contact information for the administrator.
1.3.6.1.2.1.1.4.0|4|admin@example.com
# sysName: An administratively-assigned name for this managed node.
1.3.6.1.2.1.1.5.0|4|SimulatedDevice
# sysLocation: The physical location of this node.
1.3.6.1.2.1.1.6.0|4|DataCenter
# ifIndex: A unique value for each interface.
1.3.6.1.2.1.2.2.1.1.1|2|1
#
# 5 - NULL
1.3.6.1.2.1.2.2.1.4.1|5|
# 64 - IpAddress
1.3.6.1.2.1.2.2.1.5.1|64|192.168.64.1
# 65 - Counter32
1.3.6.1.2.1.2.2.1.6.1|65|12345
# 66 - Gauge32
1.3.6.1.2.1.2.2.1.6.1|66|100000000
# 67 - TimeTicks
1.3.6.1.2.1.2.2.1.6.1|67|987654321
# 68 - Opaque
1.3.6.1.2.1.2.2.1.6.1|68|200000000
# 70 - Counter64
1.3.6.1.2.1.2.2.1.6.1|79|300000000
Dockerコンテナの起動
以下のコマンドを実行して、Dockerコンテナを起動します。
docker-compose up -d
このコマンドを実行すると、snmpsim
コンテナがバックグラウンドで起動します。コンテナが正常に起動したことを確認するには、以下のコマンドを実行します。
docker-compose ps
正常に起動している場合、以下のような出力が表示されます。
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
snmpsim 002-snmpsim "snmpsim-command-res…" snmpsim 46 minutes ago Up 46 minutes 0.0.0.0:161->161/udp
SNMPシミュレーションの実行
SNMPシミュレーションを実行するには、以下のコマンドを実行します。
snmpwalk -v 2c -c private localhost
このコマンドを実行すると、SNMPエージェントが応答します。SNMPシミュレーションの結果は、コンソールに表示されます。
まとめ
SNMPシミュレーション環境をDockerで構築することで、簡単にSNMPエージェントのシミュレーションが可能になります。Dockerを利用することで、環境構築が容易になり、他のプロジェクトとの依存関係を気にせずにSNMPシミュレーションを行うことができます。
この手法を利用して、SNMPエージェントのテストやデバッグを行うことができます。SNMPシミュレーション環境は、ネットワーク管理や監視の分野で非常に役立つツールですので、ぜひ活用してみてください。