王米米 發表於 2021-6-27 23:41:00

cloudflare/DNSPod DDNS 动态域名设置

<p>所谓动态域名,就是当你的服务器 IP 地址发生变化的时候,自动地修改你在「域名解析服务商」那里的域名记录值</p>
<p>怎么操作?看官方文档<br>
Use dynamic IP address<br>
Update DNS Record<br>
DNSPod用户API文档</p>
<h1 id="cloudflare">cloudflare</h1>
<pre><code class="language-py">#!/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()


#
</code></pre>
<h1 id="dnspod">DNSPod</h1>
<ol>
<li></li>
</ol>
<p>首先需要创建 Token<br>
完整的 API Token 是由 ID,Token 组合而成的,用英文的逗号分割</p>
<p>用刚创建的 API Token 测试一下:</p>
<pre><code>$curl -X POST https://dnsapi.cn/Info.Version -d 'login_token=LOGIN_TOKEN&amp;format=json'
{"status":{"code":"1","message":"4.6","created_at":"2021-06-27 22:04:23"}}
</code></pre>
<p>code 返回 1 表示「操作成功」,下一步就可以修改记录了</p>
<ol start="2">
<li></li>
</ol>
<p>修改 record 用两个 API 就够了:<br>
记录列表 和 更新动态DNS记录</p>
<p><code>$curl -X POST https://dnsapi.cn/Record.List -d 'login_token=LOGIN_TOKEN&amp;format=json&amp;domain_id=12600793&amp;sub_domain=www&amp;record_type=A&amp;offset=0&amp;length=3'</code></p>
<p><code>$curl -X POST https://dnsapi.cn/Record.Ddns -d 'login_token=LOGIN_TOKEN&amp;format=json&amp;domain_id=2317346&amp;record_id=16894439&amp;record_line_id=10%3D0&amp;sub_domain=www'</code></p>
<p>其中 domain_id=123456 可以换成 domain=yourdomain.com,sub_domain= 记得也修改成你自己的记录<br>
从 Record.List 返回消息中,可以找到你所请求的子域名的 record_id,和该记录所指向的 IP 地址,如果该 IP 值跟你将要设置的 IP 相同,就不要再进行下一步了</p>
<blockquote>
<p>如果1小时之内,提交了超过5次没有任何变动的记录修改请求,该记录会被系统锁定1小时,不允许再次修改。比如原记录值已经是 1.1.1.1,新的请求还要求修改为 1.1.1.1。</p>
</blockquote>
<p>Record.Ddns value 改成新的 IP 地址,操作成功之后 TTL 会变成 10,此时才变成了真正的「动态域名」</p>
<h2 id="写成-python-脚本">写成 python 脚本:</h2>
<p>DNSPod 动态域名设置</p>
<p>.</p>


</div>
<div id="MySignature" role="contentinfo">
    +V why_null 请备注:from博客园<br><br>
来源:https://www.cnblogs.com/hangj/p/14942691.html
頁: [1]
查看完整版本: cloudflare/DNSPod DDNS 动态域名设置