我在 Windows 机器上安装了 Debian 11 VM。它有 3 个网络适配器。一个是外部 (WAN),一个是内部 (LAN),另一个是私有 (实验)。
我将该盒子用作路由器,然后通过实际连接到 Hyper-V 盒子的 WAN NIC 使用我的 DSL 路由器。路由方面一切正常。
我想要实现的是,我读过很多文章,但都失败了,我试图拦截单个端口(例如 4444)到单个公共互联网 IP 地址,然后将其重新路由回我的 LAN 上的一台机器。听起来很简单,我确信确实如此,但我无法让它发挥作用。
明确地说,这是不是尝试公开一个公共端口并使其在内部路由。这是要拦截一个端口(相关应用程序连接到多个端口)。我希望所有通信都正常转到目标服务器,但我希望此端口指向我的机器,我已在该机器上配置了套接字服务器来处理通信。
我知道答案与 iptables 有关,但我就是无法正确使用命令。每当我这样做时
iptables -t nat -A OUTPUT -p tcp --dport 4444 -j DNAT --to-destination 10.0.0.111:4444
它甚至没有出现在我的 中iptables -L
。转发已启用。我还尝试过:
iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 4444 -j DNAT --to-destination 10.0.0.111:4444
我甚至将它应用于默认网关 eth0。
eth0——公共 WAN
eth1——局域网
eth2 - 尝试分配相关的公共 IP,但这会破坏所有端口的路由,因此放弃了
答案1
我的错。我已修复。看来如果您离开预路由,-d <destination address>
它将被忽略。
我还添加了一条 SNAT 规则,使得返回的数据包看起来来自公共 IP。
任务完成了。希望有一天这能帮到别人。