speedtest-cliでIPoE/PPPoEの性能定点観測 - 設定
Posted on 2021/02/07(Sun) 13:45 in technical
speedtest-cliでIPoE/PPPoEの性能定点観測 - 設定
先日作った MAP-E ゲートウェイ によって、IPv4のインターネット経路が3本になったので、時間帯による性能比較をするために speedtest-cli をcronで仕込むことにしました。
環境説明
- 192.168.1.1: PPPoEで抜けていくためのゲートウェイアドレス
- 送信元アドレス範囲が
192.168.1.0/25
の場合は固定IP契約のISPを経由します - 送信元アドレス範囲が
192.168.1.128/25
の場合は非固定IP契約のISPを経由します
- 送信元アドレス範囲が
- 192.168.1.4: IPoE(MAP-E)で抜けていくためのゲートウェイアドレス
eno1
は測定用マシンの物理インターフェース名
測定用のNetwork namespaceの作成
送信元IPアドレスとデフォルトゲートウェイをそれぞれ散らすため、Network namespaceで分離します。
Note
- IPv4だけにしておきたいのでNamespace内は
disable_ipv6=1
でIPv6を無効化しています
IPoE用Network namespace
$ sudo ip netns add via-mape0
$ sudo ip link add link eno1 name eno1-via-mape0 type macvlan
$ sudo ip link set eno1-via-mape0 netns via-mape0
$ sudo ip netns exec via-mape0 ip link set up eno1-via-mape0
$ sudo ip netns exec via-mape0 ip addr add 192.168.1.194/24 dev eno1-via-mape0
$ sudo ip netns exec via-mape0 ip route add default via 192.168.1.4
$ sudo ip netns exec via-mape0 sysctl net.ipv6.conf.eno1-via-mape0.disable_ipv6=1
PPPoE(非固定IP)用Network namespace
$ sudo ip netns add via-pppoe0
$ sudo ip link add link eno1 name eno1-via-pppoe0 type macvlan
$ sudo ip link set eno1-via-pppoe0 netns via-pppoe0
$ sudo ip netns exec via-pppoe0 ip link set up eno1-via-pppoe0
$ sudo ip netns exec via-pppoe0 ip addr add 192.168.1.195/24 dev eno1-via-pppoe0
$ sudo ip netns exec via-pppoe0 ip route add default via 192.168.1.1
$ sudo ip netns exec via-pppoe0 sysctl net.ipv6.conf.eno1-via-pppoe0.disable_ipv6=1
PPPoE(固定IP)用Network namespace
$ sudo ip netns add via-pppoe1
$ sudo ip link add link eno1 name eno1-via-pppoe1 type macvlan
$ sudo ip link set eno1-via-pppoe1 netns via-pppoe1
$ sudo ip netns exec via-pppoe1 ip link set up eno1-via-pppoe1
$ sudo ip netns exec via-pppoe1 ip addr add 192.168.1.91/24 dev eno1-via-pppoe1
$ sudo ip netns exec via-pppoe1 ip route add default via 192.168.1.1
$ sudo ip netns exec via-pppoe1 sysctl net.ipv6.conf.eno1-via-pppoe1.disable_ipv6=1
speedtest-cliの設定
pythonスクリプトなので取得と実行権限だけ。
$ mkdir -p /opt/bin
$ curl -Lo /opt/bin/speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
$ chmod +x /opt/bin/speedtest-cli
実行スクリプト
/opt/dev/speedtest_timer/speedtest_timer.sh
を作成。
- 集計用ファイルはとりあえず月次
- 集計用ファイルが存在しなければ
--csv-header
でヘッダだけのファイルを作る - それぞれのNetwork namespaceでspeedtest-cliを実行して結果をファイルに追記
#!/bin/bash
PATH="/opt/dev/speedtest_timer"
FILE_PPPOE="${PATH}/$(/bin/date "+%Y%m")_pppoe_ocn_result.csv"
FILE_PPPOE_GMO="${PATH}/$(/bin/date "+%Y%m")_pppoe_gmo_result.csv"
FILE_IPOE="${PATH}/$(/bin/date "+%Y%m")_ipoe_result.csv"
if [[ ! -e ${FILE_PPPOE} ]]; then
/usr/bin/python /opt/bin/speedtest-cli --csv-header > ${FILE_PPPOE}
fi
if [[ ! -e ${FILE_PPPOE_GMO} ]]; then
/usr/bin/python /opt/bin/speedtest-cli --csv-header > ${FILE_PPPOE_GMO}
fi
if [[ ! -e ${FILE_IPOE} ]]; then
/usr/bin/python /opt/bin/speedtest-cli --csv-header > ${FILE_IPOE}
fi
/sbin/ip netns exec via-pppoe0 /usr/bin/python /opt/bin/speedtest-cli --csv >> ${FILE_PPPOE}
/sbin/ip netns exec via-pppoe1 /usr/bin/python /opt/bin/speedtest-cli --csv >> ${FILE_PPPOE_GMO}
/sbin/ip netns exec via-mape0 /usr/bin/python /opt/bin/speedtest-cli --csv >> ${FILE_IPOE}
定期実行
この程度だとsystemd.timerはちょっと面倒なので、crontabで2時間おきに実行します。
$ chmod +x /opt/dev/speedtest_timer/speedtest_timer.sh
$ sudo crontab -e
$ sudo tail -1 /var/spool/cron/crontabs/root
5 */2 * * * /opt/dev/speedtest_timer/speedtest_timer.sh
途中で結果が気になるとき用コマンド
- Shareの行が
,,
になってずれるので適当にスペースを挟むように置換 Rakuten Mobile , Inc
の','
がcolumn -t
を邪魔するので適当に置換- 日本から選択されるサーバーだと多分楽天くらいでしょ、という雑な思考。
こんな感じ。
$ cat *.csv | sed -e 's|Rakuten Mobile , Inc|Rakuten Mobile Inc|g' | sed -e 's|,,|, ,|g' | column -t -s,
Server ID Sponsor Server Name Timestamp Distance Ping Download Upload Share IP Address
24333 "Rakuten Mobile Inc" Tokyo 2021-02-07T03:05:47.475853Z 12.528808904013356 11.266 79505004.87288187 36668132.419154905 192.0.2.1
Server ID Sponsor Server Name Timestamp Distance Ping Download Upload Share IP Address
20976 GLBB Japan Tokyo 2021-02-07T03:05:25.837489Z 5.655995199339113 9.492 67140904.17977004 32070065.54473701 192.0.2.2
Server ID Sponsor Server Name Timestamp Distance Ping Download Upload Share IP Address
28910 fdcservers.net Tokyo 2021-02-07T03:05:02.623738Z 22.18603273987707 17.256 46765815.919281825 36843565.37561603 192.0.2.3
Note
IP Addressは文書用アドレスに置き換えたから真に受けないように。
終わり
気が向いた頃に結果をまとめる予定。