「DNS」- 使用接口更新域名解析(Tencent Cloud) @20210209

本文介绍通过腾讯云API实现域名DNS记录动态更新的过程。包括使用SHA1算法生成签名、构造curl命令行请求及检查本地IP变化以触发更新的具体实现。

问题描述

本笔记将记录:使用腾讯的 API 进行更改域名解析的方法。实现在 IP 地址发生变化的时候,调用接口修改域名的 DNS 解析。

腾讯的接口地址:https://cloud.tencent.com/document/api/302/8511

不过我调用的时候返回了403,提了工单,他们家说目前出于封闭状态,让我等待进一步确认。emmmmm.....那就等等把。

# 08/02/2018 好了已经,具体原因不想说了。客观的讲:(1)没有仔细看文档;(2)不能说我们没有仔细看,只能说腾讯把完整的 URL 放在“示例”里。

生成接口参数的时候你可能需要用到 SHA1 算法来签名,如果你在 SHELL 中可能会用到 OpenSSL 的如下命令:

# echo -n "value" | openssl dgst -sha1 -hmac "key"
57443a4c052350a44638835d64fd66822f813319

# echo -n "value" | openssl sha1 -hmac "key"
57443a4c052350a44638835d64fd66822f813319

上面的两个命令是等价的。参数“key”是腾讯的SecretKey,文档已描述如何获取;参数“value”是要签名的原串。

使用命令 curl(1) 发送请求,下面是 SHELL 脚本的关键部分:

#!/bin/sh

IPADDRESS="// 要解析的IP地址"
SecretId="// 参见文档"
SecretKey="// 参见文档"
domain="// k4nz.com"
recordId="// 记录ID,直接去腾讯云平台复制就行了"
subDomain="// 子域"
recordType="A"
recordLine="默认"

METHOD="GET"
PROTOCOL='https://'
HOST='cns.api.qcloud.com'
URI='/v2/index.php'
PARAM="Action=RecordModify&Nonce=${RANDOM}&SecretId=${SecretId}&Timestamp=$(date +%s)&domain=${domain}&recordId=${recordId}&recordLine=${recordLine}&recordType=${recordType}&subDomain=${subDomain}&value=${IPADDRESS}"
signString="${METHOD}${HOST}${URI}?${PARAM}"
signature=$(echo -n "$signString" | openssl dgst -sha1 -hmac "${SecretKey}" -binary | base64)
requestUrlWithoutSignature=${PROTOCOL}${HOST}${URI}?${PARAM}

curl -G -s "$requestUrlWithoutSignature" --data-urlencode "Signature=$signature"

选项 --data-encode 来编码签名
选项 -X 控制请求方式

常用示例

将本机地址解析到指定域名

#!/bin/sh
set -e

# 缓存文件
cache_file="/tmp/$(basename $0).tmp"
touch $cache_file
echo -e "cache_file:\t${cache_file}"

# 获取出口网卡的网络地址
interface=$(ip --json --pretty route list default | jq --raw-output '.[0].dev')
echo -e "interface:\t$interface"

ip_address=$(ip --json address | jq --raw-output '.[] | select( .ifname == "'${interface}'" ) | .addr_info | .[] | select( .family == "inet" ) | .local')
echo -e "ip_address:\t$ip_address"

# 检测网络地址是否发生变化
previous_ip_address=$(cat $cache_file)
echo -e "prev_address:\t${previous_ip_address}"

if [ "$ip_address" == "$previous_ip_address" ]
then
    exit 0
else
    echo -n $ip_address > $cache_file
fi

# 设置动态域名解析参数
IPADDRESS="${ip_address}"
SecretId="<SecretId>"
SecretKey="<SecretKey>"
domain="k4nz.com"
recordId="407218721"
subDomain="example"
recordType="A"
recordLine="默认"

# 发送请求设置域名解析
METHOD="GET"
PROTOCOL='https://'
HOST='cns.api.qcloud.com'
URI='/v2/index.php'
# ?
PARAM="Action=RecordModify&Nonce=${RANDOM}&SecretId=${SecretId}&Timestamp=$(date +%s)&domain=${domain}&recordId=${recordId}&recordLine=${recordLine}&recordType=${recordType}&subDomain=${subDomain}&value=${IPADDRESS}"
signString="${METHOD}${HOST}${URI}?${PARAM}"
signature=$(echo -n "$signString" | openssl dgst -sha1 -hmac "${SecretKey}" -binary | base64)
requestUrlWithoutSignature=${PROTOCOL}${HOST}${URI}?${PARAM}

echo -e "http_response:\t"$(curl -G -s "$requestUrlWithoutSignature" --data-urlencode "Signature=$signature")

相关文章

「BIND9」- DLZ(Dynamically Loadable Zones)

参考文献

HMAC-SHA1 in bash
HTTP POST and GET using cURL in Linux
Any way to encode the url in curl command?

<think> 我们正在分析一个具体的域名:ins-r23tsuuf.ias.tencent-cloud.net 根据之前的nslookup输出,这个域名是www.qq.com的CNAME记录指向的域名,即腾讯云的CDN或云服务使用的域名。 解释: 1. **域名结构解析**: - `ins-r23tsuuf`:可能是实例ID(Instance)的标识,其中"r23tsuuf"为随机或特定生成的字符串,用于唯一标识某个资源实例。 - `ias`:可能代表“Intelligent Acceleration Service”(智能加速服务)或腾讯内部服务名称。 - `tencent-cloud.net`:腾讯云的域名,表明该服务由腾讯云提供。 2. **功能作用**: - 作为CNAME目标,用于实现: - **负载均衡**:根据用户位置返回不同IP(如输出中同时返回IPv4和IPv6地址) - **CDN加速**:通过分布式节点缓存资源 - **安全防护**:隐藏真实服务器IP,提供DDoS防护等 3. **动态特性**: - 该域名可能由腾讯云动态生成,具有: - 较短的TTL(输出中为600秒),便于快速调整后端服务 - 多地IP部署(输出中包含多个IP地址) 4. **验证方法**: ```powershell # 追踪解析链 Resolve-DnsName www.qq.com -Trace ``` ```sh # Linux解析测试 dig +trace www.qq.com ``` §§相关问题§§ 1. CNAME记录在CDN服务中起到哪些关键作用? 2. 腾讯云智能加速服务(IAS)的具体技术架构包含哪些核心组件? 3. 如何通过TTL值设计实现负载均衡的动态调度? 4. 为什么在权威应答中需要同时提供A和AAAA记录? 5. 动态生成CNAME域名的安全风险有哪些?如何防范? </think> ### 解析域名 `ins-r23tsuuf.ias.tencent-cloud.net` 此域名是 **腾讯云智能加速服务(Intelligent Acceleration Service, IAS)的动态调度节点**,属于腾讯CDN体系的技术实现。以下是深度解析--- #### 1. **域名结构分解** | 字段 | 含义 | 技术说明 | |------|------|----------| | `ins-r23tsuuf` | 实例标识符 | `ins`=实例缩写,`r23tsuuf`=随机化实例ID(防扫描溯源) | | `ias` | 服务模块 | 智能加速服务(Intelligent Acceleration Service) | | `tencent-cloud.net` | 归属域名 | 腾讯云基础设施专用顶级域名 | --- #### 2. **核心功能** - **动态流量调度** 根据用户地理位置、网络质量实时分配最优CDN节点(如输出中返回多个IPv4/IPv6地址) - **协议优化** 自动适配HTTP/3、QUIC等协议(AAAA记录表明支持IPv6) - **安全防护** 隐藏真实源站(www.qq.com → CNAME跳转),提供DDoS防护 --- #### 3. **技术特性** ```mermaid graph TB A[用户访问 www.qq.com] --> B[CNAME重定向] B --> C[动态域名 ins-xxx.ias.tencent-cloud.net] C --> D{GSLB全局负载均衡} D -->|最优节点| E[边缘CDN节点] D -->|备用节点| F[异地容灾节点] ``` - **TTL设计** 600秒(10分钟)的中等TTL值,平衡调度灵活性与DNS查询压力 - **多IP负载** 同时返回 `101.91.22.57`、`101.91.42.232` 等多个IP实现客户端级负载均衡 - **DNSSEC就绪** 权威记录包含完整DNS链(NS记录+Additional Data),支持安全验证 --- #### 4. **实际应用场景** 1. **突发流量处理** 电商大促时自动扩展节点(如双11期间的QQ商城) 2. **跨国加速** 通过 `ns-open1/2/3.qq.com` 的全球Anycast IP实现就近接入 3. **协议过渡** IPv6地址(`240e:e1:a800:120::76`)支持未来网络升级 --- #### 5. 验证命令 ```powershell # 检查CNAME链 Resolve-DnsName www.qq.com -Type CNAME -Server 192.168.18.1 # 追踪完整解析路径 dig +trace ins-r23tsuuf.ias.tencent-cloud.net ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值