记一个ipv6+ddns

所谓ddns, 就是动态dns, 适用于服务器ip地址不固定, 过一段时间就会改变的场景

推荐使用dynv6, 我用着挺好的, 地址: Free dynamic DNS for IPv6 (dynv6.com)

虽然是英文, 但大致能看明白吧

dynv6步骤

  • 首先新建域名, 在dynv6中查看token

  • 推荐使用他提供的脚本gist.github.com, 其他方式可自行参考他提供的APIdynv6 APIs

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    #!/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,意思相同