2018年11月11日 星期日

『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 的產生。

沒有留言:

張貼留言