![iptables:INPUT 链上没有 DNAT,还有其他选择吗?](https://linux22.com/image/720429/iptables%EF%BC%9AINPUT%20%E9%93%BE%E4%B8%8A%E6%B2%A1%E6%9C%89%20DNAT%EF%BC%8C%E8%BF%98%E6%9C%89%E5%85%B6%E4%BB%96%E9%80%89%E6%8B%A9%E5%90%97%EF%BC%9F.png)
我有一个进程,它认为它的本地 ip 地址是192.168.1.101
,在具有本地 ip 地址的主机上运行192.168.1.130
。此进程正在寻找从具有 ip 的服务器发送的数据包80.80.80.80
。
需要明确的是,该过程需要如下传入数据包:
src_addr
:80.80.80.80
dst_addr
:192.168.1.101
它发送如下数据包:
src_addr
:192.168.1.101
dst_addr
:80.80.80.80
有一个来自服务器的数据包需要我处理,但我无法更新该进程或允许它重新连接。
我的想法是使用 iptables 来更改数据包进入时的目标地址。这意味着使用PREROUTING
或INPUT
链,正如它所述这里:
链式遍历顺序
- 发往本地系统的传入数据包:
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?