動態DNS -- dynamic DNS實作

URL Link //n.sfs.tw/11984

2017-10-27 13:06:50 By 張○○

設定範例

網域 example.com
主機名稱 ddns
IP 163.17.40.100

# named -v
BIND 9.9.4-RedHat-9.9.4-51.el7 (Extended Support Version)

安裝

# yum install bind*

設定

# vi /etc/named.conf

假設要建立網域 example.com,在zone "." IN 下面加入

zone "example.com" {
        type master;
        file "data/example.com.static"; # 建立靜態的內容
        allow-update {127.0.0.1;};    # 開放 127.0.0.1 進行動態更新
        allow-transfer { none; };  # slave 主機,可能一部或多部,若無請寫 none
};

其中檔案 data/example.com.static

# vi /var/named/data/example.com.static

$ORIGIN .
$TTL 43200      ; 12 hours
example.com.             SOA  ddns.example.com. root.dns.example.com. (
                                2017102704 ; serial
                                36000      ; refresh (10 hours)
                                7200       ; retry (2 hours)
                                36000      ; expire (10 hours)
                                43200      ; minimum (12 hours)
                                )
example.com.              NS      ddns.example.com.
ddns.example.com.         A       163.17.40.100

重新啟動

# service named restart

建立腳本檔

# touch dns.script.txt

server 127.0.0.1
update add example.com. 10800 MX 10 ASPMX.L.GOOGLE.COM.
update add proxy.example.com. 10800 CNAME britannica
update add ceag.example.com. 10800 A 140.128.55.100
update add elesson.example.com. 10800 AAAA 2001:288:5400:4::1000
update add wges.example.com. 10800 TXT "google-site-verification=VHi9xhYVUM8IUicq8IRl7Tje-LKc"
send

上面的IP和記錄只是範例

執行你的腳本

# nsupdate -D -v all_dns_script.txt

  -D 是進入 debug mode,執行時才知道大概哪行有問題
  -v 是執行腳本檔,也可以省略

執行完後會多一個 example.com.static.jnl 檔:

  1. 執行完就會生效,不必重啟
  2. jnl 檔可以刪除,若named重啟restart時,jnl會把記錄寫到 example.com.static 中,但reload不會。
  3. 未來若要刪除得使用指令
  4. 重新啟動時,已加入記錄不會消失,得用nsupdate來刪除,除非這時沒有jnl檔
  5. 重覆執行腳本檔不會怎樣,重覆加入不會怎樣

已知的困難

1. 沒辦法清掉設定上的記錄,就算重啟也一樣

2. 無法動態加上zone

指令錯誤訊息

1. 下指令send出現 couldn't get address for 'your.doamin.name': not found 錯誤
可能原因:忘記下 server 127.0.0.1 這個指令

2. 下指令send出現 update failed: NOTZONE 錯誤
可能原因:設定非該網域資料,例如設定的 zone是example.com,要新增example.com,則指令必需打完整的FQDN:
update add example.com 60 A 1.2.3.2

3. 新增的資料沒有出現
可能原因:忘了下達send指令。

4. update failed: NOTAUTH
你修改的網域並不屬於你,可能你在 named.conf中沒有加入這個網域

5. zone x.x.x/IN: journal rollforward failed: not exact
後面的序號比原來的序號小,例如動態增加記錄未寫到靜態檔卻又修改靜態檔

6. zone x.x.x/IN: journal rollforward failed: journal out of sync with zone
靜態檔和動態檔不一致,解決方法:把jnl刪掉放棄動態檔重新載入。

 

參考資料

[1] abelyang@TWNIC http://phorum.study-area.org/index.php?topic=40717.0