为什么我已将 MongoDB 的 IP 设置为 0.0.0.0 且没有防火墙,却无法从外部连接到 MongoDB?

为什么我已将 MongoDB 的 IP 设置为 0.0.0.0 且没有防火墙,却无法从外部连接到 MongoDB?

第一个netstat -nltp输出显示:

tcp        0      0 0.0.0.0:27017           0.0.0.0:*               LISTEN      1235/mongod

因此看起来 MongoDB 正在端口上运行27017并接受来自所有连接IPs

为了确保MongoDB它已启动并正在运行,我发出了mongo命令以确保我可以看到 mongoDB:

mongo --port 27017 -u "MyUser" --authenticationDatabase "admin" -p 'MyPassword'

MongoDB shell version v4.2.8
connecting to: mongodb://127.0.0.1:27017/?authSource=admin&compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("00000000-d8c3-422a-9446-38eb624dd88f") }
MongoDB server version: 4.2.8

现在我尝试使用tcptraceroute命令来确保中间没有任何东西会关闭我的连接:

$ sudo tcptraceroute My-Server-IP-Address 27017
Password:
Selected device en0, address 192.168.1.55, port 54871 for outgoing packets
Tracing the path to My-IP-Address on TCP port 27017, 30 hops max
 1  192.168.1.1  8.847 ms  3.853 ms  0.994 ms
 2  * * *
 3  10.101.96.93  26.486 ms  24.977 ms  27.186 ms
 4  10.101.105.14  41.399 ms  30.886 ms  16.155 ms
 5  * * *
 6  10.101.97.57  24.635 ms  29.538 ms  17.545 ms
 7  10.101.117.25  39.587 ms  47.088 ms  62.840 ms
 8  * * *
 9  10.21.251.106  29.101 ms  29.739 ms  34.785 ms
10  10.21.21.22  35.107 ms  19.941 ms  20.011 ms
11  10.21.211.20  49.572 ms  33.257 ms  34.870 ms
12  * * *
13  * * *
14  ex9k1.dc5.fsn1.A-DOMAIN.com (AN-IP-ADDRESS)  93.807 ms  108.962 ms  115.046 ms
15  static.ANOTHER-IP.clients.your-server.it (IP-ADDRESS-IT)  99.938 ms  102.719 ms  109.238 ms
16  static.MY.IP.ADDRESS.clients.your-server.de (MY.IP.ADDRESS) [closed]  173.753 ms  112.972 ms  102.902 ms

在最后一跳我看到了[closed]旗帜。


列出所有服务器防火墙规则:

$ sudo iptables -L -n 
-> # sudo iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
DOCKER-USER  all  --  0.0.0.0/0            0.0.0.0/0
DOCKER-ISOLATION-STAGE-1  all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            ctstate RELATED,ESTABLISHED
DOCKER     all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain DOCKER (1 references)
target     prot opt source               destination
ACCEPT     tcp  --  0.0.0.0/0            172.18.0.3           tcp dpt:80

Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target     prot opt source               destination
DOCKER-ISOLATION-STAGE-2  all  --  0.0.0.0/0            0.0.0.0/0

Chain DOCKER-ISOLATION-STAGE-2 (1 references)
target     prot opt source               destination
DROP       all  --  0.0.0.0/0            0.0.0.0/0

Chain DOCKER-USER (1 references)
target     prot opt source               destination
RETURN     all  --  0.0.0.0/0            0.0.0.0/0

Chain ufw-after-forward (0 references)
target     prot opt source               destination

Chain ufw-after-input (0 references)
target     prot opt source               destination

Chain ufw-after-logging-forward (0 references)
target     prot opt source               destination

Chain ufw-after-logging-input (0 references)
target     prot opt source               destination

Chain ufw-after-logging-output (0 references)
target     prot opt source               destination

Chain ufw-after-output (0 references)
target     prot opt source               destination

Chain ufw-before-forward (0 references)
target     prot opt source               destination

Chain ufw-before-input (0 references)
target     prot opt source               destination

Chain ufw-before-logging-forward (0 references)
target     prot opt source               destination

Chain ufw-before-logging-input (0 references)
target     prot opt source               destination

Chain ufw-before-logging-output (0 references)
target     prot opt source               destination

Chain ufw-before-output (0 references)
target     prot opt source               destination

Chain ufw-reject-forward (0 references)
target     prot opt source               destination

Chain ufw-reject-input (0 references)
target     prot opt source               destination

Chain ufw-reject-output (0 references)
target     prot opt source               destination

Chain ufw-track-forward (0 references)
target     prot opt source               destination

Chain ufw-track-input (0 references)
target     prot opt source               destination

Chain ufw-track-output (0 references)
target     prot opt source               destination

最后我的telnet输出是:

$ telnet MY-IP 27017
Trying MY-IP...
telnet: connect to address MY-IP: Connection refused
telnet: Unable to connect to remote host

我做错了什么?我应该怎么做才能MongoDB从外部连接?


编辑:

通过将端口从 27017 更改为 27018,我可以连接并且一切正常。但我仍然很好奇为什么我不能使用 27017 端口以及我在配置MongoDB中做错了什么?iptables

笔记:ufw 防火墙已禁用。

答案1

“从外部”是指一般的网络,比如路由器/防火墙后面吗?

听起来好像是你的防火墙/路由器阻止了它。我指的不是操作系统防火墙,而是你的物理防火墙。

您应该检查是否设置了允许外部连接的策略,以及在路由器上配置了 NAT(端口转发)。

答案2

一种可能是您的 ISP 阻止了该端口。许多人使用透明代理和其他东西。

另一种情况是您在客户端计算机中使用了具有同样功能的防病毒软件。

或者您的路由器激活了动态端口或 NAT,造成干扰。

另一种可能性是另一个进程正在监听该端口:

sudo netstat -tulpn

这将告诉您哪个进程正在监听哪个端口。我看到您的输出只有一行,但可能发生的情况是,您有另一个进程正在监听该端口,其 IP 为 xxxx,而 mongo 正在监听该端口,其 IP 为 0.0.0.0,但对于 xxxx 则不行

您还可以使用:

sudo ss -tunlp

如果 Mongo 正在监听正确的端口,则运行 tcpdump 来了解您的计算机是否到达那里。

sudo tcpdump | grep $YOURIP

其中 $YOURIP 是客户端机器的 IP,也就是您的工作站。

运行 tcpdump 然后尝试连接。如果您没有看到任何内容,则表示有东西阻塞了连接。

我要尝试做的第一件事就是了解 Mongo 是否在监听正确的端口以及数据包是否到达。

相关内容