两台电脑到一台电脑的 Iptables 端口映射

两台电脑到一台电脑的 Iptables 端口映射

我们有 3 台电脑,其中两台连接到互联网(两台都有 2 个网卡)

PC1:

eth0 - 1.0.0.1 (external IP)
eth1 - 172.16.0.1 (internal IP)

PC2:

eth0 - 1.0.0.2 (external IP)
eth1 - 172.16.0.2 (internal IP)

PC3:

eth0 - 172.16.0.3 (internal IP)

现在我们要将端口 80 从 PC1 和 PC2 转发到 PC3。

但存在一个问题:iptables 端口转发从 PC1 或 PC2 运行良好,但仅限于 PC3 以 PC1 或 PC2 作为网关的情况。

IPtables 规则(针对 PC1):

iptables -t nat -A PREROUTING  -p tcp -d 1.0.0.1 --dport 80 -j DNAT --to-destination 172.16.0.3:80
iptables -A FORWARD -p tcp -d 172.16.0.3 --dport 80 -j ACCEPT

所以,问题是:无论 PC3 上的网关设置如何,我们是否可以从 PC1 和 PC2 进行端口映射?

先感谢您。

答案1

您仅重写了目的地。

您需要将源地址更改为 PC1 或 PC2,这样回复数据包也可以进行 NAT。并且您需要更改目标地址,以便数据包将发往 PC3。重写源和目标称为“双 NAT”。

您需要在 PREROUTING 链中执行 DNAT,在 POSTROUTING 链中执行 SNAT。如下所示(针对 PC1):

iptables -t nat -A PREROUTING -p tcp -m tcp -d 1.0.0.1 --dport 80 -j DNAT \
  --to-destination 172.16.0.3:80
iptables -t nat -A POSTROUTING -p tcp -m tcp -d 172.16.0.3 --dport 80 \
   -j SNAT --to-source 172.16.0.1

答案2

赋予 PC3 另一个 IP 地址,并在 PC1 和 PC2 中使用 DNAT 规则将 PC3 的 IP 地址改为不同的 IP。

在PC3上使用“ip rule”按源IP地址进行路由,如下所示:http://lartc.org/howto/lartc.rpdb.multiple-links.html

相关内容