让 Linux 上的 MongoDB 监听远程连接
Posted
技术标签:
【中文标题】让 Linux 上的 MongoDB 监听远程连接【英文标题】:Getting MongoDB on Linux to listen to remote connections 【发布时间】:2011-11-01 20:24:27 【问题描述】:我已经成功地将 MongoDB 作为服务安装在 Windows 上(在本地计算机上),但现在我想将 MongoDb 移动到单独的服务器上。所以我将压缩包解压到网络上的虚拟服务器(运行 linux)。
当我使用 PuTTY 从本地计算机连接到服务器(“testmongoserver”)时,我启动了 mongod 服务器,它告诉我它正在侦听默认的 28017 端口。 mongo 控制台也在工作,允许我创建一个新数据库 (testdb) 并向其中添加用户。
但是,我无法从远程访问服务器。当我输入testmongoserver:28017
时,它不会像我的本地计算机上的localhost:28017
那样打开HTTP 控制台。我也无法使用官方驱动程序并提供连接字符串。
在 Linux 上安装 MongoDB 的必要步骤是什么,以便我可以通过连接字符串从远程计算机访问它并通过 testmongoserver:28017
使用其 HTTP 控制台
谢谢!
【问题讨论】:
您是否使用了正确的连接字符串? mongodb.org/display/DOCS/Connections 更改了任何设置? mongodb.org/display/DOCS/File+Based+Configuration 确保没有防火墙规则(在任一侧)阻止您连接到远程服务器。 【参考方案1】:1。绑定IP选项
绑定 IP 是一个 MongoDB 选项,可将连接限制到特定 IP。
查看您的 mongod 配置文件,出于明显的安全原因,大多数情况下 bind_ip 设置为 127.0.0.1
。你可以:
-
通过连接逗号分隔值列表来添加所需的 IP,以将 MongoDB 绑定到多个 IP 地址。
删除或注释(带有
#
字符)bind_ip
行。但请注意,所有远程连接都可以连接到您的 MongoDB 服务器!
更多关于bind_ip
配置选项:https://docs.mongodb.com/manual/reference/configuration-options/#net.bindIp
绑定IP也可以设置为命令参数:http://docs.mongodb.org/manual/reference/program/mongod/#cmdoption--bind_ip
2。防火墙
检查您没有在防火墙后面运行
【讨论】:
应该被选为正确答案。查明问题并进行解释。 我要澄清的是,要接受特定网络适配器上的连接,您必须将 bind_ip 设置为此网络适配器的 IP。 这不是传入连接的过滤器!【参考方案2】:确保在您的/etc/mongodb.conf
文件中包含以下行,
bind_ip = 0.0.0.0
http://jitu-blog.blogspot.com.br/2013/06/allow-mongo-to-connect-from-remote-ip.html
【讨论】:
从配置的角度来看这是个坏主意。通过注释掉 bind_ip 行,您将获得相同的结果。我鼓励用逗号分隔服务器的特定私有或公共 ip:127.0.0.1,10.x.x.x 真是个坏主意,特别是在使用 mongo 时出现了新漏洞。 是的,在生产环境中工作是个坏主意。如果 env=development,此设置将是“可接受的”。小心 我在 Windows 中,看不到文件 etc/mongod.conf。它在哪里或者我应该把它放在哪里?我试图把它放在我的 mongodb.config 文件中,但它没有改变任何东西。 仅限开发环境。但取消注释 bind_ip 不允许远程访问。它必须设置为 0.0.0.0 才能接受来自远程主机的连接。就像其他人提到的那样,提供您希望连接的 IP 地址列表是在 prod env 中执行此操作的方法。【参考方案3】:-
在 mongo 服务器上运行 netstat -a 并检查端口。
检查 DNS 设置并检查 linux 服务器是否允许外部连接。
检查 mongodb 是否可以接受外部/远程连接。
mongo 的默认端口是 27017。 28017 - 用于 webstats 的端口。
见http://www.mongodb.org/display/DOCS/Security+and+Authentication#SecurityandAuthentication-Ports
【讨论】:
我的问题是#3。这是因为绑定 IP 设置为 127.0.0.1,正如 @Yves M. 在他的 answer 中所描述的那样。 有时需要重启服务器才能使更改生效。【参考方案4】:刚刚遇到这个问题,这解决了它:
使用sudo nano /etc/mongod.conf
编辑/etc/mongod.conf
确保网络部分如下所示(默认情况下本地主机绑定不允许远程访问):
# network interfaces
net:
port: 27017
bindIp: 0.0.0.0
确保在完成上述操作后重新启动 mongod(假设 systemd ubuntu 16.04+ 等):
sudo service mongod restart
显然,从安全的角度来看,如果您要向您的网络/世界开放 mongo,请注意这一点(如果有的话)的影响
【讨论】:
正如在上一篇文章中指出的那样,在这种情况下,您还应该使端口 27017 可用。此外,您可能有安全问题,为了减少它们,您可以如前所述,限制可访问端口的 IP 和/或使用密码创建用户。我最近经历了这个,我在这里记录了整个过程:incredulosanonimos.blogspot.co.uk/2018/04/…。【参考方案5】:另一个问题可能是没有启用mongodb端口。从另一台主机检查服务器上启用的端口。为此,您可以使用以下命令:
sudo nmap -P0 your_server_ip
你可以得到这样的答案:
Host is up (0.052s latency).
Not shown: 997 filtered ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
443/tcp closed https
如果使用云中的虚拟服务器,如AWS,则需要添加新规则添加mongodb端口(默认为27017)。
重要提示:请注意,使用此配置,任何人都可以访问您的数据库
【讨论】:
【参考方案6】:我通过以下参考修复:
https://medium.com/founding-ithaka/setting-up-and-connecting-to-a-remote-mongodb-database-5df754a4da89
实际上,首先我在 mongod.conf 中将我的 bindIp
从 127.0.0.1
更改为 0.0.0.0
,
并启用安全性:
security:
authorization: "enabled"
然后我使用sudo service mongod restart
重新启动了 mongod。(因为 mongod.conf 中的新更改),之后设置防火墙以打开 mongod 运行端口(通过 iptables)并在 admin db 中创建一个具有新访问权限的新用户(基于此链接:https://medium.com/mongoaudit/how-to-enable-authentication-on-mongodb-b9e8a924efac),最后使用 (https://www.yougetsignal.com/tools/open-ports/) 从外部测试我服务器中的开放端口,并使用 mongocompass.exe 成功连接到远程 mongod。
【讨论】:
以上是关于让 Linux 上的 MongoDB 监听远程连接的主要内容,如果未能解决你的问题,请参考以下文章