引言
NAS 的核心价值在于随时随地访问数据。但运营商分配的公网 IP 通常是动态的——每次重启路由或一定时间后 IP 就会变化。Dynamic DNS(DDNS)正是解决这个问题的关键:将固定的域名绑定到动态变化的公网 IP 上,让远程访问像访问网站一样简单。
飞牛(fnOS)作为一款对国内用户友好的 NAS 系统,内置了 DDNS 功能,支持多家主流 DNS 服务商。本文将手把手带你完成从域名购买、DDNS 服务商选择,到飞牛上配置 DDNS 的全流程,并解决常见坑点。
核心概念
DDNS 工作原理
用户设备 (手机/电脑)
↓ 访问 your-domain.com
↓
DNS 解析服务 (阿里云DNS/Cloudflare)
↓ 返回当前公网 IP
↓
家庭路由器/光猫
↓ 端口转发
↓
飞牛 NAS (fnOS)
主流 DDNS 服务商对比
| 服务商 | 免费额度 | 更新方式 | 国内访问速度 | 推荐指数 |
|---|---|---|---|---|
| 阿里云 DNS | 免费管理域名解析 | API 更新 | 极快 | ★★★★★ |
| 腾讯云 DNSPod | 免费管理域名解析 | API 更新 | 极快 | ★★★★★ |
| Cloudflare | 免费 | API 更新 | 较快 | ★★★★☆ |
| No-IP | 有免费域名(需每月确认) | 客户端/API | 一般 | ★★★☆☆ |
| DynDNS | 付费 | 客户端 | 一般 | ★★☆☆☆ |
| 路由器自带 DDNS | 取决于服务商 | 路由器自动更新 | 取决于服务商 | ★★★☆☆ |
前置条件
- 一个已注册的域名(如
yourdomain.com) - 公网 IP(IPv4 或 IPv6)
- 飞牛 NAS 已正常联网运行
实战步骤
第一步:确认公网 IP
先确认你的网络环境是否拥有公网 IP:
# 查询当前公网 IPv4
curl -s ifconfig.me
# 或者使用国内源
curl -s ip.sb
# 如果返回的是 100.x.x.x、10.x.x.x、172.16.x.x、192.168.x.x 等私网地址,
# 说明你没有公网 IP,需要联系运营商申请
如果返回的 IP 与路由器 WAN 口 IP 一致,说明你拥有公网 IP。如果返回的 IP 在 100.64.0.0/10 段(CGNAT 大内网),则需要向运营商申请公网 IP。
第二步:在 DNS 服务商添加域名解析记录
以阿里云为例,先登录阿里云 DNS 控制台,添加一个 A 记录:
{
"DomainName": "yourdomain.com",
"RR": "nas", // 子域名,最终访问 nas.yourdomain.com
"Type": "A", // 记录类型:A 记录
"Value": "1.2.3.4", // 当前公网 IP(临时,DDNS 会自动更新)
"TTL": 600 // 缓存时间,建议 600 秒
}
第三步:获取 API 密钥
不同服务商获取 API 密钥的方式不同:
阿里云 AccessKey:
1. 登录 RAM 访问控制台
2. 创建用户 → 勾选「OpenAPI 调用访问」→ 生成 AccessKey ID 和 Secret
3. 为子用户授予 AliyunDNSFullAccess 权限
腾讯云 DNSPod Token:
1. 登录 DNSPod 控制台
2. 创建 API Token → 记录 ID 和 Token
Cloudflare API Token:
1. 登录 Cloudflare Dashboard → 右上角「My Profile」→「API Tokens」→「Create Token」
2. 选择 Edit zone DNS 模板,指定你的域名
3. 保存生成的 Token
第四步:在飞牛 NAS 中配置 DDNS
飞牛提供了图形化的 DDNS 配置界面,同时也支持脚本方式:
图形化配置(推荐):
1. 登录飞牛 Web 管理界面
2. 进入 控制面板 → 网络服务 → DDNS
3. 点击「添加 DDNS 配置」
4. 填写以下参数:
# 飞牛 DDNS 配置参数示例
服务商: aliyun # 支持: aliyun / dnspod / cloudflare / noip
域名: nas.yourdomain.com
AccessKey ID: LTAI5t***********
AccessKey Secret: your_secret_key_here
更新间隔: 10 分钟 # 建议 10-30 分钟
IPv4 更新: 启用
IPv6 更新: 可选
- 点击「保存」并「测试连接」,状态显示「成功」即可。
脚本方式(高级用户):
如果不想用图形界面,也可以写一个定时脚本,在飞牛的飞牛 OS 终端中执行:
#!/usr/bin/env python3
"""阿里云 DDNS 更新脚本 — 适用于飞牛 NAS 定时任务"""
import json
import socket
import urllib.request
from aliyunsdkcore.client import AcsClient
from aliyunsdkalidns.request.v20150109 import DescribeDomainRecordsRequest
from aliyunsdkalidns.request.v20150109 import UpdateDomainRecordRequest
# 配置
ACCESS_KEY_ID = "LTAI5t***********"
ACCESS_KEY_SECRET = "your_secret_key_here"
DOMAIN = "yourdomain.com"
SUB_DOMAIN = "nas" # 完整域名: nas.yourdomain.com
def get_current_ip():
"""获取当前公网 IP"""
try:
with urllib.request.urlopen('https://ip.sb', timeout=10) as resp:
return resp.read().decode().strip()
except Exception as e:
print(f"获取公网 IP 失败: {e}")
return None
def update_ddns():
current_ip = get_current_ip()
if not current_ip:
return False
client = AcsClient(ACCESS_KEY_ID, ACCESS_KEY_SECRET, 'cn-hangzhou')
# 查询现有记录
req = DescribeDomainRecordsRequest.DescribeDomainRecordsRequest()
req.set_DomainName(DOMAIN)
req.set_RRKeyWord(SUB_DOMAIN)
req.set_Type('A')
resp = client.do_action_with_exception(req)
records = json.loads(resp).get('DomainRecords', {}).get('Record', [])
if not records:
print(f"未找到 {SUB_DOMAIN}.{DOMAIN} 的 A 记录,请先在 DNS 控制台添加")
return False
record_id = records[0]['RecordId']
current_dns_ip = records[0]['Value']
if current_ip == current_dns_ip:
print(f"IP 未变化: {current_ip}")
return True
# 更新记录
update_req = UpdateDomainRecordRequest.UpdateDomainRecordRequest()
update_req.set_RecordId(record_id)
update_req.set_RR(SUB_DOMAIN)
update_req.set_Type('A')
update_req.set_Value(current_ip)
client.do_action_with_exception(update_req)
print(f"DDNS 更新成功: {SUB_DOMAIN}.{DOMAIN} → {current_ip}")
return True
if __name__ == '__main__':
update_ddns()
第五步:配置路由器端口转发
DDNS 只解决了域名到 IP 的映射问题,要让外部访问飞牛的服务,还需要在路由器上配置端口转发:
# 路由器端口转发配置示例
# 不同品牌路由器界面不同,但配置项通用
端口转发规则 1:
外部端口: 5000 # 飞牛 Web 管理页默认端口
内部 IP: 192.168.1.100 # 你的飞牛 NAS 内网 IP
内部端口: 5000
协议: TCP
端口转发规则 2:
外部端口: 5001 # HTTPS 端口
内部 IP: 192.168.1.100
内部端口: 5001
协议: TCP
# 可选 — 如果使用 WebDAV 或文件共享
端口转发规则 3:
外部端口: 443
内部 IP: 192.168.1.100
内部端口: 443
协议: TCP
第六步:验证 DDNS 是否生效
配置完成后,用以下方式验证:
# 从外部网络(如手机热点)执行
# 解析域名,确认 IP 是否正确
nslookup nas.yourdomain.com
# 或者用 dig
dig nas.yourdomain.com +short
# 测试端口连通性
nc -zv nas.yourdomain.com 5000
# 或者直接用浏览器访问
# https://nas.yourdomain.com:5001
常见问题
Q1:DDNS 状态显示「更新失败」怎么办?
可能原因和解决方案:
- API 密钥错误 — 检查 AccessKey ID 和 Secret 是否复制正确,注意密钥中可能包含容易混淆的字符(如
0/O、1/l/I) - 域名解析记录未提前创建 — 飞牛 DDNS 更新的是已有记录的值,不是创建新记录。先在 DNS 控制台手动添加一条 A 记录
- 子域名格式错误 — 完整的域名才是最终的 FQDN。例如你的域名是
yourdomain.com,子域名是nas,则完整域名填写nas.yourdomain.com - 网络不通 — 飞牛 NAS 是否能正常访问外网?
ping 8.8.8.8测试
Q2:没有公网 IP 怎么办?
如果运营商无法提供公网 IP(或者申请了也还是 CGNAT),有以下替代方案:
| 方案 | 原理 | 费用 | 易用性 |
|---|---|---|---|
| IPv6 DDNS | 使用 IPv6 公网地址(三大运营商基本都支持 IPv6) | 免费 | 中(需要客户端支持 IPv6) |
| frp 内网穿透 | 通过一台有公网 IP 的云服务器做中转 | 云服务器费用 | 中 |
| ZeroTier/Tailscale | 组建虚拟局域网,P2P 直连 | 免费(有限设备) | 高 |
| 花生壳/DDNSTO | 国内内网穿透服务 | 部分免费,带宽有限 | 高 |
Q3:为什么 DDNS 更新了,但远程还是连不上?
排查步骤:
- 检查端口转发是否生效 — 从外网
telnet 公网IP 5000看是否通 - 运营商是否封锁端口 — 国内运营商可能封锁 80/443/8080 等常见端口。建议用 5000~5001(飞牛默认端口)或 50000 以上高位端口
- 防火墙未放行 — 飞牛防火墙或路由器防火墙是否阻止了入站流量
- DNS 缓存 — 刚更新的 DDNS 记录需要等待 TTL 时间(通常 600 秒)才能全球生效,可用
dig命令查看当前解析的 IP
Q4:DDNS 脚本如何设置开机自启?
飞牛基于 Linux,可以使用 systemd 或 crontab:
# 创建 systemd 服务
sudo cat > /etc/systemd/system/ddns-update.service << 'EOF'
[Unit]
Description=DDNS Update Service
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/bin/python3 /path/to/ddns-update.py
[Install]
WantedBy=multi-user.target
EOF
# 启用并启动
sudo systemctl enable ddns-update.service
sudo systemctl start ddns-update.service
# 或用 crontab 每 10 分钟执行一次
crontab -e # 添加以下行
*/10 * * * * /usr/bin/python3 /path/to/ddns-update.py > /dev/null 2>&1
Q5:多个域名需要 DDNS 怎么办?
飞牛图形界面支持添加多条 DDNS 配置。如果域名在同一 DNS 服务商,配置多条记录,每条指向不同的子域名即可。如果域名在不同服务商,分别添加对应配置即可。
总结
- DDNS 是 NAS 远程访问的基础 — 将动态公网 IP 绑定到固定域名,实现外网随时访问
- 飞牛支持主流 DNS 服务商 — 阿里云、腾讯云 DNSPod、Cloudflare 等均可一键配置
- 公网 IP 是前提,IPv6 是备选 — 没有公网 IPv4 可考虑 IPv6 或内网穿透方案
- 端口转发 + 防火墙放行缺一不可 — DDNS 只解决寻址问题,端口转发才能让外部访问到具体服务
- 安全第一 — 开启 HTTPS、设置强密码、限制 IP 白名单,不要将飞牛管理端口直接暴露在公网,建议使用 VPN 或反向代理
配置好 DDNS 后,你的飞牛 NAS 就真正从”本地文件服务器”升级为”私有云”了。无论身在何处,输入域名就能访问你的数据,这才是 NAS 的正确打开方式。


















暂无评论内容