Мне нужен переключатель kill, который убивает исходящие соединения, если OpenVPN не запущен, потому что иначе VPN не будет иметь никакого смысла - если он отключается и соединение установлено, мой настоящий IP освобождается.
Допустим, 1.2.3.4 - это адрес моего VPN-сервера, и это мои iptables после того, как я выполнил свой скрипт kill-switch:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT all -- 255.255.255.255 anywhere
ACCEPT all -- 192.168.0.0/16 192.168.0.0/16
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere 255.255.255.255
ACCEPT all -- 192.168.0.0/16 192.168.0.0/16
DROP all -- anywhere !1.2.3.4
Имо, это должно работать просто отлично. Но я не могу подключиться к Интернету, пока идет местный трафик. Вы видите проблему в этой конфигурации?
В этой ситуации мой компьютер - Raspberry Pi 3, и я использую OpenVPN поверх TCP, и у меня есть Fritz.Коробка подключена к WAN.
Вы видите какие-либо ошибки? Мой сценарий следующий:
#!/bin/bash
# check that OpenVPN is actually running.
running=$(ps -e | grep openvpn)
if [ $? -eq 1 ]; then
echo "No active VPN session found."
exit 1
fi
iptables -F
# Get WAN IP
WAN_IP=$(wget -q -O - http://ipecho.net/plain)
# Configure IPTable rules
# Change eth0 to wlan0 (or whatever network interface is being used) for wireless
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -d 255.255.255.255 -j ACCEPT
iptables -A INPUT -s 255.255.255.255 -j ACCEPT
iptables -A INPUT -s 192.168.0.0/16 -d 192.168.0.0/16 -j ACCEPT
iptables -A OUTPUT -s 192.168.0.0/16 -d 192.168.0.0/16 -j ACCEPT
iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables -A OUTPUT -o eth0 ! -d $WAN_IP -j DROP
Он собран из следующих источников: https://github.com/qbwaggle/vpnkillswitch/blob/master/vpnkillswitch.sh, https://www.reddit.com/r/VPN/comments/43djk3/generic_kill_switch_script_for_openvpn_lin
Я тоже пробовал эти сценарии самостоятельно, но они тоже не работают (думаю, это та же ошибка?).
Есть идеи? Заранее спасибо.