某位阿里云上的用户提了个需求:
阿里云上两个数据库服务器A和B,本来规划是没有公网IP,不能从公网访问,只能线上业务系统从VPC访问。
但是后续用户的报表系统要从公网直连数据库服务器A,用于输出报表。
所以就给A服务器临时配置了个EIP(弹性公网IP),可以从公网访问服务器A的Oracle数据库。
随后又需要从公网连接服务器B,但不想再买EIP(弹性公网IP)。
rinetd是一个可以实现TCP端口转发的小软件(UDP不支持)。
可以编译安装,也可以rpm安装。
rpm包下载地址如下:
http://li.nux.ro/download/nux/misc/el6/x86_64/rinetd-0.62-9.el6.nux.x86_64.rpm
图1 添加语句
图2 服务器A的监听端口
在A服务器上安装这个软件
r p m - i v h rinetd-0.62-9.el6.nux.x86_64.rpm
修改/etc/rinetd.conf文件
添加如下语句,如图1。
语句1,在A服务器的所有IP上监听15282端口,将流量转发给10.10.10.81(服务 器 B) 的1521端口。
语句2,同时限制只能申明的3个IP可以访问该端口。
检查配置文件语法是否正确
/sbin/rinetd -c /etc/rinetd.conf
启动rinetd服务
service rinetd start
查看服务器A的监听端口,如图2。
到此步,后面连接服务器A的TCP 15282端口就相当于连接服务器B的TCP 1521端口。
理论上来说iptables也是可以实现该需求的,只是公有云上一般都提供安全组或者虚拟防火墙,不需要开iptables,如果开起可能会影响到已经在线上运行的业务。
如果需要其他协议类型,如UDP的转发,就需要socat一类的软件了。