Linux

從 VPN 中排除某些網路服務

  • March 12, 2015

我的本地 linux 伺服器通過路由器連接到網際網路。路由器 (192.168.0.1) 從 ISP 分配的 IP 地址(不時更改)到伺服器的本地 IP (192.168.0.102) 進行 NAT。

當伺服器連接到 VPN(PrivateInternetAccess),並且 tun0 適配器啟動(每次使用不同的 IP)時,所有轉發的服務(如 Web 伺服器)都不能再從外部網路訪問。

如何配置伺服器以在 VPN 執行時收聽和響應 http(s)、ssh(在非標準埠上執行)和 ftp 請求。只要所有其他流量都通過VPN,那麼特定流量是否通過VPN對我來說並不重要。

您需要查看您的路由表並查看哪些目標 IP 地址通過您的 VPN 路由:

ip route

您的所有流量都可能通過 VPN 路由(LAN 地址和 VPN 端點除外)。這意味著您的服務數據包通過 VPN 路由(使用您的本地和私有 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 地址或標記它們(-j MARK --set-mark 42fwmark 42)基於UDP 埠。

引用自:https://serverfault.com/questions/674426