我有一个家庭路由器,它对家庭网络使用 NAT。我的 IP 上有一台 debian 10 机器,192.168.0.60
它通过一个小型 Web 应用程序侦听端口 5000。我希望能够从公共互联网访问此端口。
从 debian 中,curl localhost:5000
产生正确的响应。
在我的 mac 上192.168.0.55
,curl 192.168.0.60:5000
产生了正确的响应。
为了将其打开到互联网,我将路由器配置为端口转发5000 -> 192.168.0.60:5000
。
但是,当我curl $PUBLIC_IP:5000
从外部设备(即不在网络中)使用时,我什么也得不到。https://www.yougetsignal.com/tools/open-ports/也会导致端口关闭。
我的第一个猜测是,这将是路由器上的一个微不足道的端口转发问题。为了排除这种情况,我做了以下操作:
- 在我的 Mac 上运行相同的应用程序,听 5000
- 将路由器上的端口转发规则更改为
5000 -> 192.168.0.55:5000
(我的 Mac) - 用过的https://www.yougetsignal.com/tools/open-ports/验证端口是否已打开
也就是说,这排除了路由器,并将罪魁祸首放在 debian 机器上。此时我迷失了:为什么我可以从本地网络而不是互联网上卷曲它?
iptables 的内容如下:
root@debian# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
答案1
问题是iptables-legacy
和之间存在着不平凡的相互作用iptables
。清除后iptables-legacy
,就开始工作了。