RFC8806 為解析器提供本地根服務

2021-10-17 11:23:01 字數 3425 閱讀 1470

一些dns遞迴解析器到最近的dns根伺服器的往返時間比期望的要長;這些解析器可能難以從根伺服器獲得響應,例如在網路攻擊期間。一些dns遞迴解析器運營商希望防止第三方窺探傳送到dns根伺服器的請求。在這兩種情況下,解析器都可以通過在同一臺伺服器上(例如在環迴位址上或在解析器軟體中)提供完整根區域的副本來大大減少往返時間,並防止觀察請求。本文件展示了如何啟動和維護這樣乙個根區域的副本,它不會給dns的其他使用者帶來問題,但代價是會給運營商增加一些操作上的脆弱性。

本文件已替代rfc 7706

dns遞迴解析器必須為客戶端的所有查詢提供答案,即使是那些不存在的網域名稱。對於頂級域(tld)中不存在於遞迴解析器快取中的每個查詢名稱,解析器必須向根伺服器傳送查詢,以獲取該tld的資訊或查明該tld不存在。研究表明,絕大多數轉到根區域的查詢都是針對根區域中不存在的名稱

從遞迴解析器到根伺服器的許多查詢得到的答案都是指向其他伺服器的。惡意的第三方可能會觀察到網路上遞迴解析器和根伺服器之間的流量。

這種設計的主要目標是,在影響根伺服器的網路攻擊期間,為根區域的查詢提供更可靠的答案,並防止查詢和響應在網路上可見。這種設計可能對獲得對存根解析器的更快響應沒有什麼影響,因為大多數頂級解析器的ttl通常是長期存在的(大約一兩天),因此通常已經在遞迴解析器的快取中;對於來自根伺服器的否定答案的ttl也是如此。(儘管設計的主要目標是為根區域服務,但該方法可以用於任何區域。)

本文件描述了一種遞迴解析器操作符在本地擁有完整根區域的方法,並向外部隱藏對根區域的查詢。其基本思想是在與遞迴伺服器相同的主機上建立乙個最新的根區域服務,並在遞迴解析器查詢根資訊時使用該服務。遞迴解析器驗證來自同一主機上根服務的所有響應,就像驗證來自遠端根伺服器的所有響應一樣。

這種設計明確地只允許新的根區域服務在與遞迴解析器相同的伺服器上執行,以防止伺服器向任何其他系統提供權威的答案。具體地說,必須將本地系統上的根服務配置為只回答來自同一主機上解析器的查詢,而不能回答來自任何其他解析器的查詢。

在rfc7706 [rfc7706]發布的時候,它被認為是有爭議的,因為對於這是否是乙個「最佳實踐」並沒有達成共識。事實上,許多人認為這是一種過度冒險的做法,因為它為本地dns操作引入了乙個以前沒有的新的操作部分。從那時起,dns操作社群就開始相信,為單個解析器提供根區域的本地服務是一種合理的做法。上面列出的優點的實現不是無條件的:如果這個新系統不能正常工作,使用者可能會得到壞資料,或者整個遞迴解析系統可能會以難以診斷的方式失敗。

這種設計使用與遞迴解析器執行在同一臺機器上的權威服務。通用開源遞迴解析器軟體不需要新增新功能來充當某些區域的權威伺服器,但其他遞迴解析器軟體可能需要能夠與執行在同一主機上的權威伺服器進行通訊。一些解析器軟體支援同時作為權威伺服器和解析器,但被邏輯「檢視」分開,允許在單個程序中實現本地根;這些例子可以在附錄b中看到。

在[rfc8198]中描述了解決本文件中討論的一些問題的不同方法。

讀者應該熟悉[rfc8499]。

rfc 7706明確要求在執行驗證解析器的主機的loopback介面上執行根伺服器例項。然而,rfc 7706也有如何設定不使用loopback介面的通用軟體的例子。本文件放寬了使用loopback介面的限制,實際上允許使用本地服務,而不一定是權威伺服器。但是,文件保留了這樣的要求:只有執行在單一主機上的系統才能查詢權威的根伺服器或服務

本文件更改了執行本地根服務的用例,使之更符合操作人員使用rfc 7706的理由:

為了實現本文件中描述的機制:

在這裡描述的系統中,針對根的授權伺服器的操作可以與遞迴解析器的操作分開進行,或者它可能是遞迴解析器系統配置的一部分。

設定根區域的步驟如下:

啟動根區域的權威服務,並防止同一主機上除遞迴解析器之外的任何系統訪問該服務。

根區域的內容必須使用來自根區域soa記錄的計時器來重新整理,如[rfc1035]中所述。這本質上意味著本地根區域的內容可能會稍微落後於全域性根伺服器的內容,因為這些伺服器在由notify訊息觸發時被更新。

使用本地權威伺服器作為根區域的系統有可能在soa中的過期時間之前無法重新整理根區域的內容。為根區域使用本地授權伺服器的系統不能為根區域提供過時的資料。為了降低提供過期資料的風險,當本地根伺服器檢測到它將提供狀態資料時,必須立即切換到使用非本地根伺服器。

在為根區域使用內部服務的解析器中,如果在soa中的過期時間之前無法重新整理根區域的內容,那麼解析器必須立即切換到使用非本地根伺服器。

如果重新整理根區域的內容失敗,結果可能是災難性的。例如,有時某一tld的所有ns記錄都在短時間內(如2天)發生改變;如果在此期間破壞了本地根區域的重新整理,則遞迴解析器將為整個tld區域提供壞資料。

使用本文件中的過程的管理員應該有乙個自動的方法來檢查本地根區域的內容是否正在重新整理;這可能是解析器軟體的一部分。做到這一點的一種方法是使用乙個單獨的流程,定期檢查本地根區域的soa,並確保它正在更改。在發布此文件時,根區域的soa是當前日期的數字表示,並附加乙個兩位數的計數器,即使根區域的內容沒有改變,soa也會每天更改。例如,根區在2023年1月2日的soa是2019010201。程序可以使用這個事實來建立本地根區域內容的檢查(使用本文件中沒有指定的程式)。

不遵循第2節中給出的與dnssec相關的要求的系統可能會被欺騙,從而給出錯誤的響應,就像任何遞迴解析器不對遠端根伺服器的響應進行dnssec驗證一樣。任何部署本文件中描述的方法的人都應該熟悉部署dnssec [rfc4033]的操作好處和成本。

如第1節所述,這種設計明確要求根區域資訊的本地副本只能從該主機上的解析器中獲得。這具有限制對任何可能試圖依賴於已更改的根伺服器副本的本地解析器客戶機的損害的安全性屬性。

只要根區域包含驗證所需的所有dnssec記錄,就可以從任何地方檢索根區域。目前,乙個可以得到根區域從icann通過區域轉移axfr [rfc5936]通過tcp從dns伺服器在xfr.lax.dns.icann.org和xfr.cjr.dns.icann.org。根區域檔案可以通過獲取。

目前,axfr還可以通過tcp從以下根伺服器操作符檢索根:

需要注意的是,上述服務都不能保證可用。icann或一些根伺服器操作員可能會關閉上面列出的伺服器上的axfr功能。通過tcp使用axfr到可能是任播的位址(如上所述)可能會由於任播而出現傳輸問題,但目前的實踐表明這種情況不太可能發生。

在發布此文件時,有乙個根區服務處於活動狀態,還有乙個根區服務已經宣布處於規劃階段。本節描述所有已知的活動服務。

localroot ()是乙個實驗性的服務,它體現了本文中的許多想法。它通過axfr分發根區域,並且當localroot系統看到根區域發生更改時,它還提供dns通知訊息。

本節展示了一些流行的遞迴伺服器軟體的配置片段,這些軟體被認為可以正確地實現本文給出的需求。自[rfc7706]發布以來,這些示例已經更新。

本節中的ipv4和ipv6位址是在2023年3月通過測試每個位址在root-servers.net區域中已知的單字母名稱在tcp上的axfr來檢查的。

使用解析器

使用解析器 使用解析器是非常簡單,可以使用它自己的詞法分析器,但是,用fsyacc.exe 產生的解析器總是要求詞法分析器。在這一小節,我們將討論如何使用自己的詞法分析器,以及與解析器聯合。警告記住f 編譯器不能直接使用.fsl 和 fsy 檔案,需要用fslex.exe 和 fsyacc.exe ...

指令碼解析器

指令碼解析器 命令指令碼解析器,自建立一種指令碼語法,解釋執行它。目前指令碼形式類似於命令,沒有變數型別的概念,關鍵字為 if else while break continue 解釋與c語言一樣。上傳 型別 無型別,全為字串看待。作用域 當前大括號中,以及所有子大括號中,退出當前大括號則清除變數。...

網頁解析器

學習任務 1.認識網頁解析器 學習目標 知識目標 1.熟悉網頁解析器 能力目標 1.能夠自主編寫網頁解析器 獲取新url函式 獲取新的url def get new urls self,page url,soup 儲存url new urls set 獲取所有的url 獲取每乙個url new ur...