使用CloudFlare的自定义动态DNS

前言


图片引起关注 为了满足个人需求,他提出了VSphere,我在其上旋转了一个虚拟路由器和一个Ubuntu服务器作为媒体服务器和一堆好东西,并且应该可以从Internet访问该服务器。 但是问题是我的提供程序提供了静态的货币,您总是可以找到一个更有用的应用程序。 因此,我使用了一堆ddclient + cloudflare。

一切正常,直到ddclient停止工作。 经过一番挖掘后,我意识到拐杖和自行车的时间已经到了,因为开始花费太多时间才能发现问题。 最后,一切都变成了一个可以正常工作的小恶魔,但我不再需要它了。
谁在乎-欢迎猫。

二手工具及其运作方式


因此,我在cloudflare网站上了解的第一件事是您需要了解的有关API的所有信息 。 当我突然遇到几乎准备就绪的实现时,我已经坐下来用Python实现一切(了解Python之后,我在一些简单的任务或需要快速制作原型的时候更多地使用它)。
通常,将包装器python-cloudflare作为基础。

我举了一个用于更新DNS的示例,并添加了配置文件的使用以及能够更新区域(当然也包括无限数量的区域)中的多个A记录的功能。

逻辑如下:

  1. 该脚本从配置文件接收区域列表,并在循环中通过它们
  2. 在每个区域中,脚本循环遍历类型A或AAAA的每个DNS记录,并用记录检查公用IP
  3. 如果IP不同,请进行更改;否则,请跳过循环的迭代并继续进行下一个
  4. 在配置中指定的时间入睡

安装与设定


可能可以制作一个.deb软件包,但我对此并不强,也没有那么复杂。
在存储库页面的 README.md中详细描述了该过程。

但是以防万一,我将用俄语概括地描述:

  1. 确保已安装python3和python3-pip,否则请安装(在Windows上,python3-pip与Python一起安装)
  2. 克隆或下载存储库
  3. 安装必要的依赖项。

    python3 -m pip install -r requirements.txt 

  4. 运行安装脚本
    对于Linux:

     chmod +x install.sh sudo ./install.sh 

    对于Windows:windows_install.bat
  5. 编辑配置文件
    对于Linux:

     sudoedit /etc/zen-cf-ddns.conf 

    对于Windows:

    在安装脚本的文件夹中打开zen-cf-ddns.conf文件。

    这是一个普通的JSON文件,设置没有什么复杂的-我专门以示例的方式描述了其中的2个不同区域。

安装程序背后隐藏着什么?


Linux的install.sh:

  1. 创建用户以启动守护程序,而无需创建主目录和登录功能。

     sudo useradd -r -s /bin/false zen-cf-ddns 

  2. 在/ var / log /中创建一个日志文件
  3. 我们成为新创建用户的日志文件的所有者
  4. 文件复制到其位置(/ etc中的配置,/ usr / bin中的可执行文件,/ lib / systemd / system中的服务文件)
  5. 服务已激活

Windows的windows_install.bat:

  1. 将可执行文件和配置文件复制到用户指定的文件夹
  2. 在调度程序中创建任务以在系统启动时运行脚本
    schtasks /create /tn "CloudFlare Update IP" /tr "%newLocation%" /sc onstart

更改配置后,需要重新启动脚本,在Linux中,一切都很简单和熟悉:

 sudo service zen-cf-ddns start sudo service zen-cf-ddns stop sudo service zen-cf-ddns restart sudo service zen-cf-ddns status 

对于Windows,您将必须终止pythonw进程并重新运行脚本(我很懒于在Windows下用C#编写服务):

 taskkill /im pythonw.exe 

在此安装和配置完成之后,请使用您的健康状况。

对于那些不想看最漂亮的Python代码的人,这里是GitHub上存储库

MIT许可证,因此您可以使用此产品做任何想要的事情。

PS:我知道事实证明它有些拐杖,但要一头扎实地应付任务。

UPD:10/10/2019 17:37
我发现了另一个问题,如果有人告诉我如何解决,我将非常感激。
问题是,如果您在不使用sudo python -m pip install -r ...的情况下安装依赖项,则从服务用户下将看不到模块,但是我不想强迫用户在sudo下安装模块,这是不正确的。
如何使其美丽?
UPD:10/11/2019 19:16使用venv解决了问题。
原来有一些变化。 下一天将发布。

Source: https://habr.com/ru/post/zh-CN471102/


All Articles