当我启动一个监听端口的应用程序时,我的服务器出现了问题:我可以从同一台机器连接到它,但不能从外部世界连接到它。我在尝试使用 irssiproxy 创建 irc bouncer 时注意到了这个问题(我之前在另一台服务器上成功创建了它)。irssiproxy 应该监听我指定的端口,另一个 irssi 实例可以连接到它。如果我在我的服务器上启动另一个 irssi 实例,它就可以正常工作,但它在互联网上的任何其他机器上都不起作用。(备注:当我从同一台机器尝试时,我成功地使用了 127.0.0.1 和公共 IP)。
一开始我还以为问题出在我的 irssi 设置上,但是我尝试用 netcat 监听一个端口并连接到它,却遇到了类似的问题:
nc -l -v -p XXXX
然后从同一台机器:
telnet 127.0.0.1 XXXX
(或telnet [public-ip] XXXX
)。在这两种情况下,我都成功连接:
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
但从我的家用电脑或其他服务器(这次当然使用公共 IP)执行同样的事情时,总是会超时:
Trying XXX.XXX.XXX.XXX...
telnet: Unable to connect to remote host: Connection timed out
关于我的服务器:这是一台运行 Debian 的专用服务器(我从 wheezy 升级到了 jessie,但之前从未真正使用过)。我有一个可以运行的 apache2,即使使用 telnet,通过端口 80 连接也没有问题。这台机器也能正确响应 ping。
我尝试从根帐户和我的用户帐户运行 nc。
我不是 Linux 专家,但是有什么可以阻止程序监听的端口被外部访问?
另外,以防万一其中有提示,当我开始时nc
我总是会看到此消息:nnetfd reuseport failed : Protocol not available
。
答案1
问题出在我的iptables
配置错误。我通过将输入策略设置为“接受”解决了该问题:
iptables -P INPUT ACCEPT