我有许多服务器,它们向网络公开各种公共服务。这些服务器位于一台使用 IPTables 充当防火墙的服务器后面,该服务器转发往返于服务器的流量。所有服务器都有一个公共 IP,例如在 1.2.3.x 范围内。
我使用 PPTD 设置了到防火墙服务器的 VPN。它连接到 192.168.0.x 范围内的本地 IP 范围。我可以连接并通过 SSH 连接到本地计算机。但是,当我使用其他服务器之一的公共 IP 时,它会通过互联网而不是 VPN 进行路由。
连接后,如何让 VPN 服务器代表其他服务器接受和路由流量?
答案1
您可能指的是“PPTP”VPN。
这种类型的 VPN 通过在客户端创建虚拟网络适配器来工作。任何网络适配器(无论是否虚拟)都可以/将具有路由表条目,这可以控制流量的去向。
所有传出流量都会根据路由表进行检查。具有较高或更具体子网掩码的路由表条目会被选中,然后再发送具有较低或更不具体子网掩码的流量。192.168.0.X 的子网掩码为 255.255.255.0 或 /24。默认网关会收集未被其他任何网关接收的所有流量,其“子网掩码”为 0.0.0.0 或 /0。
通过为适配器分配 IP 地址和子网掩码,您会自动获得免费路由。假设您的家用路由器为您的一个适配器分配了 IP 地址 10.1.1.40 和子网掩码 255.255.0.0(等于 /16)。这本质上意味着从该适配器发出的任何流量都可以到达 10.1.XX 上的任何位置,因此会为此生成一个路由表条目。根据路由表检查传出流量,如果它要到达 10.1.XX 中的其他地方,它将不会通过您的默认网关(即 /0)。
希望到现在为止,您可以了解到,如果您将流量发送到不在 VPN 适配器子网内的 IP,它将通过默认网关,从而通过整个 Internet。
真正完成你想要做的事情的唯一方法是:
- 在服务器端配置 VPN,告诉客户端使用 VPN 适配器作为默认网关。这将导致所有客户端流量都通过您的 VPN。
- 在服务器端配置 VPN,告知客户端使用 VPN 内的服务器进行 DNS
- 配置一些 IPTables 防火墙规则,这些规则将捕获服务器公共 IP 上的传出流量,并将其重定向到适当的 VPN 可访问 IP。如果客户端使用您的 VPN 作为默认网关,您可能实际上不需要这样做,但如果客户端仅尝试访问内部地址,这将确保 VPN 之外不会有流量泄漏。
- 您还可以运行单独的 DNS 服务器或单独的 DNS 域,该服务器或域只能在 VPN 内访问,并且可以将 VPN 上的客户端名称解析为内部 VPN 地址而不是公共 IP 地址。
另一点补充说明:将 192.168.0.X 或 192.168.1.X 用于公司 VPN 是非常糟糕的想法 - 因为这可能会与家用路由器的常用 IP 范围设置冲突。您应该将其更改为家中不常用的地址,例如 192.168.88.X。