VPNで、192.168.40.0/24 を使っているが、家のどのマシンからもRaspberry Pi zero 2 W(以下ラズパイ)に繋がるように、次の様なルーティングにしている。
1 2 3 4 5 6 7 8 |
noizumi@rx7pi:~ $ netstat -nr カーネルIP経路テーブル 受信先サイト ゲートウェイ ネットマスク フラグ MSS Window irtt インタフェース 0.0.0.0 192.168.42.129 0.0.0.0 UG 0 0 0 usb0 192.168.11.0 192.168.40.254 255.255.255.0 UG 0 0 0 wg0 192.168.30.0 0.0.0.0 255.255.255.0 U 0 0 0 wg0 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 0 0 0 usb0 |
しかし、家に帰ると、WiFiが繋がり、192.168.11.0/24 のルーティングが非常にマズい事になってしまうので、削除して、家のWiFiのルーティングを適用したい。
前まで、ネットワークに接続したら、/etc/network/if-up.d とかにスクリプト入れてたら動いていたのだが、Raspberry Pi の buster では、動かなくなっている。
色々探してみたけど、「ifup,ifdownは使えなくなった」という情報しか出てこず、ルーティングを自動変更する手段が分からない。
「raspberry pi run script when connected to wifi」でググれカスしてみると、
https://raspberrypi.stackexchange.com/questions/120705/run-script-when-pi-connects-to-any-network
なるものがあり、参考にして、次の /lib/dhcpcd/dhcpcd-hooks/05-changeroute.sh を作成。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#!/bin/sh do_bound(){ if [ "$new_network_number" = "192.168.11.0" ]; then ip route del 192.168.11.0/24 fi } do_expire(){ if [ "$old_network_number" = "192.168.11.0" ]; then ip route add 192.168.11.0/24 via 192.168.40.254 dev wg0 fi } if [ "$ifwireless" = "1" ]; then case "$reason" in BOUND) do_bound;; EXPIRE) do_expire;; esac fi |
家のWiFi 接続時に、192.168.11.0/24 dev wg0 を削除して、wpa_supplicant がネットワークを設定し、WiFi が切れた時は、192.168.11.0/24 dev wg0 を設定するって感じで、うまく動いている。
WiFi に接続したらこんな感じ
1 2 3 4 5 6 7 8 9 |
noizumi@rx7pi:~ $ netstat -nr カーネルIP経路テーブル 受信先サイト ゲートウェイ ネットマスク フラグ MSS Window irtt インタフェース 0.0.0.0 192.168.42.129 0.0.0.0 UG 0 0 0 usb0 0.0.0.0 192.168.11.1 0.0.0.0 UG 0 0 0 wlan0 192.168.11.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0 192.168.30.0 0.0.0.0 255.255.255.0 U 0 0 0 wg0 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 0 0 0 usb0 |
しかし、英語情報に当たらないと分からないとは、困ったもんですなあ。 🙁