MENU

安装redir并设置systemd守护进程管理服务

November 11, 2025 • Linux

安装

我使用的是Debian,直接使用apt install redir安装即可

使用redir --version如果出现对应的版本号,表示安装成功

redir --version
3.3

简单使用

您的判断是正确的。

redir 确实比 socat 更加轻量

  • socat 是一个“网络瑞士军刀”:它支持 TCP, UDP, SSL, SOCKS, 管道, 文件, 进程执行等。功能极其强大,但这也意味着它的二进制文件更大,代码更复杂,运行时(虽然依旧很小)占用的资源会相对多一点。
  • redir 是一个“专用小工具”:它被设计出来的唯一目的就是做 TCP 端口重定向。它的代码库非常小,编译后的二进制文件也极小,运行时几乎不占用什么资源。

如果您只需要简单的 TCP 转发,并且“轻量小巧”是您的首要考量,那么 redir 是一个比 rinetdsocat 更符合“小巧”定义的优秀选择。

下面是 redir 的详细使用说明。


🔧 redir 使用说明

redir 是一个专门用于 TCP 端口重定向的工具。您可以将传入一个本地端口的 TCP 连接转发到另一台主机的任意端口。

1. 安装

redir 在大多数 Linux 发行版的默认仓库中都可用。

  • Debian / Ubuntu / 及其衍生版:

    Bash

    sudo apt update
    sudo apt install redir
  • CentOS / RHEL / Fedora (通常需要 EPEL 仓库):

    Bash

    sudo yum install epel-release  # 如果尚未安装 EPEL
    sudo yum install redir

    (在现代 Fedora 上使用 dnf)

2. 核心语法和参数

redir 的使用非常直观,主要依赖于命令行参数来定义一个转发规则。

基本语法模板:

redir [选项] --lport=本地端口 --caddr=目标地址 --cport=目标端口

主要参数说明:

参数别名 (短)解释
--lport=PORT (必须) 指定 redir 在本地监听的端口号。
--laddr=IP (可选) 指定本地监听的 IP 地址。默认为 0.0.0.0 (所有 IP)。
--cport=PORT (必须) 指定要转发到的目标端口号。
--caddr=HOST (必须) 指定要转发到的目标地址 (IP 或域名)。
--daemon (重要) 以守护进程模式在后台运行
--logfile=FILE 将日志信息输出到指定文件。
--syslog 将日志信息输出到系统的 syslog。
--n=NUM (可选) 允许的最大并发连接数。
--user=USER (可选) 启动后切换到指定用户,增强安全性。
--group=GROUP (可选) 启动后切换到指定用户组。

3. 使用示例

假设:

  • 本机 IP: 192.168.0.10
  • 内网数据库服务器: 10.0.0.5
  • 公网 Web 服务器: example.com

示例 1:最基本的前台测试

  • 需求:测试一下,把访问本机 8080 端口的请求,转发到公网 example.com80 端口。
  • 命令

    Bash

    redir --lport=8080 --caddr=example.com --cport=80
  • 效果redir 会在前台运行。现在访问 http://127.0.0.1:8080 就会看到 example.com 的主页。按 Ctrl+C 停止转发。

示例 2:后台守护进程运行(最常用)

  • 需求:将本机 80 端口收到的所有 Web 请求,永久转发到内网 10.0.0.58080 端口上。
  • 命令

    Bash

    sudo redir --daemon --lport=80 --caddr=10.0.0.5 --cport=8080
  • 注意:监听 1024 以下的端口(如 80)需要 sudo 权限。

示例 3:只监听本地回环地址(增强安全)

  • 需求:将内网数据库 10.0.0.5:3306 映射到本机的 3307 端口,但只允许本机自己 (localhost) 访问,不允许局域网其他机器访问。
  • 命令

    Bash

    redir --daemon --laddr=127.0.0.1 --lport=3307 --caddr=10.0.0.5 --cport=3306
  • 效果:你现在可以在本机连接 mysql -h 127.0.0.1 -P 3307 来访问远程数据库了。

示例 4:记录日志

  • 需求:在示例 2 的基础上,把所有连接日志记录到 syslog,方便排查问题。
  • 命令

    Bash

    sudo redir --daemon --syslog --lport=80 --caddr=10.0.0.5 --cport=8080
  • 效果:你可以在 /var/log/syslog/var/log/messages (取决于你的系统) 中看到 redir 的连接记录。

4. 如何停止 redir 进程

因为 redir 是通过命令行参数启动的,它不像 rinetd 那样有 start/stop 命令。你需要手动 kill 掉它

推荐使用 pkill 命令:

  1. 根据端口号查找并停止

    Bash

    # 停止转发 80 端口的那个 redir 进程
    sudo pkill -f "redir --daemon --lport=80"
  2. 查看所有 redir 进程

    Bash

    ps aux | grep redir
  3. 根据 PID 停止

    Bash

    sudo kill [PID]

使用systemd来管理redir

好的,使用 systemd 来管理 redir 是一个非常好的做法,这比使用 nohuppkill 要健壮和方便得多。

systemd 可以帮您处理:

  • 开机自启
  • 进程守护(如果 redir 意外崩溃,systemd 会自动重启它)
  • 标准化的日志
  • 简单的启动/停止/重启

下面是详细的步骤,我们将创建一个 systemd 服务单元文件。


步骤一:创建 systemd 服务文件

您需要创建一个 .service 文件。这个文件的名称您可以自定义,这里我们使用 redir-forward.service 作为例子。

重要:您需要一个具体的 redir 转发命令。在下面的模板中,我将使用一个占位符命令:

redir --lport=8080 --caddr=10.0.0.5 --cport=80

请在创建文件时,将其替换为您自己需要的那条 redir 命令。

  1. 确定 redir 的绝对路径:

    systemd 需要知道 redir 的完整路径。运行以下命令查找:

    Bash

    which redir

    输出通常是 /usr/bin/redir

  2. 创建服务文件:

    使用您喜欢的文本编辑器(如 nano 或 vim)创建这个文件:

    Bash

    sudo nano /etc/systemd/system/redir-forward.service
  3. 粘贴并修改以下内容:

    请仔细阅读注释,特别是 ExecStart 那一行。

    Ini, TOML

    [Unit]
    Description=Redir Port Forwarding Service (My Rule)
    # 描述:这是一个什么服务
    
    # 启动依赖:确保在网络准备就绪后才启动
    After=network-online.target
    Wants=network-online.target
    
    [Service]
    # !! 关键 !!
    # 1. 将 /usr/bin/redir 替换为您 'which redir' 找到的路径
    # 2. 将 --lport=... --caddr=... --cport=... 替换为您自己的转发规则
    # 3. !! 千万不要 !! 在这里使用 --daemon 选项,systemd 会自动处理后台运行
    #ExecStart=/usr/bin/redir --lport=8080 --caddr=10.0.0.5 --cport=80
    ExecStart=/usr/bin/redir --lport=33060 --caddr=127.0.0.1 --cport=3306 # 转发MySQL服务
    
    # 重启策略:如果服务异常退出了,总是自动重启
    Restart=always
    # 3秒后重启
    RestartSec=3
    
    # (可选 - 增强安全)
    # 如果您监听的 --lport 大于 1024 (例如 8080), 
    # 强烈建议您使用一个非 root 用户运行,比如 'nobody'
    # User=nobody
    # Group=nogroup
    # 如果您监听的是 80 或 443 等 < 1024 的端口, 请注释掉上面两行 (保持 root 运行)
    
    [Install]
    # 设定服务在 "multi-user.target" (标准的多用户启动级别) 下启用
    WantedBy=multi-user.target
  4. 保存并退出:

    (在 nano 中, 按 Ctrl+O 保存, Enter 确认, Ctrl+X 退出)


步骤二:管理 redir 服务

创建好文件后,现在您可以使用 systemctl 命令来管理这个服务了。

  1. 重新加载 systemd 配置:

    每次创建或修改 .service 文件后,都必须运行此命令来让 systemd 识别到新配置。

    Bash

    sudo systemctl daemon-reload
  2. 立即启动服务

    Bash

    sudo systemctl start redir-forward.service
  3. 检查服务状态(非常重要):

    此命令会告诉您服务是否正在运行,或者是否有错误。

    Bash

    sudo systemctl status redir-forward.service
    • 如果看到 Active: active (running),则表示成功!
    • 如果看到 Active: failed,它会显示几行日志,告诉您错在哪里(比如 ExecStart 里的命令写错了)。
  4. 设置开机自启动:

    这会让服务在下次服务器重启时自动运行。

    Bash

    sudo systemctl enable redir-forward.service

    (它会创建一个符号链接,表示 "启用")

    root@iZ2ze9tu0i9pcek7koczk5Z:/etc/systemd/system# systemctl enable redir-3306.service 
    Created symlink /etc/systemd/system/multi-user.target.wants/redir-3306.service → /etc/systemd/system/redir-3306.service.

常用管理命令总结

现在,您已经拥有了一个完整的 systemd 服务,可以随时使用以下命令管理:

  • 启动sudo systemctl start redir-forward.service
  • 停止sudo systemctl stop redir-forward.service
  • 重启sudo systemctl restart redir-forward.service
  • 查看状态和日志sudo systemctl status redir-forward.service
  • 查看完整日志sudo journalctl -u redir-forward.service (用 -f 参数可以实时跟踪)
  • 取消开机自启sudo systemctl disable redir-forward.service

通过这种方式,redir 的管理就变得非常简单和标准化了。