ipv6使用免费的DDNS(dynv6.com)

参考文献:
1.免费好用的IPv6之DDNS服务-Openwrt上dynv6的使用介绍
2.定时任务初体验
3.crontab执行时间计算 - 在线工具
4.Mac下使用crontab定时任务,示例及详细说明

使用ipv6做DDNS的前提是,https://www.test-ipv6.com的公网的ipv6地址跟自己机器的ipv6相同。
这里使用https://dynv6.com的免费DDNS
注册dynv6的时候需要,因为它使用了Google的非机器人验证

可以手动修改IP,也可以通过API修改
以下代码,修改了官方的脚本(适用于macOS)文件名(dynv6.sh)存放在$HOME目录下,需要可执行权限如:chmod 777 dynv6.sh

#!/bin/sh -e
source /etc/profile #读取环境变量,如果没写,没法读取$HOME的值!
hostname=$1
device=$2
file=$HOME/.dynv6.addr6
[ -e $file ] && old=`cat $file`

if [ -z "$hostname" -o -z "$token" ]; then
  echo "Usage: token= [netmask=64] $0 your-name.dynv6.net [device]"
  exit 1
fi

if [ -z "$netmask" ]; then
  netmask=128
fi

if [ -n "$device" ]; then
  device="dev $device"
fi
#address=$(ip -6 addr list scope global $device | grep -v " fd" | sed -n 's/.*inet6 \([0-9a-f:]\+\).*/\1/p' | head -n 1) #linux
address=$(ifconfig | grep inet | grep "autoconf temporary" | sed -E -n 's/.*inet6 ([0-9a-f:]+).*/\1/p' | head -n 1) #for mac

if [ -e /usr/bin/curl ]; then
  bin="curl -fsS"
elif [ -e /usr/bin/wget ]; then
  bin="wget -O-"
else
  echo "neither curl nor wget found"
  exit 1
fi

if [ -z "$address" ]; then
  echo "no IPv6 address found"
  exit 1
fi

# address with netmask
current=$address/$netmask

if [ "$old" = "$current" ]; then
  echo "IPv6 address unchanged"
  exit
fi

# send addresses to dynv6
$bin "http://dynv6.com/api/update?hostname=$hostname&ipv6=$current&token=$token"
#$bin "http://ipv4.dynv6.com/api/update?hostname=$hostname&ipv4=auto&token=$token" #不需要ipv4所以注释了

# save current address
echo $current > $file

使用crontab来实现定时任务

crontab -e //编辑crontab任务,保存退出后自动加到crontab列表中执行
crontab -l //查看所有crontab 列表

crontab -e然后添加:* * * * * token=8*******************H /Users/userName/dynv6.sh example.dynv6.net
这个测试用* * * * * /bin/date >> /Users/userName/Desktop/cron.txt,看cron是否可用,如果有日期写入这个文件就是cron正常可用

注意清理系统用户的邮件日志

每条任务调度执行完毕,系统都会将任务输出信息通过电子邮件的形式发送给当前系统用户
邮件在/var/mail/username
修改* * * * * token=8*******************H /Users/userName/dynv6.sh example.dynv6.net* * * * * token=8*******************H /Users/userName/dynv6.sh example.dynv6.net >/dev/null 2>&1
“/dev/null 2>&1”表示先将标准输出重定向到/dev/null,然后将标准错误重定向到标准输出,由于标准输出已经重定向到了/dev/null,因此标准错误也会重定向到/dev/null,这样日志输出问题就解决了。

如果配置完成后,但仍旧不能从外网访问路由器,可能有以下几种原因:

  1. 运营商分配了IPv6,但禁止了传入连接(罕见,多见于教育网、机关单位等统一配置的防火墙,个人无法解决)
  2. 光猫拨号,向下级设备分配了IPv6地址,但光猫的防火墙禁止了传入连接(较常见,可通过修改光猫配置关闭防火墙或改为桥接模式、路由器拨号)
  3. 运营商禁用了常用端口80、443、8080等(常见,修改http服务器的端口再次测试即可,参考:https://blog.csdn.net/weixin_43593122/article/details/95766357)

你可能感兴趣的:(ddns,ipv6,ip)