![pptpd VPN:连接后无法访问互联网](https://linux22.com/image/857792/pptpd%20VPN%EF%BC%9A%E8%BF%9E%E6%8E%A5%E5%90%8E%E6%97%A0%E6%B3%95%E8%AE%BF%E9%97%AE%E4%BA%92%E8%81%94%E7%BD%91.png)
我已按照本教程设置一个 vpn 服务器,这样我就可以连接到它并从另一个位置虚拟地浏览互联网。到目前为止,从 Windows 上,我可以连接到它,但没有互联网访问。
我在配置文件中使用的 IP 地址与教程中的完全相同
localip 192.168.0.1
remoteip 192.168.0.100-200
DNS 也是一样,为 8.8.8.8。
(关于我所做的一切你需要知道的都已经在这个链接里了)
您认为可能存在什么问题?
答案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 值以防止碎片化。
希望能够帮到你。
答案2
以下命令解决了我在 Ubuntu 14.x 上使用 PPTPD 时遇到的问题(没有互联网)
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
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -s 10.0.0.0/24 -j TCPMSS --clamp-mss-to-pmtu
sudo iptables-save
sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables-save
请注意:我使用的 IP 地址范围是 10.0.0.0/24,并且/etc/pptpd.conf
该范围也与您的配置相匹配。
答案3
我们遇到了相同的症状,但所有 Iptables 都按上述设置。可以连接,连接稳定,确实允许通过 ssh 登录到 pptp 服务器,甚至可以在远程机器上解析 DNS(通过浏览器和 ping 可以注意到——因为它确实正确解析了 IP),但网页没有加载,也无法通过 ssh 连接到其他服务器。这清楚地表明到 pptp 服务器的隧道没有问题。
问题在于,我在这台机器上有两个暴露在互联网上的独立上行链路(即 mainInf 和 support),均通过 netplan 配置(这没有问题),但是,尽管使用第一个上行链路(i-face 称为 mainInf)的 IP 地址连接到 pptp 服务器,但我的默认网关却在第二个上行链路(support)中运行。
解决方案是将 NAT 调整为正确的输出网关,并允许数据包到达最初(不起作用)的其他服务器
iptables -t nat -I POSTROUTING -o mainInf -j MASQUERADE
(请记住,在我们的例子中,与 pptp 服务器的连接是通过在 mainInf 适配器/上行链路中分配的 IP 进行的)并且在更改为与默认网关(支持)相同的适配器/上行链路后,它起作用了:
iptables -t nat -I POSTROUTING -o support -j MASQUERADE
因此,如果您可以稳定 VPN 连接,ping 或连接 pptp 服务器(在我们的例子中是通过 ssh),但无法访问该服务器之外的任何 IP,则您可能遇到了路由/转发问题。
4 个有用的故障排除命令:
- 观察 iptables -t nat -L -nv
- 观察 iptables -L -nv
- 路线-n
- tcpdump -i -s 0 tcp 端口 1723 或 proto 47 (阅读更多内容)