其实同样的问题这个。但我在那里也没有得到答案。
我的场景是:一个带有两个网卡的 Linux 机器,充当路由器,运行用于伪装的 iptables 规则、防火墙等。我想将某些端口转发到只有 LAN IP 的内部服务器。
路由器服务器使用 ppp0 作为外部接口,使用 192.168.212.50 作为内部 IP。我想将端口 2000 从外部(连接到主机名:2000)转发到内部 192.168.212.51:8088。
sysctl net/ipv4/ip_forward 已设置为 1,因为它已设置伪装。
现在,当我尝试从外部 IP(主机名:2000)进行端口转发时,它总是超时。在日志中我可以看到数据包被丢弃。
iptables 规则在这里:https://pastebin.com/au9QDhQf
- 如果我将端口设置为仅转发到 LAN,即未定义
-i $EXT_IF
并连接http://192.168.212.50:2000/它可以工作。 - 我也检查过这个帖子。但是,由于我已经设置了 MASQUERADE,所以第二条规则
iptables -t nat -A POSTROUTING -j MASQUERADE
在这里不起作用。
任何帮助将不胜感激。
答案1
由于您可能总是希望能够从网络内部连接到 external-ip:2000,因此您可能不希望在防火墙规则中使用 `-i $EXT_IF$ 。
我的猜测是,既然您要更改中的端口号预ROUTING 链,允许流量到达端口 2000 并不重要,当流量达到该规则时,它可能已经被修改,因此目标端口是 8088。
答案2
终于我知道发生了什么了。
我把端口转发和转发规则放在了错误的地方——
iptables -A FORWARD -j block
是前端口转发规则,因此 POSTROUTING 被触发,但随后数据包被丢弃。