Ipv6DDNS(阿里云域名解析及证书配置)
申请免费 SSL 证书
一、登陆阿里云,进入证书服务。
登陆阿里云以后,点击控制台。进入控制台以后,点击左侧阿里云三个字旁边的菜单键,选择产品和服务。在产品和服务选择SSL证书(应用安全)或者直接搜索框里搜索SSL证书。
二、购买证书。
直接点击中间最闪耀的证书购买就行!
在购买证书时,按照下面的方式选择。商品类型选择云盾证书(包年),然后域名类型选择单域名,证书类型选择DV SSL,加密等级就是免费版,证书品牌DigCert,证书托管不要开通,还有期限最多选择1年,1年以后需要再次申请。完成选择后,点击支付。
完成后,可以在刚才控制台-SSL证书里发现出现一条未签发的证书。
三、证书申请。
购买证书以后,还需要填写资料等待相关部门签发。具体就是在SSL证书管理那里,点击证书申请。然后如实填写资料。
划红线的地方填写一下就好然后下一步不需要更改,提交就行。然后等待审核签发吧!
四、证书签发下载
证书签发可能需要等一段时间,工作日一般半个小时左右吧。签发好后,下载证书即可。下载后有两个文件key和pem文件。
SSL证书部署
一、群晖新增证书
在群晖控制面板-安全性-证书 新增证书。选择添加新证书,下一步。
选择导入证书,下一步。
导入证书,选择刚才的.key文件和.pem文件。中间证书不用选择。最后选择确定即可。
二、新签发证书部署
在群晖的控制面板-应用程序门户-编辑各个应用程序的HTTPS端口。
端口开放了以后,在控制面板-安全性-证书中配置刚才上传的证书。选中后,点击配置。左侧是各个访问端口,右侧是当前选用的证书,在右侧选择你刚刚申请的证书,然后保存确定即可。
HTTPDDNS解析
curl-sL--connect-timeout3"tdns.cupker.cn/d?dn=$aliddnsipv6_name&type=AAAA"curl-sL--connect-timeout3"119.29.29.29/d?dn=$aliddnsipv6_name&type=AAAA"
阿里云httpdns。
腾讯云HTTPdns
通过httpdns。我们可以查询域名与IP地址之间的联系,是我们可以定位到域名背后的IP地址
赶快来白嫖吧
腾讯云 DNS 方案 DoH 和 DoT 开始公测 2020-07-27 16:04 IT之家(骑士) IT之家7月27日消息 腾讯云DNSPod近期表示,DNS传输协议方案DoT/DoH开始公测了。
DoT 全称是 DNS over TLS,它使用 TLS 协议来传输 DNS 协议。TLS 协议是目前互联网最常用的安全加密协议之一,我们访问 HTTPs 的安全基础就是基于 TLS 协议的。相比于之前使用无连接无加密的 UDP 模式,TLS 本身已经实现了保密性与完整性。
TLS 协议的基本思路是证书 + 加密机制,双管齐下保证安全。证书相当于申请了一个合法的身份证,当客户端向服务器发起连接的时候,双方会相互校验一下身份,服务器把证书给客户端,客户端来校验证书的内容和合法性。
握手协议则是用的公钥加密法:首先,客户端会向服务器端索要并验证公钥,验证后双方会协商生成 "对话密钥",类似于两个人独有的摩斯密码,在此之后,双方就会采用对话密钥进行加密通信。
DoH 全称是 DNS over HTTPs,它使用 HTTPs 来传输 DNS 协议。DoH 的安全原理与 DoT 一样,他们之间的区别只在于:DoH 有了 HTTP 格式封装,更加通用。
IT之家了解到,DoT 在专用端口上通过 TLS 连接 DNS 服务器,而 DoH 是基于使用 HTTP 应用程序层协议,将查询发送到 HTTPS 端口上的特定 HTTP 端点 , 这里造成的外界感知就是端口号的不同,DoT 的端口号是 853,DoH 端口号 443。
腾讯云相关团队表示,通过对客户端侧改造和优化,采用本地缓存,提前预取,连接复用等技术方案,积极优化整体流程,实现了与原 DNS 协议相近的时延效果。
其次,是客户端和服务器端生成的对话密钥是对称加密,运算速度非常快,而服务器公钥只用于加密 "对话密钥" 本身,这样就减少了加密运算的消耗时间。
DNSPod 表示,一直以来对 DNS 安全都非常关注,目前已经 DoT/DoH 方案已经正式开放公测:为 DNSPod 用户的信息和隐私安全保驾护航。
DoT 的服务器地址:dns.pub 或者 doh.pub
DoH 的地址:https://doh.pub/dns-query
PC 端教程:
让 DNSPod 保护您的网页安全也非常简单,如果您使用的是 Chrome 浏览器(83 及以上),只需要在 Chrome 浏览器的设置项中设置好 DNS 访问安全选项即可。操作步骤如下:
进入到 Chrome 浏览器设置页面,在设置搜索框中搜索 DNS。
1:点击搜索结果中的 安全,往下拉,就能看到 DNS 安全设置。
2:输入 DNS 安全服务提供商地址:
如果你使用的是 Chrome 浏览器(78-82),那么首先你需要
1:点击:chrome://flags/dns-over-https
2:将 Secure DNS lookups 这里的 Default 修改为 Enabled。
3:进入网络设置 - 更改适配器选项 - 右键 - 选择 ipv4 - 点击属性
4:点击高级 - 选择 dns - 在弹出 DNS 服务器下方框中输入:162.14.21.56 或者 162.14.21.178(正式上线后会更改,请同步关注)
使用 FireFox 也可轻松设置,与 Chrome 步骤类似。进入到设置页面,搜索 dns,点击 网络设置,下拉后勾选 DNS over HTTPS,输入 DNS 安全服务商地址https://doh.pub/dns-query即可。
至此,你的 DNS 请求就以加密的方式安全的送达到了 DNSPod,从此岁月静好。
其中alidns_ip是http://dns.alidns.com的A记录,可以是以下两个地址之一 :223.5.5.5,223.6.6.6。和非TLS API)
https://dns.alidns.com/resolve?
http://dns.alidns.com/resolve?
注意
其中alidns_ip是http://dns.alidns.com的A记录,可以是以下两个地址之一 :223.5.5.5,223.6.6.6。
Docker 设置
安装docker
安装DDNS的容器
安装完毕后,打开docker,并单机注册表,然后搜索aliyun",选择第一个搜索结果aliyun-ddns-cli并按第一行的下载,下载该映像
也可以直接去github 主页拉取该容器
在左侧单机映像,然后选中刚刚下载的映像,单机第一行的启动
点击启动后会自动进入创建容器窗口
这里我点击左下角的高级设置按钮,然后进入配置窗口,在配置窗口中单机环境选卡:
现在我们需要从阿里云中获取AKID、AKSCT两项内容,他们是登录阿里进行ddns设置的用户权限,这个需要从阿里云的accesskey获取。
阿里云Accesskey管理
登录阿里云的控制台,把鼠标放到右上角头像上会弹出子窗口,选择Accesskey管理
此时会弹出提示窗口:云账号AccessKey是您访问阿里云API的密钥,具有该账户完全的权限,请务必妥善保管。请勿通过任何方式(如Github等)将AccessKey公开至外部渠道,以免被恶意利用而造成安全威胁。强烈建议您遵循阿里云安全最佳实践,使用RAM子用户AccessKey来进行API调用。
当然是给的权限越小约好,就怕万一accesskey被泄露了影响太大,对吧。
所以我们点击开始使用子用户,进入到RA访问控制后,单机蓝色的创建用户按钮:
填写一个用户名和说信息,勾选open API选项就可以了,这个账户不需要控制台登录权限的。
完成后,单击刚刚创建的用户名
单击授权管理
单击添加权限
在随后,选择授权范围为整个云账号、授权主体保持默认的刚刚创建的这个子账户名、在选择权限中输入dns搜索并选择AliyunDNSFullAccess,最后单机左下角的确定按键。
单机完成后,可以看到已经被赋予dns管理权限
回到认证管理页,可以看到一开始已有一个accesskey id了,但是看不到密码,而且这个密码也无法再重新查看了,只能后面新建一个Accesskey id
单击创建AccessKey,会让我们收集验证
输入手机验证码,并单击确定 ,然后会弹出新建的id和secret,这里务必要记好,一旦关闭后在阿里云就再也找不到查看secret的地方了。
这个id和secret就是群晖里面需要的信息。
配置域名解析
回到群晖,在环境选项卡中输入我们得到的id和secret
AKID:自己域名的AccessKey ID
AKSCT:自己域名的Access Key Secret
Domain:设置访问的域名,可以根据自己的喜欢设置一级或二级域名。如 你的域名为http://aa.com那就可以http://pan.aa.com这样到时就可以使用http://pan.aa.com来访问了。
REDO:设置多少分钟更新一次dns设置,我这里设置的60秒,即1分钟
点击应用后,在容器中可以看到已经在运行了
这时我们可以回到阿里云中查看dns记录是否已经正确添加和更新。
无Docker-Shell 语言解决方案
shell语言
Shell 语言相较于其他语言,需要结合不同系统的基本语言;
优点:不需要一些基本的环境配置,对于简单的系统具备优势,
缺点:跨平台能力差,取决于不同的系统
shell里面需要使用
``
模拟命令行
但是最新的标准已经更新为了:
$()
更加简单和一堵
shell代码
ipv6 的 Type 为 AAAA
ipv4 的 Type 为 A
其中的重点配置还在于获取设备的地址及当前域名解析的地址在比较后判断是否需要更新
!/bin/shThe script is best to run with bash. The command format is bash aliddnsChange your Ali AK in the quotation marks belowaliddnsipv6_ak="AccessKey ID"Change your Alibaba SK in the quotation marks below. To put it bluntly, these are the account and passwordaliddnsipv6_sk="Access Key Secret"Change the following quotation marks into the prefix of the domain name you want to resolve. If it is the root domain name, fill in it directly@aliddnsipv6_name1="area"Change the following quotation marks to the main domain name you want to resolve, for example: baidu comaliddnsipv6_domain="domain.cn"Change the parsing switching time you need in the quotation marks below. Alibaba defaults to a maximum of 600 seconds, which can be reduced by spending moneyaliddnsipv6_ttl="600"Judge whether it contains @ because the resolution containing @ is directly reported to xxx COM, instead of blindly reporting as @ xxx. comif["$aliddnsipv6_name1"="@"]thenaliddnsipv6_name=$aliddnsipv6_domainelsealiddnsipv6_name=$aliddnsipv6_name1.$aliddnsipv6_domainfiMake time and record good momentsecho"Now Time:$(date)"Here are two ways to get the IPv6 address of your local machine, so that one can hang up and the other can be backed up. Of course, you can also use the if statement to judge. If the first one doesnt work, use the second...If you want to resolve IPv4, put the following v6 ident. Replace me with v4 ident. mev6.ident. If me fails, switch to IPv6 directly ip. sbipv6=`curl -sL --connect-timeout 3 v6.ident.me`if [ "$ipv6" = "" ]thenipv6=$(ip -o addr show |grep -v deprecated|grep inet6 [^f:]|sed -nr s^.+? +inet6 ([a-f0-9:]+)/.+? scope global .*? valid_lft ([0-9]+sec) .*\2 \1p|grep ff:fe|sort -nr|head -n1|cut -d -f2)Print out the current local IPv6 address. What did you do to compare the programecho"LocalHost IP:$ipv6"The following is to get the IPv6 address currently resolved by Alibaba for you. If you want to resolve IPv4, replace AAAA with aIt is recommended to use the default one, because after you update DNS, dns9 hichina. COM is effective immediatelyTo resolve IPv4, you need to delete &type=AAAcurrent_ipv6=`nslookup -query=AAAA $aliddnsipv6_name dns9.hichina.com 2>&1 | grep Address: | tail -n1 | awk {print $NF}`current_ipv6=$(curl-sL--connect-timeout3"tdns.cupker.cn/d?dn=$aliddnsipv6_name&type=AAAA")tdns.cupker.cn bind tdns.cupker.cn$(ip -o addr show |grep -v deprecated|grep inet6 [^f:]|sed -nr s^.+? +inet6 ([a-f0-9:]+)/.+? scope global .*? valid_lft ([0-9]+sec) .*\2 \1p|grep ff:fe|sort -nr|head -n1|cut -d -f2)$(curl -sL --connect-timeout 3 "119.29.29.29/d?dn=$aliddnsipv6_name&type=AAAA")Print it again for you to see clearlyecho"Current Alibaba resolution ip:$current_ipv6"If the local IPv6 and Alibaba resolve the same, Ill passif["$ipv6"="$current_ipv6"]thenecho"You see, the IP hasnt changed and doesnt need to be updated. Im leaving..."exitIf its different, Ill start updating itelseunsetaliddnsipv6_record_idfiThe timestamp format should be correcttimestamp=$(date-u"+%Y-%m-%dT%H%%3A%M%%3A%SZ")The following are Alibaba related, all of which are required in various formats, as well as obtaining recordid and so on. Lets jump to the update record and go downurlencode(){urlencode out=""whileread-n1cdocase$cin[a-zA-Z0-9._-])out="$out$c";;*)out="$out$(printf%%%02X"$c")";;esacdoneecho-n$out}enc(){echo-n"$1"|urlencode}send_request(){localargs="AccessKeyId=$aliddnsipv6_ak&Action=$1&Format=json&$2&Version=2015-01-09"localhash=$(echo-n"GET&%2F&$(enc"$args")"|openssldgst-sha1-hmac"$aliddnsipv6_sk&"-binary|opensslbase64)curl-s"http://alidns.aliyuncs.com/?$args&Signature=$(enc"$hash")"}get_recordid(){grep-Eo"RecordId":"[0-9]+"|cut-d:-f2|tr-d"}Here ----------- the following type=aaaa is the only difference between updating IPv6 and IPv4. The rest of the update codes are the same, so it can be understood in this way -- line feedFor example, the following can be changed from AAAA to aquery_recordid(){send_request"DescribeSubDomainRecords""SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&SubDomain=$aliddnsipv6_name&Timestamp=$timestamp&Type=AAAA"}update_record(){send_request"UpdateDomainRecord""RR=$aliddnsipv6_name1&RecordId=$1&SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&TTL=$aliddnsipv6_ttl&Timestamp=$timestamp&Type=AAAA&Value=$(enc$ipv6)"}add_record(){send_request"AddDomainRecord&DomainName=$aliddnsipv6_domain""RR=$aliddnsipv6_name1&SignatureMethod=HMAC-SHA1&SignatureNonce=$timestamp&SignatureVersion=1.0&TTL=$aliddnsipv6_ttl&Timestamp=$timestamp&Type=AAAA&Value=$(enc$ipv6)"}if["$aliddnsipv6_record_id"=""]thenaliddnsipv6_record_id=$(query_recordid|get_recordid)fiif["$aliddnsipv6_record_id"=""]thenaliddnsipv6_record_id=$(add_record|get_recordid)echo"New parsing has been added$aliddnsipv6_name $ipv6 $aliddnsipv6_record_id"elseupdate_record$aliddnsipv6_record_idecho"New parsing has been added $aliddnsipv6_name as $ipv6"fi
获取本机地址(通过命令行)
以下是shell脚本,会显示出ipv4地址,和最新的ipv6(eui64)地址
!/bin/sh
ip addr show|grep -A1 inet [^f:]|sed -nr s^ +inet ([0-9.]+)/[0-9]+ brd [0-9./]+ scope global .*\1p
ip addr show|grep -v deprecated|grep -A1 inet6 [^f:]|grep -v ^--|sed -nr :a;N;s^ +inet6 ([a-f0-9:]+)/.+? scope global .*? valid_lft ([0-9]+sec) .*\2 \1p;Ta|grep ff:fe|sort -nr|head -n1|cut -d -f2
显示ipv6的脚本执行步骤是,
- ip addr show 或 ip addr show XXX
- 去除 deprecated 地址
- 挑出inet6地址,并同时显示下一行
- 去掉分组间隔 "--" (如果有的话)
- 把expired时间和ipv6地址,通过正则找出来,并显示在同一行。超时时间在前,ip在后。
- 过滤出eui64地址
- 根据时间的长短,反向排序
- 输出第一行
- 输出第二列(ip)
!/bin/sh
ip -o addr show|grep inet [^f:]|sed -nr s.+? +inet ([0-9.]+)/[0-9]+ brd [0-9./]+ scope global .*\1p
ip -o addr show |grep -v deprecated|grep inet6 [^f:]|sed -nr s^.+? +inet6 ([a-f0-9:]+)/.+? scope global .*? valid_lft ([0-9]+sec) .*\2 \1p|grep ff:fe|sort -nr|head -n1|cut -d -f2
获取本机地址(通过HTTP)
有哪些网站可以获取到呢
IPIP.NETIPCN搜狐IP138Ping, mtr, dig and TCP port check from multiple locationsicanhazip.comComprehensive IP address data, IP geolocation API and database - IPinfo.ioIP Address Lookup / IPv4 / IPv6 - IP.SB方便通过命令查看的
curlhttps://ip.cn
curlhttp://pv.sohu.com/cityjson2>> /dev/null | awk -F " {print $4}
curl ip.sb