我已将我的服务器 (server1) 配置为通过带有 IPsec (安全 vpn) 的 VPN 连接到另一台服务器 (server2)。但现在我需要设置另一个 VPN (工作 vpn),这样我才能连接到我的服务器 (server1) 并访问另一台服务器 (server2)。
我的服务器有 1 个外部网络接口(eth0,IP 为 71.185.153.102 - 访问互联网)。安全 VPN 使用 eth0:0,这是一个虚拟网络接口,IP 为 71.185.200.240。
目标:连接到安全 VPN(从我的办公室)并使用以下地址访问其上的页面:http://20.35.166.61:6084/测试/
工作原理:
我的家庭办公室 -> 连接到工作 VPN(位于我的服务器上) -> 服务器通过接口 ppp0 获取数据包 -> iptables 应将所有数据包转发并转换到 eth0:0(通过 IPsec 的 VPN)
我迄今所做的事情:
- 已安装 poptop (pptpd)
- 给了它一个 localeip 和一个 remoteip (localeip 192.168.0.1 remoteip 192.168.0.100-200)
- 接受来自 ppp0 的所有流量: iptables -A INPUT -i ppp0 -j ACCEPT
- 接受从 ppp0 到 eth0 的所有转发: iptables -A INPUT -i ppp0 -o eth0 -j ACCEPT 已打开 gre 协议:
- iptables -A 输入 -p gre -j 接受
- iptables -A 输出 -p gre -j 接受
- 添加了DNAT和SNAT:
- iptables -A PREROUTING -p tcp -i ppp0 -j DNAT --to 91.185.200.240 (转发到 eth0:0)
- iptables -t nat -A POSTROUTING -s 192.168.0.1 -o eth0 -j SNAT --to 71.185.200.240 (如果来自 ppp0,请更改 IP)
但问题是,什么都不起作用,而且我不太清楚如何调试它以查看哪里出了问题(我不是网络专家)。我可以通过 VPN 连接,但几分钟后就断开了。我无法在安全 VPN 上 ping 通 IP(我可以从服务器正常 ping 通它)。此外,当我连接到 VPN 时,我的互联网连接断开了。
只要我可以访问该网页,我也愿意用任何其他方式来做到这一点。
网络图: 网络图
答案1
您确实有两种可行的方法可以到达这里。
1. 使用 SSH 隧道
摆脱所有 PPtP VPN 东西,改用 SSH 隧道。假设您可以通过 SSH 连接到您的机器,您无需设置任何其他东西或执行任何可能破坏任何东西的重新配置。
您没有指定在客户端上使用的操作系统,但我假设您在 Windows 上使用 PuTTY 或在其他操作系统(Mac OS X、Linux 等)上使用 OpenSSH。
在 Windows 上的 PuTTY 上,您可以进入 SSH->Tunnels,并添加转发端口,例如源 = 6084,目标 = 20.35.166.61:6084,然后连接到服务器。(保存配置文件很有帮助,这样就不必每次都进行设置。)
使用 OpenSSH,您可以这样做(如果 yourusername@ 与您计算机上的本地用户名相同,则可以省略它)。ssh -L 6084:20.35.166.61:6084 [email protected]
然后你就可以使用以下命令访问远程 Web 服务器http://127.0.0.1:6084。某些 Web 应用程序不喜欢您使用不同的 IP 地址,因此会中断链接。在某些情况下,将安全服务器的主机名添加到您的 hosts 文件(C:\WINDOWS\SYSTEM32\DRIVERS\ETC\HOSTS
在 Windows、/etc/hosts
OS X、Linux 和其他类似操作系统上)就足够了 - IP 地址为 127.0.0.1。如果您尝试执行除连接到该特定主机名上的端口 6084 之外的任何其他操作,或者 ssh 会话未启动,这当然会中断。
除了隧道连接单个端口之外,还有一种替代方法是使用“动态 SSH 隧道”,这意味着 ssh 客户端模拟 SOCKS 代理。在此模式下,您可以执行类似操作(使用 OpenSSH)或使用 PuTTY,选择以 3128 作为源端口的“动态”隧道(您无需指定目标)。然后,您将 Web 浏览器配置为SOCKS 代理,然后 bam - 所有 Web 浏览器流量都将通过您的服务器重定向。不过,这包括来自您机器的任何其他 Web 流量,因此如果这不是您想要的,请小心。此外,这意味着一旦 SSH 隧道关闭,您的 Web 浏览器将停止工作。ssh -D 3128 [email protected]
127.0.0.1:3128
2. 修复你的 PPtP 隧道
您似乎列举了几个具体的问题。
1. 几分钟后,VPN 断开连接。
这可能是由于您和服务器之间某处带有状态数据包检查的防火墙(例如普通的“宽带路由器”)导致连接超时。根据此防火墙的品牌和型号,您可能能够增加超时时间。作为一种解决方法,您可能需要将set link keep-alive
PoPToP 中的选项设置为足够低的值以确保会话不会过期。
2. 您的互联网连接在连接时停止工作。
这是因为在连接 VPN 时,您的“默认路由”将设置为通过 VPN 连接。即它将尝试通过您的服务器发送您的互联网流量。除非您设置源 NAT,否则从服务器退出到更大互联网的流量将具有 192.168.0.100-200 之间的 IP 作为其源 IP,虽然您的数据包可能会到达目的地,但您无法知道,因为远程主机无法将您的流量发送回您的不可路由 IP 地址。
这个问题有几种可能的解决方案:
- 在服务器上设置 NAT,以便任何退出 VPN 的流量的源地址与服务器面向 Internet 的网络接口的 IP 地址相同。
- 使用公共 IP 地址而不是私有 IP 地址,并相应地设置路由(在您的场景中可能不切实际)
- 首先不要通过 VPN 将流量路由到互联网 - 您尚未指定正在使用的 VPN 客户端,因此我实际上无法为您提供帮助。PoPToP可能有能力将路由配置“推送”到 PPtP 客户端,但我不确定如何操作。请查看一些文档。但很可能您可以在客户端修复此问题。
3. 您无法访问远程服务器
这不起作用的原因与您的 Internet 连接停止工作的原因相同 - 数据包可能已经到达目的地,但远程服务器无法将数据包发送回给您。
可能的解决方案包括:
- 确保远程服务器的路由表中有您的 VPN。(我怀疑这对您来说可能不可行,我感觉您不管理远程服务器,而远程管理员可能不愿意添加指向私有 IP 范围的路由...)
- 使用源 NAT 转换通过 VPN 出去的数据包的源 IP 地址。