zoukankan      html  css  js  c++  java
  • 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 死循环最后部分

      

      完。

      

      

  • 相关阅读:
    leetcode 673. 最长递增子序列的个数 java
    leetcode 148. 排序链表 java
    leetcode 98. 验证二叉搜索树 java
    leetcode 29. 两数相除 java
    leetcode 234. 回文链表 java
    Valid Palindrome LeetCode Java
    Single Number II LeetCode Java
    Single Number LeetCode java
    Search in Rotated Sorted Array II LeetCode Java
    Search in Rotated Sorted Array leetcode java
  • 原文地址:https://www.cnblogs.com/lingfengchencn/p/3783826.html
Copyright © 2011-2022 走看看