Linux

為每個網卡介面(eth0 / eth1)配置一個 DNS 伺服器?

  • March 1, 2017

您將如何在 RHEL/Centos 6 上為每個 NIC(eth0 與 eth1)介面配置 DNS 名稱伺服器?

例如

eth0 在子網 10.0.0.1/24

eth1 在子網 192.168.0.1/24

通過 eth0 發送的任何請求都應使用 DNS 伺服器 10.0.0.2。

通過 eth1 發送的任何請求都應使用 DNS 伺服器 192.168.0.2。

我已經添加:

DNS1:10.0.0.2 > /etc/sysconfig/network-scripts/ifcfg-eth0

DNS1:19.168.0.2 > /etc/sysconfig/network-scripts/ifcfg-eth1

但是這些值會被忽略,並且它始終預設為 resolv.conf “nameserver 10.0.0.2” 中的設置。當 eth0 關閉時,通過 eth1 發送連接……但是 DNS 無法再解析,因為它試圖到達 10.0.0.2 .

  • 如何讓它尊重 ifcfg 中的 DNS 設置,而不是 resolv.conf 的預設設置?
  • 或者如何為 eth0 和 eth1 配置不同的 DNS 名稱伺服器?
  • 有沒有更好的方法來處理這個?

更新

我們有兩個 VLAN,每個 VLAN 在各自的子網上都有自己的 DNS 伺服器。這些處理本地 DNS(example.loc、guest.app 等)的查找,以及在需要時進行轉發。

它們是位於兩個獨立物理位置的兩台獨立伺服器。如果可能的話,我寧願不在兩個子網中執行一台伺服器(一個處理敏感數據)。

如果 eth0 出現故障,我需要 eth1 繼續能夠發出 DNS 請求。

我曾考慮將兩個 IP 添加到 resolv.conf,然後如果它無法到達第一個子網中的伺服器,則讓它失敗,但這似乎不優雅(當 eth0 時,必須等待第一台伺服器在每次 DNS 查詢時超時)向下)。

你不能輕易地做你想做的事。

或者如何為 eth0 和 eth1 配置不同的 DNS 名稱伺服器?

主機名的名稱查找是通過標準系統庫進行的,並且與特定的“連接”沒有任何關聯。事實上,在 DNS 查詢發生時,並沒有連接,因為您的應用程序甚至還沒有弄清楚它要連接的地址(這就是它首先使用 DNS 的原因)。

如何讓它尊重 ifcfg 中的 DNS 設置,而不是 resolv.conf 的預設設置?

Linux 解析器只有一個全域配置 ( /etc/resolv.conf)。沒有任何類型的每個介面、每個域或每個連接的設置。中的設置/etc/sysconfig/network-scripts/...僅用於填充/etc/resolv.conf,通常如果您在這些文件中指定DNS1DNS2,最後出現的界面將是您在 中看到的內容/etc/resolv.conf

有沒有更好的方法來處理這個?

你能告訴我們你真正想要完成什麼嗎?如果您能告訴我們更多關於您的具體情況,我們或許可以提出更好的解決方案。

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