我有一台 Ubuntu 服务器正在尝试连接到远程 MongoDB 服务器。当我尝试通过以下方法连接到远程 MongoDB 服务器时:
mongo -u user -p pass yourdb.com:27017
它返回以下错误:
2018-06-04T20:41:36.667-0400 W NETWORK [thread1] Failed to connect
to 35.170.208.181:27017 after 5000ms milliseconds, giving up.
2018-06-04T20:41:36.667-0400 E QUERY [thread1] Error: couldn't
connect to server yourdb.com:27017, connection attempt failed :
connect@src/mongo/shell/mongo.js:251:13
@(connect):1:6
exception: connect failed
/etc/mongod.conf 上的 bindIP 设置为 0.0.0.0
net:
port: 27017
bindIp: 0.0.0.0
当我使用时sudo iptables -L -n | grep 27017
,我得到以下结果:
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp
dpt:27017
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp
spt:27017 state ESTABLISHED
我可以从其他服务器和我自己的本地机器访问远程数据库,因此看来这台机器上的防火墙配置不正确。
远程 MongoDB 服务器已打开其安全组端口以与该服务器交互,因此这也不是问题。
已经寻找资源好几个小时了,所以需要帮助。谢谢!
编辑
尝试使用 telnet 从服务器实例测试远程 mongo 实例,它响应如下:
telnet: Unable to connect to remote host: Connection timed out
答案1
如果对端口 27017 上的 TCP 连接是否真正打开存在疑问,那么是时候使用 TCPDUMP 实用程序了。这允许您查看实际流量以查看 TCP 握手是否完成。
使用类似语法tcpdump -ni eth0 port 27017
假设您可以通过其他端口访问服务器,则流量可能在路由器/防火墙之间被丢弃,也可能是服务器错误处理了回复。TCPDUMP 有助于解释这一点,您可以关注日志文件或其他潜在原因。