pptpd VPN:连接后无法访问互联网

pptpd VPN:连接后无法访问互联网

我已按照本教程设置一个 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 个有用的故障排除命令

  1. 观察 iptables -t nat -L -nv
  2. 观察 iptables -L -nv
  3. 路线-n
  4. tcpdump -i -s 0 tcp 端口 1723 或 proto 47 (阅读更多内容

相关内容