zoukankan      html  css  js  c++  java
  • dnspod 动态域名的使用。openwrt使用dnspod动态域名解析。

    这里主要说的是linux shell下的使用。

    先看接口说明:

    接口地址:
    HTTP请求方式:
    • POST
    请求参数:
    • 公共参数
    • domain_id 或 domain, 分别对应域名ID和域名, 提交其中一个即可
    • record_id 记录ID,必选
    • sub_domain 主机记录,如 www
    • record_line 记录线路,通过API记录线路获得,中文,比如:默认,必选
    • record_line_id 线路的ID,通过API记录线路获得,英文字符串,比如:‘10=1’ 【record_line 和 record_line_id 二者传其一即可,系统优先取 record_line_id】
    • value IP地址,例如:6.6.6.6,可选
    响应代码:
    • 共通返回
    • -15 域名已被封禁
    • -7 企业账号的域名需要升级才能设置
    • -8 代理名下用户的域名需要升级才能设置
    • 6 域名ID错误
    • 7 不是域名所有者或没有权限
    • 8 记录ID错误
    • 21 域名被锁定
    • 22 子域名不合法
    • 23 子域名级数超出限制,比如免费套餐域名不支持三级域名
    • 24 泛解析子域名错误,比如免费套餐载名不支持 a*
    • 25 轮循记录数量超出限制,比如免费套餐域名只能存在两条轮循记录
    • 26 记录线路错误,比如免费套餐域名不支持移动、国外
    注意事项:
    • 如果1小时之内,提交了超过5次没有任何变动的记录修改请求,该记录会被系统锁定1小时,不允许再次修改,所以在开发和测试的过程中,请自行处理IP变动,仅在本地IP发生变动的情况下才调用本接口。
    • 如何理解没有任何变动的记录修改请求?比如原记录值已经是 1.1.1.1,新的请求还要求修改为 1.1.1.1。

    示例:

    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%3D3&sub_domain=www'



    首先你要去注册域名,freenom有免费的顶级域名。随便注册一个,改DNS服务器为dnspod的。

    把ns服务器改为dnspod的免费服务器,土豪尽管去dnspoe注册.com,使用收费服务器。

    等待大概24小时生效。

    到DNSPOD登记注册,你已经注册的域名。

    在DNSPOD开启token

    API Token 生成方法详见:https://support.dnspod.cn/Kb/showarticle/tsid/227/,完整的 API Token 是由 ID,Token 组合而成的,用英文的逗号分割

    记下ID TOKEN,token以后是不会显示的,一定记清楚,推荐记在keepass,我在用的密码管理软件。

    我添加了一条home的记录,记录类型为A.

    原来是用客户端获取一些信息,客户端也找不到了,那就用API吧。

    这是wget的一个更新动态域名的命令。所有的***根据你的情况填写。

    wget  --no-check-certificate --post-data "login_token=*****,*********************&format=json&domain_id=******&record_id=******&record_line_id=10=0&sub_domain=****" https://dnsapi.cn/Record.Ddns

    这是curl的一个更新动态域名的命令。所有的***根据你的情况填写。

    curl -X POST https://dnsapi.cn/Record.Ddns  -d 'login_token=*****,*********************&format=json&domain_id=******&record_id=******&record_line_id=10=0&sub_domain=****'

    login_token=完整的 API Token 是由 ID,Token 组合而成的,用英文的逗号分割
    domain_id= 6217161     域名的ID
    record_id=32837409     子域的ID
    sub_domain=home       子域的名字
    record_line_id=10=0  线路电信

    获取基本信息,验证token配置正确:

    wget --no-check-certificate --post-data "login_token=****,********************&format=json" https://dnsapi.cn/Info.Version
    curl -X POST https://dnsapi.cn/Info.Version  -d 'login_token=****,********************&format=json'

    wget会保存一个文件

    curl直接输出在屏幕

    这个json串,可以在线解析一下,方便看:

    https://www.bejson.com/

    获取域名列表

    wget --no-check-certificate --post-data "login_token=****,********************&format=json" https://dnsapi.cn/Domain.List
    curl -X POST https://dnsapi.cn/Domain.List -d 'login_token=****,********************&format=json'

    再去解析

    这个ID,就是你的domain_id

    获取域名列表

    wget --no-check-certificate --post-data 'login_token=****,********************&format=json&domain_id=62171614' https://dnsapi.cn/Record.List
    curl -X POST https://dnsapi.cn/Record.List -d 'login_token=****,********************&format=json&domain_id=62171614'

    解析后,找到要动态解析的子域id,或者说要用的域名的id,子域的名字

    我这里找的是home,就是给家里的路由找个动态域名,出门在外也能找到回家的路。

    login_token=
    domain_id= 62171614
    record_id=328374092
    sub_domain=home
    现在我们关心的数据都查出来了,重新组合一下:

    wget --no-check-certificate --post-data "login_token=**,********,41a8ac7ce3039d8e7eb087ff534763d1&format=json&domain_id=62171614&record_id=328374092&record_line_id=10=0&sub_domain=home" https://dnsapi.cn/Record.Ddns
    curl -X POST https://dnsapi.cn/Record.Ddns -d "login_token=**,********&format=json&domain_id=62171614&record_id=328374092&record_line_id=10=0&sub_domain=home"

    在命令行里访问一下,看你的域名解析是不是已经变成你的IP了。

    只是record_line_id没有说明,只写了个10=0。我也没怎么理解它是什么意思。难道是类似于CDN加速的东西?

    我是电信线路,就先写上电信的ID了。

    "line_ids": {
            "默认": 0,
            "国内": "7=0",
            "国外": "3=0",
            "电信": "10=0",
            "联通": "10=1",
            "教育网": "10=2",
            "移动": "10=3",
            "百度": "90=0",
            "谷歌": "90=1",
            "搜搜": "90=4",
            "有道": "90=2",
            "必应": "90=3",
            "搜狗": "90=5",
            "奇虎": "90=6",
            "搜索引擎": "80=0"
        },

    在路由上尝试一下这个shell命令

    晕吧

    wget不支持https

    curl没有这个命令

    安装吧。

    openwrt--系统--软件包--过滤器--wget   

    wget

    wget-nossl

    安装wget,就可以实现使用wget这个命令来更新ddns

    安装curl 就可以使用curl命令

    不过openwrt的curl还要加一个-k参数,忽略证书。

    下面说怎么在openwrt中使用这个,创建/etc/hotplug.d/iface/30-dnspod.sh
    文件内容如下
    #!/bin/sh
    #!/bin/sh
    # wan ifup
    [ $ACTION = "ifup" -a $INTERFACE = "wan" ]
    
    curl -X POST https://dnsapi.cn/Record.Ddns -k -d "login_token=***,****&format=json&domain_id=62171614&record_id=328374092&record_line_id=10=0&sub_domain=home"
    curl命令中增加了-k,或略服务器HTTPS效验
    #!/bin/sh
    # wan ifup
    [ $ACTION = "ifup" -a $INTERFACE = "wan" ]
    
    wget  --no-check-certificate --output-document=/dev/null --post-data "login_token=***,******&format=json&domain_id=62171614&record_id=328374092&record_line_id=10=0&sub_domain=home" https://dnsapi.cn/Record.Ddns

    wget命令中增加了--output-document=/dev/null,不保存返回文件。

     

    这个意思就是WAN口上线30秒以后,执行这个wget请求,请求到dnspod的ddns更新接口,就实现了注册。

  • 相关阅读:
    UVA11584 划分成回文串
    UVA1220Party at Hali-Bula(树的最大独立集 + 唯一性判断)
    BUAA1389愤怒的DZY(最大值最小化)
    九度1502 最大值最小化问题
    App(4.25)
    App(4.24)
    App(4.23)
    App(4.22)
    学习进度条(八)
    App(4.21)
  • 原文地址:https://www.cnblogs.com/jackadam/p/8192843.html
Copyright © 2011-2022 走看看