第一个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 是否在监听正确的端口以及数据包是否到达。