从VPN中排除一些networking服务

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

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

如何configuration服务器,以便在VPN运行时听到并响应http(s),ssh(运行在非标准端口上)和ftp请求。 只要所有其他stream量都通过VPN,是否通过VPN就无关紧要了。

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

ip route 

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

  • 他们(可能)不使用远程networking地址;

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

  • 即使它们没有被过滤(并且使用了NAT),它们也将被NAT到远程networking的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地址或标记它们( -j MARK --set-mark 42fwmark 42 )基于UDP端口。

这里的问题是,所有的stream量正在路由到VPN隧道。 这应该通过启用VPN的分离隧道来解决。 如何做到这一点取决于正在使用的服务器和客户端软件。