Linux
如何通過另一台伺服器路由流量?
我有兩台 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 數據包中並將它們從 發送
address
到endpoint
。您沒有解釋您的網路拓撲,但如果 A 的網關可能知道如何到達 B,
SNAT/MASQUERADE
則可能沒有必要(除非防火牆阻止傳入 B 的數據包)。