跳转到内容

DynDNS 域名配置

DynDNS 域名配置

本节介绍动态 DNS(DynDNS)域名配置方法。DynDNS 为没有固定公网 IP 的服务器提供可访问的域名。学习完成后,您将能够:

  • 理解 DynDNS 的工作原
  • 配置 DynDNS 域名指向您的服务器
  • 结合 Let’s Encrypt 使用 DynDNS 域名
  • 评估不同 DDNS 服务的适用性

在开始本节之前,请确保:

  • 了解 DNS 基本原理
  • 服务器有公网 IP 地址
  • 已安装 Certbot
家庭/小型办公室网络:
┌─────────────────────────────┐
│ 路由器 (公网 IP) │
│ IP: 203.0.113.45 │
│ (动态变化,ISP 定期更换) │
└─────────────┬───────────────┘
┌─────────┴─────────┐
│ │
▼ ▼
┌────────┐ ┌─────────────┐
│ 服务器 │ │ MQTT Broker │
│ (内网) │ │ (Docker) │
└────────┘ └─────────────┘
问题: 公网 IP 变化后,ESP32 设备无法连接 Broker
解决: 使用 DynDNS 域名,自动更新 IP 映射
1. 注册 DynDNS 域名: mqtt.dyndns.org
2. 安装 DDNS 客户端 → 定期检查公网 IP
3. IP 变化时 → 客户端自动更新 DNS 记录
4. 域名始终指向正确的 IP 地址
5. ESP32 使用域名而不使用 IP 地址连接
服务商免费域名更新方式稳定性备注
DuckDNS*.duckdns.orgAPI✅ 好开源,免费,推荐
No-IP*.hopto.org客户端✅ 好需每 30 天确认
DynDNS*.dyndns.orgAPI✅ 最好Oracle 收购,部分功能付费
FreeDNS*.mooo.comAPI/客户端⚠️ 一般Afraid.org 提供
Cloudflare自定义域名API✅ 最好需自有域名
Terminal window
# DuckDNS 配置
# 1. 注册: https://www.duckdns.org
# 2. 创建子域名: mqtt-iot.duckdns.org
# 3. 获取 token
# 安装更新脚本
sudo mkdir -p /opt/ddns
sudo tee /opt/ddns/duckdns.sh << 'EOF'
#!/bin/bash
# DuckDNS 更新脚本
DOMAIN="mqtt-iot"
TOKEN="your-duckdns-token-here"
# 更新 DNS 记录
URL="https://www.duckdns.org/update?domains=${DOMAIN}&token=${TOKEN}&ip="
curl -s "$URL" && echo ""
EOF
sudo chmod +x /opt/ddns/duckdns.sh
# 测试运行
/opt/ddns/duckdns.sh
# 输出: OK
Terminal window
# 添加到 crontab,每 5 分钟更新一次
sudo crontab -e
# 添加以下行:
*/5 * * * * /opt/ddns/duckdns.sh >/dev/null 2>&1
Terminal window
# 安装 ddclient
sudo apt install ddclient
# 配置文件 /etc/ddclient/ddclient.conf
sudo tee /etc/ddclient/ddclient.conf << 'EOF'
daemon=300 # 每 5 分钟检查一次
syslog=yes # 记录日志
ssl=yes # 使用 HTTPS 更新
use=web, web=checkip.dyndns.org/ # 获取公网 IP
# DuckDNS 配置
protocol=duckdns
server=www.duckdns.org
login=mqtt-iot
password='YOUR_DUCKDNS_TOKEN'
mqtt-iot.duckdns.org
EOF
# 启动 ddclient
sudo systemctl enable ddclient
sudo systemctl start ddclient
# 检查状态
sudo systemctl status ddclient
Terminal window
# 检查 DNS 解析
nslookup mqtt-iot.duckdns.org
# 输出示例:
# Server: 8.8.8.8
# Address: 8.8.8.8#53
#
# Non-authoritative answer:
# Name: mqtt-iot.duckdns.org
# Address: 203.0.113.45 ← 当前公网 IP
# 检查是否可访问
ping -c 3 mqtt-iot.duckdns.org
# 检查端口是否开放
nc -zv mqtt-iot.duckdns.org 1883
nc -zv mqtt-iot.duckdns.org 8883
路由器配置:
┌──────────────────────────────────────────┐
│ 端口转发规则 │
├──────────────────────────────────────────┤
│ 外网端口 → 内网 IP:内网端口 │
│ 1883 → 192.168.1.100:1883 (MQTT) │
│ 8883 → 192.168.1.100:8883 (MQTTS) │
│ 80 → 192.168.1.100:80 (HTTP验证) │
├──────────────────────────────────────────┤
│ 防火墙规则 │
│ ✅ 允许 1883 (内部网络) │
│ ✅ 允许 8883 (外部 + TLS) │
│ ❌ 禁止其他外部端口 │
└──────────────────────────────────────────┘
场景DynDNS 的作用说明
无固定公网 IP域名自动跟踪 IP 变化”即使 IP 变化,设备总能通过域名找到 Broker”
IoT 设备配置域名比 IP 更可靠”配置域名,IP 变化无需重新配置设备”
TLS 证书域名是证书的必要条件”Let’s Encrypt 只能为域名签发证书”

Q1: DynDNS 域名安全吗? A: 域名仅用于 DNS 解析,结合 TLS 加密和防火墙规则可以确保安全。建议使用复杂子域名名称,避免被暴力扫描。

Q2: IP 变更后多久可以恢复连接? A: 通常 1-5 分钟内 DDNS 更新生效。如果 ESP32 发现连接失败,建议实现自动重连机制,并在重连前重新查询 DNS。

Q3: 可以使用固定域名吗? A: 如果有固定公网 IP 或自有域名,可以直接使用。DynDNS 主要解决没有固定 IP 的场景。

本节介绍了 DynDNS 域名配置:

  1. DynDNS 作用:为动态 IP 提供稳定的域名访问
  2. 服务商选择:DuckDNS(推荐,免费)、No-IP、Cloudflare
  3. 配置流程:注册域名 → 安装更新客户端 → 配置定时更新
  4. 路由器映射:端口转发将外部请求映射到内网服务器
  5. DNS 验证:nslookup/ping 验证域名解析正常