「体験しながら学ぶ ネットワーク技術入門」のテストネットワークをTWSNMP FCで管理する方法
はじめに
「体験しながら学ぶネットワーク管理技術入門」
のテストネットワークをTWSNMP FCで管理できるようにする方法の解説です。
自宅側のネットワークにTWSNMP FCを設置
自宅側のスイッチとルーターをSNMP、NetFlow、syslog、lldp対応ソフトをインストール
を行います。
のような構成になります。
必要な環境
この本で紹介されているWSL2が動作する Windows11のパソコン、MultipassかUTMが動作するMac、Linuxが動作するPCがあればOKです。メモリー8GBあればOKだと思います。
本にも紹介されていますが、
WSL2 Ubuntuをインストールする方法は
などをみてください。
後々、UbuntuのIPアドレスが必要になるので、ここで確認しておくとよいです。
$ ip a
のコマンドです。
Macの場合は
本で紹介されているMultipass
です。本では、home brewでインストールする方法が紹介されていますが、現在は、Mac版のインストラーが用意されていて簡単にインストールできます。
または、
でも構築できます。
LinuxのPCは、UbuntuからDebianを使ってください。
テストネットワーク環境のセットアップ
本に紹介されている方法でセットアップします。
からファイルはダウンロードできます。
Kindle版の試し読みの範囲にセットアップ方法が記載されています。
ダウンロードしたファイルの中のspec_01.yamlを変更していきます。
何か好きなディレクトリ(twsnmpとか)を作ってspec_01.yamlをspec.yamlという名前でコピーします。
自宅側にTWSNMP FCを追加
自宅側にTWSNMP FCを追加します。
node定義
spec.yamlのnodes-cl3の定義の後に
- name: twsnmp
net_base: bridge
image: twsnmp/twsnmpfc
interfaces:
- { name: eth1, type: direct, args: sw1#port5 }
mounts:
- /mnt/c/tinet:/tmp/tinet
- /mnt/c/tinet/twsnmp/datastore:/datastore
docker_run_extra_args: -p 8080:8080
を追加します。差分を見やすくすると
Apple CPUのMacの環境の場合は、
- name: twsnmp
net_base: bridge
image: twsnmp/twsnmpfc:arm64_v1.45.0
interfaces:
- { name: eth1, type: direct, args: sw1#port5 }
mounts:
- /mnt/c/tinet:/tmp/tinet
- /home/ubuntu/twsnmp:/datastore
docker_run_extra_args: -p 8080:8080
です。ARM64版のDockerイメージを使います。
ネットワークをbridgeにするのと8080番ポートを公開するのがポイントです。
node設定
node_configs-cl3のの定義の後に
- name: twsnmp
cmds:
- cmd: ip addr add 192.168.11.200/24 dev eth1
- cmd: apk update
- cmd: apk add ethtool
- cmd: ethtool -K eth1 tx off rx off tso off gso off gro off
- cmd: route add -net 10.0.0.0/8 gw 192.168.11.254
を追加します。
IPアドレスの設定、ethtoolをインストールしたあと、ethtoolでLANポートのoffloadをすべてoffにします。こうしないとルータとSNMPの通信でできません。これでTWSNMP FCのノードは追加できましたが、接続先のスイッチ(sw1)にポートがないので、このままではエラーになります。
自宅側のルーター(rt1)の変更
元のspec_01.yamlで利用されているルーターのDcokerイメージには、snmpdなどのネットワーク管理に必要なソフトがインストールされていません。インストールしたDcokerイメージを作る必要があります。
tinetにはbuildコマンドがあり、設定から必要なイメージをビルドできます。
node定義
- name: rt1
image: frr-iptables-dnsmasq__nm
buildfile: Dockerfile_rt1
interfaces:
- { name: net0, type: direct, args: rt2#net0 }
- { name: net1, type: direct, args: sw1#port4 }
dns: 10.1.2.53
mounts: /mnt/c/tinet:/tmp/tinet
のようにします。差分は
です。imageの名前とbuildfileでビルドするDockerfileを指定します。
Dockerfile
ビルドするDockerfileをspec.yamlと同じディレクトリにDockerfile_rt1として作成します。内容は
FROM sphalerite1313/frr-iptables-dnsmasq
RUN apt update && apt install -y snmpd lldpd softflowd frr-snmp snmp rsyslog
Apple CPU のMac環境では
FROM sphalerite1313/frr-iptables-dnsmasq_arm
RUN apt update && apt install -y snmpd lldpd softflowd frr-snmp snmp rsyslog
です。元(FROM)のイメージをARM用に変えます。
必要なパッケージをインストールしています。
node設定
node_config-rt1の最後の方に、
- cmd: bash -c "echo -e '*.* @192.168.11.200' > /etc/rsyslog.d/60-twsnmp.conf"
- cmd: /etc/init.d/rsyslog start
- cmd: bash -c "echo -e 'agentaddress udp:161' > /etc/snmp/snmpd.conf"
- cmd: bash -c "echo -e 'master agentx' >> /etc/snmp/snmpd.conf"
- cmd: bash -c "echo -e 'view all included .1' >> /etc/snmp/snmpd.conf"
- cmd: bash -c "echo -e 'rocommunity public default -V all' >> /etc/snmp/snmpd.conf"
- cmd: bash -c "echo -e 'sysServices 72' >> /etc/snmp/snmpd.conf"
- cmd: bash -c "echo -e 'sysLocation labo' >> /etc/snmp/snmpd.conf"
- cmd: bash -c "echo -e 'sysContact Me <me@example.org>' >> /etc/snmp/snmpd.conf"
- cmd: bash -c "echo -e 'trap2sink 192.168.11.200 trap' >> /etc/snmp/snmpd.conf"
- cmd: bash -c "echo -e 'rouser _internal' >> /etc/snmp/snmpd.conf"
- cmd: bash -c "echo -e 'createUser _internal MD5 _internalPassword DES' >> /etc/snmp/snmpd.conf"
- cmd: bash -c "echo -e 'agentSecName _internal' >> /etc/snmp/snmpd.conf"
- cmd: bash -c "echo -e 'linkUpDownNotifications yes' >> /etc/snmp/snmpd.conf"
- cmd: /usr/sbin/snmpd -LSwd -Lf /dev/null -u Debian-snmp -g Debian-snmp -I -smux -p /run/snmpd.pid
- cmd: /usr/sbin/lldpd -x
- cmd: bash -c "echo -e 'interface=net0' > /etc/softflowd/default.conf"
- cmd: bash -c "echo -e 'options=\"-n 192.168.11.200:2055 -v 10 -T ether\"' >> /etc/softflowd/default.conf"
- cmd: /etc/init.d/softflowd start
を追加します。
やっていることは
syslogサーバー(rsyslogd)を設定して起動
SNMPエージェント(snmpd)を設定して起動
lldpdをSNMPエージェント機能付きで起動
softflowdをIPFIXモードに設定して起動(インターネット側をモニタ)
です。
- cmd: bash -c "echo -e 'dhcp-range=192.168.11.101,192.168.11.253,1h ' >> /etc/dnsmasq.conf"
の行は削除しておいたほうが安全です。DHCPでアドレスを割り当てる範囲からTWSNMP FCのアドレスを除外するためです。
自宅スイッチの(sw1)の変更
スイッチも同じようにネットワーク管理機能付きのイメージをビルドして使います。また、TWSNMP FCを接続するポートを増設して管理できるようにIPアドレスを設定します。
nodeの定義
nodes-sw1の定義を
- name: sw1
image: ovs_nm
buildfile: Dockerfile_ovs
interfaces:
- { name: port1, type: direct, args: cl1#net0 }
- { name: port2, type: direct, args: cl2#net0 }
- { name: port3, type: direct, args: cl3#net0 }
- { name: port4, type: direct, args: rt1#net1 }
- { name: port5, type: direct, args: twsnmp#eth1 }
dns: 127.0.0.1
mounts: /mnt/c/tinet:/tmp/tinet
のようにします。
Dockerイメージをビルドするように変更したのと、port5を増設してtwsnmpと接続しました。
Dockerfile
spec.yamlと同じディレクトリにDockerfile_ovsを作成します。
内容は
FROM sphalerite1313/ovs
RUN apt update && apt install -y snmpd lldpd softflowd snmp rsyslog
Apple CPUのMac環境では、 FROMのイメージをovs_armに変更すればよいです。
nodeの設定
node_config-sw1に
- cmd: ovs-vsctl add-port sw1 port5
- cmd: ethtool -K port5 tx off rx off tso off gso off gro off
- cmd: ip addr add 192.168.11.101/24 dev port5
- cmd: bash -c "echo -e '*.* @192.168.11.200' > /etc/rsyslog.d/60-twsnmp.conf"
- cmd: /etc/init.d/rsyslog start
- cmd: bash -c "echo -e 'agentaddress udp:161' > /etc/snmp/snmpd.conf"
- cmd: bash -c "echo -e 'master agentx' >> /etc/snmp/snmpd.conf"
- cmd: bash -c "echo -e 'view all included .1' >> /etc/snmp/snmpd.conf"
- cmd: bash -c "echo -e 'rocommunity public default -V all' >> /etc/snmp/snmpd.conf"
- cmd: bash -c "echo -e 'sysServices 72' >> /etc/snmp/snmpd.conf"
- cmd: bash -c "echo -e 'sysLocation labo' >> /etc/snmp/snmpd.conf"
- cmd: bash -c "echo -e 'sysContact Me <me@example.org>' >> /etc/snmp/snmpd.conf"
- cmd: bash -c "echo -e 'trap2sink 192.168.11.200 trap' >> /etc/snmp/snmpd.conf"
- cmd: bash -c "echo -e 'rouser _internal' >> /etc/snmp/snmpd.conf"
- cmd: bash -c "echo -e 'createUser _internal MD5 _internalPassword DES' >> /etc/snmp/snmpd.conf"
- cmd: bash -c "echo -e 'agentSecName _internal' >> /etc/snmp/snmpd.conf"
- cmd: bash -c "echo -e 'linkUpDownNotifications yes' >> /etc/snmp/snmpd.conf"
- cmd: /usr/sbin/snmpd -LSwd -Lf /dev/null -u Debian-snmp -g Debian-snmp -I -smux -p /run/snmpd.pid
- cmd: /usr/sbin/lldpd -x
- cmd: bash -c "echo -e 'interface=net0' > /etc/softflowd/default.conf"
- cmd: bash -c "echo -e 'options=\"-n 192.168.11.200:2055 -v 10 -T ether\"' >> /etc/softflowd/default.conf"
- cmd: /etc/init.d/softflowd start
を追加します。port5を追加してIPアドレスを設定しています。syslogやsnmpdの設定と起動はルーターと同じです。NetFlowは、ルーターとの通信
をモニターしています。
テストの追加
testの最後に
- cmd: docker exec twsnmp ping -c2 192.168.11.254
- cmd: docker exec twsnmp ping -c2 10.1.3.12
を追加します。TWSNMP FCの動作確認です。
checkの実施
tinetのcheckコマンドで確認します。
#tinet check
何も表示なければ、問題なしです。接続の間違いなどを指摘してくれます。
Dockerイメージのビルド
ルーターとスイッチのDockerイメージをtinet buildコマンドでビルドします。
#tinet build | sh -x
上記はroot権限で実行していますが、sudoで実行する環境では
$tinet build | sudo sh -x
のようにshをsudoで実行します。
起動
tinetのupconfコマンドで起動します。
#tinet uoconf | sh -x
いろいろコマンドを実行してすべてのノードを起動できるはずです。
テスト
tinetのtestコマンドでテストします。
#tinet test | sh -x
PINGが実行されればOKです。
TWSNMP FCにアクセス
TWSNMP FCは、UbuntuのIPアドレスの8080番ポートからアクセスできるはずです。
WIndowsのブラウザーから
http://<UbuntuのIPアドレス>:8080でアクセスすれば
の画面が表示されるはずです。
ここまでくれば、
の「ブラウザーからアクセス」の項目から先を試して見られます。
自動発見では
アクティブモードに設定して、「自動IP範囲」のボタンを押せば、
192.168.11.0-192.168.11.254の範囲が表示されるはずです。別のアドレスが表示されるときは、何度か押してみてください。
<開始>すれば、ノードを5つ発見するはずです。sw1とrt1はSNMP対応になっているはずです。
マップ上を右クリックして「新規ネットワーク」を実行します。
sw1のアドレス192.168.11.101を入力して名前にsw1を設定して保存すれば、しばらくして、sw1のポートが表示されるはずです。
「システム設定」ー「マップ」
でsyslog,SNMP TRAP,NetFlowをONすれば、ルーターとスイッチからのログやTRAPを受信できるようになるはずです。
ここから先は
ネットワークエンジニアになりたい人に役立つかもしれない情報を発信するためのマガジンです。 何かの資格試験に合格するための役には立たないとお…
Amazonギフトカード5,000円分が当たる
開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。