标签 Let's Encrypt 下的文章

Traefik 优势与考量:本地部署的理想选择

Traefik 是一款功能强大的云原生边缘路由器(Edge Router),它为 Docker 等容器化环境带来了显著的便利和优势:

主要优势

  • 服务自动发现与配置: Traefik 能够自动检测容器中运行的新服务,并即时自动配置相应的反向代理(Reverse Proxy)和负载均衡规则,无需手动修改配置文件。
  • 简化的 SSL/TLS 管理: 它内置了对 Let's Encrypt 的支持,可以实现域名的 SSL 证书自动申请与自动续签,大大减轻了运维负担
  • 端口暴露最小化: 极大地提高了安全性。对于宿主机而言,Traefik 只需要对外暴露标准的 80 和 443端口,无需再为每个服务暴露额外的端口。

局限与考量

尽管 Traefik 优势显著,但在配置灵活性方面,它不如传统反向代理工具(如 Nginx)那样直观和强大:

  • 非容器化应用集成复杂: 对于不在 Docker 等容器中部署的传统应用,Traefik 的反向代理配置会相对复杂和繁琐。它主要面向动态的云原生环境,对静态配置的支持不如 Nginx 灵活
  • 特定配置的挑战: 在需要进行复杂、细致的反代逻辑配置时,可能会不如 Nginx 的配置文件那样灵活易读。
    在快速启动前,有必要说明一下,本教程是使用CF 作为域名ns进行申请泛域名证书,如果你想使用其他提供商,可以在 Traefik 的文档 更改 Provider Code和 Environment Variables 这两个值,当然我会在本篇配置文件有注释提醒。
    另外如果没有额外配置反代的需求(指不跑在docker的服务),需要建立config.yml 文件,当然还需要在traefik.yml 关闭注释。

快速启动 Traefik

请按照一下文件目录创建文件,其中acme.json只需要创建文件即可(注意必须要交建立哦,config文件根据自己需求建立即可)

文件目录:

|   .env    #文件配置
|   docker-compose.yaml        # docker-compose 文件
|
\---data
        acme.json    # SSL 文件
        config.yml    # 额外配置文件(配置额外反代例如宿主机的)
        traefik.yml # Traefik 配置文件

docker-compose.yaml 文件:

services:
  traefik:  # 定义名为 traefik 的服务
    image: traefik:v3.0  # 使用 Traefik 的 v3.0 版本镜像
    container_name: traefik  # 容器名称为 traefik
    restart: unless-stopped  # 容器自动重启,除非手动停止
    security_opt:
      - no-new-privileges:true  # 增加安全性,防止提权
    networks:
      - traefik-net  # 连接到名为 proxy 的外部网络
    ports:
      - 80:80  # 映射主机的 80 端口到容器的 80 端口 (HTTP)
      - 443:443  # 映射主机的 443 端口到容器的 443 端口 (HTTPS)
      - 443:443/tcp  # 映射主机的 443 TCP 端口到容器的 443 端口 (TCP 协议)
      - 443:443/udp  # 映射主机的 443 UDP 端口到容器的 443 端口 (UDP 协议)
    environment:
      CF_DNS_API_TOKEN_FILE: ${CF_DNS_API_TOKEN}  # 设置环境变量,使用 Cloudflare API 令牌,根据Traefik文档 选择你的服务提供商的token
      TRAEFIK_DASHBOARD_CREDENTIALS: ${TRAEFIK_DASHBOARD_CREDENTIALS}  # 设置环境变量,定义 Traefik 仪表板的凭据
    env_file: .env  # 从 .env 文件中加载环境变量
    volumes:
      - /etc/localtime:/etc/localtime:ro  # 挂载主机的时间设置到容器,确保时间同步,且只读
      - /var/run/docker.sock:/var/run/docker.sock:ro  # 挂载 Docker 的 socket 文件,允许 Traefik 访问 Docker API,只读
      - ./data/traefik.yml:/traefik.yml:ro  # 挂载本地的 traefik.yml 配置文件到容器内,只读
      - ./data/acme.json:/acme.json  # 挂载本地的 acme.json 文件,存储 SSL 证书信息
      - ./data/config.yml:/config.yml:ro  # 可选的配置文件挂载路径,若需要可取消注释
    labels:  # 设置 Traefik 的相关标签,用于路由和中间件配置
      - "traefik.enable=true"  # 启用 Traefik 服务
      - "traefik.http.routers.traefik.entrypoints=http"  # 配置 HTTP 入口点
      - "traefik.http.routers.traefik.rule=Host(`${TRAEFIK_DASHBOARD_HOST}`)" # 定义 Traefik 仪表板的访问规则
      - "traefik.http.middlewares.traefik-auth.basicauth.users=${TRAEFIK_DASHBOARD_CREDENTIALS}"  # 为仪表板配置基本身份验证
      - "traefik.http.middlewares.traefik-https-redirect.redirectscheme.scheme=https"  # 配置 HTTP 到 HTTPS 的重定向
      - "traefik.http.middlewares.sslheader.headers.customrequestheaders.X-Forwarded-Proto=https"  # 添加自定义请求头
      - "traefik.http.routers.traefik.middlewares=traefik-https-redirect"  # 将重定向中间件应用到 HTTP 路由
      - "traefik.http.routers.traefik-secure.entrypoints=https"  # 配置 HTTPS 入口点
      - "traefik.http.routers.traefik-secure.rule=Host(`${TRAEFIK_DASHBOARD_HOST}`)" # 定义 HTTPS 路由的访问规则
      - "traefik.http.routers.traefik-secure.middlewares=traefik-auth"  # 为 HTTPS 路由应用基本身份验证中间件
      - "traefik.http.routers.traefik-secure.tls=true"  # 启用 TLS (HTTPS)
      - "traefik.http.routers.traefik-secure.tls.certresolver=${NS_Domain}"  # 使用 DNS服务提供商 code 根据Traefik文档 选择你的服务提供商code
      - "traefik.http.routers.traefik-secure.tls.domains[0].main=${TLS_MAIN_DOMAIN}"  # 定义主域名
      - "traefik.http.routers.traefik-secure.tls.domains[0].sans=${TLS_SANS_DOMAIN}"  # 定义子域名通配符
      - "traefik.http.routers.traefik-secure.service=api@internal"  # 使用 Traefik 内部 API 服务

networks:
  traefik-net:
    external: false  # 使用外部定义的名为 proxy 的网络

.env 文件:


# .env 文件

# CF API
CF_DNS_API_TOKEN=

NS_Domain=cloudflare #根据你使用的DNS服务提供商 code 根据Traefik文档 选择你的服务提供商code
# 设置环境变量,定义 Traefik 仪表板的凭据 ,默认账户名密码:admin
TRAEFIK_DASHBOARD_CREDENTIALS=admin:$$2y$$05$$aOXINGgHfnZ//t.kUs7o9ej3faUbj2yNxc8k3WVrBybFOxxaTsLTe

# Traefik Dashboard 域名
TRAEFIK_DASHBOARD_HOST=dash.docker.localhost

# TLS 主域名和子域名
TLS_MAIN_DOMAIN=docker.localhost
TLS_SANS_DOMAIN=*.docker.localhost

traefik.yml 文件:


api:
  dashboard: true  # 启用 Traefik 的仪表板,可以通过指定的路由访问
  debug: true  # 启用调试模式,输出更多的日志信息

entryPoints:
  http:
    address: ":80"  # 定义 HTTP 入口点,监听 80 端口
    http:
      redirections:
        entryPoint:
          to: https  # 重定向 HTTP 请求到 HTTPS
          scheme: https  # 使用 HTTPS 作为重定向的目标协议

  https:
    address: ":443"  # 定义 HTTPS 入口点,监听 443 端口

serversTransport:
  insecureSkipVerify: true  # 在与后端服务器通信时,跳过 TLS 证书验证(不推荐在生产环境中使用)

providers:
  docker:
    endpoint: "unix:///var/run/docker.sock"  # 指定 Docker API 的 socket 文件路径,Traefik 使用它来检测和管理 Docker 容器
    exposedByDefault: false  # 默认情况下,Docker 容器不会自动暴露给 Traefik,必须显式指定
    watch: true

  file:
    filename: /config.yml  # (已注释) 可选的文件提供者配置,用于从外部文件加载配置
    watch: true  # 允许 Traefik 自动监控和加载配置文件变化


certificatesResolvers:
  cloudflare: # 使用 DNS服务提供商 code 根据Traefik文档 选择你的服务提供商code
    acme:
      email: youremail@email.com  # 申请 ACME 证书时使用的电子邮件地址
      storage: acme.json  # 存储证书信息的文件路径
      # caServer: https://acme-v02.api.letsencrypt.org/directory # 正式环境的 Let's Encrypt 服务器 (默认)
      caServer: https://acme-staging-v02.api.letsencrypt.org/directory # 测试环境的 Let's Encrypt 服务器 (用于调试)

      dnsChallenge:
        provider: cloudflare  # 使用 DNS服务提供商 code 根据Traefik文档 选择你的服务提供商code 进行 DNS 验证以获取证书
        #disablePropagationCheck: true # (已注释) 如果通过 Cloudflare 获取证书有问题,可以取消注释此行以禁用传播检查
        #delayBeforeCheck: 60s # (已注释) 如果需要确保 TXT 记录准备就绪,可以取消注释此行并设置检查延迟
        resolvers:
          - "223.5.5.5:53"  # AliDNS 解析器
          - "119.29.29.29:53"  # 备用 DNS 解析器
          - "1.1.1.1" # 备用 DNS 解析器

config.yml 文件

可以选择配置,如果你宿主机有ng反代服务,你使用taerfik 的话会端口冲突,可以配置,但不过要把 docker-compose 和 Traefik的配置文件注释去掉即可:


http:
  #region routers 
  routers:
    hexo:
      entryPoints:
        - "https"  # 指定使用 HTTPS 入口点
      rule: "Host(`hexo.docker.localhost`)"  # 当访问的主机名为 hexo.local.shellscience.top 时,触发此路由
      middlewares:
        - default-headers  # 应用默认的安全头中间件
        - https-redirectscheme  # 应用 HTTPS 重定向中间件
      tls: {}  # 启用 TLS 加密
      service: hexo  # 指定将请求转发到名为 hexo 的服务

  #region services
  services:
    hexo:
      loadBalancer:
        servers:
          - url: "http://127.0.0.1:5000"  # 指定 Hexo 服务的后端服务器 URL
        passHostHeader: true  # 传递原始的 Host 头信息到后端服务
  #endregion

  middlewares:
    https-redirectscheme:
      redirectScheme:
        scheme: https  # 将 HTTP 请求重定向为 HTTPS
        permanent: true  # 使用永久重定向(HTTP 301)

    default-headers:
      headers:
        frameDeny: true  # 禁止网页被嵌入到框架中,防止点击劫持攻击
        browserXssFilter: true  # 启用浏览器的 XSS 过滤器,增强安全性
        contentTypeNosniff: true  # 防止浏览器 MIME 类型嗅探
        forceSTSHeader: true  # 强制启用 HSTS(HTTP 严格传输安全)
        stsIncludeSubdomains: true  # HSTS 规则应用于所有子域
        stsPreload: true  # 允许将域名加入 HSTS 预加载列表
        stsSeconds: 15552000  # HSTS 头的有效期(秒),这里是 180 天
        customFrameOptionsValue: SAMEORIGIN  # 允许内容在同源的 iframe 中加载
        customRequestHeaders:
          X-Forwarded-Proto: https  # 设置 X-Forwarded-Proto 头为 https,用于指示原始请求协议

    default-whitelist:
      ipAllowList:
        sourceRange:
        - "10.0.0.0/8"  # 允许来自 10.0.0.0/8 网段的 IP 地址
        - "192.168.0.0/16"  # 允许来自 192.168.0.0/16 网段的 IP 地址
        - "172.16.0.0/12"  # 允许来自 172.16.0.0/12 网段的 IP 地址

    secured:
      chain:
        middlewares:
        - default-whitelist  # 应用默认的 IP 白名单中间件
        - default-headers  # 应用默认的安全头中间件

配置完毕我们docker-compose up -d如果配置没有问题你就可以通过你配置的域名成功访问Traefik的面板。

反代代理Dcoekr应用

这里拿Memos的程序来举例子:

下面是我的Memos的docker-compose.yaml 文件,我们只需要把暴露的端口删除,添加labels标签以及下面几个配置(你想访问的域名、容器的端口、开启https、使用tls证书)以及让我们的程序接入Traefik的网络就好了。

version: "3.0"
services:
  memos:
    image: ghcr.io/usememos/memos:latest
    container_name: memos
    volumes:
      - ./data/:/var/opt/memos
    environment:
      - driver=sqlite
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.memos.rule=Host(`memos.local.com`)"
      - "traefik.http.services.memos.loadbalancer.server.port=<程序的端口>"
      - "traefik.http.routers.memos.entrypoints=https"
      - "traefik.http.routers.memos.tls=true"
    networks:
      - traefik-net

networks:
  traefik-net:
    external: true

Traefik DNS服务提供文档:https://doc.traefik.io/traefik/https/acme/#providers

Traefik Docker配置文档:https://doc.traefik.io/traefik/routing/providers/docker/

总结

这个是博主自己在搭建Traefik 时的总结与分享,当然在搭建时也去借鉴了很多的资料。

本文原发于我的博客:landonVPS

前提:

  1. 有一个基于 Docker Compose 编排,且包含 Nginx 部署的前端服务项目。
  2. 有一个域名(证书会基于域名自动申请)。

配置流程:

  1. 修改 docker-compose.yml 文件,确保前端服务映射了 443 端口
    示例:
services: ruoyi-ui: container_name: ruoyi-ui build: context: . # Dockerfile.ui 及 nginx.conf 所在上下文路径 dockerfile: Dockerfile.ui ports: - "${FRONTEND_PORT}:80" - "443:443" # https端口 depends_on: xxx-service: condition: service_started # 后端服务及其它服务配置 xxx-service: ... 
  1. 在 Dockerfile.ui 中使用正确的基础镜像,需要支持 ACME 的 nginx 镜像,如:ghcr.io/3az7qmfd/ngacme:main:
FROM ghcr.io/3az7qmfd/ngacme:main

# 移除 Nginx 默认配置
RUN rm /etc/nginx/conf.d/default.conf

# 复制自定义的 Nginx 配置文件
COPY ./nginx.conf /etc/nginx/conf.d/default.conf

# 从构建阶段复制构建好的静态文件到 Nginx 托管目录
COPY ./dist /usr/share/nginx/html

# 暴露 Nginx 端口
EXPOSE 80

# Nginx 默认会启动,也可以指定 CMD
CMD ["nginx", "-g", "daemon off;"]
  1. nginx.conf 配置自动获取证书
# DNS 解析器(用于访问 ACME 服务器,推荐用可靠的如 Cloudflare 或 Google)
# 没有可用的 IPv6 出口时,可设置禁用ipv6:ipv6=off
resolver 8.8.8.8 1.1.1.1 ipv6=off valid=30s;

# ACME issuer 配置(这里用 Let's Encrypt 生产环境示例)
acme_issuer letsencrypt {
    uri         https://acme-v02.api.letsencrypt.org/directory;
    contact     xxx@qq.com;  # <----- 你的邮箱,用于通知
    state_path  /var/cache/nginx/acme-letsencrypt;  # 持久化存储路径,确保目录存在并可写
    accept_terms_of_service;
}

# 共享内存区(存储证书和挑战数据)
acme_shared_zone zone=ngx_acme_shared:1M;

server {
    listen 80;
    server_name xxx.com;  # 你的实际域名,证书会基于此自动申请

    # 可选:显式允许挑战路径
    # location /.well-known/acme-challenge/ { }

    location / {
        return 301 https://$server_name$request_uri;  # 重定向所有普通请求到 HTTPS
    }
}

server {
    listen 443 ssl; http2 on;
    server_name xxx.com;  # 你的实际域名,证书会基于此自动申请

    # ACME 自动管理证书
    acme_certificate letsencrypt;  # 使用上面定义的 issuer

    ssl_certificate       $acme_certificate;
    ssl_certificate_key   $acme_certificate_key;

    # 避免每次请求解析证书
    ssl_certificate_cache max=2;

    # 静态资源根目录(与原配置相同)
    root   /usr/share/nginx/html;
    index  index.html index.htm;

    # 处理前端 SPA 路由
    location / {
        try_files $uri $uri/ /index.html;
    }

    # API 请求反向代理
    location /api/ {
        proxy_set_header Host $http_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_pass http://xxx-service:8080/; # <---- 你的后端服务
    }

    # 错误页面
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # 其他 SSL 优化(可选推荐)
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
}

参考连接:

  1. 以 Nginx 为反代服务端时以 Certbot 自动申请 HTTPS 证书的流程
  2. nginx-acme
    nginx-acme/README.md at main · nginx/nginx-acme · GitHub
  3. Module ngx_http_acme_module
    Module ngx_http_acme_module
  4. NGINX with ACME 模块 Docker 镜像
    Package ngacme · GitHub

📌 转载信息
转载时间:
2026/1/6 12:16:35

昨天用到,就让反重力糊了一个。想着可能有佬友说不定也许可能用得到,就把这个脚本发一下。


试用场景:

  1. docker 跑项目且把证书目录映射出宿主主机
  2. nginx 配置 ssl (也可以别的方式)

包含了首次申请证书、定时更新证书、更新证书重启项目,可按需删。
域名、路径等相关的自己调调。
scripts.zip


📌 转载信息
原作者:
vaaagle
转载时间:
2026/1/5 12:29:07

在 VPS 上部署 AdGuard Home 并将其用于 Android 9+ 的 “私人 DNS”(Private DNS)功能,核心关键在于启用 DNS-over-TLS (DoT)。Android 的原生私人 DNS 功能只支持 DoT 协议,而不支持 DoH(DNS-over-HTTPS)。

很多人关心的速度,目前放在美帝的 vps 上,

详细的步骤指南。


准备工作

  1. 一台 VPS: 建议使用 Ubuntu 20.04/22.04 或 Debian 11/12。
  2. 一个域名: 你需要拥有一个域名(例如 example.com),并为其设置一个子域名(例如 dns.example.com)。
  3. SSH 工具: 用于连接 VPS。


设置域名解析 (DNS Records)

在你的域名注册商(如 Cloudflare, GoDaddy, AliYun 等)后台,添加一条 A 记录

  • Type: A
  • Name: dns (即你的子域前缀)
  • Content: 你的VPS IP地址
  • Proxy status: 如果是用 Cloudflare,请关闭小云朵(仅 DNS,不代理),否则 SSL 证书申请和端口连接会出问题。


处理端口冲突 (Ubuntu/Debian 常见问题)

Ubuntu 系统默认的 systemd-resolved 会占用 53 端口,导致 AdGuard Home 无法启动 DNS 服务。我们需要先释放它。

  1. 停止并禁用 systemd-resolved:
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved

  1. 手动设置系统的 DNS(防止 VPS 没网):
    编辑 /etc/resolv.conf
sudo nano /etc/resolv.conf

将其内容改为(或者把原来的 nameserver 127.0.0.53 删掉,换成下面的):

nameserver 8.8.8.8
nameserver 1.1.1.1

Ctrl+O 保存,Ctrl+X 退出。


安装 AdGuard Home

AdGuard Home 官方提供了一键安装脚本,非常方便。

  1. 运行安装命令:
curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s - -v

  1. 放行防火墙端口:
    如果你的 VPS 有防火墙(如 UFW),需要放行以下端口:
  • 80/tcp (申请证书验证用)
  • 3000/tcp (初始安装向导)
  • 853/tcp (关键:Android 私人 DNS 专用端口)
  • 443/tcp (HTTPS/DoH)
  • 53/tcp+udp (普通 DNS)
# UFW 示例 sudo ufw allow 80/tcp
sudo ufw allow 3000/tcp
sudo ufw allow 853/tcp
sudo ufw allow 443/tcp
sudo ufw allow 53/tcp
sudo ufw allow 53/udp


初始化配置 AdGuard Home

  1. 打开浏览器,访问 http://你的VPS_IP:3000
  2. 点击 “开始配置”。
  3. 网页管理界面:建议端口保持 3000 或改为 8080不要设为 80,留给申请证书用)。
  4. DNS 服务器:端口必须是 53
  5. 设置管理员账号密码,完成配置。


申请 SSL 证书

为了使用 Android 的私人 DNS (DoT),必须有合法的 SSL 证书。我们将使用 certbot 来申请免费的 Let’s Encrypt 证书。

  1. 安装 Certbot:
sudo apt update
sudo apt install certbot -y

  1. 申请证书:
    (确保此时没有其他程序占用 80 端口)
# 请将 dns.example.com 替换为你真实的域名 sudo certbot certonly --standalone -d dns.example.com

如果成功,你会看到证书存放路径,通常在 /etc/letsencrypt/live/dns.example.com/ 下。

  • fullchain.pem (公钥 / 证书)
  • privkey.pem (私钥)


在 AdGuard Home 中启用加密

  1. 回到浏览器,访问 http://你的VPS_IP:3000 并登录。
  2. 点击顶部的 “设置” (Settings)“加密设置” (Encryption settings)
  3. 勾选 “启用加密” (Enable encryption)
  4. 服务器名称 (Server name):输入你的域名 dns.example.com
  5. HTTPS 自动重定向:如果你的管理面板不在 80/443,可不勾选。
  6. 证书部分
    AdGuard Home 可能没有权限直接读取 /etc/letsencrypt 目录。你可以选择以下两种方法之一:
  • 方法 A(直接粘贴内容,推荐新手):
    使用 cat 命令在 VPS 上查看文件内容,然后复制粘贴到网页框里。

  • 证书文件路径:运行 cat /etc/letsencrypt/live/dns.example.com/fullchain.pem,复制所有内容粘贴到 AGH 的 “证书” 框。

  • 私钥文件路径:运行 cat /etc/letsencrypt/live/dns.example.com/privkey.pem,复制所有内容粘贴到 AGH 的 “私钥” 框。

  • 方法 B(填写路径):
    直接填写路径 /etc/letsencrypt/live/dns.example.com/fullchain.pem/etc/letsencrypt/live/dns.example.com/privkey.pem。如果提示无权限,你需要修改证书目录权限(不推荐,安全性降低)或更改 AGH 的运行用户。

  1. 点击 “保存配置”


在 Android 手机上设置

现在服务端已经配置好了,接下来配置手机。

  1. 确保你的 Android 版本是 9 或更高。
  2. 打开 “设置”“网络和互联网” (或 “连接与共享”)。
  3. 找到 “私人 DNS” (Private DNS)
  4. 选择 “私人 DNS 提供商主机名” (Private DNS provider hostname)
  5. 输入你的域名:dns.example.com
  6. 点击保存。

验证成功:
如果下方没有出现 “无法连接” 的报错,且你能正常上网,说明配置成功!你可以回到 AdGuard Home 的后台 “仪表盘”,刷新一下,应该能看到来自你手机 IP 的 DNS 查询请求,且协议显示为 DoT


高级提示与避坑

  1. 关于公网 DNS 的风险
    将 DNS 开放到公网可能会被扫描并用于 DNS 放大攻击。AdGuard Home 允许你限制访问来源。
  • 设置 → DNS 设置 → 允许的客户端:如果不填,则允许所有。
  • 注意:手机在移动网络下 IP 是变动的,无法通过 IP 白名单限制。
  • 折中方案:不要把你的 dns.example.com 告诉别人,并在 AdGuard Home 中配置 “访问限制”,限制请求频率(Rate Limit),防止被滥用。
  1. 证书续期
    Let’s Encrypt 证书有效期 90 天。你需要设置自动续期。
    如果是用 --standalone 模式,续期时需要占用 80 端口。你可以写个简单的脚本放到 crontab 里:
certbot renew --pre-hook "systemctl stop adguardhome" --post-hook "systemctl start adguardhome" 

(注:如果你的 AGH 没占用 80 端口,不需要 stop/start,直接 certbot renew 即可)
3. 延迟问题
VPS 的物理距离决定了 DNS 解析的延迟。如果 VPS 在美国,你在国内使用,DNS 解析会有 150ms+ 的延迟,会感觉打开网页变慢。建议使用香港、日本或国内(需备案)的 VPS。


📌 转载信息
原作者:
justincnn
转载时间:
2026/1/1 20:29:49