问题描述

在使用云平台的过程中,为了安全很多服务都不建议开启外部网络访问,比如云平台的RDS,一般情况下都不会开启外部网络直接访问,就算开启了外部网络访问也存在一个问题那就是一般公司都没有固定出口ip地址,如果路由器重启后出口ip就会发生变化,那么就需要重新进行绑定白名单操作,那么怎么解决这个问题呢?

解决方法

rinetd

将 TCP 连接从一个 IP 地址和端口重定向到另一个 IP 地址。rinetd 是一个单过程服务器,可处理与文件中指定的地址/端口对的任何连接数。由于 rinetd 是使用非阻止 I/O 的单个过程运行,因此它能够重定向大量连接,而不会对机器造成严重影响。这使得在 IP 伪装防火墙内的机器上运行 TCP 服务变得实用,这个主要针对的单一的端口转发

安装

我们以centos7系统为例子

#安装依赖
yum -y install gcc gcc-c++ make
#官网地址
http://www.rinetd.com/
#下载地址
wget -c http://www.rinetd.com/download/rinetd.tar.gz
tar -xvf rinetd.tar.gz
#进入目录
cd rinetd
#编译安装
./bootstrap
./configure
make && make install

创建配置文件

cat /etc/rinetd.conf
0.0.0.0 23 10.1.1.2 23
0.0.0.0 8000/udp 10.1.1.2 89/upp

配置解析

0.0.0.0 表示的本机 23 表示是本机的23端口 10.1.1.2 表示目的ip地址 23 表示目的地的端口 意思就是通过本机的23端口访问本机所在局域网内的10.1.1.2的23端口 从0.70版本开始rinetd已经支持UDP转发

启动方式

/usr/sbin/rinetd -c /etc/rinetd.conf

添加成服务启动

#创建rinetd服务
vi /etc/systemd/system/rinetd.service
[Unit]
Description=rinetd
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/sbin/rinetd -c /etc/rinetd.conf

[Install]
WantedBy=multi-user.target

输入命令:systemctl daemon-reload重载daemon使其生效,然后就可以使用下面的命令来管理rinetd了。

#启动rinetd
systemctl start rinetd
#设置开机启动
systemctl enable rinetd
#停止rinetd
systemctl stop rinetd
#重启
systemctl restart rinetd

rinetd注意事项

rinetd支持转发到域名,rinetd会提前解析域名,并将解析出的IP缓存到内存中,如果您的域名解析IP发生了变化必须重启rinetd才会生效,所以rinetd并不适合转发到域名IP经常发生变化的情况