为什么要自建 PowerDNS 服务器
本来打算注册个 NS1 的账号去当 DNS 服务器的,结果发现 NS1 现在不给个人用户注册了,就只能先自建一个,等 NS1 开放个人用户注册了
搭建 PowerDNS
为了方便,我这里直接用 Docker-compose 搭建了
version: '2'
services:
db:
image: mariadb:latest
environment:
- MYSQL_ALLOW_EMPTY_PASSWORD=yes
- MYSQL_DATABASE=powerdnsadmin
- MYSQL_USER=pdns
- MYSQL_PASSWORD=mypdns
ports:
- 3306:3306
restart: always
volumes:
- ./pda-mysql:/var/lib/mysql
pdns:
#build: pdns
image: pschiffe/pdns-mysql
hostname: pdns
domainname: computingforgeeks.com
restart: always
depends_on:
- db
links:
- "db:mysql"
ports:
- "53:53"
- "53:53/udp"
- "8081:8081"
environment:
- PDNS_gmysql_host=db
- PDNS_gmysql_port=3306
- PDNS_gmysql_user=pdns
- PDNS_gmysql_dbname=powerdnsadmin
- PDNS_gmysql_password=mypdns
- PDNS_master=yes
- PDNS_api=yes
- PDNS_api_key=secret
- PDNSCONF_API_KEY=secret
- PDNS_webserver=yes
- PDNS_webserver-allow-from=127.0.0.1,10.0.0.0/8,172.0.0.0/8,192.0.0.0/24
- PDNS_webserver_address=0.0.0.0
- PDNS_webserver_password=secret2
- PDNS_version_string=anonymous
- PDNS_default_ttl=1500
- PDNS_allow_notify_from=0.0.0.0
- PDNS_allow_axfr_ips=127.0.0.1
web_app:
image: ngoduykhanh/powerdns-admin:latest
container_name: powerdns_admin
ports:
- "8080:80"
depends_on:
- db
restart: always
links:
- db:mysql
- pdns:pdns
logging:
driver: json-file
options:
max-size: 50m
environment:
- SQLALCHEMY_DATABASE_URI=mysql://pdns:mypdns@db/powerdnsadmin
- GUNICORN_TIMEOUT=60
- GUNICORN_WORKERS=2
- GUNICORN_LOGLEVEL=DEBUG
搭建完成后打开 http://serverip:8080/ 就是你的 PowerDNS Web 界面了
使用 PowerDNS 解析自己的域名
然后注册一个账号,第一个账号默认带管理员权限
首先,我们需要去 Settings-> Zone Records 将 SOA 勾选上(很重要)
之后我们需要去你购买域名的地方添加一个胶水记录,至于什么是胶水记录可以去看 https://laona.dev/post/glue-record/ <存档>
我这里就演示一下我自己的,我的域名是在 Dynadot 买的,可以在 https://www.dynadot.com/zh/account/domain/server/list.html 的右上角点注册域名服务器
然后将你域名的 NS 改成这个就行了
我这里还添加了两个 HE 的服务器,作用我会在之后解释
创建主服务器
创建区域后会自动添加 SOA 记录,我们只需要添加 NS 记录就行
之后就可以添加自己的 DNS 记录了
使用 HE DNS 作为从 DNS 节点
我们自己搭建 DNS 可能会因为各种原因,SLA 会比较低,因此我们还需要一个从 DNS 节点作为备用,这就是我在 NS 记录里添加了 HE DNS 的原因
首先我们需要在 PowerDNS 的配置文件内给 HE 的服务器放行,在首行添加
allow-axfr-ips=216.218.133.2
然后我们只需要去 https://dns.he.net/ 点击 Add a new slave,就可以让 HE DNS 作为从 DNS 节点来同步主 DNS 了,同步频率之类的是通过主 DNS 节点的 SOA 记录来控制的
记录很快就会同步过来,但是我的记录有一些 LUA 记录,因此可能会有点问题
一点点小尾巴
PowerDNS 还有很多更高级的用法,例如 LUA 脚本和 GEO DNS 什么的,大家可以通过 PowerDNS 的官方文档好好学习一下