【rinetd】Linux用rinetd实现TCP/UDP端口转发

一、背景

在Linux系统中大多数情况选择用iptables来实现端口转发,iptables虽然强大,但配置不便,而且新手容易出错。
在此分享另一个TCP/UDP端口转发工具rinetd,rinetd体积小巧,配置也很简单。

二、安装rinetd

#安装依赖
yum -y install gcc gcc-c++ make automake

#下载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

安装后,可以输入rinetd -v查看当前版本。

#  rinetd -v
rinetd 0.70

随着时间推移,上面下载地址不一定是最新的,大家可前往Github:https://github.com/samhocevar/rinetd/releases下载最新版本。

特别注意: 2019年12月26日,某组织注册的http://www.rinetd.com/域名上线,以rinetd工具的'官方'站点的身份,对外提供附带后门的rinetd源码压缩包下载。

三、 设置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:源IP

2018:源端口

103.74.192.160:目标IP

2019:目标端口

上面配置的意思是将本地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

为了方便管理,我们可以为rinetd编写一个systemd服务,有兴趣的同学可参考《Linux系统编写Systemd Service实践》。

#创建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
# 重载daemon
systemctl daemon-reload

#启动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具体性能如何并未进一步测试,不知道高并发的情况下能否扛得住。

五、参考

rinetd实现TCP/UDP端口转发
https://mp.weixin.qq.com/s/lkk1gZ-6AgOVK_AEehh59Q

知名端口转发工具rinetd遭高仿投毒
https://mp.weixin.qq.com/s/9N1nO1KwR-IEz2RYedhNEQ

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容