我有一台运行 Ubuntu 14.04.3 的 VirtualBox VM,我想
- 用作网关路由器。
- 从此虚拟机连接到 OpenVPN 服务器,并通过 VPN 将所有数据转发到互联网
- 直接连接到本地机器(不通过 VPN)
我遵循了这里设置转发,一切正常。我的 iptable 规则(在 up.sh 文件中)是
sudo iptables -A FORWARD -o tun0 -i eth0 -s 192.168.2.0/24 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A POSTROUTING -t nat -j MASQUERADE
第一条规则是我添加的允许转发到本地资源的规则。
我有一个类似的 down.sh 文件来拆除转发(或者说,我希望如此)
sudo iptables -D POSTROUTING -t nat -j MASQUERADE
sudo iptables -D FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -D FORWARD -o tun0 -i eth0 -s 192.168.2.0/24 -m conntrack --ctstate NEW -j ACCEPT
我还执行了以下命令来启用转发
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
在我的 openvpn config.conf 文件中,我将脚本设置为通过以下命令运行
script-security 2
up /etc/openvpn/up.sh
down /etc/openvpn/down.sh
在虚拟机启动时,运行 up 脚本并通过 VPN 转发流量(尽管前几个数据包似乎是通过常规连接发送的)。为了测试 down 脚本,我接下来执行以下操作:
sudo killall openvpn
看起来脚本已成功运行,因为我的所有 iptable 规则都已删除。但是,流量现在通过我的常规互联网连接 (eth0) 转发。
如果 VPN 断开连接或不再运行,如何停止流量转发?理想情况下,我希望始终访问本地资源,并且仅通过 VPN(从我的客户端计算机)访问互联网。
谢谢