我设置了一个 pptp vpn 服务器,并且可以用我的笔记本电脑毫无问题地连接到它。
但是,连接到 vpn 会导致路由问题(即我不打算连接到外部网络)。为了在我的笔记本电脑上解决这个问题(我使用的是 Ubuntu 14.04),我进入编辑连接 > 无线 > (网络名称) > 编辑 > 路由并选中“仅将此连接用于其网络上的资源”。
这使得我在连接到我的 vpn 时可以连接到外部网络,但是一旦我断开连接,我就无法访问外部网络,直到我取消设置“仅将此连接用于其网络上的资源”选项。
似乎一定有比手动设置和取消设置此选项更好的方法。理想情况下,我希望:
已连接到 VPN:我笔记本电脑上的所有流量都通过 vpn
未连接到 VPN:所有流量都经过我所在的网络
任何想法?
答案1
要同时拥有 VPN 和互联网,流量必须转发出 VPN 服务器的公共网络接口。因此,请通过编辑 sysctl.conf 文件来启用端口转发。我假设“net.ipv4.ip_forward”在 /etc/sysctl.conf 文件中被注释掉:
nano /etc/sysctl.conf
添加或找到并注释掉以下行
net.ipv4.ip_forward=1
保存,关闭文件并运行以下命令以使更改生效。
sysctl -p
以下 iptables 防火墙规则允许端口 1723、GRE 并执行 NAT
iptables -I INPUT -p tcp --dport 1723 -m state --state NEW -j ACCEPT
iptables -I INPUT -p gre -j ACCEPT
iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
在最后一条规则中,将“eth0”替换为 VPN 服务器上连接到互联网的接口。最后,需要以下规则来确保网站正确加载
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -s 172.20.1.0/24 -j TCPMSS --clamp-mss-to-pmtu
将 172.20.1.0/24 替换为 /etc/pptpd.conf 中“remoteip”选项中使用的 IP 地址范围,此防火墙规则用于确保使用适当的 MTU 值以防止碎片化。
希望能够帮到你。