ぶうの学習帳

ぶうの学習帳

サラリーマンエンジニアがIT技術について調査した内容を学習帳にまとめます

トラフィックジェネレーターが欲しい - iperf3 調査編1

高性能じゃなくてもいいので、IPの試験トラフィック流してくれるちょっとしたトラフィックジェネレーターが欲しい!

日常生活の中で度々そんな場面に遭遇しませんか?

僕は度々遭遇します。

ちょっと調べてみたところ、IPネットワークにおけるTCP/UDP/SCTPの速度試験ツールで、iperfというフリーソフトがあるらしいので試してみました。

現在の最新版はiperf3です。

ユーザマニュアルは以下のサイトに掲載されております。

https://iperf.fr/iperf-doc.php

なお、今回は以下の図内のように、clientとserverというUbuntu 18.04のlinuxマシンにiperf3をインストールして動かしてみました。

f:id:bububuu:20200514232754p:plain

事前準備

サーバ間の疎通確認

ubuntu@client:~$ ping 192.168.1.20
PING 192.168.1.20 (192.168.1.20) 56(84) bytes of data.
64 bytes from 192.168.1.20: icmp_seq=1 ttl=64 time=0.475 ms
64 bytes from 192.168.1.20: icmp_seq=2 ttl=64 time=0.473 ms
^C
--- 192.168.1.20 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1007ms
rtt min/avg/max/mdev = 0.473/0.474/0.475/0.001 ms

iperf3のインストール ※両サーバに対してインストールを行う

ubuntu@client:~$ sudo apt install iperf3
ubuntu@client:~$ iperf3 -v
iperf 3.1.3
Linux client 4.15.0-72-generic #81-Ubuntu SMP Tue Nov 26 12:20:02 UTC 2019 x86_64
Optional features available: CPU affinity setting, IPv6 flow label, TCP congestion algorithm setting, sendfile / zerocopy, socket pacing

TCPトラフィック送信

TCPトラフィックを送信してみました。

まずserver側でiperf3をサーバモードで起動します。

ubuntu@server:~$ iperf3 -s

次にclient側でiperf3をクライアントモードで起動し、疎通先にserverのIPを指定します。

ubuntu@client:~$ iperf3 -c 192.168.1.20

プロトコルを指定しない(デフォルト) = TCP

すると、下図のような感じでclient側とserver側にログが流れました。 f:id:bububuu:20200514232925p:plain

UDPトラフィック送信

続いて、UDPトラフィックを送信してみました。

先ほどと同様、まずserver側でiperf3をサーバモードで起動し、client側で以下コマンドを実行します。

ubuntu@client:~$ iperf3 -c 192.168.1.20 --udp

すると、下図のような感じでclient側とserver側にログが流れました。

SCTPトラフィック送信f:id:bububuu:20200514232948p:plain

続いて、SCTPです。

server側でiperf3をサーバモードで起動し、client側で以下コマンドを実行します。

ubuntu@client:~$ iperf3 -c 192.168.1.20 --sctp

すると、、、おや、エラーになりましたね。 f:id:bububuu:20200514233009p:plain

google先生にエラー内容を聞いてみましたが、以下サイトのように、バグっぽいです。 https://stackoverflow.com/questions/34180801/iperf3-unrecognized-option-sctp https://access.redhat.com/solutions/3482281

今後、改修されるか注目してみます

Ubuntu 16.04 LTS serverの固定IPアドレス設定方法

本記事では、Ubuntu 16.04 LTS serverのインターフェースに固定のipv4アドレスを設定した際の手順をまとめます。

図で示したように、テストサーバのens6インターフェースに「192.168.102.148」という固定IPアドレスを設定しました。

f:id:bububuu:20200509135147p:plain

なお、テストサーバは以下サイトのクラウドイメージで作成されたVMです。

Ubuntuクラウドイメージ配布先

1. 事前確認

最初にサーバのOSがUbuntu 16.04 ltsであることを確認します。

cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.6 LTS"

ubuntu 18.04に対する設定方法は異なりますので以下記事をご参照ください!

bububuu-gaku.hateblo.jp

次に、ipv4の固定アドレスを設定するIFの情報を確認します。

今はens6にIPアドレスが設定されていないことがわかります。

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc pfifo_fast state UP group default qlen 1000
    link/ether fa:16:3e:4b:77:34 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.148/24 brd 192.168.100.255 scope global ens3
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:fe4b:7734/64 scope link
       valid_lft forever preferred_lft forever
3: ens6: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether fa:16:3e:3f:ee:59 brd ff:ff:ff:ff:ff:ff

設定前のルーティングテーブルには「192.168.101.0/24」のネットワークが表示されていないです。

$ ip r
default via 192.168.100.1 dev ens3
169.254.169.254 via 192.168.100.1 dev ens3
192.168.100.0/24 dev ens3  proto kernel  scope link  src 192.168.100.148

疎通確認先とのpingも無応答です。

$ ping 192.168.102.10
PING 192.168.102.10 (192.168.102.10) 56(84) bytes of data.
^C
--- 192.168.102.10 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 999ms

2. 設定ファイル編集

Ubuntu 16.04 LTS serverのネットワーク設定は「/etc/network/」ディレクトリの配下にある「interfaces」に記述された内容が反映されます(※)。

ls -l /etc/network/interfaces
-rw-r--r-- 1 root root 417 Apr 16 14:17 /etc/network/interfaces

ファイルの中身はこんな感じです。

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# Source interfaces
# Please check /etc/network/interfaces.d before changing this file
# as interfaces may have been defined in /etc/network/interfaces.d
# See LP: #1262951
source /etc/network/interfaces.d/*.cfg

auto ens6
iface ens6 inet static
address 192.168.102.148
netmask 255.255.255.0

以上で設定用ファイルの編集が完了しました。

(※)

デフォルトでは「/etc/network/interfaces」内の

source /etc/network/interfaces.d/*.cfg

行で、「50-cloud-init.cfg」を実行しております。

以下のように、このディレクトリ配下に、数字部が50より大きいファイルを複製し、上記のens6に関する設定を追記する形でも設定変更は可能です。

cp /etc/network/interfaces.d/50-cloud-init.cfg /etc/network/interfaces.d/99-cloud-init.cfg
$
$ ls -l /etc/network/interfaces.d/
total 8
-rw-r--r-- 1 root root 375 May  9 00:21 50-cloud-init.cfg
-rw-r--r-- 1 root root 376 May  9 04:29 99-cloud-init.cfg

(※)

3. 設定反映

設定内容を反映します。

$ shutdown -r now

設定後の確認を行います。ens6に「192.168.102.148」のipアドレスが割り振られていることが確認できます。

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc pfifo_fast state UP group default qlen 1000
    link/ether fa:16:3e:4b:77:34 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.148/24 brd 192.168.100.255 scope global ens3
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:fe4b:7734/64 scope link
       valid_lft forever preferred_lft forever
3: ens6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether fa:16:3e:3f:ee:59 brd ff:ff:ff:ff:ff:ff
    inet 192.168.102.148/24 brd 192.168.102.255 scope global ens6
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:fe3f:ee59/64 scope link
       valid_lft forever preferred_lft forever

ルーティングテーブルにも「192.168.101.0/24」が追加されています。

$ ip r
default via 192.168.100.1 dev ens3
169.254.169.254 via 192.168.100.1 dev ens3
192.168.100.0/24 dev ens3  proto kernel  scope link  src 192.168.100.148
192.168.102.0/24 dev ens6  proto kernel  scope link  src 192.168.102.148

疎通確認を行います。疎通できるようになりました。

$ ping 192.168.102.10
PING 192.168.102.10 (192.168.102.10) 56(84) bytes of data.
64 bytes from 192.168.102.10: icmp_seq=1 ttl=64 time=1.42 ms
64 bytes from 192.168.102.10: icmp_seq=2 ttl=64 time=0.671 ms
^C
--- 192.168.102.10 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.671/1.049/1.427/0.378 ms

4. おまけ

2.の設定ファイル編集時に、ens6の設定項目にgatewayとnameserversを加えることで、デフォルトゲートウェイDNSサーバを設定できます。

現在のDNSサーバの設定を確認します。

cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 192.168.100.2
search openstacklocal

以下のように設定ファイルを編集します。

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# Source interfaces
# Please check /etc/network/interfaces.d before changing this file
# as interfaces may have been defined in /etc/network/interfaces.d
# See LP: #1262951
source /etc/network/interfaces.d/*.cfg

auto ens6
iface ens6 inet static
address 192.168.102.148
netmask 255.255.255.0
gateway 192.168.102.1
dns-nameservers 8.8.8.8 8.8.4.4

設定内容を反映します。

$ shutdown -r now

以下の通り、ルーティングテーブルに「192.168.102.1」のデフォルトルートが追加されました。

$ ip r
default via 192.168.102.1 dev ens6 onlink
169.254.169.254 via 192.168.100.1 dev ens3
192.168.100.0/24 dev ens3  proto kernel  scope link  src 192.168.100.148
192.168.102.0/24 dev ens6  proto kernel  scope link  src 192.168.102.148

また、ens6のDNSサーバ設定部が更新されていることも確認できます。

cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 192.168.100.2
nameserver 8.8.8.8
nameserver 8.8.4.4
search openstacklocal

Ubuntu 18.04 LTS serverの固定IPアドレス設定方法

本記事では、Ubuntu 18.04 LTS serverのインターフェースに固定のipv4アドレスを設定した際の手順をまとめます。

図で示したように、テストサーバのens6インターフェースに「192.168.101.160」という固定IPアドレスを設定しました。

f:id:bububuu:20200508224725p:plain

なお、テストサーバは以下サイトのクラウドイメージで作成されたVMです。

Ubuntuクラウドイメージ配布先

1. 事前確認

最初にサーバのOSがUbuntu 18.04 ltsであることを確認します。

cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.3 LTS"

ubuntu 16.04に対する設定方法は異なりますのでこちらをご参照ください!

bububuu-gaku.hateblo.jp

次に、ipv4の固定アドレスを設定するIFの情報を確認します。

今はens6にIPアドレスが設定されていないことがわかります。

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc fq_codel state UP group default qlen 1000
    link/ether fa:16:3e:23:65:59 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.160/24 brd 192.168.100.255 scope global dynamic ens3
       valid_lft 85900sec preferred_lft 85900sec
    inet6 fe80::f816:3eff:fe23:6559/64 scope link
       valid_lft forever preferred_lft forever
3: ens6: <BROADCAST,MULTICAST> mtu 1450 qdisc noop state DOWN group default qlen 1000
    link/ether fa:16:3e:0e:44:bb brd ff:ff:ff:ff:ff:ff

設定前のルーティングテーブルには「192.168.101.0/24」のネットワークが表示されていないです。

$ ip route
default via 192.168.100.1 dev ens3 proto dhcp src 192.168.100.160 metric 100
169.254.169.254 via 192.168.100.1 dev ens3 proto dhcp src 192.168.100.160 metric 100
192.168.100.0/24 dev ens3 proto kernel scope link src 192.168.100.160

疎通確認先とのpingも無応答です。

$ ping 192.168.101.10
PING 192.168.101.10 (192.168.101.10) 56(84) bytes of data.
--- 192.168.101.10 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3054ms

2. 設定ファイル作成

Ubuntu 18.04 LTS serverのネットワーク設定は「/etc/netplan/」ディレクトリの配下にある「XX-cloud-init.yaml」内の情報が反映されます。

XXの部分には2桁の数字が入り、複数のyamlファイルが同時に存在する場合は、XXが大きい方のファイル内の設定情報が反映されます。

イメージからOSを展開した場合、デフォルトの設定ファイルとしてXXが50のファイルが用意されています。

ls -l /etc/netplan/
total 4
-rw-r--r-- 1 root root 481 May  7 23:07 50-cloud-init.yaml

ファイルの中身はこんな感じです。

cat /etc/netplan/50-cloud-init.yaml
# This file is generated from information provided by the datasource.  Changes
# to it will not persist across an instance reboot.  To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    ethernets:
        ens3:
            dhcp4: true
            match:
                macaddress: fa:16:3e:23:65:59
            set-name: ens3
    version: 2

上記ファイルを直接編集しても固定ipの設定は可能ですが、僕はファイルのバックアップも兼ねて、デフォルトのファイルを同じディレクトリにコピーし、50より大きい数字にファイル名をリネームします。

cp /etc/netplan/50-cloud-init.yaml /etc/netplan/99-cloud-init.yaml
$
$ ls -l /etc/netplan/
total 8
-rw-r--r-- 1 root root 481 May  7 23:07 50-cloud-init.yaml
-rw-r--r-- 1 root root 481 May  7 23:24 99-cloud-init.yaml

以上で設定用ファイル「99-cloud-init.yaml」を作成できました。

3. 設定ファイル編集

続いて、作成した設定用ファイル「99-cloud-init.yaml」を編集していきます。

設定のポイントは以下の通りです。 - 設定内容:固定ipv4アドレス - 対象IF:ens6 - ネットワークアドレス:192.168.101.160/24

こちらの内容を以下のように、設定用ファイルに追記します。

# This file is generated from information provided by the datasource.  Changes
# to it will not persist across an instance reboot.  To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    ethernets:
        ens3:
            dhcp4: true
            match:
                macaddress: fa:16:3e:23:65:59
            set-name: ens3
        ens6:   
            dhcp4: false
            addresses: [192.168.101.160/24]
            optional: true
    version: 2

4. 設定反映

設定内容を反映します。

$ netplan apply

※上記コマンドの代わりにサーバを再起動しても設定が反映されます。

設定後の確認を行います。ens6にipアドレスが割り振られていることが確認できます。

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc fq_codel state UP group default qlen 1000
    link/ether fa:16:3e:23:65:59 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.160/24 brd 192.168.100.255 scope global dynamic ens3
       valid_lft 86093sec preferred_lft 86093sec
    inet6 fe80::f816:3eff:fe23:6559/64 scope link
       valid_lft forever preferred_lft forever
3: ens6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc fq_codel state UP group default qlen 1000
    link/ether fa:16:3e:0e:44:bb brd ff:ff:ff:ff:ff:ff
    inet 192.168.101.160/24 brd 192.168.101.255 scope global ens6
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:fe0e:44bb/64 scope link
       valid_lft forever preferred_lft forever

ルーティングテーブルにも「192.168.101.0/24」が追加されています。

$ ip r
default via 192.168.100.1 dev ens3 proto dhcp src 192.168.100.160 metric 100
169.254.169.254 via 192.168.100.1 dev ens3 proto dhcp src 192.168.100.160 metric 100
192.168.100.0/24 dev ens3 proto kernel scope link src 192.168.100.160
192.168.101.0/24 dev ens6 proto kernel scope link src 192.168.101.160

疎通確認を行います。疎通できるようになりました。

$ ping 192.168.101.10
PING 192.168.101.10 (192.168.101.10) 56(84) bytes of data.
64 bytes from 192.168.101.10: icmp_seq=1 ttl=64 time=1.48 ms
64 bytes from 192.168.101.10: icmp_seq=2 ttl=64 time=0.708 ms

5. おまけ

3.の設定ファイル編集時に、ens6の設定項目にgatewayとnameserversを加えることで、デフォルトゲートウェイDNSサーバを設定できます。

現在のDNSサーバの設定を確認します。

$ systemd-resolve --status
~~中略~~
Link 3 (ens6)
      Current Scopes: none
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no

以下のように設定ファイルを編集します。

# This file is generated from information provided by the datasource.  Changes
# to it will not persist across an instance reboot.  To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    ethernets:
        ens3:
            dhcp4: true
            match:
                macaddress: fa:16:3e:23:65:59
            set-name: ens3
        ens6:
            dhcp4: false
            addresses: [192.168.101.160/24]
            gateway4: 192.168.100.1
            nameservers:
                addresses: [8.8.8.8, 8.8.4.4]
            optional: true
    version: 2

設定内容を反映します。

$ netplan apply

以下の通り、ルーティングテーブルに「192.168.101.1」のデフォルトルートが追加されました。

$ ip r
default via 192.168.101.1 dev ens6 proto static
default via 192.168.100.1 dev ens3 proto dhcp src 192.168.100.160 metric 100
169.254.169.254 via 192.168.100.1 dev ens3 proto dhcp src 192.168.100.160 metric 100
192.168.100.0/24 dev ens3 proto kernel scope link src 192.168.100.160
192.168.101.0/24 dev ens6 proto kernel scope link src 192.168.101.160

また、ens6のDNSサーバ設定部が更新されていることも確認できます。

$ systemd-resolve --status
~~中略~~
Link 3 (ens6)
      Current Scopes: DNS
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
         DNS Servers: 8.8.8.8
                      8.8.4.4

はじめまして

はじめまして。

通信系企業に勤務している、東京都在住のサラリーマンです。

この記事では、僕の簡単なプロフィールを紹介します。

 

家族構成

夫(32)会社員

妻(34)会社員(育休中)

娘(3)

息子(0)

猫(8) 

 

僕の業務内容

冒頭でも触れましたが、僕は通信系の企業に勤務しています。

日々の業務では、IT技術について調査したり、実際に検証を通じて評価しています。

検証環境は物理マシン、Openstack、KubernetesなどにLinuxサーバを構築します。

構築した環境上で、ソフトウェア検証を行っています。

 

本ブログでは

本ブログでは、僕が日々の業務を通じて学習したIT技術の知識を、備忘録もかねて、記事にまとめていく予定です。

自分の知識の整理や保管が主な目的ですが、このブログが皆さんの「困った」を解決する一助となれば幸いです。