1. 简介
Linux下简单好用的工具rinetd,实现端口映射/转发/重定向
官网地址http://www.boutell.com/rinetd
软件下载:wget http://www.boutell.com/rinetd/http/rinetd.tar.gz
2. 安装与配置
2.1. 解压与安装
[shell]
tar zxvf rinetd.tar.gz
mkdir -p /usr/man/man8
cd rinetd
make install
2.2. 编辑配置
rinetd的配置文件 /etc/rinetd.conf
默认为空,其写入内容的格式为:
[text]
bindaddress bindport connectaddress connectport
绑定的地址 绑定的端口 连接的地址 连接的端口
或
[Source Address] [Source Port] [Destination Address] [Destination Port]
源地址 源端口 目的地址 目的端口
- 示例
[text]
0.0.0.0 8080 172.19.94.3 8080
0.0.0.0 2222 192.168.0.103 3389
1.2.3.4 80 192.168.0.10 80
说明一下(0.0.0.0表示本机绑定所有可用地址)
将所有发往本机8080端口的请求转发到172.19.94.3的8080端口
将所有发往本机2222端口的请求转发到192.168.0.103的3389端口
将所有发往1.2.3.4的80端口请求转发到192.168.0.10的80端口
2.3. 启动程序
[shell]
# 关闭进程
pkill rinetd
# 启动转发
rinetd -c /etc/rinetd.conf
2.4. 查看状态
[shell]
netstat -antup
2.5. 需要注意
- rinetd.conf中绑定的本机端口必须没有被其它程序占用
- 运行rinetd的系统防火墙应该打开绑定的本机端口
3. 编写systemd下服务脚本
3.1. 编写 .service
文件
编写属于自己的unit文件,文件目录在/usr/lib/systemd/system
,创建的文件名为rinetd.service
,文件的详细内容如下:
[Unit]
# 描述
Description=Port forwarding service
# 要依赖的服务(在启动你的服务之前,需要先启动那个服务)
After=network.target
[Service]
# 服务启动的模式
Type=forking
# 启动命令 (服务所在目录的全称)
ExecStart=/usr/sbin/rinetd -c /etc/rinetd.conf
# 关闭命令
ExecStop=/bin/kill -15 $MAINPID
# 文件拥有者
User=root
# 文件所在组
Group=root
[Install]
WantedBy=multi-user.target
注意,配置文件三个区块 [Unit]
、[Service]
、[Install]
的详细内容请参考 Systemed systemctl 创建服务 详解
3.2. 将rinetd.service
注册到系统中
- 设置服务开机后启动
[shell]
systemctl enable rinetd.service
输出如下内容:
Created symlink from /etc/systemd/system/multi-user.target.wants/rinetd.service to /usr/lib/systemd/system/rinetd.service.
输出表明,注册的过程实际上就是将服务链接到/etc/systemd/system/
目录下。
- 查询是否自启动服务
[shell]
systemctl is-enabled rinetd.service
或者:
systemctl list-unit-files | grep rinetd
3.3. 启动与停止服务
- 启动服务
[shell]
systemctl start rinetd.service
- 停止服务
[shell]
systemctl stop rinetd.service
- 查看服务状态
[shell]
systemctl status rinetd.service
附录
附录A. 相关联的文章
附录B. 其他参考
附录C. 利用防火墙添加端口映射
-
通过防火墙添加端口映射
[shell] firewall-cmd --permanent --zone=public --add-forward-port=port=1112:proto=tcp:toport=8090:toaddr=192.168.3.3 firewall-cmd --reload
-
通过防火墙移除端口映射
[shell] firewall-cmd --permanent --zone=public --remove-forward-port=port=1112:proto=tcp:toport=8090:toaddr=192.168.3.3 firewall-cmd --reload
需要注意本地服务器要放开转发端口的防火墙配置。