我的本地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 42和fwmark 42 )基于UDP端口。
这里的问题是,所有的stream量正在路由到VPN隧道。 这应该通过启用VPN的分离隧道来解决。 如何做到这一点取决于正在使用的服务器和客户端软件。