端口转发工具-rinted简析以及在NCE项目的简单应用

rinted简析

Rinetd是为在一个Unix和Linux操作系统中为重定向传输控制协议(TCP)连接的一个工具。Rinetd是单一过程的服务器,它处理任何数量的连接到在配置文件etc/rinetd中指定的地址/端口对。它是一个应用层的端口转发程序,比较适用于同一台机器上或者同一个网络中的端口转发。

rinted安装及配置

下载tinetd.tar; 解压,编译安装:tar xvzf rinetd.tar.gz;make;make install; 这时可以看到在/usr/sbin/路径下已经有可执行文件了:rinetd; 配置文件: /etc/rinetd.conf; 配置文件的格式如下:

   [Source Address] [Source Port] [Destination Address] [Destination Port]

在每一单独的行中指定每个要转发的端口。源地址和目的地址都可以是主机名或IP 地址,IP 地址 0.0.0.0 将rinetd 绑定到任何可用的本地IP地址上。 例如:

   0.0.0.0 3306 192.168.1.77 3306

这一条就是将发往本机的3306端口的所有包都转发到192.168.1.77机器的3306端口。 配置完毕以后将rinted启动即可: service rinetd start 查看rinted打印的日志:/var/log/rinetd.log

rinted在NCE的简单应用

(备注:由于发布blog范围较广,因此隐去了ip的最后一位,如需要详细真实配置请移步NCE测试白皮书内的环境部署内容)

NCE线下环境部署时,有两个场景用到了rinted转发。 1.联调环境的registry和auth服务器使用了rinted转发。 背景如下:联调环境registry和auth所在的服务器只有私有网络即10.180.148开头的ip地址。 而使用镜像仓库服务的不止是build服务器,还有node节点内容器中拉取镜像等场景。而线下环境是没有外网的,如果想每种场景拉取及push镜像都可以网络通,就只能使用机房网络加-insure-registry配置方式来生效。 因此将tinetd部署在一台既有机房网络又有私有网络的服务器上,完成了本机端口与联调环境registry服务器端口的转发。 配置如下所示:

#--liantiao-registry
0.0.0.0 5002 10.180.148.** 5000
#--liantiao-auth
0.0.0.0 6001 10.180.148.** 5001

注:该服务器的机房网络为:10.180.155.,即如果想用联调的镜像仓库服务,则直接login10.180.155. 的5002端口即可。 登录命令参考如下:

docker login -u ***@163.com -p *** -e ***@163.com 10.180.155.**:5002

2.为了满足其他模块的同学在本地同时需要访问nce的服务和其他模块的服务,需要通过nce建立到其他模块服务器的转发,否则就需要同时登录nce和其他模块的vpn,2个vpn会产生冲突。 目前的转发机器为qa-control-pub-qa(10.180.148.**)

目前的转发配置为

# bindadress    bindport  connectaddress  connectport

#rds
 0.0.0.0 9191 10.180.154.** 8181
 #liantiao rds
 0.0.0.0 19494 10.180.154.** 8484
 #yanlian rds
 0.0.0.0 9494 10.180.154.** 8484
 #ci rds
 0.0.0.0 19191 10.180.155.** 8181
 #apm
 0.0.0.0 19292 10.180.155.** 8181
 #nlb
 0.0.0.0 19192  10.180.152.** 8080
 #ncr
 0.0.0.0 18000 10.180.152.** 8181

配置完成后,就只需要登录nce的vpn就可以访问后端rds和apm等服务了。

小结

机房网是打通各个私有网络之间的桥梁,但针对有些没有机房网或者多个私有网络之间ip有冲突的场景下,就比较适合做一次转发来解决问题。在流量比较小,转发需求比较简单的情况下,rinetd非常简单易用。但如果有一对多转发或者多对多转发的高级需求,建议使用nginx来解决问题。

本文来自网易实践者社区,经作者崔晓晴授权发布。