如何通过 VPN 访问服务器后面的主机(IP 转发)

如何通过 VPN 访问服务器后面的主机(IP 转发)

我有一台 Ubuntu 服务器(172.10.200.11)和许多带有 SIM 卡的远程终端单元,每个 SIM 卡运营商都使用不同的 IP 池,例如 OP-A 的 IP 池为 10.57.0.0/16,OP-B 的 IP 池为 10.112.0.0/16,等等。

在服务器中,我实际上使用路由表来访问不同 IP 池上的远程终端单元。没有此路由表,我无法访问 IP 池。例如:10.57.0.0/16 使用网关 172.10.238.1 10.112.0.0/16 使用网关 172.10.238.2 10.155.0.0/16 使用网关 172.10.238.3

和...

实际上,我正在使用“Cisco VPN 客户端”从数据中心外部访问我的服务器 IP。为此,我使用“Cisco VPN 客户端”应用程序连接到 VPN 网关,然后尝试 ping 我的服务器的 IP 172.10.200.11

与 VPN 网关建立 VPN 连接后,我可以从笔记本电脑成功执行以下操作:

  • 建立远程桌面连接服务器的IP:172.10.238.3
  • 从我的笔记本电脑建立到服务器 IP 的 SSH 连接:172.10.238.3
  • ICMP ping 服务器的 IP:172.10.238.3
  • 跟踪路由到服务器的 IP:172.10.238.3

为了检查远程终端单元的连接(启动或关闭)状态,我通过 SSH 或远程桌面连接到服务器,然后尝试 ping 到远程终端单元的 IP 地址。

到目前为止一切都正常,但是这种方式会消耗太多带宽,特别是通过远程桌面连接时。

  1. 使用笔记本电脑上的“Cisco VPN 客户端”连接到 VPN 网关
  2. 与服务器 IP 建立远程桌面连接
  3. 在远程桌面连接上打开服务器中的浏览器。
  4. 在浏览器上输入远程终端单元(RTU)的IP(10.155.1.22)然后执行您想要的操作!
  5. 在远程桌面的终端屏幕或 SSH 连接会话中成功建立到 RTU 的 IP 地址 (10.155.1.22) 的 ICMP ping。

但我想做以下事情:

  • 使用 Cisco VPN 客户端从笔记本电脑连接到 VPN 网关
  • 在笔记本电脑上打开浏览器
  • 在浏览器上输入远程终端单元的 IP(10.155.1.22)然后执行您想要的操作!
  • 在我的笔记本电脑上的 shell/终端屏幕(不是远程桌面)中成功建立到 RTU 的 IP 地址(10.155.1.22)的 ICMP ping

限制:

  • 其实我没有权利更改VPN网关的设置。但我只能更改服务器设置来实现这一点。

有什么办法吗?我知道有办法,但我脑子里很混乱。首先我安装了 Hamachi,但这样我就无需 VPN 连接就可以访问服务器。但我仍然无法从我的笔记本电脑直接 ping 到 RTU IP。这并没有解决我的问题。

从技术上讲,我想使用我的服务器充当“路由器”,将来自我的笔记本电脑的传入请求(ICMP 和 IP 数据包)路由/转发到 RTU 的 IP。

我研究过如何在 Ubuntu 16.04 上启用 IP MASQUERADE 或 IP FORWARDING。如果我没记错的话 - 从技术上讲 - 机器上需要 2 个 NIC 或 2 个不同的 IP。但我的服务器上只有一个 IP(绑定)。

我需要从我的笔记本电脑直接访问 RTU IP 地址,并且我的服务器应该充当路由器/网关等来实现这一点。

有谁可以一步一步地向我解释如何在 Ubuntu 上执行此操作?

单击查看我的系统图

答案1

您需要将10.57.0.0/16网络等的路由添加到您的 VPN 客户端,以便通过服务器 IP 进行路由。您应该能够在 VPN 服务器设置中添加路由。我不知道如何在 Cisco VPN 服务器中添加它们的详细信息。

答案2

首先,回答您的问题:您需要向您的笔记本电脑添加一条路由,说明到您的 OP 网络的流量必须发送到 VPN 服务器,然后 VPN 服务器会将其路由到正确的网关。

当你的笔记本电脑建立VPN连接时,必须添加如下路由:

- route add 10.57.0.0 mask 255.255.0.0 gw <YOUR_VPN>
- route add 10.112.0.0 mask 255.255.0.0 gw <YOUR_VPN>

中间的任何其他网关也同样如此。

同样,中间的每个网关都必须有一个将 VPN IP 范围指向 VPN 服务器的路由。简而言之,网络中的每个网关和节点都需要有一个路由表,能够将内部数据包路由到适当的节点或网关。

除此之外,如果您只想监控节点正常运行时间,我建议您使用 Icinga2,这样您就可以让服务器向每个节点发送健康检查,并在任何人不负责任时收到通知。

相关内容