本笔记适用于 Azure、腾讯云、阿里云、AWS、DigitalOcean 等支持 Linux 虚拟机的平台。

示例使用 Ubuntu LinuxSSH (WindTerm)sing-box 以及 VLESS + Reality (XTLS-Vision) 协议。

IMPORTANT

关键前置安全规范:

  1. 务必在云服务器系统内与本地客户端彻底 关闭 IPv6,避免双栈网络下流量泄漏真实 IP。
  2. Clash Verge 的 TUN 模式建议开启 严格路由 (Strict Route) 与 Fake-IP,防止 DNS 泄漏与绕过。

一、整体流程

整个代理转发与访问链路如下:

本地电脑 (浏览器/应用)
  ↓ [Clash Verge (TUN 严格路由 + VLESS Reality)]
云服务器公网 IP (TCP 443)
  ↓ [sing-box 核心解密 & 流量分发]
目标互联网 (伪装目标:itunes.apple.com / 外部网站)

核心任务拆解:

  1. 创建一台 Linux 云服务器(推荐 Ubuntu);
  2. 通过 SSH 远程连接服务器(使用 WindTerm 等工具);
  3. 系统初始化:彻底禁用 IPv6,配置并放行/关闭系统内部防火墙;
  4. 在云平台控制台(网络安全组 / 防火墙)放行必要端口(TCP 22TCP 443);
  5. 服务端安装部署 sing-box,配置 VLESS-Reality 服务并设置开机自启;
  6. 编写本地配置文件并导入 Clash Verge,开启 TUN 代理。

NOTE

WindTerm 仅用于远程配置服务器。代理服务配置完成并作为后台系统服务运行后,WindTerm 即可直接关闭,无需长期挂在后台。


二、服务器配置建议

创建虚拟机时,直接选用标准的 Linux 发行版。

1. 推荐硬件规格

项目建议配置说明
操作系统Ubuntu Server 22.04 或 24.04 LTS长期支持版,内核新,兼容性好
CPU1 ~ 2 vCPU个人代理日常使用 1 核完全够用
内存1 ~ 2 GB个人轻量代理与核心服务占用极低
磁盘20 ~ 30 GB SSD标准 SSD 即可,性价比最高
架构x64 (amd64)兼容绝大多数预编译二进制包
公网 IP必须分配独立公网 IPv4动态或静态均可
登录协议SSH默认管理协议
SSH 端口TCP 22云平台默认开放

2. 存储与地区选择

  • 本地冗余(LRS): 数据在单个数据中心内保留 3 份副本,成本最低,个人自建节点首选。
  • 区域冗余(ZRS): 跨机房容灾,价格昂贵,个人使用完全无必要。
  • 磁盘类型: 优先勾选“标准 SSD”(如 Azure E4 - 32GB,约 ¥0.35 ~ ¥0.40 / 天),高级 SSD 价格翻倍且对代理性能无明显提升。
  • 出口地区: 服务器所在地域决定最终出口 IP。例如选择日本/新加坡地域,连接后对外即显示对应地域的公网 IP。

3. 计费与资源管理注意事项

  • “免费额度”通常有时效与总量限制,资源费用优先从赠送信用额度中抵扣。
  • 虚拟机计算实例、公网 IP、系统磁盘与出站流量均独立计费。
  • 不使用时建议在云控制台操作 停止并释放计算资源,避免持续扣费。

三、两个核心端口与防火墙规则

网络通信依赖双层防火墙的准确放行:

  1. 云平台安全组(Network Security Group / 防火墙策略)
  2. Linux 操作系统内部防火墙(UFW / iptables)

1. SSH 管理端口:22

  • 用途: 远程 WindTerm 终端登录、命令执行、日常维护。
  • 入站规则: 协议: TCP | 目标端口: 22 | 源地址: Any (0.0.0.0/0) | 动作: 允许

2. Reality 代理服务端口:443

  • 用途: Clash Verge 与 sing-box 建立 VLESS + Reality TLS 握手连接。
  • 入站规则: 协议: TCP | 目标端口: 443 | 源地址: Any (0.0.0.0/0) | 动作: 允许

WARNING

端口一致性原则: 云平台安全组放行端口 (443) 必须等于 服务端 sing-box 监听端口 (443),且必须等于 本地 Clash 配置文件中的 server port (443)


四、连接前必须关闭本地 VPN / TUN

在首次连接或日常排查 SSH 时,必须先关闭本地电脑上的全局代理/TUN 模式

1. 常见冲突来源

  • Clash Verge 的 TUN 模式
  • 系统代理(Windows 代理开关)
  • 其他第三方 VPN 客户端或透明网关

2. 冲突根源

SSH 连接目标为云服务器的真实公网 IP。如果本地已开启 TUN 全局流量接管,WindTerm 发出的 SSH 握手流量会被再次打包转发至代理层,形成网络回环或被节点自身拦截,导致以下故障:

  • WindTerm 无法弹出用户名/密码认证框;
  • 终端持续卡死,随后报 The remote host closed the connection
  • 连接被瞬间 RST 重置。

3. 正确连接操作顺序

  1. 关闭 本地 Clash Verge 的 TUN 开关与系统代理;
  2. 保持常规本地宽带联网;
  3. 打开 WindTerm,正常发起 SSH 连接;
  4. 服务器端配置完毕并启动服务后,最小化或关闭 WindTerm;
  5. 本地打开 Clash Verge 载入配置,启动节点与 TUN 模式。

五、SSH 登录的两种方式

方式一:SSH 密钥登录(推荐,高安全性)

  • 原理: 本地保留私钥(.pem / .id_rsa),云服务器写入对应公钥。
  • 优点: 免密码输入,天然免疫公网 SSH 暴力破解。
  • WindTerm 配置:
    • 主机:用户名@服务器公网IP(例如 azureuser@203.0.113.10
    • 端口:22
    • 认证方式:PublicKey / SSH Key
    • 私钥:选择本地保存的私钥文件

方式二:用户名与密码登录

  • 原理: 传统账密认证。
  • 优点: 无需随身携带私钥文件,多设备临时登录便捷。
  • WindTerm 配置:
    • 主机:用户名@服务器公网IP(例如 vpnadmin@203.0.113.10
    • 端口:22
    • 认证方式:Password
    • 私钥:留空
    • 代理/隧道:关闭
  • 排查要点: 若未弹出密码框,优先确认本地 TUN 是否已彻底关闭,以及云平台安全组 22 端口是否已放行。

六、WindTerm 连接规范

  • 主机栏填写格式: 用户名@服务器公网IP(严禁仅填写 IP,也不得混淆 22 与 443 端口)。
  • 端口对应:
    • SSH 管理通信 22
    • Reality 代理通信 443

七、连接服务器后的前置系统配置

SSH 成功登入服务器后,依次执行以下系统基础加固与网络优化。

1. 确认系统环境与包更新

# 查看系统内核与发行版本
uname -a
cat /etc/os-release
 
# 更新软件源并升级基础组件
sudo apt update && sudo apt upgrade -y

2. 彻底禁用系统 IPv6(防止双栈泄露真实地址)

执行以下命令直接写入 Linux 内核网络参数:

sudo tee -a /etc/sysctl.conf <<'EOF'
# Disable IPv6 Subsystem
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
EOF
 
# 使内核参数立即生效
sudo sysctl -p

验证方式:

ip a | grep inet6

若无任何输出,表明 IPv6 已在内核级别完全禁用。

3. 配置并关闭/放行系统内部防火墙 (UFW)

云服务器外部已有云安全组保护,为避免内部 ufw 拦截 Reality 443 流量,可选择直接放行端口或禁用内部防火墙:

  • 方案 A:精准放行端口(推荐)
    sudo ufw allow 22/tcp
    sudo ufw allow 443/tcp
    sudo ufw allow 443/udp
    sudo ufw reload
  • 方案 B:直接禁用系统内部 UFW 防火墙(由云安全组全权托管)
    sudo ufw disable
    sudo ufw status

八、安装 sing-box 核心

在 Ubuntu 终端内执行官方一键安装脚本:

curl -fsSL https://sing-box.app/install.sh | sh

安装完成后验证核心版本:

sing-box version

终端正常输出 sing-box 版本号即代表二进制核心部署成功。


九、创建 VLESS + Reality (XTLS-Vision) 服务

VLESS-Reality 协议通过模拟真实 TLS 1.3 握手(借用合规大厂 SNI 证书,如 itunes.apple.com),无需自建域名与申请证书,具备极强的抗审查与防主动探测能力。

1. 生成必要凭据(UUID 与 Reality 密钥对)

(1) 生成客户端连接 UUID

NEW_UUID=$(sing-box generate uuid)
echo "生成的 UUID: $NEW_UUID"

(2) 生成 Reality 专用公私钥对

sing-box generate reality-keypair

终端会输出如下格式的密钥对:

PrivateKey:  <一串私钥字符,填入服务端配置>
PublicKey:   <一串公钥字符,填入本地 Clash 客户端配置>

CAUTION

请妥善保管输出的 PrivateKeyPublicKeyPrivateKey 仅保存在服务器,严禁外泄!


2. 写入 sing-box 服务端配置文件

执行以下命令生成 /etc/sing-box/config.json请将配置中的 UUID 与 PrivateKey 替换为你实际生成的值):

sudo tee /etc/sing-box/config.json >/dev/null <<'EOF'
{
  "log": {
    "level": "info",
    "timestamp": true
  },
  "inbounds": [
    {
      "type": "vless",
      "tag": "vless-in",
      "listen": "0.0.0.0",
      "listen_port": 443,
      "users": [
        {
          "uuid": "你的实际uuid",
          "flow": "xtls-rprx-vision"
        }
      ],
      "tls": {
        "enabled": true,
        "server_name": "itunes.apple.com",
        "reality": {
          "enabled": true,
          "handshake": {
            "server": "itunes.apple.com",
            "port": 443
          },
          "private_key": "你的服务端_PRIVATE_KEY",
          "short_id": [
            ""
          ]
        }
      }
    }
  ],
  "outbounds": [
    {
      "type": "direct",
      "tag": "direct"
    }
  ]
}
EOF

参数详解:

  • listen: 0.0.0.0:仅监听 IPv4 地址。
  • listen_port: 443:标准 HTTPS 端口,流量伪装效果最佳。
  • flow: xtls-rprx-vision:XTLS Vision 流控,消除 TLS in TLS 特征。
  • server_namehandshake.server:握手回落目标域名(如 itunes.apple.comgateway.icloud.com)。
  • private_key:Reality 私钥。
  • short_id: [""]:留空即可。

3. 语法校验、启动服务与开机自启

# 1. 校验配置文件语法(无输出则表示语法完全正确)
sudo sing-box check -c /etc/sing-box/config.json
 
# 2. 启动服务并设置开机自动运行
sudo systemctl enable --now sing-box
 
# 3. 查看服务运行状态
sudo systemctl status sing-box --no-pager

状态显示 Active: active (running) 即代表服务端已正常拉起。

4. 验证端口监听

sudo ss -lntp | grep 443

正常应返回类似记录:

LISTEN 0 4096 0.0.0.0:443 0.0.0.0:* users:(("sing-box",pid=xxxx,fd=x))

若启动异常,运行以下命令调取最近 50 行排错日志:

sudo journalctl -u sing-box -n 50 --no-pager

十、本地端口连通性测试

在本地 Windows 电脑上打开 PowerShell,执行网络探测命令(将 IP 替换为实际云服务器公网 IP):

Test-NetConnection 实际服务器公网ip -Port 443
  • 若输出: TcpTestSucceeded : True 表明云防火墙放行无误,sing-box 监听正常,握手通道畅通。
  • 若输出: TcpTestSucceeded : False 需重点排查:
    1. 云平台安全组入站规则中 TCP 443 是否遗漏;
    2. Ubuntu 内部 ufw 是否阻止了 443 端口;
    3. sing-box 服务是否处于 active (running) 状态;
    4. 服务器公网 IP 是否在重启后发生变动。

十一、导入 Clash Verge 配置文件

在本地新建配置文件 azure-reality.yaml,填入以下完整优化配置:

port: 7890
socks-port: 7891
allow-lan: false
mode: rule
log-level: info
ipv6: false
 
# TUN 模式与严格路由(防止泄漏与旁路穿透)
tun:
  enable: true
  stack: mixed
  auto-route: true
  auto-detect-interface: true
  strict-route: true
 
# DNS 防污染与 Fake-IP 配置
dns:
  enable: true
  ipv6: false
  listen: 0.0.0.0:1053
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  nameserver:
    - 1.1.1.1
    - 8.8.8.8
 
# 节点配置
proxies:
  - name: "Azure-Reality"
    type: vless
    server: **********                         # 替换为服务器实际公网 IP
    port: 443                                      # 保持 443
    uuid: ******************                      # 保持与服务端一致的 UUID
    network: tcp
    udp: true
    tls: true
    flow: xtls-rprx-vision
    servername: itunes.apple.com                   # 保持与服务端一致的伪装域名
    reality-opts:
      public-key: ***********                    # 替换为实际生成的 PublicKey
      short-id: ""
    client-fingerprint: chrome
 
proxy-groups:
  - name: PROXY
    type: select
    proxies:
      - Azure-Reality
      - DIRECT
 
rules:
  - MATCH,PROXY

WARNING

三要素强一致性核对:

  1. server IP 必须与云平台分配的公网 IP 完全一致;
  2. uuid 必须与服务器 /etc/sing-box/config.json 完全一致;
  3. public-key 必须与服务器 private_key 严格配对。
  4. 注意格式,ymal文件uuid:这种元素冒号后面要空一格

优化:在yaml文件最后更改rules:使得国内网址直接直连更好。

rules:
  - GEOIP,lan,DIRECT,no-resolve
  - DST-PORT,123,DIRECT
  - GEOSITE,cn,DIRECT
  - GEOIP,CN,DIRECT
  - MATCH,PROXY

十二、Clash Verge 使用方式

  1. 打开 Clash Verge 客户端;
  2. 进入 订阅 / 配置 (Profiles) 页面,点击导入或新建本地 YAML 文件;
  3. 右键选择新建的配置文件并点击 启用 (Use)
  4. 进入 代理 (Proxies) 页面,在 PROXY 分组下勾选 Azure-Reality
  5. 点击测速按钮,确认节点出现正常延迟数字(如 80ms ~ 150ms);
  6. 在客户端设置中开启 TUN 模式系统代理
  7. 路由规则推荐选择 规则 (Rule) 模式

十三、SSH 与 TUN 模式互斥机制剖析

场景TUN 模式状态流量走向与原理
管理服务器 (SSH)关闭 TUNWindTerm $

1. 连接与管理服务器时(必须关闭 TUN) WindTerm 需要直连访问:

云服务器 IP:22 如果此时本地开启了 TUN 模式,TUN 会强制接管 WindTerm 的流量,可能导致: text WindTerm ↓ Clash TUN 拦截接管 ↓ Azure-Reality 代理节点 (尚未连通/自闭环) ↓ 云服务器 SSH 端口 (22) 这样会导致流量形成回环或被节点直接丢弃,造成连接断开(报 The remote host closed the connection 或不弹密码框)。 因此,SSH 管理服务器时,必须关闭 TUN。


十四、WindTerm 会话生命周期说明

  • sing-box 属于通过 systemd 托管的系统级后台服务(Daemon)。
  • 一旦运行 sudo systemctl enable --now sing-box,服务直接驻留于操作系统后台。
  • 关闭 WindTerm、退出 SSH 终端会话或本地电脑关机重启,均不会影响云服务器上代理服务的持续运行。

十五、云服务器启停与费用控制

1. 停止使用(彻底停止计费)

  • 仅在 Linux 系统内执行 poweroff 关机,在部分云平台(如 Azure)中虚拟机仍处于“已停止(已分配)”状态,硬件计算资源仍会持续扣费
  • 正确停止操作: 登录云平台 Web 控制台,找到对应虚拟机实例,点击 停止 / 取消分配 (Stop / Deallocate),确保状态变为 已停止(已释放)

2. 恢复使用

  • 登录云控制台点击 启动 (Start)
  • 虚拟机启动后,sing-box 依托 systemd 开机自启,无需 SSH 登录重新配置;
  • 检查新分配的公网 IP,若 IP 变动,仅需在本地 YAML 中更新 server 地址即可恢复联网。

十六、动态公网 IP 变动应对方案

若云服务器未绑定静态公网 IP(Elastic / Static IP),每次在控制台“释放后重启”通常会重新分配新的公网 IPv4。

  • 应对步骤:
    1. 启动服务器后,复制控制台显示的新 IPv4 地址;
    2. 打开本地 Clash YAML 配置文件,修改 server: 新公网IP
    3. 保存并在 Clash Verge 中重新加载配置;
    4. 如需 SSH 维护,WindTerm 同步使用 用户名@新公网IP 发起连接。

十七、凭据管理与安全轮换

严禁在公开仓库、群聊或截图内暴露节点 UUID 与 Reality 私钥。若凭据发生泄漏,按以下步骤轮换:

  1. 生成全新 UUID 与 Reality 密钥对:
    NEW_UUID=$(sing-box generate uuid); echo "New UUID: $NEW_UUID"
    sing-box generate reality-keypair
  2. 编辑服务器配置文件更新 PrivateKey 与 UUID:
    sudo nano /etc/sing-box/config.json
  3. 校验语法并重启服务:
    sudo sing-box check -c /etc/sing-box/config.json
    sudo systemctl restart sing-box
  4. 同步修改本地 Clash Verge 配置中的 uuidpublic-key

十八、云平台账单监控建议

定期登录云控制台(如 Azure 成本分析 / AWS Cost Explorer)排查以下开销构成:

  • Virtual Machines (计算实例): 核心费用项,关机并释放后计费清零;
  • Disks (托管磁盘): 即使实例停机释放,挂载的磁盘(标准 SSD)仍会按 GB/月计收少量存储容量费;
  • Bandwidth / Data Egress (出站流量): 按实际产生的外网出站流量计费;
  • Public IPv4 Addresses: 闲置未绑定的静态公网 IP 可能单独计费。

十九、日常使用极简速查清单

🚀 开始使用

  1. 控制台启动云服务器;
  2. 确认并复制公网 IP(若有变动则修改 Clash 配置文件中的 server);
  3. 打开 Clash Verge 选中 Azure-Reality 节点;
  4. 开启 TUN 模式,畅通浏览。

🛑 结束使用

  1. 关闭本地 Clash Verge 的 TUN 模式与系统代理;
  2. 登录云平台控制台,点击 停止 / 取消分配
  3. 确认服务器状态显示为 已停止(已释放)

🔧 登录维护

  1. 先关闭 本地 Clash Verge TUN;
  2. 打开 WindTerm,使用 用户名@服务器IP:22 连接;
  3. 维护完毕直接退出 WindTerm,再根据需要重新开启本地 TUN。

核心架构拓扑对照

云服务器 (Ubuntu)
  ├── [管理端口 TCP 22]  <--- WindTerm (必须直连 / 避开 TUN)
  └── [代理端口 TCP 443] <--- Clash Verge (VLESS + Reality 流量伪装)
 
服务端核心:sing-box (Systemd 守护进程)
本地客户端:Clash Verge (TUN 严格路由 + Fake-IP)
终端管理:WindTerm (远程运维,配完即关)