使用 CloudFlare 您自己的动态 DNS

前言

使用 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 进程并重新运行脚本(我懒得用 C# 为 Windows 编写服务):

taskkill /im pythonw.exe

这样就完成了安装和配置,祝您健康。

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

麻省理工学院授权,所以你可以随心所欲地使用这些东西。

PS:我知道这有点像拐杖,但它的工作效果非常好。

更新:11.10.2019年17月37日 XNUMX:XNUMX
我又发现了1个问题,如果有人告诉我如何解决它,我将非常感激。
问题是,如果您在没有 sudo python -m pip install -r ... 的情况下安装依赖项,那么服务用户将看不到这些模块,并且我不想强迫用户在 sudo 下安装模块,这是不正确。
怎样才能让它看起来漂亮呢?
UPD: 11.10.2019/19/16 XNUMX:XNUMX 使用 venv 解决了问题。
发生了一些变化。 下一个版本将在未来几天内发布。

来源: habr.com

添加评论