Menu Close

Linux下使用rinetd配置端口转发

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. 需要注意

  1. rinetd.conf中绑定的本机端口必须没有被其它程序占用
  2. 运行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

file

附录

附录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

需要注意本地服务器要放开转发端口的防火墙配置。