2026-06-25 11:34:17 +08:00
2026-06-25 11:34:17 +08:00

Socat 端口转发管理脚本

简介

一个功能完善的 Socat 一键安装管理脚本支持多种协议的端口转发配置提供开机自启、域名监控DDNS、网络加速BBR等功能。

版本: 5.2 系统要求: CentOS 7+、Debian 8+、Ubuntu 16+、Arch Linux

功能特性

支持的转发协议

协议 说明 防火墙配置 域名监控 典型场景
TCP 标准TCP转发 TCP 支持 通用端口转发、HTTP/HTTPS、SSH
UDP UDP转发 UDP 不支持 DNS、游戏服务器、视频流
SCTP 流控制传输协议 SCTP 支持 电话信令、高可靠消息传输
SSL/TLS 加密TCP转发 TCP 支持 HTTPS代理、数据加密传输
UNIX 本地套接字转发 不需要 不适用 容器/数据库socket通信
SOCKS4A SOCKS代理转发 TCP 不支持 穿透防火墙、代理上网
HTTP PROXY HTTP CONNECT代理 TCP 不支持 企业网络代理、HTTP/HTTPS代理

核心功能

  • 多协议支持: 支持 TCP、UDP、SCTP、SSL/TLS、UNIX 套接字、SOCKS4A、HTTP PROXY
  • IPv4/IPv6: 支持纯 IPv4、纯 IPv6、IPv4 域名、IPv6 域名四种地址类型
  • 开机自启: 通过 systemd 服务实现开机自动恢复转发配置
  • 域名监控: 支持 DDNS 域名监控IP 变更自动重启服务
  • 网络加速: 支持 BBR 拥塞控制算法,提升传输性能
  • 防火墙配置: 自动配置 firewalld/ufw/iptables 防火墙规则
  • 配置持久化: JSON 格式配置文件,支持导出导入
  • 多发行版支持: 兼容 CentOS、Debian、Ubuntu、Arch 等主流 Linux 发行版

安装

# 下载脚本
curl -sL https://raw.githubusercontent.com/baichal/Socat/refs/heads/main/socat.sh -o socat.sh

# 添加执行权限
chmod +x socat.sh

# 运行脚本(需要 root 权限)
sudo ./socat.sh

使用指南

首次运行

首次运行脚本时程序会自动检测并安装必要的依赖socat、jq、openssl然后进入交互式菜单。

主菜单功能

========================================
    Socat 端口转发一键管理脚本
========================================
    
    1. 添加端口转发
    2. 查看转发列表
    3. 删除转发规则
    4. 开启网络加速
    5. 关闭网络加速
    6. 查看加速状态
    7. 切换 IPv4/IPv6 监控
    8. 修改域名监控间隔
    9. 恢复转发规则
   10. 卸载 Socat
   11. 退出

========================================
请输入选项数字: 

添加转发配置

1. 选择协议类型

脚本提供 8 种协议选项:

请选择转发协议:
1. TCP + UDP默认- 同时支持 TCP 和 UDP 流量
2. 仅 TCP - 仅转发 TCP 流量
3. 仅 UDP - 仅转发 UDP 流量
4. SCTP - 流控制传输协议
5. SSL/TLS 加密转发 - 数据全程加密
6. UNIX 域套接字 - TCP 与本地 socket 互转
7. SOCKS4A 代理转发 - 通过 SOCKS 代理
8. HTTP PROXY 代理转发 - 通过 HTTP 代理

2. 选择地址类型

请选择 IP 版本:
1. IPv4默认
2. IPv6
3. IPv4 域名DDNS
4. IPv6 域名DDNS

3. 输入转发信息

根据选择的协议和地址类型,输入相应信息:

  • 本地端口: 监听端口1-65535
  • 远程端口: 目标端口
  • 远程地址: 目标 IP 或域名

4. 配置示例

示例 1: TCP 端口转发

协议: TCP + UDP
地址类型: IPv4
本地端口: 8080
远程端口: 80
远程地址: 192.168.1.100

将本机 8080 端口的流量转发到 192.168.1.100:80

示例 2: SSL/TLS 加密转发

协议: SSL/TLS 加密转发
地址类型: IPv4 域名
本地端口: 443
远程端口: 80
远程地址: example.com

将本机 443 端口的加密流量转发到 example.com:80

示例 3: UNIX 套接字转发

协议: UNIX 域套接字
方向: TCP端口 -> UNIX套接字
套接字路径: /var/run/mysql/mysql.sock
本地端口: 3306

将本机 3306 端口转发到 MySQL UNIX 套接字

查看转发列表

运行后显示当前所有转发配置:

当前转发列表:
1. IPv4: 0.0.0.0:8080 --> 192.168.1.100:80 (TCP/UDP)
2. IPv4 域名: 0.0.0.0:443 --> example.com:80 (OPENSSL) [DDNS, IPv4]
3. IPv6: [::]:8080 --> [2001:db8::1]:80 (TCP)

删除转发

选择要删除的转发编号,脚本会:

  1. 停止对应的 systemd 服务
  2. 删除服务文件
  3. 移除防火墙规则(如有)
  4. 从配置文件删除记录

网络加速BBR

BBRBottleneck Bandwidth and RTT是一种 TCP 拥塞控制算法,可显著提升网络传输速度。

开启加速:

选择功能: 4. 开启网络加速

正在优化网络参数...
已开启 BBR 加速

查看状态:

选择功能: 6. 查看加速状态

当前加速状态: 已开启
算法: bbr

域名监控DDNS

当使用域名作为远程地址时,脚本会每 5 分钟自动检查域名 IP 是否变更。

修改监控间隔:

选择功能: 8. 修改域名监控间隔

当前监控间隔: 5 分钟
请输入新的监控间隔(分钟): 10
已更新监控间隔为 10 分钟

配置文件

配置文件位置

  • 主配置: /etc/socats/config.json
  • JSON 格式化开关: /etc/socats/.json_format
  • SSL 证书: /etc/socats/ssl/server.crtserver.key
  • 域名缓存: /etc/socats/dns_cache_*.txt
  • 监控脚本: /etc/socats/monitor_*.sh

配置格式

[
  {
    "type": "ipv4",
    "listen_port": 8080,
    "remote_ip": "192.168.1.100",
    "remote_port": 80,
    "protocols": ["tcp", "udp"],
    "extra": "null"
  },
  {
    "type": "domain",
    "listen_port": 443,
    "remote_ip": "example.com",
    "remote_port": 80,
    "protocols": ["openssl"],
    "extra": "null"
  },
  {
    "type": "ipv4",
    "listen_port": 3306,
    "remote_ip": "127.0.0.1",
    "remote_port": 0,
    "protocols": ["unix"],
    "extra": "tcp2unix:/var/run/mysql/mysql.sock"
  }
]

字段说明

字段 说明
type 地址类型:ipv4ipv6domaindomain6
listen_port 本地监听端口UNIX→TCP 模式为 0
remote_ip 远程 IP 或域名UNIX→TCP 模式为 127.0.0.1
remote_port 远程端口TCP→UNIX 模式为 0
protocols 协议列表:tcpudpsctpopensslunixsocksproxy
extra 额外参数UNIX 路径或代理地址

服务管理

查看服务状态

# 查看所有 Socat 服务
systemctl list-units 'socat-*' --type=service

# 查看单个服务状态
systemctl status socat-8080-80-tcp

手动管理服务

# 停止服务
sudo systemctl stop socat-8080-80-tcp

# 启动服务
sudo systemctl start socat-8080-80-tcp

# 重启服务
sudo systemctl restart socat-8080-80-tcp

# 查看日志
sudo journalctl -u socat-8080-80-tcp -f

服务命名规则

协议类型 服务名格式
TCP/UDP/SCTP/SSL socat-<监听端口>-<目标端口>-<协议>
UNIX→TCP socat-unix-<socket名>-<目标端口>-unix
TCP→UNIX socat-<监听端口>-unix-<socket名>-unix

防火墙配置

脚本会自动检测并配置防火墙:

firewalld (CentOS 7+)

# 查看开放的端口
sudo firewall-cmd --list-ports

# 手动添加端口
sudo firewall-cmd --add-port=8080/tcp --permanent
sudo firewall-cmd --reload

ufw (Ubuntu/Debian)

# 查看状态
sudo ufw status

# 手动添加规则
sudo ufw allow 8080/tcp

iptables

# 查看规则
sudo iptables -L -n

# 手动添加规则
sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT

故障排查

服务启动失败

# 查看详细错误
sudo journalctl -u socat-端口1-端口2-协议 -xe

# 常见错误
# - 端口已被占用: 更换端口或停止占用进程
# - 权限不足: 以 root 运行
# - socat 未安装: 重新运行安装脚本

端口无法访问

# 检查防火墙
sudo firewall-cmd --list-ports
sudo iptables -L -n | grep 端口

# 检查服务状态
sudo systemctl status socat-端口1-端口2-协议

# 检查端口监听
sudo ss -tlnp | grep 端口
sudo netstat -tlnp | grep 端口

域名监控不生效

# 检查监控服务
sudo systemctl status socat-domain-monitor

# 查看监控日志
sudo cat /etc/socats/dns_monitor.log

# 检查域名解析
nslookup your-domain.com
dig your-domain.com

转发连接不稳定

# 开启 BBR 加速
sudo ./socat.sh
# 选择 4. 开启网络加速

# 检查系统参数
sysctl net.ipv4.tcp_congestion_control
# 应显示: net.ipv4.tcp_congestion_control = bbr

卸载

# 运行卸载
sudo ./socat.sh
# 选择 10. 卸载 Socat

# 或强制卸载
sudo killall socat
sudo rm -rf /etc/socats
sudo rm -f /etc/systemd/system/socat-*.service
sudo systemctl daemon-reload

常见问题

Q: 如何同时转发多个端口?

A: 多次运行添加转发功能,或手动创建多个 systemd 服务。

Q: 支持端口范围转发吗?

A: Socat 支持端口范围,需要手动创建服务,脚本暂不支持。

Q: 如何实现 TCP/UDP 端口复用?

A: 脚本使用独立的 TCP 和 UDP 服务,如需端口复用可手动修改配置。

Q: SSL 证书如何实现双向认证?

A: 当前脚本使用自签名证书,如需双向认证请手动配置证书。

Q: 如何限制转发带宽?

A: 可通过 iptables 或 tc 命令限制带宽,脚本暂不内置此功能。

许可证

MIT License

更新日志

v5.2

  • 新增 UNIX 套接字转发支持TCP↔UNIX 双向)
  • 新增 SOCKS4A 和 HTTP PROXY 代理转发
  • 新增 SCTP 协议支持
  • 优化域名监控服务,支持多协议重启
  • 修复配置文件 JSON 解析问题
  • 提升防火墙配置兼容性
Description
Socat一键安装脚本,可转发TCP和UDP流量,支持IPv4和IPv6
https://github.com/baichal/Socat.git
Readme 369 KiB
Languages
Shell 100%