主权威DNS:
vim /etc/bind/zones/example.com.zone
# 增加下面 2 行
序列号记得加 1
# 使此 zone 增加的记录生效
$TTL 600 ; 10 minutes
home.example.com. A 1.2.3.4
序列号记得加 1
# 使此 zone 增加的记录生效
rndc reload example.com
# 生成 SHA512 keytsig-keygen -a HMAC-SHA512 ddnskey > /etc/bind/keys/ddnskey.key
# 配置文件里载入 keyvim /etc/bind/named.conf.local
# 包含刚刚的 key 文件
include "/etc/bind/keys/ddnskey.key";
# 修改 zone 策略, 允许使用 key 动态更新zone "example.com" {
type master;
file "/etc/bind/zones/example.com.zone";
allow-transfer {
x.x.x.x;
};
also-notify {
x.x.x.x;
};
allow-update { key ddnskey; }; // 增加这一句,表示允许使用 ddnskey.key 动态更新
};
# 使配置生效
rndc reconfig
然后把 /etc/bind/keys/ddnskey .key 文件拷贝到没有固定IP的主机动态IP的主机:
# 测试更新 A记录 是否能成功
nsupdate -k ./ddnskey .key <<EOF
server ns1.f78fk.net
zone example.com
update delete home.example.com. A
update add home.example.com. 600 A 6.6.6.6
send
EOF
# 验证dig home.example.com
A 记录看到已经变成 6.6.6.6 了
全自动化:
git clone https://github.com/liuyuf78fk/F78FK-DDNS.git
cd F78FK-DDNS
根据 README 去做 。
# 修改 auto_ddns_update.sh
# 修改 auto_ddns_update.sh
ZONE="zone 名,在本例中此值为 example.com"
FQDN="需要更新的完整域名 ( 本例中此值为 home.example.com. )"
KEY="ddnskey.key 的绝对路径"
TYPE="A 记录或者 AAAA 记录"
TTL="TTL 值,DDNS 一般设置为 600 也就是10分钟"
DDNS_SCRIPT="f78fk.ddns_update.sh 的路径"
GET_IP_SCRIPT="getip.sh 的路径"
LOG=true 或 false 调试期间设置为 true,测试稳定后设置为 false
# 添加定时任务(每 15 分钟执行一次)
crontab -e
添加以下内容( 路径根据实际修改 ):
*/15 * * * * /home/<your_username>/F78FK-DDNS/auto_ddns_update.sh
之后系统会每隔15分钟检查IP如果有变化的话会自动更新 A记录 到 DNS 服务器。