我有一个 ubuntu 服务器 16.04 设置作为我的网络上的 OpenVPN 网关,其 IP 为 192.168.10.14,通过 tun1 出去
任何使用 192.168.10.14 作为网关的客户端都会通过 VPN 隧道发送到互联网。如果我使用 ipleak.net,则每个客户端都具有 VPN 端点的 IP,而不是我自己的 IP
我在 VPN 网关 (192.168.10.14) 上设置了 UFW,因此如果我禁用 VPN 隧道,则任何客户端都无法再访问互联网,因为 UFW 仅允许通过 tun1 进行访问
我遇到的问题是,如果我禁用 192.168.10.14 上的 VPN 隧道,那么所有浏览器都会停止工作,而这正是我想要的。如果他们 ping google.com,则没有任何响应,这正是我想要的。但如果他们 ping 一个 IP 地址,比如 8.8.8.8,那么即使网关 VPN 已关闭,ping 仍然有效。在 ping 结果中我得到
64 bytes from 8.8.8.8: icmp_seq=6 ttl=57 time=19.1 ms
From 192.168.10.14: icmp_seq=7 Redirect Host(New nexthop: 192.168.10.1)
64 bytes from 8.8.8.8: icmp_seq=7 ttl=57 time=19.0 ms
64 bytes from 8.8.8.8: icmp_seq=7 ttl=57 time=18.6 ms
其中 nexthop 中的 192.168.10.1 是我的路由器。因此,对 IP 的 ping 忽略了 VPN 盒上的防火墙规则,或者 VPN 盒出于某种原因将其直接转发到路由器
我可以在 VPN 机器上做些什么来阻止这种情况吗?或者在客户端上?我更喜欢在 VPN 机器操作系统上,我没有(或可能无法)配置客户端
VPN 盒上的转发设置
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o tun1 -j MASQUERADE
#
# For IP Forwarding through PIA
#
iptables -A FORWARD -i eth0 -o tun1 -j ACCEPT
iptables -A FORWARD -i tun1 -o eth0 -j ACCEPT
VPN Box 上的 ufw 规则
To Action From
-- ------ ----
[ 1] OpenSSH ALLOW IN Anywhere
[ 2] Anywhere ALLOW OUT Anywhere on tun1 (out)
[ 3] Anywhere ALLOW IN 192.168.10.0/24
[ 4] 1198/udp ALLOW OUT Anywhere (out)
VPN 盒上的路由(VPN 隧道启动)
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.6.10.5 128.0.0.0 UG 0 0 0 tun1
0.0.0.0 192.168.10.1 0.0.0.0 UG 0 0 0 eth0
10.6.10.1 10.6.10.5 255.255.255.255 UGH 0 0 0 tun1
10.6.10.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun1
128.0.0.0 10.6.10.5 128.0.0.0 UG 0 0 0 tun1
172.98.67.68 192.168.10.1 255.255.255.255 UGH 0 0 0 eth0
192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
VPN 盒上的路由(VPN 隧道关闭)
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.10.1 0.0.0.0 UG 0 0 0 eth0
192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
从 VPN 盒 ping 到 8.8.8.8(VPN 隧道关闭)
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
ping: sendmsg: Operation not permitted
ping: sendmsg: Operation not permitted
客户端机器上的路由
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.10.14 0.0.0.0 UG 0 0 0 eth0
192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
答案1
由于 VPN 盒上的默认路由,导致出现“绕过”问题。这是必需的,无法删除,并且 IP 转发仍处于启用状态。IP 转发基于接口,而不是 IP 地址
您VPN box
已打开ip 192.168.10.14
,您可以添加插入ufw
规则,当隧道关闭时将触发该规则。
添加/etc/network/if-down.d/
一些脚本来切断客户端对您的VPN box
例子:
sudo nano /etc/network/if-down.d/scriptdown
并放入内容
# Check for specific interface if desired
[ "$IFACE" != "tun1" ] || exit 0
# cat access from client
sudo ufw insert 1 deny in on eth0 from 192.168.10.0/24 to 192.186.10.14
给予scriptdown
特权
chmod 755 /etc/network/if-down.d/scriptdown
if-down.d
将触发在开始scriptdown
时调用的脚本,并将拒绝从到的流量tun1
down
192.168.10.0/24
192.168.10.14
您需要脚本来在tun1
启动时删除此规则
添加/etc/network/if-up.d/
脚本以允许客户端访问您的VPN box
sudo nano /etc/network/if-up.d/scriptup
并放入内容
# Check for specific interface if desired
[ "$IFACE" != "tun1" ] || exit 0
# cat access from client
sudo ufw delete 1
给予scriptup
特权
chmod 755 /etc/network/if-down.d/scriptup
if-up.d
将触发执行scriptup
时调用的脚本,并允许从到的流量tun1
up
192.168.10.0/24
192.168.10.14
尝试。