OpenVPN 终止开关不起作用

OpenVPN 终止开关不起作用

我需要一个终止开关,如果 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.shhttps://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 {}   \;

这会降低全部接口,除了这是你的电脑工作所必需的。

相关内容