接続しているワイヤレス ネットワークに応じて、openvpn を起動 (または停止) したいと思います。
しかしenv
、最大投稿()${SSID}
その時点で利用可能であることを示すものではありません。
凝視するネット/wpa_supplicant.sh役に立たないようなので、HiveMind に助けを求めます。
答え1
当初は接続先のSSIDに基づいてopenvpnを起動しないようにしようと考えていました。しかし、私がたどり着いたより良い解決策はIPを見る。
ディレクトリ:
postup() {
# https://stackoverflow.com/questions/845694/how-do-i-find-my-computers-ip-address-using-the-bash-shell
IP=$(ifconfig ${IFACE} | sed -n 's/.*inet addr:\([0-9.]\+\)\s.*/\1/p')
OPENVPN=$(if [[ "${IFACE}" != "tun0" && ${IP%.*} != 192.168.[13] ]]; then echo "YES"; fi)
sw-notify-send -i "${ICONS}/network-status.png" "${IFACE}" "$(ip addr show dev ${IFACE} | grep inet)"
if [[ -n ${OPENVPN} ]]; then
sw-notify-send -i "${ICONS}/network-status.png" "${IFACE}" "No IP range conflict detected for ${IP}, starting openvpn"
/etc/init.d/openvpn -D restart
fi
return 0
}
編集さらに、私はこの論理をdhcpcdフック。これを機能させるには、特別な DHCP サーバーから一意の DHCP オプション値を送信する必要があります。ここではオプション 114「default_url」を使用しています。
/etc/dhcpcd.enter-hook:
ACTION="stop"
COMMAND="openvpn.noroutes"
if [ "$reason" = "BOUND" ]; then
if [ ! -z ${new_default_url} ]; then
sw-notify-send $ifname "Detected DHCP default_url $new_default_url, skipping openvpn"
exit 1
fi
OPENVPN=$(if [[ $ifname != "tun0" && ${new_network_number%.*} != 192.168.[13] ]]; then echo "YES"; fi)
if [[ -n $OPENVPN ]]; then
sw-notify-send $ifname "IP range for $new_ip_address is free, starting openvpn"
COMMAND="openvpn"
fi
ACTION="restart"
/etc/init.d/"${COMMAND}" -D "${ACTION}"
fi