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は文書用アドレスに置き換えたから真に受けないように。

終わり

気が向いた頃に結果をまとめる予定。