我在 VPN 中的 3 个 Windows Server 2012 R2 上运行副本集。服务器 IP 为:192.168.1.1、192.168.1.2、192.168.1.3。
MongoDB 版本:3.4.2 我想将对 MongoDB 服务器的访问仅限于属于副本集的服务器,因此在每个服务器中。我正在使用此 bind_ip 配置运行 MongoDB(假设我们在 192.168.1.1 服务器上):
net:
bindIp: [127.0.0.1,192.168.1.2,192.168.1.3]
我可以连接到我的副本并且一切都按预期工作。
今天,我将服务器升级到 mongodb 版本 3.4.10。我有两个主要问题:
- bindIp 仅接受 CSV 字符串而不接受数组,因此我将配置更改为 127.0.0.1,192.168.1.2,192.168.1.3(重大更改)
- 我的 MongoDB 服务器无法启动,出现以下错误:[initandlisten] listen(): bind() 失败,请求的地址在其上下文中无效。对于套接字:192.168.1.3:27018 使我的副本集重新启动并运行的唯一方法是在所有服务器中将 bind_ip 更改为 0.0.0.0,这是一个安全问题。
因此,我的问题是关于 3.4.10 版本,如何配置 mongodb (和副本集),以便仅从参与服务器进行访问?这里有错误吗?
答案1
这net.bindIp
配置值仅确定 MongoDB 服务器正在监听哪些 IP 地址。它不是控制来自远程 IP 的访问 - 这是防火墙的作用。您需要在服务器上配置防火墙,以允许副本集的所有成员以及客户端应用程序之间的通信。
有关 Windows 的起点,请参阅:netsh
为 MongoDB配置 Windows防火墙。
(假设我们在 192.168.1.1 服务器上):
net:
bindIp: [127.0.0.1,192.168.1.2,192.168.1.3]
根据您的描述,此服务器用于侦听 localhost 和私有 IP 192.168.1.1 的正确 bindIp 值应为127.0.0.1,192.168.1.1
。您无法绑定到与本地服务器上的网络接口无关的 IP 地址,这就是您The requested address is not valid in its context
在尝试包含远程 IP 时收到错误的原因。
有关保护部署的详细信息,请参阅MongoDB 安全检查表。