安装
我使用的是Debian,直接使用apt install redir安装即可
使用redir --version如果出现对应的版本号,表示安装成功
redir --version
3.3简单使用
您的判断是正确的。
redir 确实比 socat 更加轻量。
socat是一个“网络瑞士军刀”:它支持 TCP, UDP, SSL, SOCKS, 管道, 文件, 进程执行等。功能极其强大,但这也意味着它的二进制文件更大,代码更复杂,运行时(虽然依旧很小)占用的资源会相对多一点。redir是一个“专用小工具”:它被设计出来的唯一目的就是做 TCP 端口重定向。它的代码库非常小,编译后的二进制文件也极小,运行时几乎不占用什么资源。
如果您只需要简单的 TCP 转发,并且“轻量小巧”是您的首要考量,那么 redir 是一个比 rinetd 和 socat 更符合“小巧”定义的优秀选择。
下面是 redir 的详细使用说明。
🔧 redir 使用说明
redir 是一个专门用于 TCP 端口重定向的工具。您可以将传入一个本地端口的 TCP 连接转发到另一台主机的任意端口。
1. 安装
redir 在大多数 Linux 发行版的默认仓库中都可用。
Debian / Ubuntu / 及其衍生版:
Bash
sudo apt update sudo apt install redirCentOS / 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.com的80端口。 命令:
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.5的8080端口上。 命令:
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 命令:
根据端口号查找并停止:
Bash
# 停止转发 80 端口的那个 redir 进程 sudo pkill -f "redir --daemon --lport=80"查看所有 redir 进程:
Bash
ps aux | grep redir根据 PID 停止:
Bash
sudo kill [PID]
使用systemd来管理redir
好的,使用 systemd 来管理 redir 是一个非常好的做法,这比使用 nohup 或 pkill 要健壮和方便得多。
systemd 可以帮您处理:
- 开机自启
- 进程守护(如果
redir意外崩溃,systemd会自动重启它) - 标准化的日志
- 简单的启动/停止/重启
下面是详细的步骤,我们将创建一个 systemd 服务单元文件。
步骤一:创建 systemd 服务文件
您需要创建一个 .service 文件。这个文件的名称您可以自定义,这里我们使用 redir-forward.service 作为例子。
重要:您需要一个具体的 redir 转发命令。在下面的模板中,我将使用一个占位符命令:
redir --lport=8080 --caddr=10.0.0.5 --cport=80
请在创建文件时,将其替换为您自己需要的那条 redir 命令。
确定 redir 的绝对路径:
systemd 需要知道 redir 的完整路径。运行以下命令查找:
Bash
which redir输出通常是
/usr/bin/redir。创建服务文件:
使用您喜欢的文本编辑器(如 nano 或 vim)创建这个文件:
Bash
sudo nano /etc/systemd/system/redir-forward.service粘贴并修改以下内容:
请仔细阅读注释,特别是 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保存并退出:
(在 nano 中, 按 Ctrl+O 保存, Enter 确认, Ctrl+X 退出)
步骤二:管理 redir 服务
创建好文件后,现在您可以使用 systemctl 命令来管理这个服务了。
重新加载 systemd 配置:
每次创建或修改 .service 文件后,都必须运行此命令来让 systemd 识别到新配置。
Bash
sudo systemctl daemon-reload立即启动服务:
Bash
sudo systemctl start redir-forward.service检查服务状态(非常重要):
此命令会告诉您服务是否正在运行,或者是否有错误。
Bash
sudo systemctl status redir-forward.service- 如果看到
Active: active (running),则表示成功! - 如果看到
Active: failed,它会显示几行日志,告诉您错在哪里(比如ExecStart里的命令写错了)。
- 如果看到
设置开机自启动:
这会让服务在下次服务器重启时自动运行。
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 的管理就变得非常简单和标准化了。