【发布时间】:2018-06-26 11:58:16
【问题描述】:
我有一个 VPC,在 VPC 内:
- 私有数据库 Mongodb 实例。安全入站链接到我的公共节点 安全实例。
- 公共 NAT 实例。
- 通过我的 NAT 实例的公共 nodejs 应用程序实例
我可以通过我的 nodejs 实例 ssh 进入 Mongodb 实例。 我能够下载并在我的私人数据库上运行 mongodb。 但不确定从我的 nodejs 实例连接到 mongodb 私有实例的连接字符串。
我有:mongoose.connect('mongodb://username:password@xx-x-x-xx:27017/admin'); 错误信息: MongoNetworkError:第一次连接时无法连接到服务器 [xx-x-x-xx:27017] [MongoNetworkError: connect ECONNREFUSED xx-x-x-xx:27017]
我的 mongodb 只有一个私有 ip,并且认为这就是它无法连接的原因?我是否必须以某种方式通过我的 NAT 实例?
有人通过 NAT 连接到私有 Mongodb 实例吗?
我之前没有通过私有 VPC 连接过..
【问题讨论】:
-
有点混乱。您的意思是您有一个带有公共子网和私有子网的 VPC?公共子网中的Nodejs应用程序服务器和NAT网关与私有子网中的MongoDB?
public node security instance和Public nodejs application instance是同一个实例吗?另外,为什么你还在同一个内部网络中时要通过 NAT 网关? -
是的,对不起。我在 VPC 中有 3 个子网。私有子网中的 MongoDB 实例,其自己的公共子网中的 NAT 实例,其自己的公共子网中的 nodejs 服务器实例。节点服务器通过 nat 实例到达 Mongodb 实例。我观看了一段视频,并被告知启动安全数据库的最佳方式就是这样做。我能够 ssh 进入 Mongodb 实例并下载 Mongodb,但由于实例是私有的,因此不确定连接字符串。我需要这样做吗?
-
感谢您的澄清 :) 从技术上讲,您不必通过 NAT 网关访问 MongoDB。对于如此简单的设置,这使得路由有点混乱,并且不会提高安全性。 (另外,这是一个充当 NAT 网关的 EC2 实例,还是通过 VPC 部分中的 AWS 控制台配置的 NAT 网关?)无论如何,
I am able to ssh into Mongodb instance...这是来自 nodejs 服务器吗?如果是这样,最可能的原因是端口 27017 未包含在附加到您的 MongoDB 实例的安全组中(确保它只允许您的 nodejs 服务器的私有 IP) -
是的,它看起来确实有点乱! EC2 实例充当 NAT 网关。我通过我的 Nodejs 服务器实例 ssh。我的 Mongodb 实例源的安全组设置为用于 ssh 的 Nodejs 子网 CIDR 块以及端口 27017。当您说“确保它允许您的 nodejs 服务器的私有 IP”时,您是在谈论子网 cidr 块做对了吗?我应该完全放弃 NAT 吗?
-
是的,子网 CIDR 块很好。您应该可以从您的 nodejs 实例中
telnet <mongo.private.ip.here> 27017。 (PS 希望 xx-x-x-xx 表示 xx.x.x.xx,除非它指的是私有 DNS)如果您无法连接,则可能是操作系统上的配置(如果 ubuntu.SELinux如果是 CentOS 或 Amazon Linux 之类的变体(尽管我认为默认禁用)?)
标签: node.js mongodb amazon-web-services amazon-ec2 mongoose