2021年12月

Shell脚本实现方案

方案1:缺点无法自动选择有效时间长的ipv6长地址,但是仅需一个Shell文件即可完成。
#!/usr/bin/bash    
dnspod_ddnsipv6_id="#####" #【API_id】将引号内容修改为获取的API的ID
dnspod_ddnsipv6_token="####" #【API_token】将引号内容修改为获取的API的token
dnspod_ddnsipv6_ttl="600" # 【ttl时间】解析记录在 DNS 服务器缓存的生存时间,默认600(s/秒)
dnspod_ddnsipv6_domain='######' #【已注册域名】引号里改成自己注册的域名
dnspod_ddnsipv6_subdomain='#####' #【二级域名】将引号内容修改为自己想要的名字,需要符合域名规范,附常用的规范
local_net="eth0" # 【网络适配器】 默认为eth0,如果你的公网ipv6地址不在eth0上,需要修改为对应的网络适配器
# 常用的规范【二级域名】
# 【www】 常见主机记录,将域名解析为 www.test.com
# 【@】   直接解析主域名 test.com
# 【*】   泛解析,匹配其他所有域名 *.test.com
#  改进了非fe80开头内网地址被误解析的错误。ps:仅支持中国电信,中国联通,中国移动使用,若国外ipv6无法解析请自行修改脚本。
# 举例
# 在腾讯云注册域名,登陆DNSPOD,在【我的账号】的【账号中心】中,有【密钥管理】
# 点击创建密钥即可创建一个API
# 如果你在腾讯云注册域名叫【test.com】
# 那么【dnspod_ddnsipv6_domain】后面就填【test.com】
# 然后根据常用的规范/自己想要的名字在【dnspod_ddnsipv6_subdomain】填入自己需要的名字
# 现假设为【file】,那么你的访问地址为【file.test.com】
if [ "$dnspod_ddnsipv6_record" = "@" ]
then
  dnspod_ddnsipv6_name=$dnspod_ddnsipv6_domain
else
  dnspod_ddnsipv6_name=$dnspod_ddnsipv6_subdomain.$dnspod_ddnsipv6_domain
fi

die () {
    echo "Error: unable to find [public IPv6 address], please use the 'ip addr' command or query the network panel of the system to check the network card, and fill in the name of the network card with the IPv6 address in the 'local_net' position in the command file." >&2
    echo "IP地址提取错误: 在指定的网络适配器上[$local_net]找不到<公网IPv6地址>(不是fe80开头),请使用'ip addr'命令或在系统的网络面板查询有公网IP的网络适配器,然后在脚本的[local_net]中用填写网络适配器的名称。" >&2
    exit
}

ipv6_list=`ip addr show $local_net | grep inet6 | sed 's/\/.*//g' | awk '{print $2}'  | grep 24 |  awk 'NR==1{print}'` || die

for ipv6 in ${ipv6_list[@]}
do
    if [[ "$ipv6" =~ ^fe80.* ]]
    then
        continue
    else
        echo select IP: $ipv6 >&1
        break
    fi
done

if [ "$ipv6" == "" ] || [[ "$ipv6" =~ ^fe80.* ]]
then
    die
fi

dns_server_info=`nslookup -query=AAAA $dnspod_ddnsipv6_name 2>&1`

dns_server_ipv6=`echo "$dns_server_info" | grep 'address ' | awk '{print $NF}'`
if [ "$dns_server_ipv6" = "" ]
then
    dns_server_ipv6=`echo "$dns_server_info" | grep 'Address: ' | awk '{print $NF}'`
fi
    
if [ "$?" -eq "0" ]
then
    echo "DNS server IP: $dns_server_ipv6" >&1

    if [ "$ipv6" = "$dns_server_ipv6" ]
    then
        echo "The address is the same as the DNS server." >&1
    fi
    unset dnspod_ddnsipv6_record_id
else
    dnspod_ddnsipv6_record_id="1"   
fi

send_request() {
    local type="$1"
    local data="login_token=$dnspod_ddnsipv6_id,$dnspod_ddnsipv6_token&domain=$dnspod_ddnsipv6_domain&sub_domain=$dnspod_ddnsipv6_subdomain$2"
    return_info=`curl -X POST "https://dnsapi.cn/$type" -d "$data" 2> /dev/null`
}

query_recordid() {
    send_request "Record.List" ""
}

update_record() {
    send_request "Record.Modify" "&record_type=AAAA&record_line=默认&ttl=$dnspod_ddnsipv6_ttl&value=$ipv6&record_id=$dnspod_ddnsipv6_record_id"
}

add_record() {
    send_request "Record.Create" "&record_type=AAAA&record_line=默认&ttl=$dnspod_ddnsipv6_ttl&value=$ipv6"
}

if [ "$dnspod_ddnsipv6_record_id" = "" ]
then
    echo "seem exists, try update." >&1
    query_recordid
    code=`echo $return_info  | awk -F \"code\":\" '{print $2}' | awk -F \",\"message\" '{print $1}'`
    echo "return code $code" >&1
    if [ "$code" = "1" ]
    then
        dnspod_ddnsipv6_record_id=`echo $return_info | awk -F \"records\":.{\"id\":\" '{print $2}' | awk -F \",\"ttl\" '{print $1}'`
        update_record
        echo "update sucessful" >&1
    else
        echo "error code return, domain not exists, try add." >&1
        add_record
        echo "add sucessful." >&1
    fi
else
    echo "domain not exists, try add."
    add_record
    echo "add sucessful" >&1

fi

Shell方案2

来自:https://github.com/rehiy/dnspod-shell 非单文件,但是也可以稍加修改后单文件运行,并且支持识别长效地址。

之前家里装的这个移动宽带一直获取不到ipv6地址,试过N多方案都不行,最接近成功的就是我看本地其他地区ipv6获取成功的地址,照葫芦画瓢,手动输入了个2409:8a44::的前缀(因为之前我这边一直不自动下发ipv6前缀),然后就桥接模式下可以获取到一个ipv6地址但是DNS什么都不自动下发。没想到这次回家一看居然自动下发ipv6配置了,红米AC2100我设置的native模式,自动获取到了地址。(之前native模式就获取不到ipv6地址,我一度以为家里光猫是对ipv6支持是残缺的。)

下面分享一下我的测试页面和记录作为纪念。

屏幕截图(14).png
屏幕截图(15).png

这两个DNS经查询确实是中国移动的ipv6 DNS,喜大普奔。

非常的巧

我回家前两天就在关注ipv6DDNS的相关开源实现,还fork了一个Python写的DDNS工具,就是想着家里宽带快到期了,到时候回来重新装宽带换个光猫或者直接换其他运营商的宽带。没想到本地移动求生欲很强,趁着我出去上学就把ipv6搞好了。皆大欢喜啊。

ipv6能帮我做什么?

等我在我家云上配置好ipv6DDNS就可以用流量在学校连上我家云作为一个lighting NAS和web服务器啦!(沙雕校园网没分配ipv6,只能试试用流量连。)

希望不是移动大内网ipv6(假的公网ipv6)

之前有人说移动ipv6地址只能移动宽带、流量才能ping通,而且不同地域的移动ipv6地址疑似有隔离,无法互通。希望现在不是这样,具体是不是我得后续测试。

2021年12月25日补充:

Windows获取了三个ipv6地址,短、长、长(临时)。
初步实践证明其中长ipv6地址有效期 长> 短>长(临时)。

纪念一下,第一次build成功。

我不知道我执行的npm install android-build-tools -g是不是也是成功的必要条件。

屏幕截图(13).png
坑很多,尤其是第一次安装后配置http代理和自己新建项目出现的 Failed to find Build Tools revision 32.0.3
前者我使用Auto-detect proxy settings: mirrors.neusoft.edu.cn:80 解决,感谢大连东软.......
后者,注意上方图片里的代码编辑框,高亮的那一行buildToolsVersion '32.0.0'//划重点,要考的!,你得手动把从最底下剪切到我写的那个位置。感谢谷歌让我知道你家AS新手体验和华为EcoDev一样烂。

已知适用于Ubuntu和基于Ubuntu的发行版,理论适用于全部Linux发行版(可能需要手动修改字体目录)
今天配置WPS碰到的,缺字体,版权真是个麻烦的东西,官方不能直接给你提供,你得手动下载。
但是手动一个一个下载太慢了点,我打包一份从我的Windows10 复制来的(目前Linux mint20.4+Windows10双系统)字体。
解决Linux下WPS缺字体.zip
截图_2021-12-22_13-55-47.png
自行下载压缩包解压后以ROOT权限运行内附脚本即可。
(我看哪个不长眼的拿我博客去CSDN倒传,CSDN倒狗给我死远点!)

通过飙风电器的6in4隧道服务实现,因此延迟较高(国内某垃圾IDC连ipv6都要付费)
教程参考了https://www.bobobk.com/377.html ,由于我几个操作间隔时间非常长(大半年了)所以没有写教程,如果想复现可以参考这个教程。

ipv6网络测试

如果下方图片正常显示,则您可以正常访问ipv6网络。
测试图片,看到此文字时您可能无法正常访问ipv6网络或本站ipv6隧道瘫痪。

纯ipv6网络站点

https://xfox.fun 是ipv4&6双栈网站,http://ipv6.xfox.fun 是纯ipv6网站。