如何通过另一台服务器路由流量?

如何通过另一台服务器路由流量?

我有两台 Linux(Ubuntu)服务器,A 和 B。服务器 A 可以访问互联网,而 B 则不能。服务器可以通过各自(单独的)默认网关相互通信。

我可以通过服务器 A 的端口转发从互联网访问服务器 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。我无法访问它们的网关。

答案1

默认路由必须位于同一网段(以太网广播域),并且看起来您的两台服务器是通过路由器连接的。

但是,您可能可以在两者之间设置某种隧道。最简单的是 IPv4-over-IPv4 隧道。为了便于解释,假设10.1.0.100是服务器 A 地址,服务器 B 地址。您可以在服务器 B 上10.2.0.1添加/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 的数据包)。

相关内容