首页
友情链接
壁纸
推荐
联系站长
Search
1
如何使用php调用api接口,获得返回json字符的指定字段数据
4,062 阅读
2
【Emlog】插件-检测页面是否收录并自动提交百度
4,020 阅读
3
腾讯云-3年轻量2核2G仅408-老用户也可以享受低价购买服务器了!
3,473 阅读
4
【转载】网站不能含有哪些内容?
3,441 阅读
5
【收集】免费CDN汇总
3,265 阅读
技术教程
个人日记
原创技术
学习日记
php
c
前端html/css/js
java
Mysql
算法日记
数据结构
java web
Spring框架
生活随笔
我的项目
登录
Search
标签搜索
java
算法
mysql
LeetCode
前端
数据结构
数据库
java web
数据结构与算法
php
学习记录
网站
代码
typecho
插件
学习笔记
emlog
c语言
servlet
技术教程
吃猫的鱼
累计撰写
176
篇文章
累计收到
527
条评论
首页
栏目
技术教程
个人日记
原创技术
学习日记
php
c
前端html/css/js
java
Mysql
算法日记
数据结构
java web
Spring框架
生活随笔
我的项目
页面
友情链接
壁纸
推荐
联系站长
搜索到
1
篇与
的结果
2026-10-11
云服务器搭建个人代理:部署、分流与订阅配置
文末有可以直接交给 AI 的 Skill(提示词)。把它和服务器连接信息交给能执行 SSH 命令的 AI,并提供操作权限,就能让它完成部署和检查。这套代理我挺早之前就搭过,最近换了台机器,又从头折腾了一遍,顺手把部署、分流和订阅配置整理出来。用途很简单:让指定请求经过自己的服务器。比如想从北京的网络访问某个服务,就用北京的服务器做出口。一、部署准备我用的是 2 核 2GB 的 Ubuntu 服务器,能通过 SSH 登录,并有 sudo 权限。电脑上可以提前装好 Clash Verge。服务器上的 Shadowsocks 负责转发请求,Python 服务提供订阅文件;Clash Verge 导入订阅后,按规则选择网络出口。二、搭建步骤1. 检查系统和端口SSH 登录后,先看系统、内存和端口占用:cat /etc/os-release free -h sudo ss -lntup本文使用 TCP 80、TCP 443 和 UDP 443。如果端口已被网站等服务占用,先调整本次部署端口,后面的配置也要同步修改。2. 安装并配置代理服务安装 Shadowsocks 和订阅服务需要的 Python:sudo apt update sudo apt install -y shadowsocks-libev python3先生成节点密码,再编辑 /etc/shadowsocks-libev/config.json:python3 -c 'import secrets; print(secrets.token_urlsafe(32))' sudo install -d -m 755 /etc/shadowsocks-libev sudo touch /etc/shadowsocks-libev/config.json sudo chmod 600 /etc/shadowsocks-libev/config.json sudoedit /etc/shadowsocks-libev/config.json填入刚才生成的随机密码,不要复用 SSH 密码:{ "server": "0.0.0.0", "server_port": 443, "password": "这里替换成独立生成的随机密码", "timeout": 300, "method": "aes-256-gcm", "mode": "tcp_and_udp", "fast_open": false }再创建 systemd 覆盖配置,通过 LoadCredential 加载这个私有文件:sudo install -d -m 755 /etc/systemd/system/shadowsocks-libev.service.d sudoedit /etc/systemd/system/shadowsocks-libev.service.d/self-proxy.conf[Service] LoadCredential=ss-config:/etc/shadowsocks-libev/config.json ExecStart= ExecStart=/usr/bin/ss-server -c %d/ss-config Restart=on-failure RestartSec=5s这里沿用 Ubuntu 软件包的服务;其他系统先用 systemctl cat shadowsocks-libev 核对。空的 ExecStart= 用来清除原启动命令。保存以后启动:sudo systemctl daemon-reload sudo systemctl enable --now shadowsocks-libev # 已经运行过的服务,要重启才会读取新配置。 sudo systemctl restart shadowsocks-libev3. 放行防火墙端口在云控制台的「防火墙」或「安全组」中放行以下端口:用途协议、端口说明登录管理TCP 22能固定管理来源时,限制到自己的来源 IP下载订阅TCP 80对应本文的 HTTP 订阅服务代理连接TCP 443网页等 TCP 请求会用到UDP 转发UDP 443需要 UDP 时单独放行TCP、UDP 443 分别添加。控制台的“HTTPS”只是 TCP 443 的规则模板,这里跑的仍是 Shadowsocks。用 sudo ufw status 检查系统防火墙;若已启用,也要放行这些端口,并保留 SSH 规则。4. 配置客户端和分流规则准备下面这份 client.yaml,填入服务器地址和节点密码。下一步会用它生成订阅;“北京节点”可以改成自己的名称。mixed-port: 7890 allow-lan: false bind-address: 127.0.0.1 mode: rule log-level: info ipv6: false proxies: - name: 北京节点 type: ss server: YOUR_SERVER_IP port: 443 cipher: aes-256-gcm password: "与服务端完全一致的节点密码" udp: true proxy-groups: - name: 个人代理 type: select proxies: - 北京节点 - DIRECT rules: # 本机、局域网照常直连。 - IP-CIDR,127.0.0.0/8,DIRECT,no-resolve - IP-CIDR,10.0.0.0/8,DIRECT,no-resolve - IP-CIDR,172.16.0.0/12,DIRECT,no-resolve - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve # 把 example.com 换成你真正需要指定出口的业务域名。 - DOMAIN-SUFFIX,example.com,个人代理 # 这一条用于后面的出口检查;不需要时可以删除。 - DOMAIN,api.ipify.org,个人代理 - MATCH,DIRECT规则从上往下匹配:指定域名走服务器,其余直连。缺少的业务域名,可以从 Clash Verge 的「连接」页面查找、补充。5. 生成订阅地址订阅链接指向的就是上面的 YAML。我用了一个 Python 小服务,只响应一条随机路径,其他地址返回 404。保存订阅配置把上一节的 YAML 存到服务器的 /root/proxy-client/client.yaml:sudo install -d -m 700 /root/proxy-client sudoedit /root/proxy-client/client.yaml sudo chmod 600 /root/proxy-client/client.yaml首次部署时,生成独立的随机订阅路径:sudo python3 - <<'PY' import json import os import secrets from pathlib import Path # 创建文件时就限制权限,避免先写入密码再修改权限。 os.umask(0o077) # 这是首次初始化;已有配置时停止,避免意外更换订阅地址。 folder = Path('/etc/self-proxy') folder.mkdir(mode=0o700, exist_ok=True) folder.chmod(0o700) target = folder / 'subscription.json' if target.exists(): raise SystemExit('订阅配置已存在,请按更新流程处理。') settings = { 'path': '/s/' + secrets.token_urlsafe(32) + '/config.yaml', 'yaml': Path('/root/proxy-client/client.yaml').read_text(), } target.write_text(json.dumps(settings, ensure_ascii=False)) target.chmod(0o600) print('订阅配置已生成。') PY创建订阅服务把下面的程序保存到 /usr/local/lib/self-proxy/subscription_server.py:sudo install -d -m 755 /usr/local/lib/self-proxy sudoedit /usr/local/lib/self-proxy/subscription_server.py sudo chmod 644 /usr/local/lib/self-proxy/subscription_server.pyimport hmac import json import os from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer from pathlib import Path # 配置含节点密码,由 systemd 按服务身份提供私有副本。 credential = Path(os.environ['CREDENTIALS_DIRECTORY']) / 'subscription' settings = json.loads(credential.read_text()) allowed_path = settings['path'].encode('utf-8') body = settings['yaml'].encode('utf-8') class Handler(BaseHTTPRequestHandler): server_version = 'Subscription' sys_version = '' def setup(self): super().setup() self.connection.settimeout(10) def log_message(self, *_args): # URL 中包含访问凭据,不写入访问日志。 pass def respond(self, include_body): valid = hmac.compare_digest(self.path.encode('utf-8'), allowed_path) payload = body if valid else b'Not found\n' self.send_response(200 if valid else 404) content_type = 'text/yaml; charset=utf-8' if valid else 'text/plain' self.send_header('Content-Type', content_type) self.send_header('Content-Length', str(len(payload))) self.send_header('Cache-Control', 'no-store') self.send_header('X-Content-Type-Options', 'nosniff') self.end_headers() if include_body: self.wfile.write(payload) def do_GET(self): self.respond(True) def do_HEAD(self): self.respond(False) server = ThreadingHTTPServer(('0.0.0.0', 80), Handler) server.daemon_threads = True server.serve_forever()设置开机启动保存服务单元 /etc/systemd/system/self-proxy-subscription.service:sudoedit /etc/systemd/system/self-proxy-subscription.service[Unit] Description=Personal proxy subscription After=network-online.target Wants=network-online.target [Service] Type=simple DynamicUser=true LoadCredential=subscription:/etc/self-proxy/subscription.json ExecStart=/usr/bin/python3 /usr/local/lib/self-proxy/subscription_server.py Restart=on-failure RestartSec=5s CapabilityBoundingSet=CAP_NET_BIND_SERVICE AmbientCapabilities=CAP_NET_BIND_SERVICE NoNewPrivileges=true PrivateTmp=true ProtectSystem=strict ProtectHome=true ProtectKernelTunables=true ProtectKernelModules=true ProtectControlGroups=true RestrictSUIDSGID=true RestrictAddressFamilies=AF_INET AF_INET6 TasksMax=64 MemoryMax=128M [Install] WantedBy=multi-user.target启动服务并设为开机启动:sudo systemctl daemon-reload sudo systemctl enable --now self-proxy-subscription获取订阅地址订阅链接的格式是:http://YOUR_SERVER_IP/s/YOUR_TOKEN/config.yaml读取 /etc/self-proxy/subscription.json 的 path 字段,前面加上服务器的 HTTP 地址,就是完整链接。它能下载节点密码,不要公开。HTTP 会明文传输订阅,随机路径只能防猜测。长期使用建议配域名和证书,改成 HTTPS;TCP 443 已被代理占用,需要另行安排端口。6. 导入订阅并验证连接在 Clash Verge 的「订阅」页粘贴地址,点击「导入」并启用。在「代理」页选中节点,再开启系统代理和规则模式。在本机下载订阅文件,用 Mihomo 检查:mihomo -t -f client.yaml没有 mihomo 命令时,换成 Clash Verge 内置核心的路径。检查通过后,测试实际请求:curl --proxy http://127.0.0.1:7890 https://api.ipify.org确认分组中选中了服务器。上面的规则会让这个请求走代理,返回的出口应与服务器一致。服务器上也复查一下服务状态和监听端口:systemctl is-active shadowsocks-libev self-proxy-subscription systemctl is-enabled shadowsocks-libev self-proxy-subscription sudo ss -lntup这次两个服务均为 active、enabled;订阅 GET、HEAD 返回 200,根路径返回 404。已配置开机启动,未重启机器验证。7. 更新订阅配置修改 /root/proxy-client/client.yaml 后,用下面的命令同步内容并重启服务,订阅链接不变:sudo python3 - <<'PY' import json import os import tempfile from pathlib import Path # 只更新 YAML,保留原来的随机订阅路径。 os.umask(0o077) target = Path('/etc/self-proxy/subscription.json') settings = json.loads(target.read_text()) settings['yaml'] = Path('/root/proxy-client/client.yaml').read_text() # 在同一目录写临时文件,完成后原子替换,避免留下半份配置。 temporary = None try: with tempfile.NamedTemporaryFile(mode='w', encoding='utf-8', dir=target.parent, delete=False) as f: temporary = Path(f.name) temporary.chmod(0o600) json.dump(settings, f, ensure_ascii=False) os.replace(temporary, target) finally: if temporary is not None: temporary.unlink(missing_ok=True) PY sudo systemctl restart self-proxy-subscription最后在 Clash Verge 中刷新订阅。三、踩坑记录问题原因和处理服务运行正常,连接却超时腾讯云防火墙漏放了 443。服务监听正常,不代表公网能连进来;云防火墙和系统防火墙要分别检查。配置文件的读取权限软件包启用了 DynamicUser,不能直接读 root 的 600 文件。用 LoadCredential 交给服务,无需放宽密码文件权限。UDP 要单独测试。这次五次转发测试成功三次、超时两次,当时能通但不稳定。网页能打开,只能说明 TCP 这一路正常。四、20Mbps 与 200Mbps 套餐对比这次重新部署,还有个原因:旧机器用的是入门型套餐,标称带宽 20Mbps;新买的锐驰型写着 200Mbps 峰值带宽。我平时主要看网页、用 AI 工具,想知道换机器后能不能明显顺畅一些。所以搭好之后,我用同一台电脑、同一个网络,对两台机器做了一轮短时测试:测试项目旧入门型:20Mbps新锐驰型:200Mbps 峰值TCP 443 连接耗时中位数,10 次约 621ms约 616msHTTPS 小请求成功次数7/88/8TCP 耗时测的是连接服务器端口,两台很接近。新机这轮 HTTPS 请求全部成功,但样本太少,不能据此判断长期稳定性。文件下载试了几轮,都没在超时前完成,没有得到可靠的吞吐速度,不能给两台排快慢。200Mbps 是峰值,也不代表每次都能跑满。这轮也没有覆盖不同运营商和全天时段。对我这样的日常用途,还是得看常用网络下的体验,不能只按套餐数字判断提升。附:交给 AI 执行的 Skill把下面整段交给能执行 SSH 命令的 AI,补充服务器连接方式和目标域名。登录凭据单独提供。Skill 新部署使用 self-proxy-ss 服务,配置集中在 /etc/self-proxy/,从 state.json 更新;正文沿用发行版服务,两套路径不要混用。已有部署会先检查并保留原密码、订阅地址。--- name: deploy-private-shadowsocks description: 在用户授权的 Linux 服务器部署个人 Shadowsocks 节点及可导入 Clash/Mihomo 的私密订阅,适用于首次部署、修复和同步已有配置。 --- # 个人 Shadowsocks 与私密订阅 使用现有 SSH、文件传输和命令执行工具完成部署;本文件自包含,按以下结构生成所需脚本,不依赖另一个 Skill。 ## 输入与授权 1. 收集必填项:SSH 主机、端口、账户和认证方式;root 或 sudo 权限;实际公网 IP;使用目的、需要代理的域名及最终兜底策略。 2. 可选项:节点名、SS 端口(默认 TCP 443)、是否启用 UDP、订阅域名/证书/端口。拒绝把文档示例地址、私网地址或占位值用于公网部署。 3. 先核对已有授权,复用用户明确同意的安装、服务调整和端口开放范围;只询问真正缺失且影响执行的信息,不重复索要确认。 4. SSH 密钥优先;核验已知主机密钥,首次连接通过用户或云控制台可信指纹核对。指纹变化先停止,不以关闭校验绕过。 5. SSH 密码只交给安全输入通道,不写脚本、命令参数、日志或交付文件;SS 密码单独随机生成,绝不复用登录密码。 6. 订阅协议不明确时优先使用带受信证书的 HTTPS;可以使用域名证书,也可以使用客户端信任且覆盖公网 IP 的证书。 7. 无可用 HTTPS 时,说明 HTTP 会明文传送订阅内容,其中包含节点地址和密码;随机路径不能加密传输。取得或复用明确的 HTTP 授权后才开放公网 HTTP。 8. 没有安装客户端测试工具的授权时,使用已有工具或把测试标记为待完成,不擅自给另一台设备安装软件。 ## 只读检查与变更边界 - 检查系统版本、`ss-server`、Python 3、systemd、sudo、磁盘空间及已有代理/网站/防火墙配置;查看 `ss -lntup` 中 TCP/UDP 80、443 和拟用端口。 - 已实测组合是 Ubuntu 26.04、发行版 `shadowsocks-libev` 3.3.5、`aes-256-gcm`;其他版本先验证软件参数与 systemd 功能,不把这一组合当通用保证。 - TCP HTTPS 443 与同一地址上的 TCP SS 443 会冲突:选择不同端口或地址。已有网站占用 80 时,采用经授权的反向代理路径或另选端口,不能停掉网站腾位。 - 使用发行版包管理器安装缺失依赖。若新装软件包自动启动了默认代理服务,只在确认它是本次新增且未承载用户业务后停止、禁用该默认实例。 - 修改前保存受影响文件、权限、服务 active/enabled 状态及防火墙规则到 `/root/self-proxy-backup/TIMESTAMP/`(目录 0700,秘密文件 0600)。不用清空防火墙或覆盖整站配置。 - 云安全组与主机防火墙分别检查;保留 SSH,仅开放选定的 SS TCP、已授权的 SS UDP 和订阅入口。没有云控制权就列出用户待操作项,不声称已开放。 - 变更失败即停止连续重试,保留诊断并还原本次配置和防火墙增量;恢复 active/enabled 状态,原本运行的受影响服务需重启以刷新凭据快照,原本停用的保持停用;清理本次新增单元并复核线上结果。 - 发现端口/服务归属不明、指纹变化或授权不足时停止相关变更,继续独立的只读检查。 ## 固定文件结构与幂等生成 - `/etc/self-proxy/`:root:root、0700;`state.json`、`ss.json`、`client.yaml`、`subscription.json` 均 root:root、0600。 - `/usr/local/lib/self-proxy/subscription_server.py`:root:root、0644;生成前确认该路径没有其他任务的文件。 - `/etc/systemd/system/self-proxy-ss.service`、`self-proxy-subscription.service`:root:root、0644。 - `state.json` 是生成源:保存 `public_ip`、`ss_port`、`node_name`、`method`、`password`、`udp`、`proxy_domains`、`fallback`、`subscription_path`、`subscription_url`、`listen_host`、`listen_port`。 - 首次用 Python `secrets.token_urlsafe(32)` 分别生成独立密码和 token;路径固定为 `/s/TOKEN/config.yaml`。重跑读取现有状态,除非明确要求轮换,否则保持密码、token 和用户配置。 - 生成脚本设 `umask(0o077)`,使用 JSON 序列化和 YAML 安全引用;可用 `json.dumps` 生成 YAML 字符串。临时文件在同目录写完、校验、chmod 后 `os.replace` 原子替换。 - 若只有旧配置,先读取并迁移实际参数;不能因缺少状态文件而自动重置凭据。秘密只在内存或受保护文件间流转,关闭命令回显,不打印配置全文。 `ss.json` 结构如下,替换所有大写占位值;UDP 未授权时 `mode` 使用 `tcp_only`: ~~~json {"server":"0.0.0.0","server_port":SS_PORT,"password":"SS_PASSWORD","method":"aes-256-gcm","timeout":300,"mode":"tcp_and_udp","fast_open":false} ~~~ ## 客户端配置与分流 按用户用途生成完整可独立导入的 `client.yaml`;节点参数与 `ss.json` 同源,`udp` 与实际开放情况一致: ~~~yaml mixed-port: 7890 allow-lan: false bind-address: 127.0.0.1 mode: rule log-level: info ipv6: false proxies: - name: "NODE_NAME" type: ss server: "YOUR_SERVER_IP" port: SS_PORT cipher: aes-256-gcm password: "SS_PASSWORD" udp: UDP_ENABLED proxy-groups: - name: "个人代理" type: select proxies: ["NODE_NAME"] rules: - DOMAIN-SUFFIX,TARGET_DOMAIN,个人代理 - IP-CIDR,127.0.0.0/8,DIRECT,no-resolve - IP-CIDR,10.0.0.0/8,DIRECT,no-resolve - IP-CIDR,172.16.0.0/12,DIRECT,no-resolve - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve - MATCH,FALLBACK ~~~ - `proxy_domains` 每项生成明确的 `DOMAIN` 或 `DOMAIN-SUFFIX` 规则;这些规则优先于地域和兜底规则。没有明确目标域名时先补齐用途,不能凭空猜测。 - `FALLBACK` 仅取用户选择的 `DIRECT` 或 `个人代理`。北京等中国大陆出口场景不得以宽泛 `GEOIP,CN,DIRECT` 使目标绕过代理;服务器所在地区决定出口地区,分流规则不能改变它。 - 有地域直连需求时,在目标域名规则之后添加并验证;同时说明 GeoIP 数据文件/下载依赖,不让隐式数据下载成为未披露的运行条件。 - 客户端若不能向内核提供域名,域名规则可能无法命中;结合实际客户端 DNS/嗅探/TUN 设置检查,不能仅凭配置顺序宣称分流已生效。 ## 订阅服务实现规范 生成标准库 Python 服务:用 `BaseHTTPRequestHandler` 与 `ThreadingHTTPServer`,禁止目录服务、文件路径拼接和写入接口。 - 从 `Path(os.environ["CREDENTIALS_DIRECTORY"])/"subscription"` 读取 JSON,结构为 `{"path":"/s/TOKEN/config.yaml","yaml":"完整 client.yaml 文本","listen_host":"0.0.0.0","listen_port":80}`。 - 启动时把 YAML 编码为 UTF-8 字节快照;使用 `hmac.compare_digest` 比较原始请求路径与固定路径,查询参数、尾斜线、编码变体均不归一化放行。 - 正确路径的 GET 返回 200 和完整 YAML;HEAD 返回相同状态及长度但不发正文。其余 URL 返回 404;POST/PUT/DELETE 等非读取方法统一拒绝且不产生写入。 - 返回 `Content-Type: text/yaml; charset=utf-8`、准确 `Content-Length`、`Cache-Control: no-store`、`X-Content-Type-Options: nosniff`;错误响应使用纯文本。 - 覆盖 `log_message` 禁止记录请求路径,避免 token 进入访问日志;设置连接超时及守护工作线程。日志仅保留不含 URL、密码和 YAML 的启动/错误摘要。 - 获准 HTTP 时默认绑定 `0.0.0.0:80`。HTTPS 反向代理时绑定 `127.0.0.1:未占用端口`,只在受信 TLS 入口公开固定路径,入口与上游均禁用含 token 的访问日志和缓存。 - HTTPS 证书覆盖实际订阅主机;检查完整证书链和续期。不得用 `curl -k` 或关闭客户端校验冒充受信 HTTPS 验收。 ## systemd 单元 SS 单元使用以下核心模板;`ss-server` 的实际路径以安装结果为准: ~~~ini [Unit] Description=Personal Shadowsocks After=network-online.target Wants=network-online.target [Service] Type=simple DynamicUser=true LoadCredential=ss-config:/etc/self-proxy/ss.json ExecStart=/usr/bin/ss-server -c %d/ss-config Restart=on-failure RestartSec=5s CapabilityBoundingSet=CAP_NET_BIND_SERVICE AmbientCapabilities=CAP_NET_BIND_SERVICE NoNewPrivileges=true PrivateTmp=true ProtectSystem=strict ProtectHome=true RestrictSUIDSGID=true RestrictAddressFamilies=AF_INET AF_INET6 TasksMax=64 MemoryMax=128M [Install] WantedBy=multi-user.target ~~~ 订阅单元复制上述模板的沙箱、重启及启动依赖,改 `Description`,并将两行替换为: ~~~ini LoadCredential=subscription:/etc/self-proxy/subscription.json ExecStart=/usr/bin/python3 /usr/local/lib/self-proxy/subscription_server.py ~~~ `DynamicUser` 不直接读取 root 0600 源文件;systemd 通过 `LoadCredential` 向进程提供只读凭据副本。非特权高端口服务可移除绑定低端口能力。 ## 应用、同步与验收 1. 本地检查生成脚本语法、JSON、YAML;运行 `systemd-analyze verify` 检查两个单元。明确区分静态检查与真实联网测试。 2. 先写好 `ss.json`、`client.yaml`,再将同一份 YAML 文本写入 `subscription.json["yaml"]`;校验二者逐字一致,其他字段从状态文件生成。 3. 执行 `systemctl daemon-reload`,再 `systemctl enable --now self-proxy-ss self-proxy-subscription`。已有运行服务仅在内容变化时重启;修改快照后必须 restart 订阅服务,单改 YAML 不会生效。 4. 从服务器外部下载私密订阅,验证 HTTP 状态/HTTPS 证书和 HEAD,并核对响应正文与生成的 `client.yaml` 哈希一致;使用受保护的工具参数或 0600 curl 配置文件避免 URL 进入进程参数、历史和日志。 5. 检查错误 token、`/`、追加查询参数、尾斜线等异常 URL 返回 404;测试非读取方法被拒绝,并确认日志不包含 token。 6. 有已授权的 Mihomo 工具时,在隔离目录执行 `mihomo -t -f client.yaml`;临时启用仅回环监听的客户端,在验证副本中把出口查询目标强制交给 `个人代理`,核对返回 IP 与预期服务器出口。另用原始规则测试用户目标域名,检查实际命中规则。 7. 独立测试 UDP:在验证副本中强制 UDP 测试端点走 `个人代理`,通过支持 SS UDP 的客户端向可控回显端点发送随机负载,或经 SOCKS5 UDP ASSOCIATE 发出真实 DNS 查询并收到匹配响应;记录超时、响应与代理路径证据。TCP 成功不能证明 UDP 可用。 8. 核对两服务 `is-enabled`、`is-active` 和监听端口;没有重启服务器授权时不重启机器,用 enabled 状态说明已配置开机启动,不声称已完成重启验证。 9. 逐项报告:外部订阅下载、Mihomo 语法、实际代理出口、目标分流、真实 UDP 往返、异常 URL、开机启动配置。没有工具/授权的项目写“未验证”和具体缺项,不能把 running 当作可用。 10. 通过用户授权的私密渠道交付订阅 URL、客户端配置和端口/更新方法;公开博客、代码仓库和截图只保留占位符,不公开真实 IP、密码或 token。清理本次临时秘密文件,保留受保护的部署状态及回滚备份。
2026年10月11日
12 阅读
0 评论
0 点赞
友情链接
文章阅读:
网站地图