在我工作的大學的資料中心,我們有一個 DNS 系統,用於註冊伺服器名稱和僅供內部使用的服務地址。
通常,我們會使用以下模式:
server A xxx.xxx.xxx.xxx
service CNAME server
現在我們有一個服務,當透過 HTTP 存取時,我們只想解析 CNAME 記錄,而不是 A 記錄。
僅使用 DNS 配置可以嗎?
答案1
對於某些協定(例如http),您可以將服務配置為僅在客戶端指定正確的名稱時才回應;在這種情況下,您可以將 Web 伺服器設定為僅回應包含 CNAME 的 http 要求。根據評論,您已經知道如何執行此操作。
還有一些協議,伺服器仍然不知道客戶端正在使用的名稱,在這種情況下,無法阻止使用者使用 A 記錄中的名稱。
我不相信你可以在 DNS 層做到這一點。 也就是說,如果沒有相應的 A 記錄(對您的用戶端也可見),則沒有可靠的方法可以使 CNAME 對您的用戶端可見並解析為所需的 IP 位址。
你什麼能要做的(我猜這取決於你使用的 DNS 軟體)是有兩個 A 記錄,都指向同一個 IP 位址,即
server A xxx.xxx.xxx.xxx
service A xxx.xxx.xxx.xxx
然後使server
記錄僅對需要存取該記錄的管理人員可見。你不有使用 CNAME 作為服務名稱。唯一的問題是,您有責任確保這兩個名稱的 IP 位址始終相符。
答案2
是的,這是可能的。事實上,無論如何,這是解決問題的第一步。
不過,要實際執行此操作,您(通常)需要繞過作業系統的本機 DNS 解析方法,因為它們(通常)無法停止在 CNAME 記錄處並且不再進行任何進一步解析。我不知道有任何 DNS 解析器庫允許您執行此操作,但我確實知道有一個標準工具可以執行此操作,如果您明確要求查詢類型(或查詢類型,但BIND 的dig
命令將不會遵循 CNAME 記錄)那CNAME
ANY
可能也傳回 A 或 AAAA 記錄,取決於 DNS 伺服器)。