Ubuntu 20.04 使用 socat 转发特定端口

  1. 安装socat
    apt install socat
    
  2. 根据需求确定要转发的端口
    比如,我的需求是监听IPv6的某一TCP端口,并转发至局域网内某一特定主机,可以使用以下命令:
    socat TCP6-LISTEN:xxxx,fork TCP:1.2.3.4:xxx
    
    UDP端口也类似:
    socat UDP6-LISTEN:xxxx,fork UDP:1.2.3.4:xxx
    
    由于 UDP 是无连接的传输层协议,socat监听UDP端口的子进程创建后可能无法自动关闭,可以设定超时参数 -T<超时时间> 指定超时时间,当达到超时时间后无其余操作则会自动结束当前子进程。
    将以上命令放置在后台运行,即可转发端口。
  3. 使用 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
      至此,端口转发的守护服务已开始运行。
posted @ 2022-09-18 20:34  wx2020  阅读(2072)  评论(0编辑  收藏  举报