业务情景
两台服务器,一台阿里云ECS云服务器(专用网络),另一台是阿里云数据库MongoDB,处于安全考虑MongoDB是不运行外网连接的,那接下来就看怎么实现公网访问。
看到上面红色的网络类型描述,有些人可能已经看出问题所在了,小小的提示:问题出现在开放端口上!
专用网络和经典网络的大致区别可以用一句话讲明白:专用网络更安全,需要设置和配置的东西比较多,适合精通网络的高手;经典网络使用更方便,适合更适合小白用户,使用起来更简单方便,不用繁杂的配置;
思路分析
既然无法直接使用公网(俗称的外网都是一个意思),那就使用端口转发的形式,把可以访问的一台服务器的公网ip和端口转到MongoDB的服务器即可,接下来我们使用rinetd的方式实现端口转发。
具体步骤
rinetd的安装方式有两种,如果是Ubuntu系统,可用apt-get install rinetd -y安装.
下面重点介绍源码安装
1、安装rinetd
分别执行下面命令:
1. wget http://www.boutell.com/rinetd/http/rinetd.tar.gz&&tar -xvf rinetd.tar.gz&&cd rinetd
2. sed -i 's/65536/65535/g' rinetd.c
3. mkdir /usr/man&&make&&make install
2、配置端口映射
打开文件/etc/rinetd.conf,配置内容:
1 0.0.0.0 3717 MongoDB的链接地址 3717
2 logfile /var/log/rinetd.log
0.0.0.0表示本机的所有ip.
3、启动/关闭 rinetd
启动:rinetd
关闭:killall rinetd
4、查看运行情况
netstat -tanulp|grep rinetd
tcp 0 0 0.0.0.0:3717 0.0.0.0:* LISTEN 4270/rinetd
如上内容,显示是运行正常的。
遇到的坑
经过如上的配置之后,使用公网连接还是失败了,访问不了!笔者经过数次改配置,反复启动ip,还是无果,于是感觉进坑了!
问题处理
经过笔者反复排除,使用telnet等手段,分析得出3717的端口是问题的,于是爬文档,发现如果服务器是专用网络的话是需要手动设置开放端口的。
具体操作如下:云服务器ECS => 安全组规则 => 添加安全组规则 => 如方向配置端口范围3717/3717,如下:
经过配置之后,使用MongoDB客户端连接竟然成功了,如图: