iptables nat:通过 PREROUTING 链处理 OUTPUT 链/从 OUTPUT 转发到 PREROUTING

iptables nat:通过 PREROUTING 链处理 OUTPUT 链/从 OUTPUT 转发到 PREROUTING

我想自动处理 NAT 表的 OUTPUT 链中的数据包(本地生成),就像它们来自外部一样(通过 PREROUTING)。

是否可以使用“将所有内容转发到 PREROUTING”作为 OUTPUT 链中的后备/最后规则?

例如,给定以下 NAT 转发:

iptables -t nat -A PREROUTING -p TCP -d $EXT.IP.ADD.RESS \
    --dport 80 -j DNAT --to-destination $INT.IP.ADD.RESS:80

我必须设置匹配的输出规则:

iptables -t nat -A OUTPUT -p TCP -d $EXT.IP.ADD.RESS \
    --dport 80 -j DNAT --to-destination $INT.IP.ADD.RESS:80

当记录这些数据包(通过iptables -t nat -A OUTPUT -p TCP -d $EXT.IP.ADD.RESS -j LOG)时,它们看起来像:

IN= OUT=lo SRC=$EXT.IP.ADD.RESS DST=$EXT.IP.ADD.RESS LEN=60 \
    TOS=0x00 PREC=0x00 TTL=64 ID=22348 DF PROTO=TCP SPT=59425 \
    DPT=25 WINDOW=32792 RES=0x00 SYN URGP=0

我尝试过类似下面的操作,但没有效果:

iptables -t nat -A OUTPUT -p TCP -d $EXT.IP.ADD.RESS -j DNAT \
    --to $EXT.IP.ADD.RESS

我现在对每个端口到内部机器的映射使用以下宏/块:

iptables -t nat -A PREROUTING -p TCP -d $EXT.IP.ADD.RESS --dport 25 \
    -j DNAT --to-destination 10.122.1.25:25
iptables -t nat -A OUTPUT -p TCP -d $EXT.IP.ADD.RESS --dport 25 \
    -j DNAT --to-destination 10.122.1.25:25
iptables -t nat -A POSTROUTING -p TCP -s 10.122.1.25 -d 10.122.1.25 --dport 25 \
    -j SNAT --to 10.122.1.1

10.122.1.1是防火墙,10.122.1.25是容器(邮件服务器)。

我最近只添加了最后一条规则(“POSTROUTING”),它允许容器到达其自身。

答案1

是的,这就是所谓的NAT Loopback,它要求您将本地生成的数据包 SNAT 到您的外部 IP。这将导致您的数据包循环回来并通过您的 PREROUTING 链。

答案2

您打算将本地生成的数据包(而不是转发)重新注入 PREROUTING 来实现什么目的?如果您不喜欢那里的冗余,您可以创建一个新的用户定义链,将规则放入其中,然后从 PREROUTING 和 OUTPUT 调用此链。

相关内容