A high-performance SOCKS5/HTTP dynamic proxy server that automatically fetches, health-checks, and rotates through proxy lists.
- 🚀 Multi-source Support: Fetch proxies from multiple URLs simultaneously
- 🔄 Auto Rotation: Round-robin algorithm for automatic proxy switching
- 💪 High Concurrency: Configurable concurrent health checks (default: 200)
- ⚡ Fast Health Check: TLS handshake verification with performance filtering
- 🔧 Flexible Configuration: YAML-based configuration file
- 🌐 Dual Protocol: SOCKS5 and HTTP proxy servers
- 🔒 HTTPS Support: Full CONNECT tunnel support
- 📊 Real-time Progress: Live progress bar during health checks
- 🎯 Smart Filtering: Automatically removes slow and unreliable proxies
- 🔁 Auto Update: Periodic proxy pool refresh (configurable interval)
- 🔐 Dual Mode: Strict mode (SSL verification enabled) and Relaxed mode (SSL verification disabled)
Download the latest release for your platform:
- Linux (amd64):
dynamic-proxy-linux-amd64 - macOS (Intel):
dynamic-proxy-darwin-amd64 - macOS (Apple Silicon):
dynamic-proxy-darwin-arm64 - Windows:
dynamic-proxy.exe
# Linux / macOS
chmod +x dynamic-proxy-linux-amd64
./dynamic-proxy-linux-amd64
# Windows
dynamic-proxy.exe# Clone the repository
git clone https://github.com/kbykb/dynamic-proxy.git
cd dynamic-proxy
# Download dependencies
go mod download
# Build
go build -o dynamic-proxy
# Run
./dynamic-proxyUsing Docker:
# Build the image
docker build -t dynamic-proxy .
# Run the container
docker run -d \
--name dynamic-proxy \
-p 17283:17283 \
-p 17284:17284 \
-p 17285:17285 \
-p 17286:17286 \
-v $(pwd)/config.yaml:/app/config.yaml:ro \
--restart unless-stopped \
dynamic-proxyUsing Docker Compose:
# Start the service
docker-compose up -d
# View logs
docker-compose logs -f
# Stop the service
docker-compose downDocker Configuration:
The Docker image is built using multi-stage builds for minimal size:
- Base image: Alpine Linux
- Includes CA certificates for HTTPS
- Exposes ports:
- 17283 (SOCKS5 Strict - SSL verification enabled)
- 17284 (SOCKS5 Relaxed - SSL verification disabled)
- 17285 (HTTP Strict - SSL verification enabled)
- 17286 (HTTP Relaxed - SSL verification disabled)
- Config file can be mounted as a volume for easy updates
Edit config.yaml to customize settings:
# Proxy list URLs (supports multiple sources)
proxy_list_urls:
- "https://raw.githubusercontent.com/r00tee/Proxy-List/main/Socks5.txt"
- "https://raw.githubusercontent.com/ClearProxy/checked-proxy-list/main/socks5/raw/all.txt"
# Add more sources
# - "https://example.com/proxy-list.txt"
# Health check concurrency (simultaneous tests)
health_check_concurrency: 200
# Update interval (minutes)
update_interval_minutes: 5
# Health check timeout settings
health_check:
total_timeout_seconds: 8 # Total timeout
tls_handshake_threshold_seconds: 5 # TLS handshake threshold
# Server ports
ports:
socks5_strict: ":17283" # SOCKS5 with SSL verification
socks5_relaxed: ":17284" # SOCKS5 without SSL verification
http_strict: ":17285" # HTTP with SSL verification
http_relaxed: ":17286" # HTTP without SSL verification| Option | Description | Default |
|---|---|---|
proxy_list_urls |
List of proxy source URLs | 2 sources |
health_check_concurrency |
Concurrent health checks | 200 |
update_interval_minutes |
Proxy pool refresh interval | 5 minutes |
total_timeout_seconds |
Health check total timeout | 8 seconds |
tls_handshake_threshold_seconds |
Max TLS handshake time | 5 seconds |
ports.socks5_strict |
SOCKS5 server port (SSL verification enabled) | :17283 |
ports.socks5_relaxed |
SOCKS5 server port (SSL verification disabled) | :17284 |
ports.http_strict |
HTTP proxy server port (SSL verification enabled) | :17285 |
ports.http_relaxed |
HTTP proxy server port (SSL verification disabled) | :17286 |
# Test with curl (SOCKS5 Strict - SSL verification enabled)
curl --socks5 127.0.0.1:17283 https://api.ipify.org
# Test with curl (SOCKS5 Relaxed - SSL verification disabled)
curl --socks5 127.0.0.1:17284 https://api.ipify.org
# Test with curl (HTTP Strict - SSL verification enabled)
curl -x http://127.0.0.1:17285 https://api.ipify.org
# Test with curl (HTTP Relaxed - SSL verification disabled)
curl -x http://127.0.0.1:17286 https://api.ipify.orgSOCKS5 Proxy (Strict Mode - Recommended):
- Host:
127.0.0.1 - Port:
17283
SOCKS5 Proxy (Relaxed Mode - For compatibility):
- Host:
127.0.0.1 - Port:
17284
HTTP Proxy (Strict Mode - Recommended):
- Host:
127.0.0.1 - Port:
17285
HTTP Proxy (Relaxed Mode - For compatibility):
- Host:
127.0.0.1 - Port:
17286
Python:
import requests
# HTTP Proxy (Strict Mode - Recommended)
proxies = {
'http': 'http://127.0.0.1:17285',
'https': 'http://127.0.0.1:17285'
}
response = requests.get('https://api.ipify.org', proxies=proxies)
print(response.text)
# HTTP Proxy (Relaxed Mode - For compatibility)
proxies = {
'http': 'http://127.0.0.1:17286',
'https': 'http://127.0.0.1:17286'
}
response = requests.get('https://api.ipify.org', proxies=proxies)
print(response.text)
# SOCKS5 Proxy (Strict Mode - Recommended)
proxies = {
'http': 'socks5://127.0.0.1:17283',
'https': 'socks5://127.0.0.1:17283'
}
response = requests.get('https://api.ipify.org', proxies=proxies)
print(response.text)
# SOCKS5 Proxy (Relaxed Mode - For compatibility)
proxies = {
'http': 'socks5://127.0.0.1:17284',
'https': 'socks5://127.0.0.1:17284'
}
response = requests.get('https://api.ipify.org', proxies=proxies)
print(response.text)Node.js:
const axios = require('axios');
const { SocksProxyAgent } = require('socks-proxy-agent');
// SOCKS5 Proxy (Strict Mode - Recommended)
const strictAgent = new SocksProxyAgent('socks5://127.0.0.1:17283');
axios.get('https://api.ipify.org', { httpAgent: strictAgent, httpsAgent: strictAgent })
.then(response => console.log(response.data));
// SOCKS5 Proxy (Relaxed Mode - For compatibility)
const relaxedAgent = new SocksProxyAgent('socks5://127.0.0.1:17284');
axios.get('https://api.ipify.org', { httpAgent: relaxedAgent, httpsAgent: relaxedAgent })
.then(response => console.log(response.data));
// HTTP Proxy (Strict Mode - Recommended)
axios.get('https://api.ipify.org', {
proxy: {
host: '127.0.0.1',
port: 17285
}
}).then(response => console.log(response.data));
// HTTP Proxy (Relaxed Mode - For compatibility)
axios.get('https://api.ipify.org', {
proxy: {
host: '127.0.0.1',
port: 17286
}
}).then(response => console.log(response.data));- Proxy Fetching: Fetches proxy lists from configured URLs at startup
- Health Check: Concurrent health checks with TLS handshake verification
- Strict Mode: Tests with SSL certificate verification enabled
- Relaxed Mode: Tests with SSL certificate verification disabled
- Optimization: If a proxy passes strict mode, it's automatically added to both pools
- Dual Proxy Pools: Maintains two separate pools (strict and relaxed) of healthy, fast proxies
- Auto Update: Refreshes both proxy pools at configured intervals
- Round-Robin: Distributes requests across proxies using round-robin algorithm
- Dual Protocol: Serves both SOCKS5 and HTTP proxy protocols in both modes (4 servers total)
┌─────────────────┐
│ Proxy Sources │
│ (Multiple URLs)│
└────────┬────────┘
│
▼
┌─────────────────┐
│ Fetch & Merge │
│ (Deduplication)│
└────────┬────────┘
│
▼
┌─────────────────────────────────────┐
│ Health Check │
│ (200 concurrent) │
│ ┌──────────────┐ ┌──────────────┐│
│ │ Strict Mode │ │Relaxed Mode ││
│ │ (SSL verify) │ │(No SSL verify)││
│ │ - TCP Connect│ │- TCP Connect ││
│ │ - TLS + Cert │ │- TLS Only ││
│ │ - Speed Test │ │- Speed Test ││
│ └──────────────┘ └──────────────┘│
└────────┬────────────────┬───────────┘
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ Strict Pool │ │ Relaxed Pool │
│(SSL Verified) │ │(More Compatible)│
└────────┬────────┘ └────────┬────────┘
│ │
┌────┴────┐ ┌────┴────┐
▼ ▼ ▼ ▼
┌────────┐┌────────┐┌────────┐┌────────┐
│SOCKS5 ││ HTTP ││SOCKS5 ││ HTTP │
│Strict ││ Strict ││Relaxed ││Relaxed │
│:17283 ││ :17285 ││:17284 ││ :17286 │
└────────┘└────────┘└────────┘└────────┘
- Concurrent Health Checks: Configurable worker pool (default: 200)
- Lock-free Rotation: Atomic operations for proxy selection
- Minimal Lock Contention: RWMutex for proxy pool updates
- Connection Reuse: HTTP transport connection pooling
- Fast Filtering: Rejects proxies with TLS handshake > 5s
Issue: "No available proxies"
- Check network connectivity
- Verify proxy source URLs are accessible
- Wait for health check to complete
- Check firewall settings
Issue: Connection failures
- Proxies may be temporarily unavailable
- Target website may block proxy IPs
- Try multiple requests to use different proxies
- Adjust
health_check_concurrencyif network is limited
Issue: Slow performance
- Decrease
tls_handshake_threshold_secondsto filter slower proxies - Increase
health_check_concurrencyfor faster updates - Add more reliable proxy sources
Contributions are welcome! Please feel free to submit a Pull Request.
MIT License
高性能的 SOCKS5/HTTP 动态代理服务器,自动从代理列表获取、测活并轮询使用代理。
- 🚀 多源支持: 同时从多个URL获取代理
- 🔄 自动轮换: 轮询算法自动切换代理
- 💪 高并发: 可配置的并发健康检查(默认200)
- ⚡ 快速测活: TLS握手验证和性能过滤
- 🔧 灵活配置: 基于YAML的配置文件
- 🌐 双协议: SOCKS5和HTTP代理服务器
- 🔒 HTTPS支持: 完整的CONNECT隧道支持
- 📊 实时进度: 健康检查时的实时进度条
- 🎯 智能过滤: 自动移除慢速和不可靠的代理
- 🔁 自动更新: 定期刷新代理池(可配置间隔)
- 🔐 双模式: 严格模式(启用SSL验证)和宽松模式(禁用SSL验证)
下载适合您平台的最新版本:
- Linux (amd64):
dynamic-proxy-linux-amd64 - macOS (Intel):
dynamic-proxy-darwin-amd64 - macOS (Apple Silicon):
dynamic-proxy-darwin-arm64 - Windows:
dynamic-proxy.exe
# Linux / macOS
chmod +x dynamic-proxy-linux-amd64
./dynamic-proxy-linux-amd64
# Windows
dynamic-proxy.exe# 克隆仓库
git clone https://github.com/kbykb/dynamic-proxy.git
cd dynamic-proxy
# 下载依赖
go mod download
# 编译
go build -o dynamic-proxy
# 运行
./dynamic-proxy使用 Docker:
# 构建镜像
docker build -t dynamic-proxy .
# 运行容器
docker run -d \
--name dynamic-proxy \
-p 17283:17283 \
-p 17284:17284 \
-p 17285:17285 \
-p 17286:17286 \
-v $(pwd)/config.yaml:/app/config.yaml:ro \
--restart unless-stopped \
dynamic-proxy使用 Docker Compose:
# 启动服务
docker-compose up -d
# 查看日志
docker-compose logs -f
# 停止服务
docker-compose downDocker 配置说明:
Docker 镜像使用多阶段构建,体积最小化:
- 基础镜像: Alpine Linux
- 包含 CA 证书支持 HTTPS
- 暴露端口:
- 17283 (SOCKS5 严格模式 - 启用SSL验证)
- 17284 (SOCKS5 宽松模式 - 禁用SSL验证)
- 17285 (HTTP 严格模式 - 启用SSL验证)
- 17286 (HTTP 宽松模式 - 禁用SSL验证)
- 配置文件可通过卷挂载,方便更新
编辑 config.yaml 自定义设置:
# 代理列表URL(支持多个源)
proxy_list_urls:
- "https://raw.githubusercontent.com/r00tee/Proxy-List/main/Socks5.txt"
- "https://raw.githubusercontent.com/ClearProxy/checked-proxy-list/main/socks5/raw/all.txt"
# 添加更多源
# - "https://example.com/proxy-list.txt"
# 健康检查并发数(同时测试数量)
health_check_concurrency: 200
# 更新间隔(分钟)
update_interval_minutes: 5
# 健康检查超时设置
health_check:
total_timeout_seconds: 8 # 总超时时间
tls_handshake_threshold_seconds: 5 # TLS握手阈值
# 服务器端口
ports:
socks5_strict: ":17283" # SOCKS5 严格模式(启用SSL验证)
socks5_relaxed: ":17284" # SOCKS5 宽松模式(禁用SSL验证)
http_strict: ":17285" # HTTP 严格模式(启用SSL验证)
http_relaxed: ":17286" # HTTP 宽松模式(禁用SSL验证)| 选项 | 说明 | 默认值 |
|---|---|---|
proxy_list_urls |
代理源URL列表 | 2个源 |
health_check_concurrency |
并发健康检查数 | 200 |
update_interval_minutes |
代理池刷新间隔 | 5分钟 |
total_timeout_seconds |
健康检查总超时 | 8秒 |
tls_handshake_threshold_seconds |
最大TLS握手时间 | 5秒 |
ports.socks5_strict |
SOCKS5服务器端口(启用SSL验证) | :17283 |
ports.socks5_relaxed |
SOCKS5服务器端口(禁用SSL验证) | :17284 |
ports.http_strict |
HTTP代理服务器端口(启用SSL验证) | :17285 |
ports.http_relaxed |
HTTP代理服务器端口(禁用SSL验证) | :17286 |
# 使用curl测试(SOCKS5 严格模式 - 启用SSL验证)
curl --socks5 127.0.0.1:17283 https://api.ipify.org
# 使用curl测试(SOCKS5 宽松模式 - 禁用SSL验证)
curl --socks5 127.0.0.1:17284 https://api.ipify.org
# 使用curl测试(HTTP 严格模式 - 启用SSL验证)
curl -x http://127.0.0.1:17285 https://api.ipify.org
# 使用curl测试(HTTP 宽松模式 - 禁用SSL验证)
curl -x http://127.0.0.1:17286 https://api.ipify.orgSOCKS5代理(严格模式 - 推荐):
- 主机:
127.0.0.1 - 端口:
17283
SOCKS5代理(宽松模式 - 兼容性):
- 主机:
127.0.0.1 - 端口:
17284
HTTP代理(严格模式 - 推荐):
- 主机:
127.0.0.1 - 端口:
17285
HTTP代理(宽松模式 - 兼容性):
- 主机:
127.0.0.1 - 端口:
17286
Python:
import requests
# HTTP代理(严格模式 - 推荐)
proxies = {
'http': 'http://127.0.0.1:17285',
'https': 'http://127.0.0.1:17285'
}
response = requests.get('https://api.ipify.org', proxies=proxies)
print(response.text)
# HTTP代理(宽松模式 - 兼容性)
proxies = {
'http': 'http://127.0.0.1:17286',
'https': 'http://127.0.0.1:17286'
}
response = requests.get('https://api.ipify.org', proxies=proxies)
print(response.text)
# SOCKS5代理(严格模式 - 推荐)
proxies = {
'http': 'socks5://127.0.0.1:17283',
'https': 'socks5://127.0.0.1:17283'
}
response = requests.get('https://api.ipify.org', proxies=proxies)
print(response.text)
# SOCKS5代理(宽松模式 - 兼容性)
proxies = {
'http': 'socks5://127.0.0.1:17284',
'https': 'socks5://127.0.0.1:17284'
}
response = requests.get('https://api.ipify.org', proxies=proxies)
print(response.text)Node.js:
const axios = require('axios');
const { SocksProxyAgent } = require('socks-proxy-agent');
// SOCKS5代理(严格模式 - 推荐)
const strictAgent = new SocksProxyAgent('socks5://127.0.0.1:17283');
axios.get('https://api.ipify.org', { httpAgent: strictAgent, httpsAgent: strictAgent })
.then(response => console.log(response.data));
// SOCKS5代理(宽松模式 - 兼容性)
const relaxedAgent = new SocksProxyAgent('socks5://127.0.0.1:17284');
axios.get('https://api.ipify.org', { httpAgent: relaxedAgent, httpsAgent: relaxedAgent })
.then(response => console.log(response.data));
// HTTP代理(严格模式 - 推荐)
axios.get('https://api.ipify.org', {
proxy: {
host: '127.0.0.1',
port: 17285
}
}).then(response => console.log(response.data));
// HTTP代理(宽松模式 - 兼容性)
axios.get('https://api.ipify.org', {
proxy: {
host: '127.0.0.1',
port: 17286
}
}).then(response => console.log(response.data));- 代理获取: 启动时从配置的URL获取代理列表
- 健康检查: 并发健康检查,包含TLS握手验证
- 严格模式: 启用SSL证书验证进行测试
- 宽松模式: 禁用SSL证书验证进行测试
- 优化策略: 如果代理通过严格模式测试,自动添加到两个池
- 双代理池: 维护两个独立的代理池(严格和宽松)
- 自动更新: 按配置间隔刷新两个代理池
- 轮询分配: 使用轮询算法分配请求到代理
- 双协议: 同时提供SOCKS5和HTTP代理协议,每种协议都有两种模式(共4个服务器)
┌─────────────────┐
│ 代理源列表 │
│ (支持多个URL) │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 获取并合并 │
│ (自动去重) │
└────────┬────────┘
│
▼
┌─────────────────────────────────────┐
│ 健康检查 │
│ (200并发) │
│ ┌──────────────┐ ┌──────────────┐│
│ │ 严格模式 │ │ 宽松模式 ││
│ │ (SSL验证) │ │(无SSL验证) ││
│ │ - TCP连接 │ │- TCP连接 ││
│ │ - TLS+证书 │ │- 仅TLS ││
│ │ - 速度测试 │ │- 速度测试 ││
│ └──────────────┘ └──────────────┘│
└────────┬────────────────┬───────────┘
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ 严格代理池 │ │ 宽松代理池 │
│ (SSL已验证) │ │ (更高兼容性) │
└────────┬────────┘ └────────┬────────┘
│ │
┌────┴────┐ ┌────┴────┐
▼ ▼ ▼ ▼
┌────────┐┌────────┐┌────────┐┌────────┐
│SOCKS5 ││ HTTP ││SOCKS5 ││ HTTP │
│严格 ││ 严格 ││宽松 ││ 宽松 │
│:17283 ││ :17285 ││:17284 ││ :17286 │
└────────┘└────────┘└────────┘└────────┘
- 并发健康检查: 可配置的工作池(默认200)
- 无锁轮换: 原子操作实现代理选择
- 最小锁竞争: 读写锁保护代理池更新
- 连接复用: HTTP传输连接池
- 快速过滤: 拒绝TLS握手>5秒的代理
问题:"No available proxies"
- 检查网络连接
- 验证代理源URL可访问
- 等待健康检查完成
- 检查防火墙设置
问题:连接失败
- 代理可能暂时不可用
- 目标网站可能屏蔽代理IP
- 尝试多次请求使用不同代理
- 如果网络受限,调整
health_check_concurrency
问题:性能慢
- 降低
tls_handshake_threshold_seconds过滤慢速代理 - 增加
health_check_concurrency加快更新 - 添加更可靠的代理源
欢迎贡献!请随时提交Pull Request。
MIT License