为路由器添加 DDNS 和微信推送
以下操作的前提是具有公网 IP 以及可执行 Shell 脚本的嵌入式设备。
获取 DNSPod API Token
首先要将域名解析转入 DNSPod
并获取 API TOKEN
。
注册 IFTTT
IFTTT 是一项事件响应服务,之前在 为 Typecho 评论添加 Telegram 提醒 的文章中介绍过,请按照说明注册后获取 Webhook Key
和 Event Name
,将其与 TG 绑定,并创建触发事件,用于 TG 推送,消息模板设置如下。
您设备的 IP 发生变化<br>
域名: <code>{{Value1}}</code><br>
新IP: <code>{{Value2}}</code>
注册 ServerChan
ServerChan 是一项微信推送服务,之前在 为 Typecho 评论启用微信推送 的文章中介绍过,请按照说明注册后获取 SCKEY
,并将其与微信绑定。
测试推送脚本
将以下代码保存为 dnspod.sh
,打开文件,依次填入 DNSPod 的 API_ID
,API_TOKEN
和 ServerChan 的 SCKEY
,IFTTT
的 WEBHOOK_KEY
和 EVENT_NAME
。填写完毕后保存,然后上传到嵌入式设备,可上传至 /usr/bin
目录。
#!/usr/bin/env bash
# DNSPod API Token 中的 API 项
API_ID=
# DNSPod API Token 中的 TOKEN 项
API_TOKEN=
# 域名,例如 logi.im,不加前缀
DOMAIN=
# 子域名,例如 home,即域名前缀
SUB_DOMAIN=
# ServerChan 的 SCKEY
SERVER_CHAN_SCKEY=
# IFTTT 的 Webhook Key
IFTTT_WEBHOOK_KEY=
# IFTTT 的 Event Name
IFTTT_EVENT_NAME=
IP_REG=[0-9]+.[0-9]+.[0-9]+.[0-9]+
IP=$(curl -s myip.ipip.net | grep -oE "${IP_REG}")
PUB_PARAMS="login_token=${API_ID},${API_TOKEN}&format=json&lang=en&error_on_empty=yes&domain=${DOMAIN}&sub_domain=${SUB_DOMAIN}"
function toIFTTT()
{
curl -s -X POST "https://maker.ifttt.com/trigger/${IFTTT_EVENT_NAME}/with/key/${IFTTT_WEBHOOK_KEY}?value1=${SUB_DOMAIN}.${DOMAIN}&value2=${IP}"
}
function toWechat()
{
curl -s -X POST "http://sc.ftqq.com/${SERVER_CHAN_SCKEY}.send?text=${SUB_DOMAIN}.${DOMAIN}" -d "&desp=${IP}"
}
function createRecord()
{
params="${PUB_PARAMS}&record_type=A&record_line=默认&value=${IP}"
curl -ks -X POST https://dnsapi.cn/Record.Create -d "${params}"
}
function getRecord()
{
record=$(curl -ks -X POST https://dnsapi.cn/Record.List -d "${PUB_PARAMS}")
status_code=$(echo ${record} | grep -oE 'status.+code.+[0-9].+message' | grep -oE '[0-9]+')
if [ ${status_code} -eq 1 ]
then
record_id=$(echo ${record} | grep -oE 'records.+id.+[0-9].+ttl' | grep -oE '[0-9]{5,}')
record_value=$(echo ${record} | grep -oE 'value.+[0-9].+enable' | grep -oE "${IP_REG}")
fi
}
function updateRecord()
{
params="${PUB_PARAMS}&record_id=${record_id}&record_line=默认&value=${IP}"
curl -ks -X POST https://dnsapi.cn/Record.Ddns -d "${params}"
}
getRecord
if [ ${status_code} -eq 10 ]
then
createRecord
toWechat
toIFTTT
elif [ ${record_value} != ${IP} ]
then
updateRecord
toWechat
toIFTTT
fi
上传完毕后,执行以下代码,完毕后查看 DNSPod 解析记录是否更改,微信推送是否收到。
chmod +x /usr/bin/dnspod.sh && /usr/bin/dnspod.sh
设置定时任务
确认可正常工作后为其添加定时任务,之后发生 IP 变动时便可自动解析并通过微信推送。
echo -e "`crontab -l`\n*/5 * * * * /usr/bin/dnspod.sh" | crontab
相关: aliddns