我使用以下方式设置了 OpenVPN 服务器openvpn-安装。我希望客户端能够连接到 VPN 服务器,但任何针对互联网而不是 VPN 本地网络的流量都应该被阻止。
我已经看到许多解决方案提议添加push
命令来server.conf
要求客户端默认使用自己的网络进行互联网流量,但是这些请求可能会被客户端忽略 - 这不是我想要的。
我只希望 VPN 客户端能够访问本地 VPN 网络(在10.8.0.0/24
),VPN 服务器应拒绝所有其他流量,并且客户端应使用自己的网络。
如何强制阻止来自 VPN 客户端的互联网流量?
答案1
这可以通过使用来实现iptables
,通过阻止从 OpenVPN 网络接口到具有互联网访问的网络接口的流量。
openvpn-安装创建一些iptables
配置文件来为您管理规则。
以下说明假定:
tun0
是 OpenVPN 的网络接口eth0
是可以访问互联网的网络接口
清洁初始规则
首先,我们需要通过运行以下命令禁用 openvpn-install 加载的当前规则:
systemctl stop iptables-openvpn
配置文件
注意:使用DROP
代替REJECT
也是有效的,只是不会向 VPN 客户端返回错误。请参阅iptables 手册页了解更多信息。
添加 openvpn 规则.sh
在 中/etc/iptables/add-openvpn-rules.sh
,将以下行从:
iptables -I FORWARD 1 -i tun0 -o eth0 -j ACCEPT
到:
iptables -I FORWARD 1 -i tun0 -o eth0 -j REJECT
rm-openvpn-规则.sh
在 中/etc/iptables/rm-openvpn-rules.sh
,将以下行从:
iptables -D FORWARD -i tun0 -o eth0 -j ACCEPT
到:
iptables -D FORWARD -i tun0 -o eth0 -j REJECT
应用更改
运行以下命令,您的更改将被保存并生效:
systemctl start iptables-openvpn
分割隧道
然后,可以使用将路由推送到 VPN 客户端来请求它们通过自己的网络发送互联网流量。以下是我添加到 OpenVPN 文件中server.conf
以实现此目的的行(我的 VPN 网络位于10.8.0.0/24
):
push "route 10.8.0.0 255.255.255.0 vpn_gateway"
push "route 0.0.0.0 0.0.0.0 net_gateway"