title: 记一个ipv6+ddns author: zaqai date: 2023-12-31 20:18:03.322026 tags:
记一个ipv6+ddns
所谓ddns, 就是动态dns, 适用于服务器ip地址不固定, 过一段时间就会改变的场景
推荐使用dynv6, 我用着挺好的, 地址: Free dynamic DNS for IPv6 (dynv6.com)
虽然是英文, 但大致能看明白吧
dynv6步骤
-
首先新建域名, 在dynv6中查看token
-
推荐使用他提供的脚本gist.github.com, 其他方式可自行参考他提供的APIdynv6 APIs
#!/bin/sh -e hostname=$1 device=$2 file=$HOME/.dynv6.addr6 [ -e $file ] && old=`cat $file` if [ -z "$hostname" -o -z "$token" ]; then echo "Usage: token=<your-authentication-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) 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" # save current address echo $current > $file
考虑到脚本的网站不是那么好打开, 在这里放上脚本. 默认ipv4 ipv6都会被上传记录, 如果只想要ipv6, 将
$bin "http://ipv4.dynv6.com/api/update?hostname=$hostname&ipv4=auto&token=$token"
删掉即可. 我是删掉了, 防止某些情况下解析到ipv4, 导致无法访问脚本抓取网络接口显示的ipv6地址, 在$HOME/.dynv6.addr6创建文件记录上次更新的ip地址, 如果再次执行更新操作, 会先判断获取的ip地址和文件中的是否一致, 如果一致便不会上传更新
-
命令
token=你的token ./dynv6.sh 你的域名
定时任务
可以设置定时任务, 如0 0 * * *
代表每天0点
分 | 时 | 日 | 月 | 周 |
---|---|---|---|---|
0~59 | 0~23 | 1~31 | 1~12 | 0~7 |
周的数字为 0 或 7 时,都代表“星期天”的意思
特殊字符 | 代表意义 |
---|---|
*(星号) | 代表任何时刻都接受的意思。举例来说,0 12 * * * command 日、月、周都是*,就代表着不论何月、何日的礼拜几的12:00都执行后续命令的意思。 |
,(逗号) | 代表分隔时段的意思。举例来说,如果要执行的工作是3:00与6:00时,就会是:0 3,6 * * * command时间还是有五列,不过第二列是 3,6 ,代表3与6都适用 |
-(减号) | 代表一段时间范围内,举例来说,8点到12点之间的每小时的20分都进行一项工作:20 8-12 * * * command仔细看到第二列变成8-12.代表 8,9,10,11,12 都适用的意思 |
/n(斜线) | 那个n代表数字,即是每隔n单位间隔的意思,例如每五分钟进行一次,则:/5 * * * * command用与/5来搭配,也可以写成0-59/5,意思相同 |
回复