我需要一个终止开关,如果 OpenVPN 没有运行,它会终止传出连接,因为否则 VPN 就没有任何意义 - 如果它断开连接,并且有连接,我的真实 IP 就会被释放。
假设 1.2.3.4 是我的 VPN 服务器地址,执行终止开关脚本后的 iptables 如下:
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,并且我通过 TCP 使用 OpenVPN,并且我有一个连接到 WAN 的 Fritz.Box。
你看到任何错误了吗?我的脚本如下:
#!/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_linux/
我也尝试过这些脚本,但它们也不起作用(我认为是同一个错误?)。
有什么想法吗?提前致谢。
答案1
OpenVPN 允许使用外部脚本,当以下指令时,
script-security 2
包含在客户端配置文件中。使用指令
up /path/to/executable/script
down /path/to/another/executable/script
在设置或拆除接口时运行这两个脚本。对于您的情况,向上无关紧要,但你可以使用向下当 OpenVPN 关闭时关闭所有网络接口,以确保不会通过未加密的通道泄露流量。请注意,如果 OpenVPN 挂起或断开连接,只要你的客户认为它是连接的将有无泄漏因为流量仍以加密形式(可能已压缩)发送到 OpenVPN 服务器。因此无法拦截。
这向下脚本可以写如下:
#!/bin/bash
find /sys/class/net -mindepth 1 -maxdepth 1 -exec sh -c '[ "$1" != "lo" ] && ip link set dev $(basename $1) down' something {} \;
这会降低全部接口,除了洛这是你的电脑工作所必需的。