允许端口但连接被拒绝?
# sudo ufw allow 9999/tcp
Rule added
Rule added (v6)
当我检查状态时
# sudo ufw status
9999/tcp ALLOW Anywhere
9999/tcp (v6) ALLOW Anywhere (v6)
一切看起来都很好,但连接仍被拒绝。我尝试从本地计算机远程登录
# telnet 127.0.0.1 9999
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
以及来自外部机器(实际 IP 已编辑)
# telnet 1.1.1.1 9999
Trying 1.1.1.1...
telnet: Unable to connect to remote host: Connection refused
虽然可以建立其他端口连接,但这个新添加的端口不起作用。可能是什么原因?
附言。服务器操作系统是Ubuntu 16.04
答案1
您需要侦听该端口才能连接到它。对于简单测试,您可以使用nc
或netcat
:
nc -l -p 9999
现在nc
正在侦听端口9999
,您可以telnet
从另一个终端(或机器)访问此端口:
$ telnet localhost 9999
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
连接后,您可以在一个终端中输入内容,然后按 后Enter,文本应显示在另一个终端中。
答案2
让我们暂时忽略防火墙。当客户端进程尝试创建到主机的 TCP 连接时,该主机需要运行一些服务器进程来“侦听”该端口上的传入连接。如果端口不是“开放”的,即没有进程正在侦听该端口,那么当客户端进程尝试连接时,主机的内核将发回一个响应,表明没有进程正在侦听该端口。当你Connection refused
在客户端看到的时候,就是这个意思。
进入防火墙。如果主机安装了防火墙,则防火墙可以阻止进出该主机的网络流量。然后,客户端进程可能会尝试连接到给定端口上的服务器进程,并且即使有服务器进程正在侦听该端口,该连接也会被防火墙拒绝。然而,这不是您遇到的问题。