cloudflare/DNSPod DDNS 动态域名设置

所谓动态域名,就是当你的服务器 IP 地址发生变化的时候,自动地修改你在「域名解析服务商」那里的域名记录值

怎么操作?看官方文档
Use dynamic IP address
Update DNS Record
DNSPod用户API文档

cloudflare

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# created by hangj(hangj.cnblogs.com)

import http.client
import json



CF_Email="alice@example.com"
CF_Token="0932a09c9a9d"
CF_Zone_ID="a900b9a9d8a9"
CF_API_Key="cb7de90"



headers = {
    'Content-Type': "application/json",
    'X-Auth-Email': CF_Email,
    'X-Auth-Key': CF_API_Key,
    'Authorization': 'Bearer ' + CF_Token,
}



def dns_list():

    conn = http.client.HTTPSConnection("api.cloudflare.com")

    conn.request("GET", f"/client/v4/zones/{CF_Zone_ID}/dns_records", headers=headers)

    res = conn.getresponse()
    data = res.read()

    print(data.decode("utf-8"))



# identifier: record id
def dns_detail(identifier):

    conn = http.client.HTTPSConnection("api.cloudflare.com")

    conn.request("GET", f"/client/v4/zones/{CF_Zone_ID}/dns_records/{identifier}", headers=headers)

    res = conn.getresponse()
    data = res.read()

    print(data.decode("utf-8"))



# identifier: record id
def dns_update(identifier, name, IP):

    conn = http.client.HTTPSConnection("api.cloudflare.com")

    payload = {
        "type": "A",
        "name": name,
        "content": IP,
        "ttl": 120,
    }

    conn.request("PUT", f"/client/v4/zones/{CF_Zone_ID}/dns_records/{identifier}", json.dumps(payload), headers)

    res = conn.getresponse()
    data = res.read()

    print(data.decode("utf-8"))



# 如果 record 原来的 ttl 是 auto, 则此操作无法将 ttl 改成制定的值, 需要先用 dns_update 全量修改该 record
def dns_patch(identifier, IP):

    conn = http.client.HTTPSConnection("api.cloudflare.com")

    payload = {
        "content": IP,
        "ttl": 120,
    }

    conn.request("PATCH", f"/client/v4/zones/{CF_Zone_ID}/dns_records/{identifier}", json.dumps(payload), headers)

    res = conn.getresponse()
    data = res.read()

    print(data.decode("utf-8"))



def main():

    # dns_list()
    dns_update('09f0ea0', name="example.com", IP="113.90.37.101")
    # dns_patch('09f0ea0', IP="113.90.37.101")
    # dns_detail('09f0ea0')



if __name__ == '__main__':
    main()


#

DNSPod

首先需要创建 Token
完整的 API Token 是由 ID,Token 组合而成的,用英文的逗号分割

用刚创建的 API Token 测试一下:

$curl -X POST https://dnsapi.cn/Info.Version -d 'login_token=LOGIN_TOKEN&format=json'
{"status":{"code":"1","message":"4.6","created_at":"2021-06-27 22:04:23"}}

code 返回 1 表示「操作成功」,下一步就可以修改记录了

修改 record 用两个 API 就够了:
记录列表更新动态DNS记录

$curl -X POST https://dnsapi.cn/Record.List -d 'login_token=LOGIN_TOKEN&format=json&domain_id=12600793&sub_domain=www&record_type=A&offset=0&length=3'

$curl -X POST https://dnsapi.cn/Record.Ddns -d 'login_token=LOGIN_TOKEN&format=json&domain_id=2317346&record_id=16894439&record_line_id=10%3D0&sub_domain=www'

其中 domain_id=123456 可以换成 domain=yourdomain.com,sub_domain= 记得也修改成你自己的记录
从 Record.List 返回消息中,可以找到你所请求的子域名的 record_id,和该记录所指向的 IP 地址,如果该 IP 值跟你将要设置的 IP 相同,就不要再进行下一步了

如果1小时之内,提交了超过5次没有任何变动的记录修改请求,该记录会被系统锁定1小时,不允许再次修改。比如原记录值已经是 1.1.1.1,新的请求还要求修改为 1.1.1.1。

Record.Ddns value 改成新的 IP 地址,操作成功之后 TTL 会变成 10,此时才变成了真正的「动态域名」

写成 python 脚本:

DNSPod 动态域名设置

.

posted on 2021-06-27 23:41  明天有风吹  阅读(1122)  评论(0编辑  收藏  举报

导航

+V atob('d2h5X251bGw=')

请备注:from博客园