業界トップクラスの求人数を誇る転職エージェントPR

リクルートグループのコネクションを活かした非公開求人も充実、他にはない好条件の求人と出会える

3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「体験しながら学ぶ ネットワーク技術入門」のテスト環境でネットワーク管理も体験する方法

Posted at

はじめに

「体験しながら学ぶネットワーク管理技術入門」

のテストネットワークではネットワーク管理の体験ができません。
そこで、ネットワーク管理も体験できるようにするための方法を解説します。
具体的には

  • 自宅側のネットワークにTWSNMP FCというSNMPマネージャを設置
  • 自宅側のネットワークのルーターとスイッチにSNMPエージェント,NetFlow,syslog,LLDP対応ソフトをインストール
  • それらのソフトを設定して起動

する方法の説明です。

TWSNMP FCは、日本でよく使われているSNMPマネージャTWSNMPの後継ソフトで、コンテナでも動作します。
詳しくは、

をみてください。

必要な環境

「体験しながら学ぶネットワーク管理技術入門」で紹介されているWSL2が動作する Windows11のパソコン、MultipassかUTMが動作するMac、Linuxが動作するPCでOKです。メモリー8GBあればOKだと思います。
本にも紹介されていますが、
WSL2 Ubuntuをインストールする方法は

などをみてください。
後々、UbuntuのIPアドレスが必要になるので、ここで確認しておくとよいです。

$ip a

のコマンドです。

image.png

Macの場合は
本で紹介されているMultipass

本では、home brewでインストールする方法が紹介されていますが、現在は、Mac版のインストラーが用意されていて簡単にインストールできます。
または、UTM

でも環境をつくれると思います。

テストネットワーク環境のセットアップ

本に紹介されている方法でセットアップします。

からファイルはダウンロードできます。
Kindle版の試し読みの範囲にセットアップ方法が記載されています。
ダウンロードしたファイルの中のspec_01.yamlを変更していきます。
何か好きなディレクトリ(twsnmpとか)を作ってspec_01.yamlをspec.yamlという名前でコピーします。

自宅側にTWSNMP FCを追加

自宅側にTWSNMP FCを追加します。

twsnmpノードの定義

spec.yamlのnodes-cl3の定義の後に

spec.yaml
- 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(M1/M2/M3/M4)のMacの環境の場合は、

spec.yaml
- 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
      - /mnt/c/tinet/twsnmp/datastore:/datastore
    docker_run_extra_args: -p 8080:808

です。ARM64版のDockerイメージを使います。
ネットワークをbridgeにするのと8080番ポートを公開するのがポイントです。

tinetを使っているUbuntuに
/mnt/c/tinet/twsnmp/datastore
のディレクトリは作成しておいてください。

twsnmpノード設定

node_configs-cl3の定義の後に

spec.yaml
- 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コマンドがあり、設定から必要なイメージをビルドできます。

rt1ノードの定義

spec.yaml
 - name: rt1
-    image: sphalerite1313/frr-iptables-dnsmasq
+    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を指定します。

rt1のDockerfile

同じディレクトリにDockerfile_rt1を作成します。

Dockerfile_rt1
FROM sphalerite1313/frr-iptables-dnsmasq
RUN apt update && apt install -y snmpd lldpd softflowd frr-snmp snmp rsyslog

Apple CPU のMac環境では

Dockerfile_rt1
FROM sphalerite1313/frr-iptables-dnsmasq_arm
RUN apt update && apt install -y snmpd lldpd softflowd frr-snmp snmp rsyslog

です。元(FROM)のイメージをARM用に変えます。
ネットワーク管理に必要なパッケージを追加でインストールしています。

rt1ノードの設定

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モードに設定して起動(インターネット側をモニタ)

です。

syslog,TRAP,NetFlowの送信先は、TWSNMP FCになっています。

rt1の設定の

    - 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アドレスを設定します。

sw1ノードの定義

nodes-sw1の定義を

spec.yaml
  - name: sw1
-   image: sphalerite1313/ovs
+   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と接続しました。

sw1のDockerfile

spec.yamlと同じディレクトリにDockerfile_ovsを作成します。
内容は

FROM sphalerite1313/ovs
RUN apt update && apt install -y snmpd lldpd softflowd snmp rsyslog

sw1ノードの設定

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

起動

tinetのupconfコマンドで起動します。

#tinet uoconf | sh -x

いろいろコマンドを実行してすべてのノードを起動できるはずです。

テスト

tinetのtestコマンドでテストします。

#tinet test | sh -x

PINGが実行されればOKです。

TWSNMP FCにアクセス

TWSNMP FCは、UbuntuのIPアドレスの8080番ポートからアクセスできるはずです。
WindowsまたはMacのブラウザーから
http://:8080でアクセスすれば

image.png

の画面が表示されるはずです。

ここまでくれば、

の「ブラウザーからアクセス」の項目から先を試して見られます。
自動発見では

image.png

クティブモードに設定して、「自動IP範囲」のボタンを押せば、
192.168.11.0-192.168.11.254の範囲が表示されるはずです。別のアドレスが表示されるときは、何度か押してみてください。
<開始>すれば、ノードを5つ発見するはずです。sw1とrt1はSNMP対応になっているはずです。

マップ上を右クリックして「新規ネットワーク」を実行します。

image.png

sw1のアドレス192.168.11.101を入力して名前にsw1を設定して保存すれば、しばらくして、sw1のポートが表示されるはずです。

「システム設定」ー「マップ」

image.png

でsyslog,SNMP TRAP,NetFlowをONすれば、ルーターとスイッチからのログやTRAPを受信できるようになるはずです。

管理対象のネットワークの構成

TWSNMP FCのマップをいろいろ編集すれば

image.png

のような構成図が描けます。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Qiita Conference 2025 will be held!: 4/23(wed) - 4/25(Fri)

Qiita Conference is the largest tech conference in Qiita!

Keynote Speaker

ymrl、Masanobu Naruse, Takeshi Kano, Junichi Ito, uhyo, Hiroshi Tokumaru, MinoDriven, Minorun, Hiroyuki Sakuraba, tenntenn, drken, konifar

View event details
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?