Linux

私有和經過身份驗證的 DNS

  • April 9, 2018

我嘗試線上搜尋,但我只是被一堆不相關的結果淹沒,我想要實現的目標基本上是一個受密碼保護的動態 DNS 伺服器。

例如,假設我擁有一個域example.com,我想創建一個子域mypc.example.com(雖然不僅僅是一個),該子域僅適用於具有特定密鑰的手機(Android/iOS)和 PC(Windows、Linux),那些沒有該密鑰的機器一定無法解析IP。基本上是動態 DNS 服務的私有替代品。

另一個例子,只是為了進一步澄清,以相同的域,我想讓我的 Android 手機總是以 name 發布它的 IP phone.example.com

我考慮過創建 cron 作業,向我的伺服器發送消息以更新某些A記錄,但是任何知道子域的人都可以監視我:P。解決方案是隨機子域,但是當我真正需要它們時,這些是不可能記住的。私人本地 DNS 伺服器也可以在家中進行此操作,但在其他任何地方都不允許。

誰能建議我如何為自己建立這樣的服務?

(如果查詢是加密的,這樣回复就不會被攔截/篡改,那就更好了)

例如,假設我擁有一個域 example.com,我想創建一個子域 mypc.example.com(雖然不僅僅是一個),它僅適用於那些手機 (Android/iOS) 和 PC (Windows, Linux)具有特定密鑰的**機器,那些沒有該密鑰的機器一定無法解析 IP。**基本上是動態 DNS 服務的私有替代品。

重點是我的。有了這句話,您的問題就偏離了關於 DNS 的問題。您正在尋找與 DNS 類似但不是 DNS 的東西。

DNS 中的安全機制主要集中在以下領域:

  • 驗證權威數據的更改,並防止欺騙性 IP 在後端系統之間生成虛假消息。(動態更新和區域轉移)
  • 對遞歸伺服器看到的權威響應進行身份驗證,以防止 DNS 中毒攻擊。(DNSSEC)
  • 保護存根解析器和遞歸伺服器之間的通信,以提高最終使用者的隱私,並防止沿該路徑被篡改。(基於 HTTPS 的 DNS、DNSCrypt 等)
  • 減少欺騙性 DNS 查詢可以消耗的網路資源量。(DNS Cookie)

應該注意的是,這些舉措不包括個人記錄的隱私。DNS over HTTPS 和 DNSCrypt確實打算提供一定程度的隱私保護,但僅限於其流量可能在網路上被窺探的存根解析器。據我所知,保護個人記錄並不是一個目標。

如果我不得不做一個假設,個人記錄隱私不是任何人的優先考慮的原因是因為它完全違背了目前設計模型的本質。對於實施所需的努力程度,人們認為它沒有多大價值。(或者更坦率地說,它本質上被理解為不適合原始設計)客戶的憑證必須通過遞歸系統傳遞給權威系統,並且為了維護隱私,所有參與者之間的傳輸必須是安全的。它對所有相關方提出了許多要求,而獲得的回報很少。

簡而言之,DNS 與您正在尋找的解決方案相似,但它不是根據您所想的模型建構的。Michael 的評論是正確的:您的安全模型必須假設有人將在某個時候通過自動掃描或社會工程了解 IP 地址。安全性的重點必須放在有人向您的 IP 地址發送流量時會發生什麼。

因此,沒有任何東西可以作為一種產品來做到這一點。你也許可以拼湊一些東西來做一些類似的事情,但對於 iOS/Android 這樣的東西不太可能,因為你受限於你可以改變的東西(沒有越獄/生根等)。

如果您想保護查詢免受客戶端和伺服器之間的窺探,您可以使用 DNSCrypt 或 DNS over TLS 之類的東西,但這並不能解決任何人仍然可以查詢您的域的問題。

DNSSEC 僅允許您驗證記錄是否符合預期,但據我所知,它不提供身份驗證機制。它的目標是對 DNS 響應進行簽名,以表明查詢在被請求後未被其他實體修改。


您想要完成的問題是這不是 DNS 的工作方式。從根本上說,DNS 是一種分佈式服務。當您在您的設備(手機、平板電腦、PC、w/e)上配置 DNS 伺服器時,它會將所有DNS 查詢發送到此框並期待響應。如果此框知道該值是什麼,它將返回它,如果不知道,則它必須轉到其配置中的下一個框並詢問該框的值;重複此過程,直到找到響應。

如果你想限制誰可以查詢你的盒子,最好的辦法是防火牆規則來控制誰可以首先向系統發送請求。這顯然不適用於移動和動態客戶端。

您所要求的必須是定制的解決方案,或擴展至諸如 DNS over TLS 之類的東西,其中可以添加身份驗證。也許可以使用帶有 DNS over TLS 連接的客戶端證書之類的東西來證明客戶端是您所期望的,然後如果正確,則提供 DNS 響應。我認為這在 DNS over TLS 現在不可用,但添加似乎是可行的。


你在這裡的真正目標是什麼?當人們問這樣一個非常具體的問題時,這是因為他們心中有一個目標,並認為他們已經找到了解決這個問題的途徑……他們通常在尋找答案的錯誤方向。

更新:

僅基於域名 ssh 進入我的筆記型電腦會很好

所以我們已經了解了為什麼這不適用於僅 DNS。如果真的想要經過身份驗證的 DNS,您將不得不建構一個自定義解決方案,因為我不知道今天有什麼這樣做的。

在完成你想要的(儘管有動態 IP 的情況下連接到你的機器)方面,我會研究像 TeamViewer 這樣的服務,其中有一個遠端伺服器,它被設置為接受來自你的客戶端機器的持久連接。這將允許您連接到服務,然後服務將能夠設置到遠端客戶端的“隧道”。另一個這樣的服務是像 LogMeIn 這樣的服務。

這些工具建立了從客戶端到服務提供商伺服器的持久連接。這意味著您可以通過大多數 NAT/防火牆設置連接,因為大多數網路不會阻止出站流量。從這裡開始,無論您的筆記型電腦是在家裡還是在當地的咖啡店,您仍然可以使用它。

引用自:https://serverfault.com/questions/905639