SRV 記錄
DNS 服務(SRV)記錄是一種規範,用於定義指定服務的伺服器位置,包括主機名和連接埠號。與大多數僅提供伺服器名稱或 IP 位址的 DNS 記錄不同,SRV 記錄同時包含目標伺服器和服務執行的具體連接埠,以及用於負載平衡和故障轉移的優先級和權重值。
How it works
SRV 記錄允許應用程式在域中發現服務,無需手動設定。它們通常用於需要指定特定連接埠的服務,如 VoIP、即時通訊(XMPP)、電子郵件(SMTP)和目錄服務(LDAP)。透過查詢 SRV 記錄,客戶端可以自動找到服務的正確伺服器和連接埠。
SRV 記錄包含四個控制服務路由和負載平衡的關鍵值:
**記錄格式:**
SRV 記錄遵循格式:
_service._proto.name
- _service:服務的符號名稱(例如 _xmpp、_sip、_ldap)
- _proto:傳輸協議(通常是 _tcp 或 _udp)
- name:域名
示例:_xmpp._tcp.example.com
**優先級(數值越低 = 優先級越高):**
客戶端應首先聯絡優先級值最低的伺服器。如果該伺服器不可用,則回退到優先級值較高的伺服器。例如,如果您有優先級為 10、20 和 30 的伺服器,無論權重值如何,始終首先嘗試優先級為 10 的伺服器。
**權重(負載平衡):**
當多個伺服器具有相同優先級時,權重決定每個伺服器應接收的流量比例。權重是相對值 - 如果三個具有相同優先級的伺服器的權重分別為 60、30 和 10(總計 100),它們將分別接收大約 60%、30% 和 10% 的請求。
**連接埠:**
服務在目標伺服器上執行的 TCP 或 UDP 連接埠號。這是 SRV 記錄的獨特之處 - 它們同時指定主機和確切連接埠。
**目標:**
提供服務的伺服器主機名。這必須是 A 或 AAAA 記錄(而不是 CNAME)。Key Points
- 與其他 DNS 記錄不同,SRV 記錄同時包含主機名和連接埠號
- 格式為
_service._proto.name(例如_xmpp._tcp.example.com) - 優先級決定聯絡順序(數字越小越優先),權重決定相同優先級之間的負載分配
- 常用於 VoIP、即時通訊、電子郵件和目錄服務
- 目標必須指向具有 A 或 AAAA 記錄的主機名,而不是 CNAME
Common Use Cases
- VoIP 和 SIP 服務: SIP(會話起始協議)使用 SRV 記錄來定位 VoIP 伺服器,允許客戶端自動發現用於語音通話的正確伺服器和連接埠
- 即時通訊(XMPP/Jabber): XMPP 服務使用 SRV 記錄實現聯合訊息傳遞,允許伺服器發現並連接到其他 XMPP 伺服器
- Microsoft Active Directory: Active Directory 廣泛使用 SRV 記錄進行服務發現,允許客戶端查找網域控制站、LDAP 伺服器和 Kerberos 服務
- 電子郵件提交:
_submission._tcpSRV 記錄可以指定郵件提交服務連接埠,補充電子郵件設定中的 MX 記錄
code SRV 記錄設定範例
| Type | Host / Name | Value / Points to | TTL |
|---|---|---|---|
| SRV | _xmpp._tcp | 10 60 5222 server1.example.com | 3600 |
| SRV | _xmpp._tcp | 10 40 5222 server2.example.com | 3600 |
| SRV | _xmpp._tcp | 20 0 5222 backup.example.com | 3600 |
| SRV | _sip._tcp | 10 0 5060 voip.example.com | 3600 |
* SRV 記錄指定服務、協議、優先級、權重、連接埠和目標。優先級越低 = 優先級越高。
Frequently Asked Questions
SRV 記錄中的優先級和權重有什麼區別?expand_more
優先級決定首先聯絡哪些伺服器 - 客戶端始終首先嘗試優先級值最低的伺服器。權重僅在具有相同優先級的伺服器之間起作用,決定每個伺服器應接收的流量比例。例如,如果伺服器 A 的優先級為 10,伺服器 B 和 C 的優先級為 20,則無論任何權重值如何,始終首先嘗試伺服器 A。只有當伺服器 A 不可用時,權重才會在選擇 B 和 C 之間發揮作用。
為什麼目標不能是 CNAME?expand_more
根據 DNS 規範(RFC 2782),SRV 記錄的目標必須是具有 A 或 AAAA 記錄的主機名,而不是 CNAME。這是因為允許 CNAME 會產生額外的查詢複雜性和潛在的循環依賴。如果您需要指向不同的主機名,請先為目標主機名建立 A 記錄,然後將 SRV 記錄指向該 A 記錄。
我的網站需要 SRV 記錄嗎?expand_more
不需要,標準網站不使用 SRV 記錄 - 它們使用 A 記錄或 CNAME 記錄。SRV 記錄用於需要同時指定主機名和連接埠號的特定服務,如 VoIP(SIP)、即時通訊(XMPP)、電子郵件提交或目錄服務(LDAP)。如果您只是託管網站,只需要 A/AAAA 記錄和可能的 CNAME 記錄。
應用程式如何知道要查找 SRV 記錄?expand_more
支援 SRV 記錄的應用程式經過專門編程以查詢它們。例如,為 user@example.com 設定的 XMPP 客戶端將自動查詢
_xmpp-client._tcp.example.com SRV 記錄以查找訊息伺服器。應用程式根據其功能知道要查找的服務名稱和協議。並非所有應用程式都支援 SRV 記錄 - 必須在軟體中明確構建支援。我可以將 SRV 記錄用於 HTTP/HTTPS 服務嗎?expand_more
雖然在技術上可行,但 SRV 記錄通常不用於 HTTP/HTTPS,因為 Web 瀏覽器預設不查詢 SRV 記錄。瀏覽器期望網站可以在 URL 中主機名的標準連接埠(HTTP 為 80,HTTPS 為 443)上存取。SRV 記錄最適合客戶端應用程式設計用於查詢它們的服務,如 VoIP 客戶端、訊息客戶端或企業軟體。