diff --git a/README.md b/README.md index 4e3f6d8..f29b1ef 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,427 @@ -# Socat一键安装脚本(支持DDNS域名) -系统要求:支持CentOS 6+ 、Debian 7+、Ubuntu 14+ +# Socat 端口转发管理脚本 -脚本说明:脚本默认开启UDP、TCP转发,带开机自启功能。 +## 简介 -使用 root 运行以下命令: +一个功能完善的 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 发行版 + +## 安装 ```bash -wget https://raw.githubusercontent.com/baichal/Socat/main/socat.sh && bash socat.sh +# 下载脚本 +curl -sL https://raw.githubusercontent.com/example/socat.sh/socat.sh -o socat.sh + +# 添加执行权限 +chmod +x socat.sh + +# 运行脚本(需要 root 权限) +sudo ./socat.sh ``` -按要求输入本地服务器端口,要转发的目标端口和服务器IP即可! +## 使用指南 + +### 首次运行 + +首次运行脚本时,程序会自动检测并安装必要的依赖(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) + +BBR(Bottleneck 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.crt` 和 `server.key` +- **域名缓存**: `/etc/socats/dns_cache_*.txt` +- **监控脚本**: `/etc/socats/monitor_*.sh` + +### 配置格式 + +```json +[ + { + "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` | 地址类型:`ipv4`、`ipv6`、`domain`、`domain6` | +| `listen_port` | 本地监听端口,UNIX→TCP 模式为 0 | +| `remote_ip` | 远程 IP 或域名,UNIX→TCP 模式为 `127.0.0.1` | +| `remote_port` | 远程端口,TCP→UNIX 模式为 0 | +| `protocols` | 协议列表:`tcp`、`udp`、`sctp`、`openssl`、`unix`、`socks`、`proxy` | +| `extra` | 额外参数,UNIX 路径或代理地址 | + +## 服务管理 + +### 查看服务状态 + +```bash +# 查看所有 Socat 服务 +systemctl list-units 'socat-*' --type=service + +# 查看单个服务状态 +systemctl status socat-8080-80-tcp +``` + +### 手动管理服务 + +```bash +# 停止服务 +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--<目标端口>-unix` | +| TCP→UNIX | `socat-<监听端口>-unix--unix` | + +## 防火墙配置 + +脚本会自动检测并配置防火墙: + +### firewalld (CentOS 7+) + +```bash +# 查看开放的端口 +sudo firewall-cmd --list-ports + +# 手动添加端口 +sudo firewall-cmd --add-port=8080/tcp --permanent +sudo firewall-cmd --reload +``` + +### ufw (Ubuntu/Debian) + +```bash +# 查看状态 +sudo ufw status + +# 手动添加规则 +sudo ufw allow 8080/tcp +``` + +### iptables + +```bash +# 查看规则 +sudo iptables -L -n + +# 手动添加规则 +sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT +``` + +## 故障排查 + +### 服务启动失败 + +```bash +# 查看详细错误 +sudo journalctl -u socat-端口1-端口2-协议 -xe + +# 常见错误 +# - 端口已被占用: 更换端口或停止占用进程 +# - 权限不足: 以 root 运行 +# - socat 未安装: 重新运行安装脚本 +``` + +### 端口无法访问 + +```bash +# 检查防火墙 +sudo firewall-cmd --list-ports +sudo iptables -L -n | grep 端口 + +# 检查服务状态 +sudo systemctl status socat-端口1-端口2-协议 + +# 检查端口监听 +sudo ss -tlnp | grep 端口 +sudo netstat -tlnp | grep 端口 +``` + +### 域名监控不生效 + +```bash +# 检查监控服务 +sudo systemctl status socat-domain-monitor + +# 查看监控日志 +sudo cat /etc/socats/dns_monitor.log + +# 检查域名解析 +nslookup your-domain.com +dig your-domain.com +``` + +### 转发连接不稳定 + +```bash +# 开启 BBR 加速 +sudo ./socat.sh +# 选择 4. 开启网络加速 + +# 检查系统参数 +sysctl net.ipv4.tcp_congestion_control +# 应显示: net.ipv4.tcp_congestion_control = bbr +``` + +## 卸载 + +```bash +# 运行卸载 +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 命令限制带宽,脚本暂不内置此功能。 + +## 技术支持 + +- **GitHub Issues**: https://github.com/example/socat.sh/issues +- **讨论群组**: 加入 Telegram 群组获取帮助 + +## 许可证 + +MIT License + +## 更新日志 + +### v5.2 +- 新增 UNIX 套接字转发支持(TCP↔UNIX 双向) +- 新增 SOCKS4A 和 HTTP PROXY 代理转发 +- 新增 SCTP 协议支持 +- 优化域名监控服务,支持多协议重启 +- 修复配置文件 JSON 解析问题 +- 提升防火墙配置兼容性