我有三台独立的 ubuntu VPS 服务器(A、B、C),之前我只有一个与服务器 A 关联的 IP 地址,用于iptables
将任何传入数据包转发到11.22.33.44
端口 443 上的 IP 地址55.66.77.88
(服务器 B),并使用服务器 A 作为我的 TCP 连接的网关,以绕过客户端区域的阻塞
PREROUTIN
我通过使用以下命令添加规则来做到这一点:
$ iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination 55.66.77.88:443
以及添加规则POSTROUTING
:
$ iptables -t nat -A POSTROUTING -j MASQUERADE
我想99.10.11.12
从服务器 A 上的 VPS 提供商购买另一个 IP 地址 ( ),该地址将连接到eth1
该地址并将数据包转发到服务器 C ( 13.14.15.16
)
但是一旦第二个 IP 被购买并处于活动状态,一切都会停止工作,甚至传入的数据包无法11.22.33.44
到达服务器 B。
我不确定如何配置规则来获得我想要的东西,并且尝试了解iptables
只会让我更加困惑。
答案1
一旦服务器有两个或更多网络接口,非对称路由就会成为问题。例如,数据包可以通过eth0
并server A
转发到server B
。当返回数据包从server B
to返回时server A
,它可能会尝试逃逸eth1
到互联网,因为那是默认网关指向的位置(反之亦然)
在此示例中将server A
配置四个接口:
eth0 - 1.0.0.1 (WAN-1 facing)
eth1 - 1.1.1.1 (WAN-2 facing)
eth2 - 10.2.2.1/24 (LAN-B facing)
eth3 - 10.3.3.1/24 (LAN-C facing)
Server B
将有一个 IP 地址10.2.2.2/24
,默认网关指向服务器 A 的 eth2 接口 (10.2.2.1)
Server C
将有一个 IP,10.3.3.2/24
其默认网关指向服务器 A 的 eth3 接口 (10.3.3.1)
由于server A
有四个 IP 地址,并且一次只能有一个默认网关,否则您可能会遇到非对称路由问题。
在 上server A
,可以执行以下命令来控制流量
通过 eth2(面向 LAN-B)的流量必须转换为 eth0 的公共 IP (1.0.0.1)
$ sudo iptables -t nat -A POSTROUTING -o eth2 -s 10.2.2.0/24 -j SNAT --to-source 1.0.0.1
通过 eth3(面向 LAN-C)的流量在通往互联网的途中必须转换为 eth1 的公共 IP (1.1.1.1)
$ sudo iptables -t nat -A POSTROUTING -o eth3 -s 10.3.3.0/24 -j SNAT --to-source 1.1.1.1