2016年11月15日 星期二

在PowerDNS 4.x設置fake domain

情境:需要在某個正式運行的網域做測試,但又不能直接在上頭修改,雖然可以用ISC BIND去做這些事,但是又需要在網域頂層(apex domain,例如example.org)設置CNAME,而RFC又不允許…。

解:使用PowerDNS 4.x

PowerDNS 4之後開始支援Alias,可以在網域頂層設置類似CNAME的Alias。在文件中提到,要使用Alias需要在pdns.conf中設置recursor這項,指定遞迴查詢的名稱伺服器, 但是這會有個副作用,假設PowerDNS有一筆紀錄是
aaa.example.org. IN CNAME bbb.example.org.
但是在正式運作的網域裡頭,有設置一筆A record
aaa.example.org. IN A xxx.xxx.xxx.xxx
用DNS查詢工具去查詢PowerDNS有關aaa.example.org的紀錄時,只會得到A record而不會出現CNAME。要解決這個問題,需要安裝PowerDNS Recursor。詳細設定如下:

pdns.conf(PowerDNS的設定檔)
recursor=127.0.0.1:5300 #指定查詢的DNS為本機上安裝的PowerDNS Recursor。

recursor.conf(PowerDNS Recursor的設定檔)
local-address=[::1] 127.0.0.1 #如果沒用到IPv6可以把[::1]拿掉
local-port=5300 #預設是53,會跟已安裝的PowerDNS衝突
forward-zones=example.org=127.0.0.1 #轉送查詢的網域與伺服器,格式是 網域=伺服器ip,多個網域以逗點分隔
要使用forward-zones而不是forward-zones-recurse,如同字面上的意思forward-zones-recurse會進行遞迴查詢而導致迴圈。