我有一个进程,它认为它的本地 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?