systemd托管端口转发服务的核心是将ssh、socat或rinetd等工具封装为长期运行的系统服务,实现开机自启、自动重启和日志追踪;需配置Unit、Service(含Type、ExecStart、Restart等)、Install三部分,并配合防火墙放行与ss/journalctl验证。

Linux 中用 systemd 管理端口转发服务,核心是把转发命令(如 ssh、socat 或 rinetd)包装成一个长期运行的系统服务,并由 systemd 负责启动、重启和日志追踪。它不直接“代理”网络,而是托管代理工具,实现稳定、开机自启、故障自动恢复的端口映射。
用 systemd 托管 SSH 端口转发
适合安全跨网场景,比如把外网某端口加密转发到内网设备的 SSH 服务。
- 确保执行机已安装 OpenSSH 客户端,且能免密登录目标设备(如
root@192.168.1.10) - 创建服务文件:
/etc/systemd/system/ssh-portfwd.service - 内容示例(将本机 2222 端口转发到内网 192.168.1.10:22):
Description=SSH Port Forward to SOC Board
After=network.target
[Service]
Type=simple
User=jumpuser
ExecStart=/usr/bin/ssh -N -o ServerAliveInterval=60 -o ExitOnForwardFailure=yes -L 0.0.0.0:2222:192.168.1.10:22 root@192.168.1.10
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
- 启用并启动:
sudo systemctl daemon-reload && sudo systemctl enable --now ssh-portfwd.service
用 systemd 托管 socat 端口转发
适合轻量、快速、无需加密的 TCP/UDP 映射,例如把本地 9000 端口转到远程 10.0.0.5:5000。
- 安装 socat:
sudo apt install socat(Debian/Ubuntu)或sudo yum install socat(RHEL/CentOS) - 新建服务:
/etc/systemd/system/socat-portfwd.service - 关键配置段(注意
fork参数支持并发连接):
- 添加
Restart=on-failure和User=nobody提升安全性与健壮性 - 同样执行
daemon-reload+enable --now激活服务
用 systemd 托管 rinetd 或 frp(可选进阶方案)
rinetd 更专注纯端口映射,frp 支持更复杂的内网穿透(含 HTTP/HTTPS/UDP),二者都需单独安装二进制文件。
- 以 rinetd 为例:下载二进制后放入
/usr/local/bin/rinetd,再创建配置文件/etc/rinetd.conf,内容如:
- 对应的服务单元中
ExecStart写为:/usr/local/bin/rinetd -c /etc/rinetd.conf - frp 则需分别部署
frps(服务端)和frpc(客户端),各自配独立 service 文件,通过EnvironmentFile加载配置更规范
验证与排错要点
服务跑起来不等于端口真通了,务必检查三件事:
-
端口监听状态:运行
sudo ss -tlnp | grep :2222,确认有进程在监听且绑定0.0.0.0(非仅127.0.0.1) -
防火墙放行:Ubuntu 用
sudo ufw allow 2222;CentOS 用sudo firewall-cmd --add-port=2222/tcp --permanent && firewall-cmd --reload -
服务日志定位问题:用
sudo journalctl -u ssh-portfwd.service -f实时查看输出,常见错误包括权限拒绝、目标不可达、密钥认证失败


















