树莓派4B自建网页服务器指南(5):域名绑定 + ddns-go 动态解析
一、前言
经过第四篇的配置,你的树莓派已经:
- Nginx 运行,自定义首页展示 ✅
- 同 WiFi 下可通过 IPv6 直连访问 ✅
- 域名已注册、ICP 备案已通过或进行中 ✅
但有两个问题亟待解决:
第一,IPv6 地址又臭又长,难以记忆。2409:8a7c:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx这样的地址,别说告诉朋友访问,自己隔几天不看都记不住。而域名(如 pi.jiejinx.cn)既好记又方便分享——这是要绑定域名的首要原因。
第二,运营商会定期回收或变更公网 IPv6 地址。重启光猫、断线重连,甚至运营商侧的网络调整,都可能导致树莓派的 IPv6 地址发生变化。一旦地址变了,之前配的 AAAA 记录就失效了,域名将无法访问。
本篇的目标是:通过域名绑定 + ddns-go 动态解析,让树莓派拥有一个好记且永不失效的公网入口。
二、前置条件
| 条件 | 说明 |
|---|---|
| ✅ 已注册域名(如 jiejinx.cn) | 阿里云 / 腾讯云 / 其他 |
| ✅ 域名已完成 ICP 备案 | 或已提交备案等待中 |
| ✅ 树莓派 Nginx 已运行,同 WiFi IPv6 直连已验证 | 第四篇已完成 |
| ✅ 域名 DNS 已托管至阿里云 DNS | 建议与域名注册商一致 |
三、在域名 DNS 管理后台添加 AAAA 记录
以阿里云为例:
- 登录阿里云 → 进入【域名解析 DNS】
- 选择你的域名 → 点击【解析设置】
- 添加记录:
| 记录类型 | 主机记录 | 记录值 | TTL |
|---|---|---|---|
| AAAA | pi-ddns(ddns-go 动态绑定用) | 2409:8a7c:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx(你的树莓派公网 IPv6) | 600(10分钟) |
验证解析是否生效(可能需要几分钟):
# 树莓派上执行
getent ahosts pi-ddns.jiejinx.cn
#windows 11 终端执行
nslookup pi-ddns.jiejinx.cn 223.5.5.5应返回你填写的 IPv6 地址 ✅
四、为什么需要 ddns-go
运营商会定期回收或变更公网 IPv6 地址(重启光猫、断线重连等)。一旦地址变化,域名解析就会失效。
ddns-go 是一个轻量级动态 DNS 工具,它会定期检测本机公网 IPv6 地址,若发现变化,自动更新 DNS 解析记录,保证域名解析始终指向本设备。
五、安装 ddns-go
5.1 下载二进制文件
由于国内家庭网络(尤其移动宽带)无法直接访问 GitHub,可使用国内公益代理下载:
cd /tmp
wget https://gh.llkk.cc/https://github.com/jeessy2/ddns-go/releases/download/v6.17.1/ddns-go_6.17.1_linux_arm64.tar.gz以上链接中,若代理超时 代理站点可进行替换,通过代理查询站查询可用节点地址替换。
例如:https://gh.llkk.cc/https://github.com/....
替换为:https://777.z321.cc.cd/https://github.com/....代理查询站:https://github.akams.cn/
5.2 解压并安装
tar -xzf ddns-go_6.17.1_linux_arm64.tar.gz
sudo mv ddns-go /usr/local/bin/
sudo chmod +x /usr/local/bin/ddns-go验证安装:
ddns-go -v
# 应输出版本号清理安装包文件(可选):
# 安装验证无误后,清理 /tmp 安装残留(可选但推荐,SD 卡空间金贵)
rm -f /tmp/ddns-go_6.17.1_linux_arm64.tar.gz
rm -rf /tmp/ddns-go_6.17.1_linux_arm64/5.3 注册为系统服务
sudo ddns-go -s install
sudo systemctl enable ddns-go
sudo systemctl start ddns-go六、利用 SSH 隧道可视化配置 ddns-go
6.1 原理说明:为什么需要 SSH 隧道
ddns-go 默认只监听 127.0.0.1:9876(仅限本机访问)。树莓派上没有浏览器,所以无法直接在树莓派上打开配置页面。
SSH 隧道的作用:在你电脑和树莓派之间建立一条加密通道,让你电脑上的浏览器能访问树莓派本地的 127.0.0.1:9876。
原理解析:为什么已经 SSH 连上了,还要再开一个窗口?
很多朋友会疑惑:我明明已经在终端里 SSH 登录进树莓派了,为什么还要再敲一遍 SSH 命令?
这里涉及两个核心概念:“终端会话”与“网络监听”。
- 树莓派上的“隐身”服务:ddns-go 启动后,默认只监听树莓派自身的 127.0.0.1:9876端口。这意味着只有树莓派内部的程序能访问,外部设备(包括你的电脑)扫描不到这个端口。
- SSH 隧道的“穿墙术”:SSH 不仅仅是个远程命令行工具,它还是一个强大的加密网络工具。当你执行 ssh -L 9877:127.0.0.1:9876 pi@jiejinx.local时,实际上建立了:
- 一条加密通道连接你的电脑和树莓派的 22 端口
- 一个端口映射:把你电脑的 9877 端口,映射到树莓派的 9876 端口
正确的工作流:
- 窗口 A(控制面):保持之前的 SSH 连接,用于在终端里敲命令
- 窗口 B(数据面):新开一个 SSH 隧道连接,负责把电脑本地的流量转发进树莓派
- 浏览器:访问 http://127.0.0.1:9877,数据包通过隧道进入树莓派,树莓派以为是本地请求,就把 ddns-go 的网页推了出来
6.2 建立 SSH 隧道
在你电脑上(不是树莓派里)新开一个终端窗口,执行:
# Windows PowerShell / Mac / Linux
ssh -L 9877:127.0.0.1:9876 pi@jiejinx.local输入树莓派密码登录后,这个窗口不要关。
6.3 访问配置页面
在电脑浏览器中打开:
http://127.0.0.1:9877首次访问会提示设置管理员账号密码,按提示设置即可。
6.4 配置项说明
进入主配置界面后,需要关注以下几个部分:
① DNS 服务商
选择 阿里云 (Alibaba Cloud)。
② IPv4 模块 —— 与本目标无关,关闭
取消勾选“是否启用”。我们的树莓派通过 IPv6 访问,不需要管 IPv4。
③ IPv6 模块 —— 核心配置
| 配置项 | 操作 | 是否启用 |
|---|---|---|
| ✅ 勾选 | 启用该配置 | ✅ |
| 获取 IP 方式 | 保持默认“通过网卡获取” | — |
| 网卡名称 | 保持默认(应为 wlan0) | — |
| Domains(域名) | 填入 pi-ddns.jiejinx.cn(本文第三小节中配置的你的域名) | — |
④ 其他设置
- 禁止公网访问:保持勾选(防止外网暴力破解后台)
- Webhook:留空不填(普通需求用不到)
6.5 获取阿里云 AccessKey
ddns-go 需要阿里云的 API 密钥才能修改 DNS 记录。以下是获取步骤:
- 登录阿里云控制台 → 右上角头像 → AccessKey 管理
- 选择 使用 RAM 用户 AccessKey(推荐,更安全)
- 创建 RAM 用户:
- 登录名称:ddns-user
- 访问方式:勾选 使用永久 AccessKey 访问
- 创建成功后,按提示复制保存 AccessKey ID 和 Secret(仅显示一次,切记保存好)
- 给该用户授权:搜索并添加 AliyunDNSFullAccess权限
6.6 保存并验证
将 AccessKey ID 和 Secret 填入 ddns-go 配置页,点击 Save。
观察页面下方的实时日志:
Config file has been saved to: /root/.ddns_go_config.yaml
Your's IP 2409:8a7c:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx has not changed! Domain: pi.jiejinx.cn- 如果显示 has not changed!→ 说明 ddns-go 已成功连接阿里云,且当前 AAAA 记录值与树莓派 IPv6 一致,无需更新 ✅
- 如果显示 更新 AAAA 记录 success→ 说明 ddns-go 检测到地址变化并成功更新 ✅
6.7 配置完成后是否需要保持 SSH 隧道开启?
不需要。隧道仅用于访问 ddns-go 的 Web 管理页面,ddns-go 服务本身独立运行。确认保存成功后,可安全关闭隧道窗口(Ctrl+C或 关闭windows/linux/mac电脑终端)。下次如需修改配置,按6.2 重新建立隧道即可。
补充说明:为什么用 Web 界面配置,而不是直接改配置文件?
ddns-go 的配置存储在 /root/.ddns_go_config.yaml,理论上可以直接编辑。但首次配置推荐使用 Web UI,原因有三:
- 实时反馈:Web 界面保存后立即显示检测日志,能马上看到是否获取到 IPv6 地址、是否与阿里云通信成功、域名是否更新。命令行改完需要手动查看日志或重启服务才知道结果。
- 避免格式错误:YAML 配置文件对缩进敏感,一个空格错服务就可能起不来。Web 界面自动生成格式正确的配置,杜绝这类低级错误。
- 密钥安全:AccessKey Secret 通过 Web 界面输入后,ddns-go 会以加密形式存储,不会明文留在编辑历史或剪贴板中。
什么时候用命令行?
当你需要批量部署多台设备,或制作 Golden Image 固化配置时,可以预先写好配置文件,实现开机即用、无需人工介入。
🔐 安全性说明:SSH 隧道仅在你持有树莓派 SSH 凭据时可建立。公网用户无法仅凭隧道命令访问管理页,须先通过 SSH 认证。
七、验证域名访问
7.1 树莓派本机验证
curl -g http://pi-ddns.jiejinx.cn应返回 Nginx 首页 ✅
7.2 同网络浏览器验证
在同一局域网内的其他设备(电脑、平板、手机连接同一 WiFi)浏览器中访问:
http://pi-ddns.jiejinx.cn若能正常打开树莓派 Nginx 首页,说明域名解析 + ddns-go 配置均正常 ✅
7.3 手机流量验证(仅作 IPv6 连通性测试)
手机关闭 WiFi,使用蜂窝数据,浏览器访问:
http://pi-ddns.jiejinx.cn⚠️ 特别说明(前置战略预警):
此步骤的目的仅仅是验证域名是否成功解析到了树莓派的 IPv6 地址。
千万不要因为这里打不开网页就认为 ddns-go 配置失败了!
正如第4篇所述,手机蜂窝网络大概率存在以下限制:
- 运营商封禁 80/443 端口
- 光猫 IPv6 防火墙(SPI)默认开启,拦截入站连接
- 部分运营商仅分配 NAT64 地址(无公网 IPv6)
这些限制导致即使域名解析正确,流量也无法进入你的树莓派。
下一步行动:
域名解析的真正意义在于配合后续的 ECS 反向代理(第7篇)。
在 ECS 部署好 Nginx 后,它会作为统一的流量入口,替你承接来自 IPv4/IPv6 各种复杂网络环境的请求,并安全转发给内网的树莓派。
如果你希望先绕过光猫防护进行直连测试,可以参考第6.1篇的光猫防护处理方案。
7.4 模拟地址变化测试(可选)
重启光猫或重新连接 WiFi,观察 ddns-go 是否能自动检测并更新解析:
sudo journalctl -u ddns-go -f应看到 ddns-go 检测到新地址并自动更新 DNS 记录 ✅
八、本章目标完成清单
| 项目 | 状态 |
|---|---|
| 域名添加 AAAA 记录,域名指向树莓派 IPv6 | ✅ |
| 安装 ddns-go | ✅ |
| 配置 ddns-go(DNS 服务商 + API 密钥 + 域名列表) | ✅ |
| ddns-go 服务运行正常 | ✅ |
| 同 WiFi 下域名可访问树莓派 Nginx 首页 | ✅ |