『Linux』什麼是 DNS SRV 軟體安裝/設定教學

歡迎分享:
  •  
  •  
  •  
  •  
  •  
  •  

 

建立 XMPP 測試環境時,遇到的第一個問題就是 XMPP server 的 FQDN 名稱解析,根據定義 XMPP 的 RFC 6120 指出,FQDN 名稱解析會優先使用 DNS SRV (RFC 2782),本文將以 bind9 來實做 DNS SRV。

FQDN: Fully Qualified Domain Name
RR: Resource Record

在實做之前先來談談一般 client 是如何找到 server,可能情形有
1. 已經知道確切的 server IP address
2. 知道 server 的 FQDN,透過 DNS 取得 IP address
3. 使用 broadcast 方式去詢問,例如:DHCP discover

而 DNS SRV 是一種取得 server FQDN 的方法,用 service name, 使用的協定 (ex: TCP/UDP) 與 domain name 來詢問 DNS server,以得知 domain 裡支援此服務之 server(s) 的 FQDN,取得的 FQDN 可能不只一個。

接著根據 DNS SRV response 的 additional section 內含之資訊有兩種可能
1. 包含 FQDN 的 IP address,不需再詢問 DNS server
2. 不包含,所以需要再用 FQDN 去詢問 DNS server 以取得 IP address

用一句節錄自 RFC 2782 的敘述來說明 DNS SRV RR 的用途
The SRV RR allows administrators to use several servers for a single domain, to move services from host to host with little fuss, and to designate some hosts as primary servers for a service and others as backups.

SRV RR 允許管理者在單一個 domain 裡使用多個 server(s)(多個 servers 提供相同服務),當提供服務的主機換成另外一台主機時,還能夠維持良好的使用者體驗,且能指定某些主機做為服務的主要 servers 而其他主機做為備份 servers。

Bind9 設定實例

DNS SRV RR 的 format 如下
_Service._Proto.Name TTL Class SRV Priority Weight Port Target

底下是 bind9 的 SRV RR 實例 (domain 以 example.com 為例)
_xmpp-client._tcp IN SRV 0 5 5222 xmpp.example.com
_xmpp-server._tcp IN SRV 0 5 5269 xmpp.example.com

對應到 DNS SRV RR 的格式如下
_Service._Proto Class SRV Priority Weight Port Target

安裝設定步驟 (以 Ubuntu 為例)
1. 安裝 bind9

apt-get install bind9

2. 建立 db.example.com

cd /etc/bind/
cp db.empty db.example.com

3. 設定 db.example.com

把 db.example.com 中的 localhost 都取代成 example.com
再將上面兩行實例加入 db.example.com
還要新增對應的 A RR or AAAA RR

4. 新增 zone

將底下四行加入 named.conf.local

zone “example.com” {
type master;
file “/etc/bind/db.example.com”;
};

5. 重啟 bind9

service bind9 restart

測試 DNS SRV

此處使用 dig 指令來做測試

dig -t SRV _xmpp-client._tcp.example.com

從 dig 輸出可以看到查到的 FQDN 是 xmpp.example.com 且 additional section 還有包含 xmpp.example.com 的 IP address

補充
DNS SRV(RFC 2782)指出 SRV RR 的 service name 由 RFC 1700 定義,但 RFC 6335 (RFC 2782 的 update) 提到 DNS SRV 並沒有指出是 RFC 1700 的哪個章節有定義,且 IANA 也沒有分配 service name 的程序,造成不受 IANA 管理的非正式 service name 的產生。