使用python和flask web框架,一个简单的动态dns更新基于http的api。

dyndns的Python项目详细描述


This package on the Python Package IndexContinuous integrationDocumentation Status

关于

dyndns是一个基于http的api 动态更新DNS记录(dyndns)。它使用python和 Flask Web框架来完成此任务。

安装

dyndns安装到目录中 /usr/local/share/python-virtualenv/dyndns使用虚拟 环境。

python3 -m venv /usr/local/share/python-virtualenv/dyndns
source /usr/local/share/python-virtualenv/dyndns/bin/activate
pip3 install dyndns

Flask Web API的工作目录在 /var/www/dyndns.example.com。创建文件 /var/www/dyndns.example.com/dyndns.ini

[uwsgi]module=dyndns.webapp:appmaster=trueprocesses=5socket=/var/www/dyndns.example.com/dyndns.sockchmod-socket=664uid=www-datagid=www-datavacuum=truedie-on-term=true

nginx的配置文件示例: /etc/nginx/sites-available/dyndns.example.com.

server {
    server_name dyndns.example.com;
    listen 80;
    listen [::]:80;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name dyndns.example.com;
    ssl_certificate /etc/letsencrypt/live/dyndns.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/dyndns.example.com/privkey.pem;

    location / {
                    include uwsgi_params;
                    uwsgi_pass unix:/var/www/dyndns.example.com/dyndns.sock;
    }

}

/etc/systemd/system/dyndns-uwsgi.service

[Unit]
Description=uWSGI instance to serve dyndns
After=network.target

[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/dyndns.example.com
Environment="PATH=/usr/local/share/python-virtualenv/dyndns/bin"
ExecStart=/usr/local/share/python-virtualenv/dyndns/bin/uwsgi --ini uwsgi.ini

[Install]
WantedBy=multi-user.target

配置

dyndns需要使用yaml标记语言的配置文件。

dyndns在三个地方查找其配置。它选择 第一个已存在的配置文件,并忽略后面的顺序:

  1. 在环境变量中指定的自定义路径 dyndns_CONFIG_FILE
  2. dyndnsapp(cwd)的当前工作目录: <cwd>/.dyndns.yml
  3. /etc/dyndns.yml
---secret:12345678nameserver:127.0.0.1dyndns_domain:dyndns.example.comzones:-name:example.comtsig_key:tPyvZA==
  • secret:类似密码的秘密字符串。密线必须 至少8个字符长,只有字母 允许。
  • nameserver:名称服务器的IP地址。版本4或 允许版本6。使用127.0.0.1与 同一台计算机上的名称服务器。
  • dyndns_domain:服务于dyndnshttp api的域。这个 键仅在“用法”页中使用。可以省略。
  • zones:至少有一个区域被指定为列表。

用法

dyndns提供两个http web api来更新dns记录。简单的 和更受限的只使用路径段和更灵活的 使用查询字符串。

按路径更新

  1. <your-domain>/update-by-path/secret/fqdn
  2. <your-domain>/update-by-path/secret/fqdn/ip_1
  3. <your-domain>/update-by-path/secret/fqdn/ip_1/ip_2

按查询更新

<your-domain>/update-by-query?secret=secret&fqdn=fqdn&ip_1=1.2.3.4

查询字符串的参数
  • secret:类似密码的秘密字符串。密线必须 至少8个字符长,只有字母 允许。
  • fqdn:完全限定的域名(例如www.example.com)。 如果指定参数fqdn,则不必指定 参数zone_namerecord_name
  • zone_name:区域名(例如example.com)。你必须 指定参数record_name
  • record_name:记录名(例如www)。你必须 指定参数zone_name
  • ip_1:IP地址,可以是版本4或版本6。
  • ip_2:第二个IP地址,可以是版本4或版本6。必须 与ip_1版本不同。
  • ipv4:IP地址版本4。
  • ipv6:IP地址版本6。
  • ttl:是时候活了。默认值为300。

按路径删除

点击此url删除与fqdn对应的dns记录。 IPv4和IPv6条目都被删除。

<your-domain>/delete-by-path/secret/fqdn

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
图像处理Java 8 ImageIO在Linux中无法正确读取JPEG   spring如何用Java 1.4兼容版本替换@Resource注释   java Http请求参数类型传播   在web浏览器中看不到Java Maven Tomcatplugin web应用程序   jvm在Java中使用直接内存的目的是什么?   如何从列表转换为字符串java   java setAdapter gridview发送上下文   SwingJava。方法上的lang.NullPointerException   java什么是shell脚本、makefile和ant文件   当使用getGraphics()方法时,java JPanel图形会闪烁   java如何将迭代转换为递归?   java为什么我的抽屉菜单在同一个XML上有ConstraintLayout时没有响应?   java如何在图像上画一个圆?   Android studio:Rabbitmq:Error:java。lang.ClassNotFoundException:类io。千分尺。果心仪器找不到仪表注册表