如果你还没有合适的服务器,可以看看 雨云 的入门套餐作为起点;也欢迎把这套流程分享给同样被 GitHub 折磨的朋友。
为什么你需要一个自己的通道
国内访问 GitHub、Hugging Face、Docker Hub 的体验,懂的都懂:克隆仓库动不动超时、拉模型下到一半断流、docker pull 卡在 waiting……换镜像源、改 hosts、各种临时方案治标不治本。
买机场?价格倒是便宜,但节点质量参差、晚高峰排队、还要担心跑路。于是很多开发者选择自己搭一个通道:可控、稳定、不共享、想换就换。
这篇教程会带你从一台全新的境外服务器开始,完成一个「双通道」代理:TCP 通道负责日常稳定,UDP/QUIC 通道负责网络拥堵时兜底。全程不需要装 Nginx、不需要数据库、不需要可视化面板——一个 Xray 二进制 + 一个配置文件就够。
⚠️ 动手前请先备份服务器上的重要数据。本文涉及服务器端配置修改,操作有风险,请按步骤谨慎进行。
准备工作:三样东西
- 一台境外 VPS(推荐香港/日本等低延迟地区,内存 512MB 以上即可)
- 一个域名(用于申请可信证书,也便于伪装;新手也可先用自签证书体验,见第三节备选)
- 一个客户端(Clash Verge / mihomo 系,或 v2rayN)
服务器选购这里多说一句:预算有限的话可以从年付的小机器起步。我用过 雨云 的入门款,性价比不错,支持支付宝、按量灵活,适合先跑通再升级。当然,选任何一家都行,核心是地区离你近、线路稳定。
第一步:DNS 解析
把你要用的子域名指向 VPS 的公网 IP(在域名服务商后台添加 A 记录):
类型: A
主机记录: node
记录值: 你的服务器IP
也就是让 node.your-domain.com 能解析到服务器。等待几分钟后可用 ping node.your-domain.com 验证。
第二步:申请证书
方式 A(推荐):Let’s Encrypt 真证书
有域名就能申请免费可信证书,让通道在外部看起来和普通 HTTPS 网站无异。服务器上执行:
# 安装 acme.sh
curl https://get.acme.sh | sh -s [email protected]
# 用 standalone 模式申请(临时占用 80 端口,不需要 Nginx)
~/.acme.sh/acme.sh --issue --standalone -d node.your-domain.com
# 安装证书到固定目录(后续 Xray 读取)
~/.acme.sh/acme.sh --install-cert -d node.your-domain.com \
--key-file /usr/local/etc/xray/privkey.pem \
--fullchain-file /usr/local/etc/xray/fullchain.pem \
--reloadcmd "systemctl restart xray"
acme.sh 会注册定时任务自动续期,证书快到期前自动重新签发并重启 Xray,无需人工干预。
方式 B(快速体验):自签证书
如果暂时不想用域名,可以自签一张先用起来(客户端需要关闭证书校验,伪装效果打折,但功能完整):
mkdir -p /usr/local/etc/xray
openssl req -x509 -newkey rsa:2048 -nodes -keyout /usr/local/etc/xray/privkey.pem \
-out /usr/local/etc/xray/fullchain.pem -days 3650 \
-subj "/CN=your-domain.com"
第三步:安装 Xray
VPS 在境外,直接去 GitHub 拉官方二进制即可:
curl -L https://github.com/XTLS/Xray-core/releases/latest/download/Xray-linux-64.zip -o /tmp/x.zip
cd /tmp && unzip -o x.zip xray
mv xray /usr/local/bin/xray && chmod +x /usr/local/bin/xray
xray version
能打印出版本号就说明装好了。
第四步:写配置(核心)
生成一个 UUID(每个用户唯一,用于客户端鉴权):
cat /proc/sys/kernel/random/uuid
# 例如输出: 3f8c...-....-....(记下来,后面要用)
创建配置文件 /usr/local/etc/xray/config.json:
{
"log": { "loglevel": "warning" },
"inbounds": [
{
"tag": "tcp-ws",
"listen": "0.0.0.0",
"port": 443,
"protocol": "vless",
"settings": {
"clients": [ { "id": "你的UUID", "flow": "" } ],
"decryption": "none"
},
"streamSettings": {
"network": "ws",
"security": "tls",
"tlsSettings": {
"certificates": [
{ "certificateFile": "/usr/local/etc/xray/fullchain.pem",
"keyFile": "/usr/local/etc/xray/privkey.pem" }
]
},
"wsSettings": { "path": "/api/v1/sync" }
}
},
{
"tag": "udp-h3",
"listen": "0.0.0.0",
"port": 443,
"protocol": "vless",
"settings": {
"clients": [ { "id": "你的UUID", "flow": "" } ],
"decryption": "none"
},
"streamSettings": {
"network": "xhttp",
"security": "tls",
"tlsSettings": {
"certificates": [
{ "certificateFile": "/usr/local/etc/xray/fullchain.pem",
"keyFile": "/usr/local/etc/xray/privkey.pem" }
],
"alpn": [ "h3" ]
},
"xhttpSettings": { "path": "/sync", "mode": "auto" }
}
}
],
"outbounds": [ { "protocol": "freedom" } ]
}
这份配置同时开启了两个入口,共用一个 UUID:
- TCP 入口(WS):日常主力,兼容性最好,几乎所有客户端都支持;
- UDP 入口(XHTTP/H3):基于 QUIC,网络拥堵丢包时比 TCP 抗造,作为兜底。
端口 443 的 TCP 与 UDP 互不冲突,可以并存。请把配置里的 你的UUID 替换成上一步生成的 UUID。
第五步:注册服务并启动
cat > /etc/systemd/system/xray.service << 'EOF'
[Unit]
Description=Xray Service
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/xray run -config /usr/local/etc/xray/config.json
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now xray
systemctl status xray
看到 active (running) 即启动成功。注意在云控制台的安全组/防火墙放行 TCP 443 和 UDP 443。
第六步:客户端接入
以 Clash Verge(mihomo 内核,需 v1.19.25+ 才支持 H3)为例,在配置的 proxies 中增加两个节点:
proxies:
- name: "我的通道-TCP"
type: vless
server: node.your-domain.com
port: 443
uuid: 你的UUID
network: ws
tls: true
servername: node.your-domain.com
client-fingerprint: chrome
ws-opts:
path: "/api/v1/sync"
headers: { Host: node.your-domain.com }
- name: "我的通道-QUIC"
type: vless
server: node.your-domain.com
port: 443
udp: true
uuid: 你的UUID
network: xhttp
tls: true
servername: node.your-domain.com
alpn: [ h3 ]
client-fingerprint: chrome
xhttp-opts:
path: /sync
host: node.your-domain.com
mode: packet-up
proxy-groups:
- name: "♻️ 自动选择"
type: url-test
url: http://www.gstatic.com/generate_204
interval: 120
proxies:
- "我的通道-TCP"
- "我的通道-QUIC"
日常把规则出口指到「自动选择」,客户端会定时测速,自动在 TCP / QUIC 之间切换:网络好时用 TCP,拥堵时自动切到 QUIC。
第七步:验证
开启系统代理后,终端验证通道是否真的通了:
# 访问 GitHub
curl -I https://github.com
# 拉一次 Docker 镜像(如果安装了 Docker)
docker pull alpine:latest
能正常返回 200 / 正常拉取,说明通道工作正常。再访问一下 Hugging Face 首页确认没有额外限制。
日常使用与维护
查看/重启服务
systemctl status xray # 看状态
journalctl -u xray -n 50 # 看最近日志
systemctl restart xray # 重启
证书续期
方式 A 用 acme.sh 自动续期,无需操心。自签证书(方式 B)到期前需手动重签并重启服务。
换服务器 / 换域名
只需改配置里的证书路径与域名、更新 DNS 指向,客户端对应改 server 与 servername 即可,UUID 可保持不变。
常见问题
Q:连不上 / 一直超时
- 确认云控制台安全组放行了 TCP/UDP 443;
- 确认
systemctl status xray是 running; - 本地
ping node.your-domain.com是否解析到正确 IP; - 客户端 servername / UUID 是否与服务器一致。
Q:白天顺畅,晚上卡顿
多为运营商晚高峰对跨境线路的限速/丢包导致。此时把出口切到 QUIC 节点往往有明显改善(UDP/QUIC 对丢包更不敏感)。
Q:TCP 和 QUIC 怎么选
不需要手动选。日常用「自动选择」组即可;如果某天 QUIC 走不动(某些网络封锁 UDP),单独切回 TCP 节点即可。
Q:只访问 GitHub/HuggingFace 需要全量代理吗
不需要。在客户端规则里把 GitHub、HuggingFace、Docker 等域名指向代理组,其余保持直连,速度和隐私都更好。
结语
这套方案的优点在于:依赖极少(只有 Xray)、配置透明(一个文件)、协议现代(TCP + QUIC 双通道),出了问题自己能定位能修,不依赖任何第三方。从一台年付百元级别的小 VPS 开始,跑通后再按需升级地区与带宽即可。
祝克隆顺利,docker pull 永远秒下。