背景:
家里整了台物理机,具备动态ipv6地址,使用ddns适配动态ipv6
原理分析:
将用户的动态IP地址映射到一个固定的域名解析服务上
服务商:
https://dynv6.com/
1. 在dynv6创建一个域名
2.登录邮箱,验证账号
设置密码创建账号,并登录
3.获取token
3.1 进入APIs页面
3.2 获取token
找到HTTP token,点击进去
在http tokens,点击details获取token
3.3 方案一:在你的服务器执行curl命令访问api
curl -vv "https://dynv6.com/api/update?hostname=$hostname&ipv6=auto&token=your-token"
注:
- $hostname:填第一步你创建的域名,如:test.dynv6.net
- ipv6=auto:会自动获取你的ipv6
- your-token:改成在3.2获取的token
- 命令无误,则打包成脚本,使用crontab定时自动执行
3.4 方案二:写成脚本,封装在systemctl,开机自启
3.4.1 写成脚本
vim update_dns.sh
#!/bin/sh
# Configure
Hostname="test.dynv6.net"
IPVERSION="6" # IPV4=4, IPV6=6
UpdateURL="http://dynv6.com/api/update?hostname=${Hostname}&ipv${IPVERSION}=auto&token=your-token"
# Determine record type based on IP version
if [ "$IPVERSION" = "4" ]; then
RecordType="A"
else
RecordType="AAAA"
fi
while true; do
# Use dig to get the saved IP from the DNS record
SavedIP=$(dig ${RecordType} +short ${Hostname})
# Use dig to get the actual IP
if [ "$IPVERSION" = "4" ]; then
ActualIP=$(dig -4 +short myip.opendns.com @resolver1.opendns.com)
else
ActualIP=$(curl -s http://v6.ipv6-test.com/api/myip.php)
fi
# Check if the IPs are different and update if needed
if [ "$SavedIP" != "$ActualIP" ]; then
response=$(curl -s -o /dev/null -w "%{http_code}" "${UpdateURL}")
date
if [ "$response" -eq 200 ]; then
echo "IP updated successfully: $ActualIP"
else
echo "Failed to update IP"
fi
fi
sleep 600 # run every 30 minutes to reduce server load
done
注:
- SavedIP 获取域名 test.dynv6.net 目前的dns解析ip
- ActualIP 获取服务器目前的ip
- 先比对动态ip是否有更新,有再访问ddns的api接口更新ip解析
- 每半小时执行一次
3.4.2 写成systemctl
vim /lib/systemd/system/update_dns.service
[Unit]
Description=node_exporter service
After=network-online.target
[Service]
Type=simple
ExecStart=sh /data/program/update_dns.sh
Restart=on-failure
ExecStop=/bin/kill -9 $MAINPID
[Install]
WantedBy=multi-user.target
:wq
systemctl daemon-reload
systemctl start update_dns.service
systemctl status update_dns.service
systemctl enable update_dns.service
注:
- ExecStart=sh /data/program/update_dns.sh 换成你的脚本的绝对路径
4. 检查是否成功
4.1 dynv6网站检查
进入域名页面
选择Records查看是否是自己服务器的ip
4.2 命令检查
nslookup test.dynv6.net
5.问题整理
5.1 gynv6确认密码创建账号失败
分析:主要是人机校验没过,而国内的网络偶尔人机校验页面出不来,需要墙一下。
5.2 配置了crontab但没按时执行
分析:
- 检查时间,安装的服务器可能不是中国时间
命令:date
校准命令:timedatectl set-timezone Asia/Shanghai
2.crontab没正常运行,检查其状态
systemctl status cron
注意,ubuntu是cron,其他系统可能是crond
3.crontab没有加载新配置
systemctl restart cron