问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

使用dynv6配置DDNS服务的详细教程

创作时间:
作者:
@小白创作中心

使用dynv6配置DDNS服务的详细教程

引用
CSDN
1.
https://blog.csdn.net/q764535104/article/details/138899997

动态DNS(DDNS)服务允许用户将一个固定的域名映射到动态变化的IP地址上,这对于家庭服务器或需要远程访问的设备非常有用。本文将详细介绍如何使用dynv6服务配置DDNS,包括账号注册、API token获取以及脚本和systemctl服务的配置。

背景

当家中有一台具备动态IPv6地址的物理机时,使用DDNS服务可以将动态IP地址映射到一个固定的域名解析服务上,便于远程访问。

服务商

选择dynv6作为DDNS服务提供商,其官网地址为:https://dynv6.com/

配置步骤

1. 在dynv6创建一个域名

访问dynv6官网,注册一个新账号并创建所需的域名。

2. 登录邮箱,验证账号

按照提示完成邮箱验证,并设置密码。

3. 获取token

3.1 进入APIs页面

登录后,进入APIs页面获取token。

3.2 获取token

在HTTP tokens中点击details获取token。

3.3 方案一:使用curl命令访问API

可以使用以下curl命令来更新DNS记录:

curl -vv "https://dynv6.com/api/update?hostname=$hostname&ipv6=auto&token=your-token"

注:

  1. $hostname:填第一步创建的域名,如:test.dynv6.net
  2. ipv6=auto:会自动获取你的IPv6地址
  3. your-token:替换为在3.2获取的token
  4. 命令无误后,可以将其打包成脚本并使用crontab定时执行
3.4 方案二:写成脚本并封装在systemctl中
3.4.1 编写脚本

创建一个名为update_dns.sh的脚本:

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

注:

  1. SavedIP 获取域名 test.dynv6.net 目前的DNS解析IP
  2. ActualIP 获取服务器目前的IP
  3. 先比对动态IP是否有更新,有再访问DDNS的API接口更新IP解析
  4. 每半小时执行一次
3.4.2 配置systemctl

创建一个systemd服务文件:

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

注:

  1. ExecStart=sh /data/program/update_dns.sh 需要替换为你的脚本的绝对路径

检查是否成功

4.1 在dynv6网站检查

登录dynv6网站,进入域名页面,选择Records查看是否是自己服务器的IP。

4.2 使用命令检查

可以使用以下命令检查DNS解析是否正确:

nslookup test.dynv6.net

常见问题及解决方案

5.1 dynv6确认密码创建账号失败

分析:主要是人机校验没过,而国内的网络偶尔人机校验页面出不来,需要使用VPN。

5.2 配置了crontab但没按时执行

分析:

  1. 检查系统时间是否正确,确保服务器时间与实际时间一致。
    命令:date
    校准命令:timedatectl set-timezone Asia/Shanghai

  2. 检查crontab服务状态:
    systemctl status cron
    注意,Ubuntu系统使用cron,其他系统可能是crond

  3. 如果crontab没有加载新配置,可以重启crontab服务:
    systemctl restart cron

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号