HevSocks5Server 是一款轻量级、高性能的 SOCKS5 服务器,由 heiher 开发,采用 C 语言编写,支持 Linux、Android、BSD、macOS 和 iOS 等 Unix-like 系统。它特别适合作为 HevSocks5Tunnel 或 SocksTun Android 客户端 的服务端组件。本文将从源码编译、配置文件、运行部署到性能调优,提供完整的安装配置指南。

一、项目概述

HevSocks5Server 的核心特性包括:

  • 高性能:在 Linux x86_64 平台上,单路连接的 TCP 上传/下载速率可达约 32 GB/s,10 路并发速率约 130 GB/s
  • 低内存占用:运行时内存使用稳定在约 77 MB
  • 支持 UDP:UDP 可通过 TCP 封装传输(UDP over TCP),适用于受限网络环境
  • IPv4/IPv6 双栈:同时支持 IPv4 和 IPv6
  • 轻量级:无外部依赖,编译后二进制文件极小

与上一教程的 HevSocks5Tunnel(客户端)不同,HevSocks5Server 是服务端程序,用于在服务器上部署 SOCKS5 代理服务。

二、安装前准备

2.1 系统要求
  • 操作系统:Linux、FreeBSD、macOS、Android、iOS 等 Unix-like 系统
  • 硬件:根据预期并发量配置,轻量级场景(<100 并发)最低 256MB 内存即可
  • 网络:需要开放服务端口(默认 1080)
2.2 依赖工具

编译安装需要以下基础工具:

# CentOS/RHEL
sudo yum install -y git make gcc

# Debian/Ubuntu
sudo apt install -y git make gcc

# macOS (需要先安装 Xcode Command Line Tools)
xcode-select --install
brew install git make
2.3 开放端口(以 CentOS 7 为例)

# 开放 1080 端口(假设使用默认端口)
sudo firewall-cmd --permanent --add-port=1080/tcp
sudo firewall-cmd --permanent --add-port=1080/udp
sudo firewall-cmd --reload

# 或直接关闭防火墙(仅测试环境)
sudo systemctl stop firewalld
sudo systemctl disable firewalld

三、从源码编译安装

3.1 下载源码
# 克隆仓库(必须使用 --recursive 拉取子模块)
git clone --recursive https://github.com/heiher/hev-socks5-server
cd hev-socks5-server

--recursive 参数非常重要,项目依赖的子模块必须一并下载,否则编译会失败。

3.2 编译
# 标准编译
make

# 静态链接编译(生成完全静态的可执行文件,便于分发)
make ENABLE_STATIC=1

# 如需显示详细编译信息
make V=1

编译完成后,可执行文件位于 bin/hev-socks5-server

3.3 安装到系统路径

# 复制到系统路径
sudo cp bin/hev-socks5-server /usr/local/bin/

# 验证安装
hev-socks5-server -h

四、配置文件详解

HevSocks5Server 支持两种配置方式:命令行参数和 YAML 配置文件。推荐使用 YAML 配置文件方式。

4.1 基础配置文件

创建配置文件 /etc/hev-socks5-server/main.yml

main:
  workers: 4                    # 工作线程数
  port: 1080                    # 监听端口
  listen-address: '::'          # 监听地址(IPv6格式表示所有地址)
  udp-port: 1080                # UDP 关联端口
  listen-ipv6-only: false       # 是否仅监听 IPv6

misc:
  limit-nofile: 65535           # 文件描述符限制
  log-level: info               # 日志级别: debug, info, warn, error
4.2 高级配置(含认证)

如需添加用户名/密码认证:

main:
  workers: 4
  port: 1080
  listen-address: '::'
  udp-port: 1080
  listen-ipv6-only: false

auth:
  enabled: true
  users:
    - username: "your_username"
      password: "your_password"
    # 可添加多个用户
    # - username: "user2"
    #   password: "pass2"

misc:
  limit-nofile: 65535
  log-level: info
  log-file: /var/log/hev-socks5-server.log
4.3 配置参数完整说明

main 部分

参数 类型 默认值 说明
workers int 1 工作线程数,建议设置为 CPU 核心数
port int 1080 TCP 监听端口
listen-address string '::' 监听地址,'::' 表示所有 IPv4/IPv6 地址
udp-port int 1080 UDP 关联端口(SOCKS5 UDP ASSOCIATE)
listen-ipv6-only bool false true 时仅监听 IPv6,false 时双栈监听

misc 部分

参数 类型 默认值 说明
limit-nofile int 65535 最大打开文件描述符数
log-level string info 日志级别:debug, info, warn, error
log-file string stderr 日志文件路径,默认输出到标准错误

五、运行与部署

5.1 直接运行

# 使用配置文件启动
sudo /usr/local/bin/hev-socks5-server /etc/hev-socks5-server/main.yml
5.2 命令行参数方式(快速测试)

# 参数说明:
# -h: 监听地址
# -p: 监听端口
# -l: 日志级别 (1-4,数字越大越详细)

# 前台运行测试
hev-socks5-server -h 0.0.0.0 -p 1080 -l 4

# 后台运行
nohup hev-socks5-server -h 0.0.0.0 -p 1080 -l 4 > /dev/null 2>&1 &
5.3 配置为 systemd 服务(推荐)

创建服务文件 /etc/systemd/system/hev-socks5-server.service

[Unit]
Description=Hev Socks5 Server
After=network.target

[Service]
Type=simple
User=nobody
Group=nobody
ExecStart=/usr/local/bin/hev-socks5-server /etc/hev-socks5-server/main.yml
Restart=on-failure
RestartSec=5s
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target

启动并设置开机自启:

# 重载 systemd 配置
sudo systemctl daemon-reload

# 启动服务
sudo systemctl start hev-socks5-server

# 设置开机自启
sudo systemctl enable hev-socks5-server

# 查看状态
sudo systemctl status hev-socks5-server

# 查看日志
sudo journalctl -u hev-socks5-server -f

六、验证服务

6.1 检查端口监听
# 查看端口是否正常监听
ss -tlnp | grep 1080
# 或
netstat -tlnp | grep 1080

预期输出应包含:

LISTEN 0  128   [::]:1080  [::]:*  users:(("hev-socks5-serv",pid=xxx,fd=xx))
6.2 使用 curl 测试

# 通过 SOCKS5 代理访问(无认证)
curl --socks5 127.0.0.1:1080 https://ip.sb

# 带认证
curl --socks5 username:password@127.0.0.1:1080 https://ip.sb
6.3 使用 HevSocks5Tunnel 客户端测试

如果已部署 HevSocks5Tunnel,可配置客户端连接此服务端进行端到端测试。

七、性能调优

7.1 工作线程数调优
main:
  # 建议设置为 CPU 核心数
  workers: 4

查看 CPU 核心数:

nproc
7.2 系统参数优化

编辑 /etc/sysctl.conf

# 增大文件描述符限制
fs.file-max = 1048576

# 优化网络缓冲区
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
net.ipv4.tcp_rmem = 4096 87380 134217728
net.ipv4.tcp_wmem = 4096 65536 134217728

# 启用 TCP Fast Open
net.ipv4.tcp_fastopen = 3

应用配置:

sudo sysctl -p
7.3 内存优化(嵌入式设备)

如果运行在内存受限的设备上:

main:
  workers: 1                    # 单线程模式
  port: 1080
  listen-address: '::'

misc:
  limit-nofile: 1024            # 降低文件描述符限制
  log-level: warn               # 减少日志输出

八、故障排查

8.1 常见问题及解决方案
问题 可能原因 解决方案
端口已被占用 其他进程占用 1080 端口 更换端口:lsof -i:1080 查看占用进程
客户端连接失败 防火墙未开放端口 firewall-cmd --add-port=1080/tcp --permanent
UDP 无法转发 SOCKS5 客户端不支持 UDP 服务端配置 UDP over TCP 模式(需客户端配合)
认证失败 用户名/密码不匹配 检查配置文件中的认证信息
高负载下连接断开 文件描述符不足 增加 limit-nofile 和系统 ulimit -n
8.2 调试模式运行

# 前台运行,输出详细日志
/usr/local/bin/hev-socks5-server -h 0.0.0.0 -p 1080 -l 4
8.3 连接测试失败排查流程

# 1. 检查端口监听
ss -tlnp | grep 1080

# 2. 检查防火墙
iptables -L -n
firewall-cmd --list-all

# 3. 本地测试
curl -v --socks5 127.0.0.1:1080 https://ip.sb

# 4. 远程测试(在另一台机器)
curl -v --socks5 <服务器IP>:1080 https://ip.sb

# 5. 抓包分析
tcpdump -i eth0 port 1080 -nn

九、安全建议

  • 启用认证:生产环境务必启用用户名/密码认证
  • 限制访问来源:使用防火墙限制可访问服务器的 IP 范围

# 仅允许 192.168.1.0/24 网段访问
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="1080" accept'
firewall-cmd --reload
  • 非 root 用户运行:使用 systemd 服务时已配置 User=nobody
  • 定期更新:关注 GitHub 仓库的更新和安全公告

十、总结

HevSocks5Server 的核心优势在于极致的性能极低的资源占用。以下是关键配置要点回顾:

配置项 生产环境建议 测试环境建议
workers CPU 核心数 1
认证 必须启用 可选
日志级别 warn 或 error debug 或 info
limit-nofile 65535 或更高 默认
防火墙 限制来源 IP 开放端口即可

配置完成后,服务端可与 HevSocks5Tunnel(客户端)配合使用,实现完整的 SOCKS5 代理解决方案。如在配置过程中遇到问题,请提供具体的错误信息以便进一步排查。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐