自建VPN这件事,很多人觉得「一次搭好就不用管了」。实际上,科学上网服务器的日常维护远比想象中麻烦——协议要更新、证书要续期、防火墙规则要调、BBR要优化、流量要监控、节点挂了要切换……随便一个环节出问题,就可能断联两三天。
但如果用Docker来管理,事情就简单得多。Docker把整个服务封装在独立的容器里——更新协议只需改一行配置重启容器,证书自动续期有现成镜像,流量监控用cAdvisor就能看,多协议共存也只是多写几行docker-compose的事。
本文不是教你怎么从零搭VPN——如果你还没买VPS,可以先看2026年VPS选购指南,了解搬瓦工、Vultr、RackNerd这些主流商家的线路差异。如果你连基础协议原理都不清楚,这篇主流协议对比文章能帮你搞清楚Shadowsocks、Trojan、VMess、VLESS、Hysteria2到底有什么区别。
一、为什么自建VPN要用Docker?
2026年,自建VPN的主流方案无非两种:直接装脚本(一键脚本如233boy的v2ray脚本、trojan-go一键脚本),或者用Docker容器化部署。
直接脚本方案的优点是「快」——跑一行命令就能用,无需理解底层原理。但缺点也很明显:
- 难于更新——协议升级时通常要重装脚本,不兼容容易出问题
- 协议绑定——一个脚本只支持一种协议,想同时跑Shadowsocks+Trojan+Hysteria2就要多台服务器
- 维护成本高——证书过期、配置迁移、流量统计都要手动搞
- 卸载困难——脚本改了一堆系统文件,想换方案时可能残留冲突
Docker方案完全解决了这些问题:Docker前期多花几分钟配置,换来的是长期零维护体验。
二、Docker环境安装
在VPS上安装Docker Engine:
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo usermod -aG docker $USER
装好Docker后,先开启BBR加速:
echo "net.core.default_qdisc=fq" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
BBR在高丢包环境下能显著提升传输速度,开启后单线程下载速度可提升200%-500%。
三、Shadowsocks + Hysteria2 多协议Docker部署
用Docker Compose同时部署Shadowsocks和Hysteria2两种协议,互相兜底:
mkdir -p ~/vpn-docker && cd ~/vpn-docker
cat > docker-compose.yml << 'EOF'
version: '3.8'
services:
shadowsocks:
image: teddysun/shadowsocks-rust:latest
environment:
- SS_SERVER_ADDR=0.0.0.0
- SS_SERVER_PORT=8388
- SS_PASSWORD=你的密码
- SS_METHOD=aes-256-gcm
ports:
- "8388:8388/tcp"
- "8388:8388/udp"
restart: unless-stopped
hysteria2:
image: tobyxdd/hysteria:latest
command: server -c /etc/hysteria/config.yaml
ports:
- "8443:8443/udp"
volumes:
- ./hysteria-config.yaml:/etc/hysteria/config.yaml
- ./ssl:/ssl
restart: unless-stopped
EOF
启动服务:
docker compose up -d
服务启动后,在客户端(如Clash Verge Rev)中添加对应协议的节点即可使用。如果你不想折腾自建配置,直接用现成的IEPL专线机场更省心——自由猫的订阅链接导入后就能直接使用,延迟表现接近自建CN2 GIA线路。
四、Trojan + Nginx反代 + CDN隐藏
Trojan的优势是伪装成HTTPS流量,配合Nginx反代和Cloudflare CDN可以隐藏真实VPS IP。在docker-compose.yml中增加trojan和nginx服务:
cat >> docker-compose.yml << 'EOF'
trojan:
image: teddysun/trojan-go:latest
environment:
- TROJAN_GO_SERVER_ADDR=0.0.0.0
- TROJAN_GO_SERVER_PORT=443
- TROJAN_GO_PASSWORD=你的密码
ports:
- "443:443"
volumes:
- ./ssl:/ssl
restart: unless-stopped
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./ssl:/ssl
restart: unless-stopped
EOF
Cloudflare CDN配置要点:在Cloudflare DNS面板中将域名代理状态设为「已代理(橙色云朵)」,所有流量先到Cloudflare边缘节点再转发到你的VPS。攻击者只能看到Cloudflare的IP,无法获取你的真实VPS IP。自建方案配合CDN后的延迟表现,与万达云这类成熟机场的中转+IEPL混合线路(¥16.8/月)相比,已经非常接近。关于线路优化和CDN隐藏的更多技巧,可以看15家机场横评中关于国内网络出口的分析。
五、证书自动续期:acme.sh容器化
Trojan需要合法的TLS证书。用acme.sh配合Cloudflare DNS API实现全自动续期:
# 在docker-compose.yml中添加
acme-sh:
image: neilpang/acme.sh:latest
command: daemon
volumes:
- ./ssl:/acme.sh
environment:
- CF_Token=你的Cloudflare API Token
- CF_Zone_ID=你的域名Zone ID
restart: unless-stopped
acme.sh容器每60天自动检查证书有效期,到期前30天自动续期,续期后重启trojan加载新证书。
六、性能调优:资源限制与TCP优化
多协议同时运行时,建议对每个容器设置资源上限防止互相干扰:
services:
trojan:
deploy:
resources:
limits:
cpus: '1.0'
memory: 256M
reservations:
cpus: '0.25'
memory: 64M
系统级优化:
# TCP Fast Open 减少握手延迟
echo 3 | sudo tee /proc/sys/net/ipv4/tcp_fastopen
# 增大TCP缓冲区
echo "net.core.rmem_max = 16777216" | sudo tee -a /etc/sysctl.conf
echo "net.core.wmem_max = 16777216" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
TCP Fast Open可以减少一次往返握手,对于需要频繁建立连接的AI编程工具(如Cursor、Copilot)效果明显。
七、长期运维:监控与自动维护
自建VPN最大的痛点不是搭不好,而是不维护就慢慢坏。用cAdvisor监控容器状态:
# 添加cAdvisor监控
cat >> docker-compose.yml << 'EOF'
cadvisor:
image: gcr.io/cadvisor/cadvisor:latest
ports:
- "8080:8080"
volumes:
- /:/rootfs:ro
- /var/run:/var/run:ro
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
restart: unless-stopped
EOF
cAdvisor启动后访问 http://你的VPS_IP:8080 可看容器的CPU、内存、网络实时数据。配合每周自动清理脚本:
# 每周日凌晨3点自动清理
(crontab -l 2>/dev/null; echo "0 3 * * 0 docker system prune -af --volumes") | crontab -
大部分时间你不需要操心——但每周清理能防止Docker镜像累积占满磁盘,这是VPS最常见的故障原因。
八、自建VPN vs 机场:成本与维护全面对比
花这么多精力自建,真的比直接买机场划算吗?
| 维度 | 自建VPN(Docker) | 机场订阅 |
|---|---|---|
| 月度成本 | ¥30-100(VPS) | ¥9-50 |
| 流量 | 500GB-2TB | 30-1000GB |
| 延迟 | 看线路:CN2 GIA ≈ IEPL | IEPL 50-100ms |
| 多节点 | 需多台VPS | 50+节点自动切换 |
| 维护 | 每周约30分钟 | 零维护 |
| 隐私 | 最高 | 取决于机场政策 |
| IP被封风险 | 高(单点全断) | 低(换节点即用) |
从经济账看:同样每月¥50,自建只能覆盖一台入门VPS,而机场能买到IEPL专线+50+节点+多设备支持的中高端套餐,还省去了所有维护时间。自由猫的IEPL专线(¥9/月)已经接近自建CN2 GIA的延迟表现。SS-ID全IEPL专线(¥20/月,100GB)延迟和稳定性对标自建CN2 GIA,省去所有维护成本。对多数用户,机场的「综合拥有成本」远低于自建。
当然,自建的最大优势是隐私和可控——如果你对数据安全有极端要求,或者想自己折腾学习网络技术,这篇文章的Docker方案就是最好的起点。
推荐阅读
- 2026年自建VPN全教程:从买VPS到部署WireGuard/Trojan全套方案 — 从零开始的完整搭建流程
- 2026年VPS选购指南:搬瓦工、Vultr、RackNerd、阿里云国际横向对比 — 各商家线路和价格对比
- Trojan、Shadowsocks、VMess、VLESS、Hysteria2——主流协议到底有什么区别? — 各协议原理和实测数据
- IEPL、IPLC、BGP到底有什么区别?一篇文章讲清楚机场专线 — 线路类型科普