一、实验背景

Linux下端口转发一般都使用iptables来实现,使用iptables可以很容易将TCP和UDP端口从防火墙转发到内部主机上。
如果需要将流量从专用地址转发到不在您当前网络上的机器上,可尝试另一个应用层端口转发程序rinetd,配置起来比iptables也简单很多。
Rinetd是为在一个Unix和Linux操作系统中为重定向传输控制协议(TCP)连接的一个工具。Rinetd是单一过程的服务器,它处理任何数量的连接到在配置文件etc/rinetd中指定的地址/端口对,尽管rinetd使用非闭锁I/O运行作为一个单一过程,它可能重定向很多连接而不对这台机器增加额外的负担。

二、实验环境

操作系统: CentOS7.5 Minimal
rinted服务器: 192.168.1.103
Backend服务器: 192.168.1.107

三、安装rinetd

安装rinted方式主要有两种:rpm包安装和源码编译安装

  • rpm安装方式
    网上有人用源码包编译了rpm安装包,联网的情况下我们可以直接配置yum源安装,离线的情况下我们可以将下载的rpm包拷贝到无网的服务器,因为主包没有依赖,安装显得异常简单方便。
  • 配置yum仓库安装
#  vim /etc/yum.repos.d/nux-misc.repo
####################################################
[nux-misc]
name=Nux Misc
baseurl=http://li.nux.ro/download/nux/misc/el7/x86_64/
enabled=0
gpgcheck=1
gpgkey=http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
#######################################################
# yum  -y install  rinetd  --disablerepo="*"  --enablerepo=nux-misc
# wget  http://li.nux.ro/download/nux/misc/el7/x86_64//rinetd-0.62-9.el7.nux.x86_64.rpm
# rpm  -ivh  rinetd-0.62-9.el7.nux.x86_64.rpm
# rpm -ql  rinetd
# cat  /etc/rc.d/init.d/rinetd
# cat /etc/rinetd.conf
# /usr/sbin/rinetd  --help
#  /usr/sbin/rinetd  -v
# systemctl  status rinetd

四、关于rinetd 的配置文件的配置

rpm安装的配置文件默认路径是/etc/rinetd.conf,本实验中我们将编译安装的配置文件 /usr/local/rinetd/etc/rinetd.conf

注意:源端口转发到目标端口时,源端口要是空闲端口,否则会报端口已被占用
关于配置文件的更多其他配置,见参考文档

五、端口转发测试

实验:将rinted服务器(192.168.1.103)的6033端口转到Backend服务器(192.168.1.107)的3306
在Backend服务器(192.168.1.107)

# systemctl  status mysqld
# ss  -tan | grep 3306

# firewall-cmd --zone=public--add-port=3306/tcp --permanent
# firewall-cmd --reload
在rinted服务器(192.168.1.103)
# firewall-cmd --zone=public--add-port=6033/tcp --permanent
# firewall-cmd --reload

# vim  /usr/local/rinetd/etc/rinetd.conf
#############################################
192.168.1.103 6033  192.168.1.107 3306
allow 192.168.1.*
logfile /usr/local/rinetd/log/rinetd.log
#############################################

# systemctl  restart  rinetd.service
# systemctl  status  rinetd.service

# echo  >  /dev/tcp/192.168.1.103/6033
# echo  >  /dev/tcp/192.168.1.107/3306

# tail  /usr/local/rinetd/log/rinetd.log

六、参考

1.Linux下使用 Rinetd 来实现端口转发
https://www.hi-linux.com/posts/29683.html

2.RINETD(8) Unix System Manager's Manual
https://www.boutell.com/rinetd

3.生产环境中谨慎使用rinetd
https://blog.csdn.net/woshiaotian/article/details/78133195

4.Linux安装rinetd实现TCP端口转发
https://www.xiaoz.me/archives/10175

5.rinetd-0.62-9.el7.nux.x86_64.rpm
https://centos.pkgs.org/7/nux-misc-x86_64/rinetd-0.62-9.el7.nux.x86_64.rpm.html

6.Port-Forwarding With rinetd
https://www.howtoforge.com/port-forwarding-with-rinetd-on-debian-etch

7.Comprehensive Guide to Port Redirection using Rinetd
https://www.hackingarticles.in/comprehensive-guide-to-port-redirection-using-rinetd

转载于https://www.jianshu.com/p/2605d247b944