使用socat进行端口转发

laomoy
2023-10-06 / 0 评论 / 354 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2023年10月26日,已超过451天没有更新,若内容或图片失效,请留言反馈。

今天来教大家使用socat工具进行端口转发

安装:

Ubuntu:sudo apt-get install socat -y
Centos:sudo yum install socat -y

临时转发(重启或退出终端就失效):

socat TCP-LISTEN:<本服务器的端口>,fork TCP:<目标服务器的IP>:<目标服务器的端口>
例如:

socat TCP-LISTEN:8080,fork TCP:8.8.8.8:443

临时转发(后台挂起但重启就失效)

nohup socat TCP-LISTEN:<本服务器的端口>,fork TCP:<目标服务器的IP>:<目标服务器的端口> &
例如:

nohup socat TCP-LISTEN:8080,fork TCP:8.8.8.8:443 &

永久转发(重启或退出终端不失效):

用systemctl保活

sudo vim /etc/systemd/system/socat.service

单端口转发示例:

[Unit]
Description=Socat Port Forwarding Service

[Service]
ExecStart=/usr/bin/socat TCP-LISTEN:8080,fork TCP:8.8.8.8:443
Restart=always
User=root

[Install]
WantedBy=multi-user.target

多端口转发示例:

创建一个 socat 脚本文件,例如 socat-script.sh,并添加多个 socat 命令,每个命令负责一个端口转发规则。例如:

sudo vim /usr/local/bin/socat-script.sh

socat-script.sh内容如下:

#!/bin/bash

# 切换到脚本所在的目录
cd /usr/local/bin/

# 启动 socat 以前台方式
socat TCP-LISTEN:8080,fork TCP:1.2.3.4:443 &
socat TCP-LISTEN:8081,fork TCP:1.2.3.4:8443 &

# 无限循环以防止脚本退出
while true; do
    sleep 10
done

然后将 socat-script.sh 脚本文件保存在一个合适的位置,例如 /usr/local/bin 目录下,并确保它具有可执行权限:

sudo chmod +x /usr/local/bin/socat-script.sh

最后在 socat.service 单元文件的 ExecStart 行中执行该脚本,如下所示:

sudo vim /etc/systemd/system/socat.service

socat.service内容如下:

[Unit]
Description=Socat Port Forwarding Service

[Service]
ExecStart=/usr/local/bin/socat-script.sh
Restart=always
User=root
Type=simple

[Install]
WantedBy=multi-user.target
重新加载 systemd 守护进程以读取更新后的服务单元文件:
sudo systemctl daemon-reload
启用并启动 socat 服务
sudo systemctl enable socat.service
sudo systemctl start socat.service
检查socat服务的状态
sudo systemctl status socat.service
sudo systemctl stop socat.service  # 停止服务
sudo systemctl restart socat.service  # 重新启动服务

PS:切记!端口不可用重复的,否则无法启动服务的!

8

评论 (0)

取消