从 VPN 中排除某些网络服务

从 VPN 中排除某些网络服务

我的本地 Linux 服务器通过路由器连接到互联网。路由器 (192.168.0.1) 将 ISP 分配的 IP 地址 (不时更改) NAT 为服务器的本地 IP (192.168.0.102)。

当服务器连接到 VPN(PrivateInternetAccess)并且 tun0 适配器启动(每次使用不同的 IP)时,所有转发的服务(如 Web 服务器)都无法再从外部网络访问。

如何配置服务器以在 VPN 运行时监听并响应 http(s)、ssh(在非标准端口上运行)和 ftp 请求。对于我来说,只要所有其他流量都通过 VPN,特定流量是否通过 VPN 并不重要。

答案1

您需要查看路由表并查看哪些目标 IP 地址通过您的 VPN 路由:

ip route

您的所有流量可能都通过 VPN 路由(LAN 地址和 VPN 端点除外)。这意味着您的服务数据包通过 VPN 路由(使用您的本地 IP 地址和私有 IP 地址)。这些数据包被丢弃在远程网络中的某个地方(可能是在 VPN 端点),因为:

  • 他们(可能)没有使用远程网络地址;

  • 它们是私有(不可路由)地址;

  • 即使它们没有被过滤(并且使用了 NAT),它们也会被 NAT 到远程网络的 IP 地址。

您需要通过本地网关路由这些数据包。

您可以执行如下操作来强制使用本地 IP 作为源地址的数据包通过本地网关:

# Your IP address:
ip rule add from 192.168.0.42 table 42
ip route add default via 192.168.0.1 table 42

这应该适用于 TCP 服务。UDP 服务可能会出现问题,它可能会使用您的 VPN 地址响应对您的本地 IP 地址进行的查询:在这种情况下,您可能可以使用 iptables 重写数据包的源 IP 地址或根据 UDP 端口标记它们(-j MARK --set-mark 42和)。fwmark 42

答案2

这里的问题是所有流量都通过 VPN 隧道路由。应通过启用分割隧道用于 VPN。具体如何操作取决于所使用的服务器和客户端软件。

相关内容