DDNS 动态域名解析:家里宽带也能建站
## 为什么需要 DDNS
家庭宽带大多是动态 IP,每隔几天运营商就会换一次 IP。如果你用家里的 NAS 或树莓派跑服务,IP 一换就访问不了。
DDNS(动态域名解析)就是解决这个问题的:在路由器或设备上跑一个脚本,定期检测公网 IP,IP 变化时自动更新域名解析记录。
## 方案一:Cloudflare DDNS
创建 API Token,然后运行脚本:
```bash
#!/bin/bash
ZONE_ID="your_zone_id"
RECORD_ID="your_record_id"
API_TOKEN="your_api_token"
DOMAIN="home.yourdomain.com"
CURRENT_IP=$(curl -s https://api.ipify.org)
DNS_IP=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \
-H "Authorization: Bearer $API_TOKEN" | grep -o '"content":"[^"]*"' | cut -d'"' -f4)
if [ "$CURRENT_IP" != "$DNS_IP" ]; then
curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records/$RECORD_ID" \
-H "Authorization: Bearer $API_TOKEN" \
-H "Content-Type: application/json" \
--data "{\"type\":\"A\",\"name\":\"$DOMAIN\",\"content\":\"$CURRENT_IP\",\"ttl\":120,\"proxied\":false}"
fi
```
设置定时任务:`*/5 * * * * /scripts/cf-ddns.sh`
## 方案二:ddns-go(推荐)
```bash
docker run -d --name ddns-go --restart always -p 9876:9876 -v /opt/ddns-go:/root jeessy/ddns-go
```
访问 `http://IP:9876`,填入 DNS 服务商的 API 密钥,选域名,点保存就行。
## IPv6 DDNS
ddns-go 支持 IPv6,选择"通过网卡获取 IPv6"即可。手机 4G/5G 都支持 IPv6。
## 端口转发
DDNS 只解决了 IP 变化的问题。还需要在路由器上做端口转发才能从外网访问内网服务。
配置完 DDNS + 端口转发,你的家庭服务器就和云服务器一样,随时随地用域名访问。
赞赞赞赞赞赞赞赞赞赞赞赞