| name | vps-clash-subscription |
| description | 在任意VPS上搭建完整的Clash订阅服务 — 包含HTTPS订阅、Let's Encrypt证书、域名配置、安全策略、国内分流规则、自动续期 |
| triggers | ["在VPS上搭建VPN订阅服务","搭建clash订阅","VPS科学上网","自建订阅节点","Let's Encrypt证书配置","翻墙 机场 自建"] |
VPS Clash Subscription Service / VPS Clash 订阅服务搭建完整指南
English: A complete guide to building a Clash subscription service on any VPS — covering HTTPS subscription, Let's Encrypt certificates, domain configuration, security policies, China mainland direct routing rules, and automatic certificate renewal.
中文: 在任意 Linux VPS 上搭建 Clash 订阅服务的完整指南。包含 HTTPS 订阅下载、正式 TLS 证书、国内网站直连分流、订阅防探测等核心内容。
Table of Contents / 目录
Architecture / 架构说明
┌─────────────────┐ HTTPS (443) ┌──────────────────┐ HTTP (65534) ┌────────────────┐
│ Clash Client │ ──────────────────→ │ nginx │ ───────────────→ │ Python Sub │
│ (Clash Verge) │ TLS Termination │ Reverse Proxy │ │ Service │
└─────────────────┘ └──────────────────┘ │ (127.0.0.1) │
└───────┬────────┘
│
↓
┌────────────────────────┐
│ Clash YAML Config │
│ - Proxy Node Info │
│ - Routing Rules │
│ - rule-providers │
└────────────────────────┘
┌─────────────────┐ SS Encrypted (8388) ┌──────────────────┐
│ Clash Client │ ←────────────────────── │ Shadowsocks │ ←── Internet
│ (Actual Traffic)│ TCP+UDP │ ss-server │ Target Sites
└─────────────────┘ └──────────────────┘
Key Points / 关键说明
| 层级 | 说明 / Description | 安全要点 / Security Notes |
|---|
| HTTPS 订阅下载 | Only used for subscription config download (one-time) | TLS encrypted, prevents eavesdropping |
实际代理流量 Actual Proxy Traffic | Goes directly through Shadowsocks, NOT through nginx | SS protocol encryption (chacha20/aes) |
| nginx | TLS termination, listens on public 0.0.0.0:443 | Python sub service only on 127.0.0.1 |
| Python Sub Service | Generates and serves Clash YAML | Token-based path auth, no auth bypass |
Traffic flow / 流量走向:
- Subscription download:
Clash Client → HTTPS → nginx:443 → HTTP → Python:65534 → Clash YAML
- Actual browsing:
Clash Client → SS encrypted → VPS:8388 → Target Website
- nginx is ONLY in the subscription download path, NOT in the actual proxy path.
Prerequisites / 前置要求
| 要求 / Requirement | 说明 / Description | 推荐 / Recommended |
|---|
| VPS | 任意 Linux,Ubuntu 24.04 验证通过 Any Linux, Ubuntu 24.04 tested | Ubuntu 20.04+ / Debian 12+ / CentOS 8+ |
| 公网IP / Public IP | VPS 必须有公网 IPv4 VPS must have public IPv4 | 记下 IP 地址,例如 43.155.161.178 |
| 域名 / Domain | duckdns.org 免费子域名 Free subdomain at duckdns.org | 也支持 Cloudflare / 阿里云 / 腾讯云等其他域名 |
| 防火墙 / Firewall | VPS 防火墙(如 ufw/iptables)+ 云服务商安全组 VPS firewall + cloud security group | 需要同时配置 |
| Clash Client | Clash Verge / Clash for Windows / ClashX | Clash Verge 下载 |
Port Planning / 端口规划
端口 Port | 协议 Protocol | 用途 Purpose | 暴露公网? Public? | 备注 |
|---|
| 80 | TCP | Let's Encrypt 证书申请(临时) Certificate verification (temporary) | 是 / Yes | 申请后可以关闭 |
| 443 | TCP | HTTPS 订阅访问 HTTPS subscription access | 是 / Yes | 主要访问端口 |
| 8388 | TCP+UDP | Shadowsocks 代理端口 SS proxy port | 是 / Yes | 实际流量入口 |
| 65534 | TCP | Python 订阅服务(仅本地) Python sub service (local only) | 否 / No | nginx 反代后间接访问 |
| 9090 | TCP | Clash 管理 API(仅本地) Clash management API (local only) | 否 / No | 用于控制器 |
| 51820 | UDP | WireGuard 备用隧道(可选) WireGuard backup tunnel (optional) | 是 / Yes | 如需备用方案 |
⚠️ 云服务商安全组注意 / Cloud Security Group Note:
如果使用云服务商(AWS / 阿里云 / 腾讯云 / Vultr / DigitalOcean 等),防火墙有两层:
- VPS 内部防火墙(ufw / iptables):用
sudo ufw allow 443/tcp 开放
- 云控制台安全组(Security Group):需要在云服务商网页手动添加入站规则
两层都要开,否则端口不通。
Security Configuration / 安全配置
Security Checklist / 安全检查清单
| 配置项 / Config | 危险后果(不设置会怎样) Risk if not set | 推荐值 / Recommended |
|---|
allow-lan: false | 全球任何人都能用你的 VPS 代理流量,账单爆炸 | false |
bind-address: "127.0.0.1" | SS 代理端口暴露公网,任何人可直连你的翻墙节点 | "127.0.0.1" |
external-controller: 127.0.0.1 | 任何人可远程控制你的 Clash 配置,修改规则、添加代理 | 127.0.0.1:9090 |
| DNS 8.8.8.8 / 1.1.1.1 | DNS 查询经过国内服务器,隐私泄露,可被审查 | 境外 DNS |
| Let's Encrypt 证书 | 自签证书需要客户端忽略警告,且密码明文传输有 MITM 风险 | Let's Encrypt |
| 订阅路径 32 位随机 token | 订阅路径被猜测,配置泄露,被蹭网或审查 | 32 位 hex |
| nginx 反代 | Python 服务不直接暴露公网,只通过 nginx 访问 | 必须配置 |
Password Generation / 密码生成规范
openssl rand -base64 32
openssl rand -hex 32
密码强度建议 / Password Strength Recommendations:
- 最少 16 位 / Minimum 16 characters
- 包含数字 + 字母 + 特殊字符 / Include digits + letters + special chars
- 定期更换 / Rotate periodically
Deployment Steps / 部署步骤
Step 1: Register Domain / 第一步:注册域名
为什么需要域名?/ Why domain is required:
- Let's Encrypt 不支持纯 IP 签发证书(标准限制)
- duckdns.org 提供免费子域名,5 分钟搞定,无需信用卡
- 支持任何 DNS 提供商(Cloudflare / 阿里云 / 腾讯云等均可)
duckdns.org 注册步骤 / Registration Steps:
- 访问 https://www.duckdns.org
- 点击 GitHub 或 Google 登录(推荐,无需注册)
- 点击 "Create your domain"
- 输入子域名前缀(如
myvps),系统自动生成 myvps.duckdns.org
- 在 IPv4 框填入你的 VPS 公网 IP(如
43.155.161.178)
- 点击 save
验证域名解析 / Verify DNS Resolution:
nslookup myvps.duckdns.org 8.8.8.8
⚠️ 注意事项 / Note: duckdns 免费域名有效期无限,但 30 天不登录会被删除。建议收藏保存登录状态。
Step 2: Open Firewall Ports / 第二步:开放防火墙端口
⚠️ 两层防火墙都要开!/ BOTH firewall layers need configuration!
2.1 VPS 内部防火墙 / VPS Internal Firewall:
sudo ufw status
sudo ufw enable
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 8388/tcp
sudo ufw allow 8388/udp
sudo ufw status numbered
2.2 云服务商安全组 / Cloud Provider Security Group:
需要在云服务商控制台手动添加入站规则(不是 Linux 内部防火墙):
协议 Protocol | 端口 Port | 来源 Source | 说明 Description |
|---|
| TCP | 80 | 0.0.0.0/0 | 证书申请临时开放 |
| TCP | 443 | 0.0.0.0/0 | HTTPS 订阅访问 |
| TCP | 8388 | 0.0.0.0/0 | SS 代理 TCP |
| UDP | 8388 | 0.0.0.0/0 | SS 代理 UDP |
常见云服务商安全组入口:
- AWS EC2: EC2 Dashboard → Instances → Security → Security Groups
- 阿里云 ECS: ECS Console → 实例 → 安全组 → 配置规则
- 腾讯云 CVM: CVM Console → 实例 → 安全组 → 入站规则
- Vultr / DigitalOcean: Firewall → Add Rule
验证端口是否通 / Verify port is reachable:
nc -zv 你的VPS_IP 443
Step 3: Install Dependencies / 第三步:安装依赖
sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get install -y \
shadowsocks-libev \
nginx \
certbot \
python3-certbot-nginx
ss-server --version
nginx -v
certbot --version
Step 4: Install Shadowsocks / 第四步:安装Shadowsocks
4.1 创建 systemd 服务 / Create systemd service:
sudo nano /etc/systemd/system/shadowsocks.service
内容 / Content:
[Unit]
Description=Shadowsocks Libev Server
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/ss-server -s 0.0.0.0 -p 8388 -k 你的SS密码 -m chacha20-ietf-poly1305 -u
Restart=on-abort
RestartSec=5
User=root
[Install]
WantedBy=multi-user.target
4.2 启动并设置开机自启 / Start and enable:
sudo systemctl daemon-reload
sudo systemctl enable shadowsocks
sudo systemctl start shadowsocks
sudo systemctl status shadowsocks
ss -tlnp | grep 8388
4.3 加密方式说明 / Encryption Methods:
| 加密方式 | 推荐度 | 说明 |
|---|
chacha20-ietf-poly1305 | ⭐⭐⭐⭐⭐ | 推荐,抗审查,性能好,省电 |
aes-256-gcm | ⭐⭐⭐⭐ | 也支持,部分设备性能较好 |
aes-128-gcm | ⭐⭐⭐ | 可用,但强度稍低 |
rc4-md5 | ⭐ | 不推荐,已被破解 |
Step 5: Configure Subscription Service / 第五步:配置订阅服务
5.1 生成订阅路径 token / Generate subscription token:
openssl rand -hex 32
5.2 创建订阅服务脚本 / Create subscription service script:
sudo nano /tmp/sub_server.py
⚠️ 重要:修改下面三处 / IMPORTANT: Modify these 3 places:
你的VPS公网IP → 替换为你的实际 VPS IP
你的SS密码 → 替换为你的 SS 密码
上面openssl生成的32位token → 替换为上一步生成的 token
"""
Clash Subscription Service / Clash 订阅服务
Holds the complete Clash YAML config and serves it via HTTP.
"""
import http.server
import socketserver
import json
from datetime import datetime
VPS_IP = "你的VPS公网IP"
SS_PASSWORD = "你的SS密码"
SS_PORT = 8388
SS_METHOD = "chacha20-ietf-poly1305"
SUBSCRIPTION_TOKEN = "上面openssl生成的32位token"
CLASH_YAML = f"""port: 7890
socks-port: 7891
mixed-port: 7892
redir-port: 7893
allow-lan: false
bind-address: "127.0.0.1"
mode: rule
log-level: info
external-controller: 127.0.0.1:9090
dns:
enable: true
listen: 127.0.0.1:1053
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
nameserver:
- 8.8.8.8
- 1.1.1.1
fallback:
- 8.8.8.8
- 1.1.1.1
fallback-filter:
geoip: true
geoip-code: CN
proxies:
- name: "VPS-SS"
type: ss
server: {VPS_IP}
port: {SS_PORT}
cipher: {SS_METHOD}
password: "{SS_PASSWORD}"
udp: true
proxy-groups:
- name: "Auto"
type: select
proxies:
- "VPS-SS"
rule-providers:
chinamax:
type: http
behavior: classical
url: "https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/rule/Clash/ChinaMax/ChinaMax_Classical.yaml"
path: ./chinamax.yaml
interval: 86400
rules:
# === 中国大陆域名直连 / China domain direct ===
- DOMAIN-SUFFIX,cq.cn,DIRECT
- DOMAIN-SUFFIX,cn,DIRECT
- DOMAIN-SUFFIX,baidu.com,DIRECT
- DOMAIN-SUFFIX,baidubcr.com,DIRECT
- DOMAIN-SUFFIX,bdstatic.com,DIRECT
- DOMAIN-SUFFIX,qq.com,DIRECT
- DOMAIN-SUFFIX,weixin.com,DIRECT
- DOMAIN-SUFFIX,tencent.com,DIRECT
- DOMAIN-SUFFIX,tencent-cloud.com,DIRECT
- DOMAIN-SUFFIX,taobao.com,DIRECT
- DOMAIN-SUFFIX,tmall.com,DIRECT
- DOMAIN-SUFFIX,alipay.com,DIRECT
- DOMAIN-SUFFIX,alibaba.com,DIRECT
- DOMAIN-SUFFIX,alicdn.com,DIRECT
- DOMAIN-SUFFIX,aliyun.com,DIRECT
- DOMAIN-SUFFIX,aliyuncs.com,DIRECT
- DOMAIN-SUFFIX,dingtalk.com,DIRECT
- DOMAIN-SUFFIX,dingtalk.org,DIRECT
- DOMAIN-SUFFIX,ele.me,DIRECT
- DOMAIN-SUFFIX,meituan.com,DIRECT
- DOMAIN-SUFFIX,meituan-ec.com,DIRECT
- DOMAIN-SUFFIX,163.com,DIRECT
- DOMAIN-SUFFIX,126.com,DIRECT
- DOMAIN-SUFFIX,youku.com,DIRECT
- DOMAIN-SUFFIX,iqiyi.com,DIRECT
- DOMAIN-SUFFIX,bilibili.com,DIRECT
- DOMAIN-SUFFIX,bilivideo.com,DIRECT
- DOMAIN-SUFFIX,douyin.com,DIRECT
- DOMAIN-SUFFIX,bytedance.com,DIRECT
- DOMAIN-SUFFIX,byted.org,DIRECT
- DOMAIN-SUFFIX,toutiao.com,DIRECT
- DOMAIN-SUFFIX,zhihu.com,DIRECT
- DOMAIN-SUFFIX,csdn.net,DIRECT
- DOMAIN-SUFFIX,jd.com,DIRECT
- DOMAIN-SUFFIX,360.cn,DIRECT
- DOMAIN-SUFFIX,360cdn.com,DIRECT
- DOMAIN-SUFFIX,sina.com,DIRECT
- DOMAIN-SUFFIX,weibo.com,DIRECT
- DOMAIN-SUFFIX,redian.cn,DIRECT
- DOMAIN-SUFFIX,gov.cn,DIRECT
- DOMAIN-SUFFIX,miit.gov.cn,DIRECT
- DOMAIN-SUFFIX,10086.cn,DIRECT
- DOMAIN-SUFFIX,chinatelecom.com,DIRECT
- DOMAIN-SUFFIX,189.cn,DIRECT
- DOMAIN-SUFFIX,10010.com,DIRECT
- DOMAIN-SUFFIX,10086.cn,DIRECT
- DOMAIN-SUFFIX,cucc.com,DIRECT
- DOMAIN-SUFFIX,suning.com,DIRECT
- DOMAIN-SUFFIX,gome.com,DIRECT
- DOMAIN-SUFFIX,vip.com,DIRECT
- DOMAIN-SUFFIX,pinduoduo.com,DIRECT
- DOMAIN-SUFFIX,xianyu.com,DIRECT
- DOMAIN-SUFFIX,huawei.com,DIRECT
- DOMAIN-SUFFIX,huaweiwei.com,DIRECT
- DOMAIN-SUFFIX,honor.cn,DIRECT
- DOMAIN-SUFFIX,xiaomi.com,DIRECT
- DOMAIN-SUFFIX,mi.com,DIRECT
- DOMAIN-SUFFIX,redmi.com,DIRECT
- DOMAIN-SUFFIX,oppo.com,DIRECT
- DOMAIN-SUFFIX,vivo.com,DIRECT
- DOMAIN-SUFFIX,oneplus.com,DIRECT
- DOMAIN-SUFFIX,zte.com,DIRECT
- DOMAIN-SUFFIX,lenovo.com,DIRECT
- DOMAIN-SUFFIX,chinacache.com,DIRECT
# === 中国大陆关键词直连 / China keyword direct ===
- DOMAIN-KEYWORD,cq.cn,DIRECT
- DOMAIN-KEYWORD,baidu,DIRECT
- DOMAIN-KEYWORD,alibaba,DIRECT
- DOMAIN-KEYWORD,taobao,DIRECT
- DOMAIN-KEYWORD,tencent,DIRECT
- DOMAIN-KEYWORD,bytedance,DIRECT
- DOMAIN-KEYWORD,zhihu,DIRECT
- DOMAIN-KEYWORD,csdn,DIRECT
- DOMAIN-KEYWORD,aliyun,DIRECT
- DOMAIN-KEYWORD,dingtalk,DIRECT
- DOMAIN-KEYWORD,ele.me,DIRECT
# === 中国大陆 IP 段直连 / China IP ranges direct ===
- IP-CIDR,10.0.0.0/8,DIRECT
- IP-CIDR,172.16.0.0/12,DIRECT
- IP-CIDR,192.168.0.0/16,DIRECT
- IP-CIDR,127.0.0.0/8,DIRECT
- IP-CIDR,224.0.0.0/4,DIRECT
- IP-CIDR,240.0.0.0/4,DIRECT
# === rule-providers: ChinaMax 规则集 / ChinaMax rule set ===
- RULE-SET,chinamax,DIRECT
# === GEOIP: 中国大陆 IP 走直连 / GEOIP CN direct ===
- GEOIP,CN,DIRECT
# === 默认走代理 / Default: use proxy ===
- MATCH,Auto
"""
class SubHandler(http.server.BaseHTTPRequestHandler):
"""订阅处理器 / Subscription request handler"""
def do_GET(self):
expected_path = f"/ssone/{SUBSCRIPTION_TOKEN}"
if self.path.startswith(expected_path):
config = CLASH_YAML.encode("utf-8")
self.send_response(200)
self.send_header("Content-Type", "text/plain; charset=utf-8")
self.send_header("Content-Length", len(config))
self.send_header("Cache-Control", "no-cache, no-store, must-revalidate")
self.send_header(
"Subscription-Userinfo",
"upload=0; download=0; total=107374182400000; expire=4102444800"
)
self.end_headers()
self.wfile.write(config)
else:
self.send_error(404)
def log_message(self, format, *args):
print(f"[订阅/Sub] {args[0]}")
PORT = 65534
socketserver.TCPServer.allow_reuse_address = True
server = socketserver.TCPServer(("0.0.0.0", PORT), SubHandler)
print(f"订阅服务启动 / Subscription service started: http://0.0.0.0:{PORT}/ssone/{SUBSCRIPTION_TOKEN}")
print(f"订阅地址 / Subscription URL: https://你的域名/ssone/{SUBSCRIPTION_TOKEN}")
server.serve_forever()
5.3 启动订阅服务 / Start subscription service:
nohup python3 /tmp/sub_server.py > /tmp/sub_server.log 2>&1 &
sleep 2 && ss -tlnp | grep 65534
curl -s http://127.0.0.1:65534/ssone/你的TOKEN | head -5
Step 6: Apply Let's Encrypt Certificate / 第六步:申请Let's Encrypt证书
6.1 为什么选择 Let's Encrypt?/ Why Let's Encrypt?
| 证书类型 | 优点 | 缺点 |
|---|
| 自签证书 | 快速,无域名要求 | Clash 每次导入都要点"忽略警告",有 MITM 风险 |
| Let's Encrypt | 正式 CA 签发,浏览器/Clash 信任,90 天自动续期 | 需要域名,需要 80 端口验证 |
6.2 申请证书 / Apply certificate:
sudo certbot certonly --nginx \
-d 你的duckdns域名 \
--non-interactive \
--agree-tos \
--register-unsafely-without-email
成功输出示例 / Success output example:
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/你的域名/fullchain.pem
Key is saved at: /etc/letsencrypt/live/你的域名/privkey.pem
This certificate expires on 2026-10-13.
6.3 证书文件说明 / Certificate files:
| 文件 | 用途 | 说明 |
|---|
fullchain.pem | nginx ssl_certificate | 包含完整证书链 |
privkey.pem | nginx ssl_certificate_key | 私钥,切勿泄露 |
Step 7: Configure nginx HTTPS Reverse Proxy / 第七步:配置nginx-HTTPS反代
7.1 创建 nginx 配置 / Create nginx config:
sudo nano /etc/nginx/sites-available/sub_https
内容 / Content:
server {
listen 443 ssl;
server_name 你的duckdns域名;
# Let's Encrypt 证书 / Let's Encrypt certificate
ssl_certificate /etc/letsencrypt/live/你的duckdns域名/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/你的duckdns域名/privkey.pem;
# TLS 安全配置 / TLS security hardening
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
# HSTS 可选启用 / Optional HSTS
# add_header Strict-Transport-Security "max-age=63072000" always;
# 订阅路径反代 / Subscription path reverse proxy
location /ssone/你的TOKEN {
proxy_pass http://127.0.0.1:65534/ssone/你的TOKEN;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 反代超时 / Proxy timeout
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
}
# 禁止访问其他路径 / Deny all other paths
location / {
return 403;
}
}
7.2 启用配置 / Enable config:
sudo rm -f /etc/nginx/sites-enabled/default
sudo ln -sf /etc/nginx/sites-available/sub_https /etc/nginx/sites-enabled/sub_https
sudo nginx -t
sudo systemctl reload nginx
Step 8: Verify Services / 第八步:验证服务
ss -tlnp | grep -E '443|80|8388|65534'
curl -sk https://127.0.0.1/ssone/你的TOKEN | head -10
curl -sk https://你的域名/ssone/你的TOKEN | head -10
echo | openssl s_client -connect 你的域名:443 -servername 你的域名 2>/dev/null | openssl x509 -no_out -issuer -dates
sudo systemctl status shadowsocks
ss -tlnp | grep 8388
预期结果 / Expected results:
ss -tlnp 显示 0.0.0.0:443, 0.0.0.0:80, 0.0.0.0:8388, 127.0.0.1:65534 监听中
curl 返回完整 Clash YAML 配置
openssl x509 显示 issuer=Let's Encrypt, notAfter 为 90 天后日期
Clash Client Configuration / Clash客户端配置
订阅链接 / Subscription URL
https://你的域名/ssone/你的TOKEN
Clash Verge 导入步骤 / Import Steps:
- 下载安装 Clash Verge
- 点击左侧菜单 Settings → Clash Core → 选择 Clash Verge
- 点击左侧 Profiles
- 点击 New Profile → 选择 URL
- 在 URL 栏填入上面的订阅链接
- 点击 Subscribe
- 首次使用 Let's Encrypt 证书无需任何警告(权威 CA 签发)
- 选择
Auto 节点,点击 Set as System Proxy
Detailed Security Analysis / 安全详解
Subscription Security / 订阅链路安全
Clash Client
↓ HTTPS (TLS 1.3 encrypted, MITM-proof)
nginx (TLS termination on port 443)
↓ HTTP (localhost only, cannot be accessed externally)
Python Subscription Service
↓
Clash YAML (contains SS password)
安全要点:
- HTTPS 防止订阅内容在传输中被窃听或篡改
- nginx 监听
0.0.0.0:443,Python 只监听 127.0.0.1:65534
- 外部无法直接访问 Python 服务,只能通过 nginx 反代
- 32 位随机 token 防止订阅路径被猜测或暴力扫描
Proxy Traffic Security / 代理流量安全
Clash Client
↓ SS protocol (chacha20-ietf-poly1305 encryption)
Shadowsocks Server (VPS)
↓ Decrypted, direct connection
Internet Target
Complete Secure Configuration / 完整安全配置参考
allow-lan: false
bind-address: "127.0.0.1"
external-controller: 127.0.0.1:9090
dns:
enable: true
listen: 127.0.0.1:1053
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
nameserver:
- 8.8.8.8
- 1.1.1.1
fallback:
- 8.8.8.8
- 1.1.1.1
fallback-filter:
geoip: true
geoip-code: CN
Certificate Auto-Renewal / 证书自动续期
Let's Encrypt 证书有效期 90 天,certbot 自动配置定时任务续期。
验证自动续期 / Verify auto-renewal:
sudo certbot renew --dry-run
sudo systemctl list-timers | grep certbot
sudo cat /etc/cron.d/certbot
手动续期 / Manual renewal:
sudo certbot renew
sudo systemctl reload nginx
证书到期前自动续期原理 / How auto-renewal works:
certbot 安装时会自动添加定时任务:
- 每天检查证书是否在 30 天内过期
- 如果过期,自动执行
certbot renew
- 续期后自动 reload nginx
Troubleshooting / 常见问题
Q1: Clash 导入订阅提示 "failed to fetch remote profile"?
排查步骤 / Troubleshooting:
nslookup 你的域名 8.8.8.8
nc -zv 你的域名 443
curl -sk https://你的域名 | head -3
sudo tail -20 /var/log/nginx/error.log
Q2: 国内网站没有直连,还是走了代理?
排查步骤 / Troubleshooting:
Q3: 导入后无法上网?
排查步骤 / Troubleshooting:
sudo systemctl status shadowsocks
ss -tlnp | grep 8388
Q4: 订阅链接需要改密码怎么办?
sudo nano /tmp/sub_server.py
pkill -f sub_server.py
nohup python3 /tmp/sub_server.py > /tmp/sub_server.log 2>&1 &
Q5: 域名解析失败?
nslookup 你的域名 8.8.8.8
Q6: 证书过期了?
sudo certbot renew
sudo certbot renew && sudo systemctl reload nginx
Q7: 怎样防止订阅链接被盗用?
- 定期更换 token:
openssl rand -hex 32 生成新 token
- Cloudflare CDN:隐藏真实 VPS IP,配合 CDN 使用
- Nginx 限速:限制单 IP 访问频率
- 订阅加密:使用 base64 + AES 加密订阅内容(进阶)
Q8: 如何迁移到新 VPS?
- 在新 VPS 执行上述所有步骤
- 修改
VPS_IP 为新 VPS IP
- 重启订阅服务
- duckdns 域名 IP 指向新 VPS
- 用户下次刷新订阅自动更新
Quick Reference / 快速参考
快速部署清单 / Quick Deploy Checklist
sudo apt-get update && sudo apt-get install -y \
shadowsocks-libev nginx certbot python3-certbot-nginx
sudo certbot certonly --nginx -d 你的域名 --non-interactive --agree-tos --register-unsafely-without-email
curl -sk https://你的域名/ssone/你的TOKEN | head -5
关键文件路径 / Key File Paths
| 文件 | 路径 |
|---|
| SS 配置 / SS config | /etc/systemd/system/shadowsocks.service |
| 订阅脚本 / Sub script | /tmp/sub_server.py |
| nginx HTTPS 配置 | /etc/nginx/sites-available/sub_https |
| Let's Encrypt 证书 | /etc/letsencrypt/live/你的域名/ |
| nginx 日志 | /var/log/nginx/access.log |
| 订阅日志 | /tmp/sub_server.log |
Rule Explanation / 规则说明
规则匹配顺序 / Rule Matching Order
Clash 按照规则从上到下逐条匹配,遇到第一条匹配的规则就执行,不会继续往下看。所以规则的顺序非常重要。
DIRECT(直连)vs Auto(代理) / Direct vs Proxy
| 规则目标 | 含义 | 适用场景 |
|---|
| DIRECT | 国内流量直连,不走代理 | 中国大陆网站和服务 |
| Auto | 通过 Shadowsocks 代理访问 | 海外网站和服务 |
订阅内置的完整规则体系 / Built-in Rule System
本订阅内置四层分流体系,确保国内外流量各走各的:
第一层:精确域名直连(优先级最高)
- DOMAIN-SUFFIX,baidu.com,DIRECT # 百度
- DOMAIN-SUFFIX,taobao.com,DIRECT # 淘宝
- DOMAIN-SUFFIX,qq.com,DIRECT # QQ
- DOMAIN-SUFFIX,alipay.com,DIRECT # 支付宝
- DOMAIN-SUFFIX,bilibili.com,DIRECT # B站
- DOMAIN-SUFFIX,weixin.com,DIRECT # 微信
- DOMAIN-SUFFIX,jd.com,DIRECT # 京东
...(共50条国内主流域名)
第二层:域名关键词直连
- DOMAIN-KEYWORD,baidu,DIRECT # 包含"baidu"的域名
- DOMAIN-KEYWORD,alibaba,DIRECT # 包含"alibaba"的域名
- DOMAIN-KEYWORD,tencent,DIRECT # 包含"tencent"的域名
...(共5条关键词规则)
第三层:中国 IP 段直连
- IP-CIDR,10.0.0.0/8,DIRECT # 10.x.x.x 私有网段
- IP-CIDR,172.16.0.0/12,DIRECT # 172.16.x.x 私有网段
- IP-CIDR,192.168.0.0/16,DIRECT # 192.168.x.x 局域网段
- IP-CIDR,127.0.0.0/8,DIRECT # 本地回环
第四层:ChinaMax 规则集(12万+条规则)
- RULE-SET,chinamax,DIRECT # 自动匹配国内已知域名
第五层:GEOIP 地理IP库
- GEOIP,CN,DIRECT # 所有中国IP段走直连
默认兜底规则
- MATCH,Auto # 以上都没命中 → 走代理
流量走向示例 / Traffic Flow Examples
| 访问目标 | 匹配规则 | 走向 |
|---|
baidu.com | DOMAIN-SUFFIX,baidu.com,DIRECT | 直连,不走代理 |
google.com | 无匹配 → MATCH,Auto | 走 Shadowsocks 代理 |
twitter.com | 无匹配 → MATCH,Auto | 走 Shadowsocks 代理 |
bilibili.com | DOMAIN-SUFFIX,bilibili.com,DIRECT | 直连 |
amazon.com | 无匹配 → MATCH,Auto | 走 Shadowsocks 代理 |
| 中国大陆 IP | GEOIP,CN,DIRECT | 直连 |
国内网站为什么直连更快?/ Why Direct is Faster for China Sites?
- 延迟低:直连无中转,本土延迟通常 5-30ms
- 带宽足:不走代理出口带宽限制
- 更稳定:不受代理服务器带宽波动影响
为什么海外网站要走代理?/ Why Proxy for Overseas Sites?
- 国内网络直连海外网站存在国际出口带宽限制和高延迟
- 通过 Shadowsocks 代理访问,绕开国际出口限制
- 速度更快、更稳定
Related Resources / 相关资源
Last updated / 最后更新: 2026-07-16