iptables:INPUT 链上没有 DNAT,还有其他选择吗?

iptables:INPUT 链上没有 DNAT,还有其他选择吗?

我有一个进程,它认为它的本地 ip 地址是192.168.1.101,在具有本地 ip 地址的主机上运行192.168.1.130。此进程正在寻找从具有 ip 的服务器发送的数据包80.80.80.80

需要明确的是,该过程需要如下传入数据包:

  • src_addr80.80.80.80
  • dst_addr192.168.1.101

它发送如下数据包:

  • src_addr192.168.1.101
  • dst_addr80.80.80.80

有一个来自服务器的数据包需要我处理,但我无法更新该进程或允许它重新连接。

我的想法是使用 iptables 来更改数据包进入时的目标地址。这意味着使用PREROUTINGINPUT链,正如它所述这里

链式遍历顺序

  • 发往本地系统的传入数据包: PREROUTING->INPUT

这个命令正是我想要的:

iptables -t nat -A INPUT -s 80.80.80.80/32 -d 192.168.1.130/32 -p tcp -j DNAT --to-destination 192.168.1.101

只是,当我运行它时,我得到:

x_tables: ip_tables: DNAT target: used from hooks INPUT, but only usable from PREROUTING/OUTPUT

该问题显示在DigitalOcean 文章,但没有给出为什么不允许这样的规则的原因。我还检查了 iptables 的手册页,它甚至没有提到 nat 表中有一个 INPUT 链,也没有netfilter 流程​​图,这很令人困惑。

有没有什么方法可以完成我想做的事情,并让进程仍然运行,即使它使用与主机不同的本地 IP?

相关内容