• Synology DDNS 配置


    记录下,自己折腾了半天。

    首先方案1:

      我使用的是synology自己的DDNS,那个简单。注册填写即可。

    方案2:

      使用自己的域名,我使用的是dnspod.cn的。

      没有可以直接注册的地方,也没有可以直接使用的。

      查看DNSPOD的资料后,发现是可以通过命令来执行的。但是本人比较懒,不想每次开机执行或者别的方式。

      所以最终结合Synology的计划任务来执行。

      以下Synology操作均在admin(管理员)下进行;

      为了节约时间,在Synology中先开始安装Python(Python/Python3 自己选择,我安装的是Python3);

      

      首先,

      没有疑问的是注册dnspod,拥有自己的域名,比如:g.cn;修改域名解析,添加A记录啥的,我就不详细写了。(不会的可以翻墙google)

      最终结果,域名下面增加的是:

          

      

     

      

      然后,看资料都说需要使用XX命令,来获取域名ID,子域名ID,但发现API好像有修改;所以,我又偷懒了,使用了DNSPOD的工具;

         dnspod的api地址:  https://support.dnspod.cn/Support/api

      我下载的是:官方客户端 。

      然后就是简单的登陆。

      登陆后:

      找到相应域名(g.cn),后面的id就是我们的域名id(29)。

      编辑g.cn。找到我们要配置的子域名(nas);

          

      nas域名的id为49.

      以上记录留下。

        不管python有没有安装好。我们都可以继续下面的事情。

      保存Python的脚本,保存文件名为DnspodDDns.py:

      安装Python的保存:

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    
    import httplib, urllib
    import socket
    import time
    
    params = dict(
        login_email="g@gmail.com", # 替换你的邮箱帐号
        login_password="GoogleBye", # 替换你的密码
        format="json",
        domain_id=29, # 替换你的DomainID
        record_id=49, # 替换你的RecordID
        sub_domain="nas", # 替换你的子域名
        record_line="默认",
    )
    current_ip = None
    
    def ddns(ip):
        params.update(dict(value=ip))
        headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/json"}
        conn = httplib.HTTPSConnection("dnsapi.cn")
        conn.request("POST", "/Record.Ddns", urllib.urlencode(params), headers)
        
        response = conn.getresponse()
        print response.status, response.reason
        data = response.read()
        print data
        conn.close()
        return response.status == 200
    
    def getip():
        sock = socket.create_connection(('ns1.dnspod.net', 6666))
        ip = sock.recv(16)
        sock.close()
        return ip
    
    if __name__ == '__main__':
        try:
            ip = getip()
            print ip
            if current_ip != ip:
                if ddns(ip):
                    current_ip = ip
        except Exception, e:
            print e
            pass
        
    Python

      安装Python3的保存:

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    
    import http.client, urllib
    from urllib.parse import urlencode
    import socket
    import time
    
    params = dict(
        login_email="g@gmail.com", # 替换你的邮箱帐号
        login_password="GoogleBye", # 替换你的密码
        format="json",
        domain_id=29, # 替换你的DomainID
        record_id=49, # 替换你的RecordID
        sub_domain="nas", # 替换你的子域名
        record_line="默认",
    )
    current_ip = None
    
    def ddns(ip):
        params.update(dict(value=ip))
        headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/json"}
        conn = http.client.HTTPSConnection("dnsapi.cn")
        conn.request("POST", "/Record.Ddns", urlencode(params), headers)
        
        response = conn.getresponse()
        print (response.status, response.reason)
        data = response.read()
        print (data)
        conn.close()
        return response.status == 200
    
    def getip():
        sock = socket.create_connection(('ns1.dnspod.net', 6666))
        ip = sock.recv(16)
        sock.close()
        return ip
    
    if __name__ == '__main__':
        try:
            ip = getip()
            print (ip)
            if current_ip != ip:
                if ddns(ip):
                    current_ip = ip
        except Exception as e:
            print (e)
            pass
        
    Python3

      保存成功后,上传至Synology,我这边就保存在了admin的home根目录,所以路径为(/volume1/homes/admin/DnspodDDNS.py)。

      

      如过上传至其他目录,右击文件名->查看属性,可以查看到所在位置,记录下来备用:

      

      

      

       打开,Synology的“控制面板”,找到”计划任务"

      

      打开后,新增“用户定义的脚本”。

      任务名称:任意,这里输入的是(DNSPOD DDNS);

      用户账户:默认;

      用户定义的脚本: python + 路径(就是上午记录的py所在位置)

        如过Synology安装的是Python 。命令为:python /volume1/homes/admin/DnspodDDNS.py  

                 如过安装的是Python3。命令为:python3 /volume1/homes/admin/DnspodDDNS.py

      图为Python3的例子:

      

      修改计划:

      

      确定,保存成功。在“计划任务”上,选择我们的任务,点击顶部导航的“运行”。

      

      运行完成后,到dnspod上查看,我们子域名的ip是否已经修改为我们所期望的ip。

    注:

      因为,我的Python代码内部并没有重复。所以每小时只会运行一次。

      也就是说,可能出现IP变动一小时后才能更新上DNSPOD;

      如过又需要,可以在Python中,增加死循环脚本:

      最后Python3 版,最后部分代码如下:

    if __name__ == '__main__':
        while True:
            try:
                ip = getip()
                print (ip)
                if current_ip != ip:
                    if ddns(ip):
                        current_ip = ip
            except Exception as e:
                print (e)
                pass
            time.sleep(30)
    Python3 死循环最后部分

      

      完。

      

      

  • 相关阅读:
    linux解压缩各种命令
    memset
    STRUCT_OFFSET( s, m )宏
    请问这个宏是什么意思 #define NOTUSED(v) ((void) v)?
    typedef特殊用法:typedef void* (*fun)(void*)
    localtime、localtime_s、localtime_r的使用
    Git使用(一)
    【转】linux gcc _attribute__((weak)) 简介及作用
    我的技术博客
    .net 4.0(2.0)“检测到有潜在危险的 Request.Form 值”的解决方法
  • 原文地址:https://www.cnblogs.com/lingfengchencn/p/3783826.html
Copyright © 2020-2023  润新知