Loading...

文章背景图

使用DDNS+Caddy反代NAS部署的服务

2025-12-16
15
-
- 分钟
|

前言

绿联 NAS 对使用端口映射(bridge 模式)的 Docker 容器提供了官方反向代理地址,这在一定程度上降低了外网访问的配置成本。
然而,对于使用 host 网络模式运行的 Docker 容器,官方方案基本无能为力,外网访问几乎没有可用解法

在这种情况下,我们可以通过 DDNS + Caddy 反向代理 的方式,优雅地解决这一痛点,实现对宿主机端口服务的 HTTPS 外网访问。

重要前提(非常关键)
使用 DDNS 的前提是:
必须拥有公网 IP 地址!
必须拥有公网 IP 地址!
必须拥有公网 IP 地址!

若为 NAT、CGNAT、或运营商内网环境,本方案不适用。

一、DDNS 绑定配置

1. 前置准备:域名购买

如果你已经有可用域名,可以直接跳过本步骤。

阿里云 为例:

  • 登录阿里云官网

  • 在域名服务中搜索并注册自己心仪的域名

  • 完成实名认证并支付购买

至此,域名准备工作完成。

2. 获取 AccessKey(用于 DDNS)

DDNS 需要通过 API 动态更新 DNS 记录,因此必须获取 AccessKey。

操作步骤如下:

  • 将鼠标移动到右上角头像

  • 点击 AccessKey

  • 选择 使用 RAM AccessKey

  • 按页面提示完成验证

  • 创建并保存好 AccessKey IDAccessKey Secret

请务必妥善保存,该密钥后续将用于 DDNS 配置。


3. 在绿联 NAS 中启用 DDNS

  • 打开 绿联云 App

  • 进入控制面板 → 设备连接 → 远程访问

  • 勾选下方的 DDNS 支持

  • 点击 新增

  • 填写域名信息与 AccessKey

执行连接测试,确保状态正常

测试通过后,DDNS 即配置完成。
此时你的域名将自动解析到当前公网 IP。

二、使用 Caddy 部署反向代理

1. 部署 Caddy 容器

在 Docker 项目中创建如下 docker-compose.yml:

version: '3.9'
services:
  caddy:
    image: caddy:latest
    container_name: caddy_home
    
    network_mode: host 

    restart: unless-stopped
    volumes:

      - ./conf:/etc/caddy
      - ./data:/data

      - ./config:/config
      - ./srv:/srv

关键说明:

  • network_mode: host
    Caddy 将直接使用宿主机网络,从而可以反代所有 host 模式下的服务

  • Caddy 会自动管理 HTTPS 证书,无需手动配置 TLS

部署完成后,进入 Caddy 所在目录,可以看到一个名为 Caddyfile 的文件。

2. 配置 Caddyfile

为了便于编辑,可以先将 Caddyfile 临时改名为 Caddyfile.txt。

假设我们要反代 Jellyfin 媒体服务器(端口 8096),配置示例如下:

(common) {
    encode gzip zstd
}

jellyfin.example.com {
    import common
    reverse_proxy 127.0.0.1:8096
}

配置说明

  • (common)
    定义一个全局可复用配置块

  • encode gzip zstd
    启用响应压缩,用于:

    • 减少传输体积

    • 提升访问速度

    • 降低公网带宽占用

  • jellyfin.example.com
    表示你用于访问 Jellyfin 的子域名

  • reverse_proxy 127.0.0.1:8096
    指向宿主机上 Jellyfin 实际监听的地址

3. 启用配置并申请证书

  • 保存文件

  • 将 Caddyfile.txt 改回 Caddyfile

  • 重启 Caddy 容器

此时 Caddy 会自动完成以下操作:

  • 验证域名解析

  • 向 ACME 机构申请 HTTPS 证书

  • 启用反向代理

无需任何额外 TLS 配置。

三、路由器端口转发(公网 IPv4 必须)

如果你使用的是 公网 IPv4,还需要在路由器中进行以下配置之一:

  • 端口转发

    • TCP 80 → NAS IP

    • TCP 443 → NAS IP

  • 或启用 DMZ(不推荐但最省事)

完成后,即可在外网通过:https://jellyfin.example.com安全、稳定地访问你部署在 NAS 上的 Docker 服务。

评论交流

文章目录