个人动态域名管理系统. Personal-DDNS.
来源: https://www.cnblogs.com/osnosn/p/10591431.html 来自osnosn博客
写于: 2019-03-24.
简单又实用的动态域名管理系统, 自建动态域名管理系统
使用 bind9 + php + mysql , 创建个人的动态域名系统。
Use bind9 + php + mysql , create a personal ddns server, update by an URL. Only support "A","AAAA","TXT","CNAME" recorder.
项目地址 https://github.com/osnosn/personal-ddns/
条件
- 首先,需要一个有管理权的域名。
- 其次,需要一个有固定IP的服务器。
设置域名 (需域名管理权)
- 在域名商系统中增加一个二级域名,和对应的IP。IP指向你的服务器。
- 比如你拥有的域名是 "mydomain.net"
- 设二级域名
ddns.mydomain.net
- 你可以用类似
abc.ddns.mydomain.net
,xxx.ddns.mydomain.net
作为你的动态域名。
- 设二级域名
- 比如你的服务器IP是"1.1.1.1"
- 在域名商的解析系统中增加这两条记录。(A记录的域名,要与子域"ddns"不同,这里用"ddns2")
ddns2.mydomain.net A 1.1.1.1 ddns.mydomain.net NS ddns2.mydomain.net.
- 比如你拥有的域名是 "mydomain.net"
设置bind9 (需服务器root权限)
- 我用的是centos7
装 bind-chroot-9.4.4
yum install bind-chroot bind-utils
bind老是出漏洞,装个chroot版感觉安全点。 - 修改配置文件 /etc/named.conf
options { listen-on port 53 { 127.0.0.1; any; }; listen-on-v6 port 53 { ::1; any; }; allow-query { localhost; any; }; recursion no; allow-recursion { localhost; }; allow-transfer { localhost; }; }; include "/etc/named.rfc1912.zones";
以上条目,原来有的保留。不相同的就修改。原来没有的就添加。
- 修改/etc/named.rfc1912.zones , 在最后加上:
zone "ddns.mydomain.net" IN { type master; file "dynamic/named.ddns.mydomain.net"; allow-update { localhost; }; };
- 创建文件 /var/named/dynamic/named.ddns.mydomain.net
要求 named 对 dynamic/ 目录有写权限
nsupdate 时会生成 named.ddns.mydomain.net.jnl
named.service stop 时会改写 named.ddns.mydomain.net 文件
如果 /var/named/dynamic目录不存在,就先启动一下 service named-chroot start$TTL 600 ; 10 minutes @ IN SOA ddns2.mydomain.net. email.invalid. ( 1096 ; serial 86400 ; refresh (1 day) 3600 ; retry (1 hour) 604800 ; expire (1 week) 10800 ; minimum (3 hours) ) @ NS ddns2.mydomain.net.
service named-chroot stop;
service named-chroot start;
systemctl enable named-chroot;
- 检查防火墙开放了 udp/53 的访问。
iptables -A INPUT -p udp –dport 53 -j ACCEPT #一般查询用
iptables -A INPUT -p tcp –dport 53 -j ACCEPT # axfr 用
其他设置 (无需root权限。但需要用户权限,设置crontab)
- 看文件 ddns/readme.php
- 大致步骤是,
- 把
ddns/
目录中的东西放到你的网站中。 - 在MySQL中创建数据库,创建一张表,
- 修改配置文件 pdo_new.php, config.php
- 创建一条 crontab 定时任务。2分钟执行一次。
- 测试一下,就能用了。
- 把
安装好之后,创建了对应的动态域名后,客户端的使用
-
如果是 A 记录 或 AAAA 记录
- 自动获取客户端IP(根据来源IP. A需通过ipv4,AAAA需通过ipv6访问)
wget http://www.mydomain.net/ddns/ddns.php?key=xxxxxxxxx&domain=dddd
- 强制指定IP(无所谓ipv4,ipv6网络)
wget http://www.mydomain.net/ddns/ddns.php?key=xxxxxxxxx&domain=dddd&ip=1.1.1.1
wget http://www.mydomain.net/ddns/ddns.php?key=xxxxxxxxx&domain=dddd&ip=FC00:0:130F::9C0:876A:130B
建议每10-15分钟访问一次更新链接。超过60分钟未更新,对应域名重置为"127.0.0.1" 或 "::1"
比如动态域名为
abc.ddns.mydomain.net
其中domain=dddd
可以写为:domain=abc
ordomain=abc.ddns.mydomain.net
其中
key=xxxxxxxxx
是创建动态域名时,生成的对应key。- OpenWRT luci-app-ddns:
- DDNS Service provider 选择 "-- custom --" 自定义
- Custom update-URL:
http://www.mydomain.net/ddns.php?key=[PASSWORD]&domain=[DOMAIN]&ip=[IP]
- Custom update-script:
empty,留空,不填
- Domain: 可以有后缀,也可以没有后缀。
- UserName: 非空, 随便写。如填: "none"
- Password: xxxxxxxxx(key)
- Timer Settings -> Check Interval: 10min,
Force Interval: 40min,
Error Retry Counter: 0,
Error Retry Interval: 60sec(default)
- 自动获取客户端IP(根据来源IP. A需通过ipv4,AAAA需通过ipv6访问)
-
如果是 TXT 记录
- 强制指定TXT内容
wget http://www.mydomain.net/ddns/ddns.php?key=xxxxxxxxx&domain=dddd&ip=20181015abcdefg
- 强制指定TXT内容
-
如果是 CNAME 记录
- 强制指定CNAME内容
wget http://www.mydomain.net/ddns/ddns.php?key=xxxxxxxxx&domain=dddd&ip=abc.123.def.jk
- 强制指定CNAME内容
用 TSIG key 更新域名记录
- TSIG 的测试,是在 debian-11 上完成的。
- 如果这个系统只是自己用。
Web_Server,php,mysql 都可以不要了。只需装好 bind-9。 - 用命令
tsig-keygen -a hmac-sha512 tsig-mykey > /etc/bind/tsig-test.key
创建一个 key。
tsig 只能用 hmac-xxx 的共享密钥,不能使用 rsa,ed448 之类的,非对称密钥。 - 在
/etc/bind/named.conf
最前面加一行include "/etc/bind/tsig-test.key"
- 把配置文件中 allow-update { } 中加入
key "tsig-mykey";
如allow-update { localhost; key "tsig-mykey"; };
allow-transfer { localhost; key "tsig-mykey"; };
- 把 tsig-test.key 拷贝到远程电脑,用 nsupdate 就可以更新这台 dns 服务器的记录了。
如nsupdate -k tsig-test.key update-cmd.txt
转载请注明来源。
来源: https://www.cnblogs.com/osnosn/p/10591431.html 来自osnosn博客
---------------end---------------