Linux

如何通過另一台伺服器路由流量?

  • December 2, 2019

我有兩台 linux (Ubuntu) 伺服器,A 和 B。伺服器 A 可以訪問網際網路,B 不能。伺服器可以通過它們各自的(單獨的)預設網關相互通信。

我可以通過伺服器 A 通過埠轉發從 Internet 訪問伺服器 B。作為允許 ssh 的範例:

iptables --table nat --insert PREROUTING --protocol tcp --dport 61000 --jump DNAT --to-destination <B_IP>:22

**但是如何讓伺服器B通過伺服器A訪問網際網路呢?**伺服器 A 準備通過以下方式進行後路由:

iptables --table nat --insert POSTROUTING --protocol tcp --jump MASQUERADE

嘗試用 A 的 ip 替換伺服器 B 的預設網關會導致RTNETLINK answers: Network is unreachable它無法再路由到 A。伺服器 A 和 B 是我唯一可以訪問的。我無法訪問他們的網關。

預設路由必須在同一個網段(乙太網廣播域),看起來你的兩台伺服器是通過路由器連接的。

但是,您可能可以在兩者之間設置某種隧道。最簡單的是 IPv4-over-IPv4 隧道。為了解釋起見,讓10.1.0.100伺服器 A 地址和10.2.0.1伺服器 B。您可以在伺服器 B 上添加/etc/network/interfaces(或添加文件/etc/network/interfaces.d):

iface tun0 inet tunnel
   address 192.168.0.1
   local 10.2.0.1
   endpoint 10.1.0.100
   mode ipip
   netmask 24
   gateway 192.168.0.2

在伺服器 A 上:

iface tun0 inet tunnel
   address 192.168.0.2
   local 10.1.0.100
   endpoint 10.2.0.1
   mode ipip
   netmask 24

根據您的網路拓撲和網關配置,這可能就足夠了。

說明:這會設置一個虛擬介面,而不是直接線上路上發送 IPv4 數據包,而是將它們包裝到另一個 IPv4 數據包中並將它們從 發送addressendpoint

您沒有解釋您的網路拓撲,但如果 A 的網關可能知道如何到達 B,SNAT/MASQUERADE則可能沒有必要(除非防火牆阻止傳入 B 的數據包)。

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