为路由器添加 DDNS 和微信推送

2019-07-01T09:14:00

以下操作的前提是具有公网 IP 以及可执行 Shell 脚本的嵌入式设备。

获取 DNSPod API Token

首先要将域名解析转入 DNSPod 并获取 API TOKEN

注册 IFTTT

IFTTT 是一项事件响应服务,之前在 为 Typecho 评论添加 Telegram 提醒 的文章中介绍过,请按照说明注册后获取 Webhook KeyEvent Name,将其与 TG 绑定,并创建触发事件,用于 TG 推送,消息模板设置如下。

您设备的 IP 发生变化<br>
域名: <code>{{Value1}}</code><br>
新IP: <code>{{Value2}}</code>

注册 ServerChan

ServerChan 是一项微信推送服务,之前在 为 Typecho 评论启用微信推送 的文章中介绍过,请按照说明注册后获取 SCKEY,并将其与微信绑定。

测试推送脚本

将以下代码保存为 dnspod.sh,打开文件,依次填入 DNSPod 的 API_IDAPI_TOKEN 和 ServerChan 的 SCKEYIFTTTWEBHOOK_KEYEVENT_NAME。填写完毕后保存,然后上传到嵌入式设备,可上传至 /usr/bin 目录。

#!/usr/bin/env bash

# DNSPod API Token 中的 API 项
API_ID=

# DNSPod API Token 中的 TOKEN 项
API_TOKEN=

# 域名,例如 logi.ml,不加前缀
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
当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »