見出し画像

「体験しながら学ぶ ネットワーク技術入門」のテストネットワークを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を受信できるようになるはずです。

ここから先は

54字
ネットワークエンジニアに必要なネットワーク管理の技術を習得するための方法についての情報を発信します。 マガジンを買った方からの質問は要望は歓迎します。

ネットワークエンジニアになりたい人に役立つかもしれない情報を発信するためのマガジンです。 何かの資格試験に合格するための役には立たないとお…

期間限定!Amazon Payで支払うと抽選で
Amazonギフトカード5,000円分が当たる

開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。