端口似乎已打开,但连接被拒绝

端口似乎已打开,但连接被拒绝

我正在尝试在 Ubuntu 12.04 上打开端口 3000,因为我有一个 Web 服务器正在监听该端口。我有点不适应,花了很多时间尝试解决这个问题,但没有成功。

端口似乎在防火墙中打开:

$> sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
...
3000/tcp                   ALLOW       Anywhere
3000/tcp                   ALLOW       Anywhere (v6)

服务器正在监听该端口:

$> netstat -an | grep "LISTEN "
...
tcp        0      0 127.0.0.1:3000          0.0.0.0:*               LISTEN     
...

我甚至可以wget修改索引页:

$> wget localhost:3000
Connecting to localhost (localhost)|127.0.0.1|:3000... connected.
HTTP request sent, awaiting response... 200 OK

并且接收到的文件包含我所期望的内容(“hello world”:)。

但是,当从另一台计算机尝试时,或者如果我wget mydomain.com:3000得到"connection refused",并且 nmap 告诉我端口未打开:

$> nmap -A -T4 mydomain.com
Host is up (0.00032s latency).
...
Not shown: 999 closed ports
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 5.9p1 Debian 5ubuntu1 (protocol 2.0)
...
Service Info: OS: Linux

知道下一步我应该尝试什么吗?

编辑

以下是 traceroute 提供的结果:

$> traceroute mydomain.com
traceroute to mydomain.com (176.31.x.x), 30 hops max, 60 byte packets
 1  mydomain.com (176.31.x.x)  0.034 ms  0.013 ms  0.010 ms

答案1

如果您的服务器只监听本地主机接口,您将无法从远程计算机访问它。这似乎是您的主要问题,因为您的 netstat 输出中只列出了 127.0.0.1:3000。

您还需要确保“mydomain.com”解析为您的机器的正确 IP 地址,这样连接到该地址将导致与该机器的外部接口进行通信。

答案2

我最近在使用 nodejs HTTPS 服务器时遇到了这个问题,解决方法不是使用“localhost”、“127.0.0.1”甚至域名。而是使用“0.0.0.0”

我相信这是一个通配符,现在允许通过域名进行公开解析,并且它也可以与“localhost”一起使用

编辑:这是有关 0.0.0.0 主题的 serverfault 页面的链接:https://serverfault.com/questions/78048/whats-the-difference-between-ip-address-0-0-0-0-and-127-0-0-1

答案3

您是否正在使用 AWS 或任何其他云服务?在这种情况下,应在云服务级别打开端口。特别是在 AWS 中,您应该寻找需要打开对端口 3000 的访问的“安全组”。

答案4

对于不使用的人来说ufw,它似乎iptables在 Ubuntu 中默认启用,并且必须明确授权此类流量:

iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3000 -j ACCEPT

相关内容