你好,我正在尝试将本地网络中的机器 A (10.102.44.7) 连接到机器 B (10.102.44.13)。机器 B 充当公网网关。
我想将流量从 A 10.102.44.7:4000 转发到机器 B 102.44.13,机器 B 连接到互联网上的远程服务器 C,然后机器 B 将来自 C 的响应传递给 A。
经过一段时间的阅读,我设法收集了一些使用 IPtables 的 NAT 的说明,并得出了以下内容:
(在 A 10.102.44.7 上执行)
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A OUTPUT -p tcp --dport 4000 -j DNAT --to-destination 10.102.44.13
iptables -t nat -A POSTROUTING -p tcp -d 10.102.44.13 --dport 4000 -j SNAT --to-source 10.102.44.7
我正在使用 OUTPUT 链,因为我想要修改的包源自 A,而不是 A 的传入包,据我所知,在这种情况下应该使用 PREROUTING 链。
嗅探 B 处的包裹:
包裹似乎在 B 处收到,但并未转发给 C。
我对上述两个命令的期望是,DNAT 选项使 B 充当 NAT,基本上用 B 的公共地址替换 A 的 IP,将 A 的 IP 保留在其 NAT 条目中,并将包发送到远程主机 C。然后,SNAT 选项基本上会做相反的事情(即,告诉 B 它应该在其 NAT 表中查找并传送给 A)。但是,如屏幕截图所示,这并没有发生。也许我需要在 B 中设置其他内容,但我找不到对此的明确引用。另一个可能是问题的是,POSTROUTING 和 OUTPUT 中的 B 地址(10.102.44.13)是本地的,而不是公共的。我应该使用 B 的公共地址吗?
顺便说一句,ufw 在主机 A 和 B 上被禁用。
用例
主机 A 和 B 位于同一个本地网络中,防火墙充当通向公共网络的网关。B 具有 wifi 功能,A 没有。如果由于某种原因,连接防火墙与外界的物理链路发生故障,我希望 A 利用其 wifi 功能与 B 进行通信。