通过gynv6使用ddns服务

背景:
家里整了台物理机,具备动态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"

注:

  1. $hostname:填第一步你创建的域名,如:test.dynv6.net
  2. ipv6=auto:会自动获取你的ipv6
  3. your-token:改成在3.2获取的token
  4. 命令无误,则打包成脚本,使用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

注:

  1. SavedIP 获取域名 test.dynv6.net 目前的dns解析ip
  2. ActualIP 获取服务器目前的ip
  3. 先比对动态ip是否有更新,有再访问ddns的api接口更新ip解析
  4. 每半小时执行一次

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

注:

  1. 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但没按时执行

分析:

  1. 检查时间,安装的服务器可能不是中国时间
    命令:date
    校准命令:timedatectl set-timezone Asia/Shanghai

2.crontab没正常运行,检查其状态
systemctl status cron
注意,ubuntu是cron,其他系统可能是crond

3.crontab没有加载新配置
systemctl restart cron

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值