在 Mac OS X 中新增 DNS 解析器或「獨佔」路由的順序?

在 Mac OS X 中新增 DNS 解析器或「獨佔」路由的順序?

我在一家公司工作,由於幾個奇怪的原因,我有以下設定:

  • 乙太網路:位於訪客網路中,可存取互聯網
  • Wifi:位於公司網路中,可存取內網
  • 設定適配器順序,以便乙太網路優先
  • route add用於新增我需要的內部路由(10.[4/6/1/39].xx等)

現在的問題是某些程式無法運行,因為它們不使用 IP,而是使用命名位址。因此scutil --dns,解析器 #1 具有外部 DNS 伺服器,然後解析器 #2 具有 Intranet DNS 伺服器。 (如果我斷開電纜並且僅在 Wifi 公司中,則名稱解析得很好)。

我想到了兩種可能的解決方案,但我不知道如何讓它們發揮作用:

  • 儘管 Wifi 是順序中的第一個適配器,但我以某種方式切換了 DNS 解析器順序,以便在 Internet DNS 之前嘗試 Intranet DNS
  • 將 Wifi 適配器放在第一位,然後找到一個“排除”路由命令,該命令不是說“通過 en0 發送 IP X”,而是“通過 en1 發送任何不等於 X 的 IP”

有人可以幫我嗎?

答案1

聽起來我一直在同一家公司工作;-)

請在下面的連結中找到一個 Ruby 腳本,您可以對其進行修改以執行以下操作Hennes 描述為選項 4),儘管它使用 DNS 請求轉送而不是視圖。不過,這應該很容易解決。 https://github.com/simonair/pubcode/blob/master/multihome_setup/multihome_setup.rb

該腳本將根據需要使用 sudo。

僅當您確切了解它的作用時才使用它。

最好在開始嘗試此腳本之前創建一個新的Locationusing ,因為這將允許您透過切換回已知良好的 來撤消任何更改。System Preferences > NetworkLocation

它將做什麼:

  • 列舉所有網路接口,並根據其連接到公司網路的接口和連接到其他網路的接口預設網關IP 位址(不是分配給介面本身的位址)
  • 配置內建BINDDNS 伺服器來處理企業網路和 Internet 的請求,並按網域轉送它們。例如,example.com將轉送至公司名稱伺服器,而example.net將轉送至其他名稱伺服器。
  • 透過公司介面建立到子網路列表的路由,其餘透過其他網絡
  • 如果配置正確,它也會啟動 VPN 連線(可選)。

您需要調整腳本以滿足您的需求。

請注意,您需要restore與公司網路斷開連接後,再次使用參數呼叫腳本,否則,所有 DNS 請求都將到達您的本機名稱伺服器,並且無法在您的公司環境之外解析它們。

答案2

我不確定這是否是一個正確的完整答案,但將其放在多個評論中似乎是一個拼湊。

1)快速解決方法:

將內網名稱新增至主機檔案。 (它是在/私人/etc/主機)。如果您只需要存取幾台伺服器,那麼這很有效,而且相對容易做到。它也感覺像是一個拼湊,如果伺服器 IP 發生變化,您將需要手動更新您的主機檔案。

2) 假設 Intranet 上的 DNS 伺服器也會旋轉 Internet 上的名稱,您只能使用該 DNS 伺服器。我認為這不太可能,因為您明確提到訪客網路可以存取互聯網,另一個可以存取內部網路。 (可能是如果內部網路可以存取互聯網,但被某些防火牆規則阻止,這些規則不會阻止所有內容。例如,不阻止連接埠 53)。

3) 使用兩個 DNS 伺服器(這就是您想要做的)可能不起作用。

我沒有OS/X 機器來測試這一點,但最近我慘痛地了解到,某些作業系統不會按順序查詢DNS 伺服器,當第一個名稱伺服器失敗時,它們也不會回退到輔助名稱伺服器。相反,他們似乎隨機使用列出的名稱伺服器。

結果將是:(
訂購網際網路 DNS、內部網路 DNS)
網際網路上的查詢主機 -> 工作。
在內網查詢主機 -> 透過網際網路上的 DNS 伺服器查找失敗,放棄而不是嘗試下一步。

我不知道 OS/X 上是否是這種情況,而且我沒有 mac 來測試它。

4)本地網域名稱伺服器

(粗體是因為我認為這是最好的解決方案)。

OS/X 附帶綁定似乎很容易啟用它。 BIND 中要找的關鍵字是views

答案3

我有類似的問題蘋果系統具有許多實體和虛擬網路接口,並且需要根據這些網路接口的可用性或不可用性向不同的伺服器請求名稱解析。

經過一番谷歌搜索和嘗試後,我在更大的討論中找到了最完整的信息https://rakesh.com/infrastruct/macos-vpn-doesnt-use-the-vpn-dns。簡而言之,為了定義特定的解析器和更改 Macos 的系統解析器優先權,對於我的每個具體解決需求(例如,“當私人 DNS 伺服器 10.10.10.128 可存取時,必須查詢 mydomain.tld,否則 Google 的公用 8.8.8.8”)就足夠了

  1. 在 /etc/resolver 中建立一個檔案(例如 /etc/resolver/per-domain-resolver 或您最喜歡的名稱)

  2. 用以下序列填充它領域,名稱伺服器, 和搜尋順序指令,例如

    domain mydomain.tld
    nameserver 10.10.10.128
    search_order 1
    nameserver 8.8.8.8
    

值得強調的是,我的試驗一旦嵌入了領域搜尋順序指令。

相關內容