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


21

我试图在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

禁用ufw,然后重试。如果这不起作用,则远程计算机和服务器之间还有另一个防火墙/设备。
ish 2012年

我已经尝试过了..没有解决问题:(
sebpiq 2012年

“远程计算机和服务器之间存在另一个防火墙/设备。” :这不太可能。我从服务器尝试了第二个wget,以便它可以通过网络往返。
sebpiq 2012年

嗯?您无法从serverseb键入wget serverseb.com并使其在没有一些花哨的iptables路由魔术的情况下进行往返。请粘贴traceroute mydomain.com来自远程计算机的输出。您可以**最后一个(服务器)IP的最后两个八位位组,以保护隐私。
ish 2012年

用traceroute编辑
sebpiq 2012年

Answers:


24

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

您还需要确保“ mydomain.com”解析为您计算机的正确IP地址,以便连接到该IP地址将导致与该计算机外部接口的通信。


我可以使用其名称SSH到计算机,因此我猜这里的名称解析不是问题。如何使服务器可以从任何地方侦听?
sebpiq 2012年

1
@sebpiq此分辨率是特定于程序的。您需要通过名称{ eth0或类似名称),IP地址(192.168.1.99或类似名称)或MAC地址将程序的侦听器绑定到正确的接口。这取决于程序。
恢复莫妮卡-ζ-2012年

嗯...听起来很疯狂:S我会尝试在Google上搜索。我的服务器是node.js,所以我将检查是否有需要连接到哪个接口的信息。
sebpiq 2012年

耶普!@ObsessiveFOSS和dobey非常感谢您!我的node.js服务器实际上只在本地主机上侦听。我不知道它是那样做的,本教程中都没有提到。
sebpiq 2012年

@sebpiq没问题。:-)
恢复莫妮卡-ζ-2012年

13

我最近在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-0-and- 127-0-0-1


确切地在哪里使用“ 0.0.0.0”?
阿达芬2015年

@Adaephon就我而言,我创建了一个基于节点的Web服务器。我不得不发生变化: }).listen(3000, '127.0.0.1');}).listen(3000, '0.0.0.0'); 我的代码。
萨米·福阿德

@Adaephon因此,我不确定这有多少帮助,但是无论您在定义IP /主机名的任何地方,都可以尝试使用0.0.0.0。
萨米·福阿德

你能拜访我的帖子吗? stackoverflow.com/questions/37922804/...
Kar19

1
从套接字接口的角度来看,0.0.0.0(或二进制表示形式0)被认为是在倾听所有人的声音。您可以提供另一个IP,它将仅侦听拥有该IP的接口。例如,如果您提供127.0.0.1,则只能接收来自127。*。*。* IP(实际上是本地主机)的连接,或来自具有严重错误的路由表的其他计算机的连接,这些计算机将为您访问127.0.0.1的路由表(以对此进行测试最后一个案例!)
Paul Stelian

3

您是否有可能使用AWS或任何其他云服务?在这种情况下,应在即时(OS)配置级别或之后打开端口。特别是在AWS中,您应该寻找“安全组”,在其中应打开对端口3000的访问

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.