安装rinetd
这篇文章以CentOS 7为例,复制下面的命令输入,一行一个:
-
#安装依赖
-
yum -y install gcc gcc-c++ make
-
#下载rinetd
-
wget https://github.com/samhocevar/rinetd/releases/download/v0.70/rinetd-0.70.tar.gz
-
#解压
-
tar -zxvf rinetd-0.70.tar.gz
-
#进入目录
-
cd rinetd-0.70
-
#编译安装
-
./bootstrap
-
./configure
-
make && make install
安装后,可以输入rinetd -v
查看当前版本。
-
[root@kryptcn2 rinetd-0.70]# rinetd -v
-
rinetd 0.70
随着时间推移,上面下载地址不一定是最新的,大家可前往Github:https://github.com/samhocevar/rinetd/releases下载最新版本。
执行./bootstrap
命令可能会遇到报错 /bin/sh^M: bad interpreter: No such file or directory,
经过查阅资料才知道,这是由于文件格式的问题:使用vi/vim进入该shell文件,按下:
进入末行模式,输入set ff
查询文件格式,结果如下:
fileformat=dos
原因是bootstrap的文档格式是dos格式,需要修改为UNIX格式:
解决方案:
通过vi/vim进入想要修改的文件,按下:
进入末行模式,输入set fileformat=unix
,接着按下ZZ
或者按下shift + z + z
或者输入:x
或者:wq
保存修改即可。
设置TCP端口转发
-
#新建rinetd配置文件
-
vi /etc/rinetd.conf
-
#填写如下内容
-
0.0.0.0 2018 103.74.192.160 2019
-
#启动rinetd
-
rinetd -c /etc/rinetd.conf
rinetd配置文件的格式如下:
0.0.0.0
:源IP2018
:源端口103.74.192.160
:目标IP2019
:目标端口
上面配置的意思是将本地2018端口转发到103.74.192.160
的2019端口,启动后可以输入netstat -apn|grep 'rinetd'
查看是否运行正常,注意还需要在自己服务器防火墙放行对应的源端口,否则无法正常使用用。
从0.70
版本开始rinetd已经支持UDP转发,写法如下:
127.0.0.1 8000/udp 192.168.1.2 8000/udp
创建systemd服务
为了方便管理,我们可以为rinetd编写一个systemd服务,有兴趣的同学可参考《Linux系统编写Systemd Service实践》,xiaoz已经编写好了,直接复制下面的内容即可:
-
#创建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经常发生变化的情况,而socat则不存在此问题。
其它转发工具
总结
rinetd安装和配置都非常简单,并且从0.70
版本开始已经支持UDP转发,但rinetd具体性能如何xiaoz并未进一步测试,不知道高并发的情况下能否扛得住。