Ubuntu 20.04 使用 socat 转发特定端口
- 安装socat
apt install socat
- 根据需求确定要转发的端口
比如,我的需求是监听IPv6的某一TCP端口,并转发至局域网内某一特定主机,可以使用以下命令:
UDP端口也类似:socat TCP6-LISTEN:xxxx,fork TCP:1.2.3.4:xxx
由于 UDP 是无连接的传输层协议,socat监听UDP端口的子进程创建后可能无法自动关闭,可以设定超时参数socat UDP6-LISTEN:xxxx,fork UDP:1.2.3.4:xxx
-T<超时时间>
指定超时时间,当达到超时时间后无其余操作则会自动结束当前子进程。
将以上命令放置在后台运行,即可转发端口。 - 使用 systemd 守护后台运行的转发进程
默认情况下, socat 以 daemon 进程形式运行在前台,不方便管理,采用 systemd 进行管理:- 新建 service 文件,使用以下内容保存在
/lib/systemd/system/socat_forward.service
:
其中,使用[Unit] Description = Socat Daemon For Port Forward After = network-online.target [Service] Type = simple ExecStart = /usr/bin/socat -dd TCP-LISTEN:XXXX,fork TCP:1.2.3.4:XXXX Restart = on-failure TimeoutSec = 15 [Install] WantedBy = multi-user.target
-dd
参数可以打印更多日志在 systemd 守护进程中。- 开启服务自启动:
systemctl enable socat_forward.service
- 运行服务:
systemctl start socat_forward.service
至此,端口转发的守护服务已开始运行。
- 新建 service 文件,使用以下内容保存在