使用python和flask web框架,一个简单的动态dns更新基于http的api。
dyndns的Python项目详细描述
关于
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在三个地方查找其配置。它选择 第一个已存在的配置文件,并忽略后面的顺序:
- 在环境变量中指定的自定义路径 dyndns_CONFIG_FILE
- dyndnsapp(cwd)的当前工作目录: <cwd>/.dyndns.yml
- /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记录。简单的 和更受限的只使用路径段和更灵活的 使用查询字符串。
按路径更新
- <your-domain>/update-by-path/secret/fqdn
- <your-domain>/update-by-path/secret/fqdn/ip_1
- <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_name和record_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