--
用 DNS 偵測服務異常切換是否可行?
如以下這個提問
從很久以前 Hoyo 就在找這個問題的答案,可惜的是遇人不淑全部的人都說這是不可能的 (到 2023 年 2 月),直到有一天好奇 DNS Server 是否有資料庫版本,這樣就可以直接修改資料庫來設定,設定 SSL 通配網域就簡單多了。這讓 Hoyo 找到了 PowerDNS,這才覺得自己花了快 20 年用 BIND 都是在浪費生命
PowerDNS 讓多機備援輕鬆的變成可能,原來的系統架構完全不需要改變就可以加上備援等功能,從現在開始拋棄 BIND 吧。
--
參考資源
- 【工具】PowerDNS最新4.6版的安装及使用
- [開源] PowerDNS 架設
- Getting Started — PowerDNS Recursor documentation
- Installing PowerDNS (With MySQL Backend) And Poweradmin On Debian Etch
- Easily Install and Setup PowerDNS on Ubuntu 20.04
--
安裝
1 |
apt-get install pdns-recursor |
1 |
apt-get install pdns-server pdns-backend-mysql |
匯入 PowerDNS 需要的資料庫結構
1 |
mysql -u root -p powerdns < /usr/share/pdns-backend-mysql/schema/schema.mysql.sql |
Hoyo 忘記當時為什麼不使用 docker 版本要直接安裝在主機上,可能是當時官方的 docker 看起來很奇怪!?
--
設定
/etc/powerdns/pdns.d/gmysql.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
api=yes webserver=yes webserver-address=0.0.0.0 webserver-allow-from=0.0.0.0/0 api-key=xxxx_yyyy_0000 daemon=no guardian=no local-address=0.0.0.0 logging-facility=0 loglevel=4 launch+=gmysql gmysql-host=172.16.1.169 gmysql-port=3306 gmysql-user=root gmysql-password=root gmysql-dbname=powerdns |
--
錯誤檢查
檢查 webserver api
1 |
# curl -v -H 'X-API-Key: hoyo' http://172.16.1.169:8081/api/v1/servers/localhost |
檢查網域設定
1 |
# pdnsutil check-zone hoyo.idv.tw |
--
使用 pdnsutil 指令管理
增加 record
1 |
# pdnsutil add-record hoyo.idv.tw A 172.168.1.100 |
新增 TXT 需要注意使用單引號包住雙引號的內容
1 |
pdnsutil add-record hoyo.idv.tw blog TXT '"google-site-verification=xxxxxxx"' |
-
PowerDNS-Admin
- GitHub - PowerDNS-Admin/PowerDNS-Admin: A PowerDNS web interface with advanced features
- ngoduykhanh/powerdns-admin
1 2 3 |
docker run --name phpmyadmin -p 8900:80 -e PMA_ARBITRARY=1 -d phpmyadmin:5.2.0-apache docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0.29 docker run --name poweradmin -p 9191:80 -d ngoduykhanh/powerdns-admin:latest |
第一次使用使用「Create an account」建立第一個帳號
進入後到 Settings → PDNS 設定連線資訊
- PDNS API URL : 設定 PowerDNS 主機
- PDNS API KEY : key 設定在 /etc/powerdns/pdns.d/gmysql.conf 內
成功的話,進入 PDNS 應該可以看到主機運作狀態
--
RRset blog.hoyo.idv.tw. IN A: Conflicts with pre-existing RRset
PowerDNS 有一個 bug:CNAME 的網址設定 TXT 是無法查詢的,必須設定為 A 才行,可是 PowerDNS-Admin 會檢查相同 IP 必須使用 CNAME,因此必須直接到資料庫修改
--
--
- 【网络】PowerDNS的安装和使用:1.安装
- 【网络】PowerDNS的安装和使用:2.主从
- 【网络】PowerDNS的安装和使用:3.动态解析
- 【网络】PowerDNS的安装和使用:4.递归
- PowerDNS Lua Records
1 |
# pdnsutil get-meta hoyo.idv.tw |
1 2 3 4 5 6 |
Jul 22 07:05:39 [bindbackend] Parsing 0 domain(s), will report when done Jul 22 07:05:39 [bindbackend] Done parsing domains, 0 rejected, 0 new, 0 removed Metadata for 'hoyo.idv.tw' API-RECTIFY = 1 ENABLE-LUA-RECORDS = 1 SOA-EDIT-API = DEFAULT |
啟用 LUA
1 |
# pdnsutil set-meta hoyo.idv.tw ENABLE-LUA-RECORDS 1 |
1 2 3 |
Jul 22 07:05:36 [bindbackend] Parsing 0 domain(s), will report when done Jul 22 07:05:36 [bindbackend] Done parsing domains, 0 rejected, 0 new, 0 removed Set 'hoyo.idv.tw' meta ENABLE-LUA-RECORDS = 1 |
增加紀錄
1 |
ifportup(80, {'172.16.1.205', '172.16.1.209', '172.16.1.100'}) |
PowerDNS 會以 80 port 為判斷依據,80 port 不回應就不提供解析,所以 ping 也只能 ping 到 80 port 正常的網站
1 |
"ifportup(80, {'172.16.1.205', '172.16.1.209', '172.16.1.100'}, {timeout=5})" |
--
--
1 |
# apt install pdns-tools |
--
Failed to start PowerDNS Authoritative Server
查看錯誤訊息,必須使用 stop & start 才看得到真實的錯誤
1 2 3 |
sudo systemctl stop pdns sudo systemctl start pdns sudo journalctl -xeu pdns.service |
然後才發現是 systemd-resolved 佔用了 UDP 53 port
1 |
vi /etc/systemd/resolved.conf |
1 2 |
[Resolve] DNSStubListener=no |
重新啟動 systemd-resolved.service 服務
1 |
systemctl restart systemd-resolved.service |
重新啟動 PowerDNS 服務
1 |
sudo systemctl start pdns |
--
529 total views, 2 views today