車載のRaspberry Pi Zero 2 W(以降rx7pi)が、家のWiFiに繋がってる時に通信が遅くてしょうがない。
1 2 3 4 5 6 7 8 9 10 |
noizumi@rx7pi:~ $ route -n カーネルIP経路テーブル 受信先サイト ゲートウェイ ネットマスク フラグ Metric Ref 使用数 インタフェース 0.0.0.0 192.168.42.129 0.0.0.0 UG 100 0 0 usb0 0.0.0.0 192.168.11.1 0.0.0.0 UG 600 0 0 wlan0 0.0.0.0 192.168.44.1 0.0.0.0 UG 750 0 0 bnep0 192.168.11.0 0.0.0.0 255.255.255.0 U 600 0 0 wlan0 192.168.40.0 0.0.0.0 255.255.255.0 U 0 0 0 wg0 192.168.42.0 0.0.0.0 255.255.255.0 U 100 0 0 usb0 192.168.44.0 0.0.0.0 255.255.255.0 U 750 0 0 bnep0 |
まあ、原因ははっきりしていて、ssh でログインする時に、WiFiのIPアドレスで繋ぐと応答は速いけど、パッケージ更新とかやると、metric の低い順のネットワークデバイスで通信するので、usb0 = povo 2.0 128kbps 通信となってしまう為だ。
rx7pi は dpcpcd ではなく、NetworkManager で通信を管理してるので、設定状況は次の通り。
1 2 3 4 5 6 7 8 |
noizumi@rx7pi:~ $ nmcli dev status DEVICE TYPE STATE CONNECTION usb0 ethernet 接続済み 有線接続 1 wlan0 wifi 接続済み aterm-f88921-g XX:XX:XX:XX:XX:XX bt 接続済み ASUS_X01BDA ネットワーク wg0 wireguard 接続済み (外部) wg0 p2p-dev-wlan0 wifi-p2p 切断済み -- lo loopback 管理無し -- |
100 usb0
600 wlan0
750 bluetooth
という順で優先されるけど、usb0 と wlan0 を入れ替えたいので、ちょこっと検索。
ネットワーク設定nmcli コマンドでルーティングメトリックを設定します。ルーティングメトリックは値が小さいほど優先順位が高いため、主回線の soracom を 500、副回線の ntt を 700 に設定します。次のコマンドを実行してください。ターミナル
sudo nmcli c m soracom ipv4.route-metric 500
sudo nmcli c m ntt ipv4.route-metric 700sudo nmcli c down soracom
sudo nmcli c down nttsudo nmcli c up soracomsudo nmcli c up ntt
情報源: ラズパイ1個で2個の4GPiを同時使用する際の、LTE回線自動切換え #RaspberryPi – Qiita
パラメータが省略してあるので、分かり辛いが、 c = connection、m = modify か。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
noizumi@rx7pi:~ $ sudo nmcli c m "有線接続 1" ipv4.route-metric 600 noizumi@rx7pi:~ $ sudo nmcli c m "aterm-f88921-g" ipv4.route-metric 100 noizumi@rx7pi:~ $ sudo nmcli c down "有線接続 1"; sudo nmcli c up "有線接続 1" noizumi@rx7pi:~ $ sudo nmcli c down "aterm-f88921-g"; sudo nmcli c up "aterm-f88921-g" noizumi@rx7pi:~ $ route -n カーネルIP経路テーブル 受信先サイト ゲートウェイ ネットマスク フラグ Metric Ref 使用数 インタフェース 0.0.0.0 192.168.11.1 0.0.0.0 UG 100 0 0 wlan0 0.0.0.0 192.168.42.129 0.0.0.0 UG 600 0 0 usb0 0.0.0.0 192.168.44.1 0.0.0.0 UG 750 0 0 bnep0 192.168.11.0 0.0.0.0 255.255.255.0 U 100 0 0 wlan0 192.168.40.0 0.0.0.0 255.255.255.0 U 0 0 0 wg0 192.168.42.0 0.0.0.0 255.255.255.0 U 600 0 0 usb0 192.168.44.0 0.0.0.0 255.255.255.0 U 750 0 0 bnep0 |
よし、イケた。
後は、WiFi接続時に VPN のwireguard を再接続するように設定する。
1 2 3 4 5 |
#!/bin/bash if [ "$1" = "wlan0" ]; then systemctl restart wg-quick@wg0.service fi |
$2に up とか down が入ってくるようだが、どの道VPNを再起動して良い状況なので、判別せず。
実行属性つけておくのを忘れずに。
1 |
noizumi@rx7pi:/etc/NetworkManager/dispatcher.d $ sudo chmod +x wg-restart |