Networking

FreeBSD w/ 兩個網路介面和不同的域

  • December 29, 2017

我有一台帶有兩個 NIC 的 FreeBSD 機器,設置如下:

  • em0 ---> IP set via DHCP (192.168.1.0/24). "home" domain
  • em1 ---> IP set statically (10.0.0.2). "lab" domain

出於所有意圖和目的,我的主域執行良好。我可以上網並 ping 網路上的任何主機。路由也有效,我可以通過 IP 從 FreeBSD 機器上的任何一個域 ping 任何主機,但是我只能解析家庭網路上的名稱。

我創建了一個/etc/resolvconf.conf文件以將搜尋域和名稱伺服器添加到resolv.conf文件中,如下所示:

search_domains="lab"
name_servers="10.0.0.10" 

然後我使用以下命令更新 resolv.conf:

$ sudo resolvconf -u

我現在可以在lab網路上解析名稱,但不再在home網路上。手動編輯 resolv.conf 文件並顛倒域和名稱伺服器的順序會導致解析home但不是lab- 完全相反。

我如何知道resolv.conf將一個 DNS 伺服器用於特定域(靜態設置的 IP)並允許它通過 DHCP 獲取另一個 IP 的 DNS 資訊?


僅供參考……

/etc/rc.conf:

hostname="beastie1"
ifconfig_em0="DHCP"
ifconfig_em1="inet 10.0.0.2 netmask 255.255.255.0"
defaultrouter="192.168.1.1"

/etc/resolv.conf

# Generated by resolvconf
search lab home.
nameserver 10.0.0.10
nameserver 192.168.1.1

域 10.0.0.0上的 DNS“伺服器”lab只不過是提供 DHCP 租約的廉價消費者 Netgear 路由器。我只有靜態設置,因為它是用於引導映像的 TFTP 伺服器,我特意將其設置為 10.0.0.2,以便在嘗試在某些 Cisco 設備上刷新韌體更新時使用。

您為這項工作使用了完全錯誤的工具。

此工作不在 DNS 客戶端庫中完成。DNS 客戶端庫不夠複雜,無法根據正在查找的名稱來決定將查詢路由到不同的內容 DNS 伺服器集。DNS 客戶端庫將查詢解析的繁重工作(包括這類東西)委託給解析代理 DNS 伺服器。 它們是實現水平分割 DNS 服務的,這是您在這裡想要的機制。

在您的情況下,如果您正在使用開箱即用的 FreeBSD(或其衍生產品,如 DragonFly BSD 和 TrueOS),這將是一個unbound本地執行的實例。

你做三件事:

  • 你跑unboundlocal_unbound_enable=YES使其以/etc/rc.conf通常的方式自動啟動。
  • 您配置unbound為執行水平分割 DNS 服務。 您可以使用您和您的域的存根區域來執行此操作,將這些域名及其下面的所有內容 表示為內容 DNS 伺服器。unbound.conf``lab.example.com.``home.example.com.``10.0.0.10``192.168.1.1
  • **您告訴 DNS 客戶端庫查詢您的伺服器,並且只查詢您的伺服器。**您有nameserver一行 in /etc/resolv.conf(來自 中的一個name_servers鍵值對/etc/resolvconf.conf)指示您的 DNS 客戶端庫與unbound.

筆記:

  • 您不使用home.and lab. 這些是真正的頂級域名,您並不擁有. home.目前是 ICANN 的 10 份申請的主題。使用您擁有的域名,而不是您不擁有的域名。用上面的那個代替example.com.。**不,****您不擁有local., localhost.,或許多其他人。dev.``corp.**例如,如果您擁有radiantnexus.com.,您將使用home.allan.radiantnexus.com.and lab.allan.radiantnexus.com.
  • 如果您希望在本地命名空間中找到非完全限定域名,請適當調整您的搜尋域。search_domains="home.allan.radiantnexus.com lab.allan.radiantnexus.com"繼續前面的例子。
  • 不要認為您可以退回到其他人解析代理 DNS 伺服器。 一個大錯誤是添加由您的現成路由器、您的 ISP 或 Google 提供的解析代理 DNS 伺服器。您的 DNS 客戶端庫直接與之通信的所有伺服器都必須提供相同的 DNS 名稱空間視圖,並且彼此保持一致。首先, Google 公共 DNS對您的內部命名空間一無所知。如果您想要一個備用 DNS 伺服器,則需要在某個地方使用另一個本地DNS 伺服器,並使用相同的水平分割設置進行配置。
  • 您還需要所有非公共 IPv6 和 IPv4 地址到名稱查找名稱的存根區域。 實際上有很多這樣的,它們的查找流量真的不應該洩漏到您/您的組織的邊界之外。是的,如果您希望地址到名稱查找適用於由您的組合 DHCP/DNS 伺服器分發的租約,它們確實應該是存根區域,而不是本地區域。

獎勵內容

我在 FreeBSD 上使用 djbdns(由……好吧……我修補)。

  • nosh 工具集的配置導入子系統為我設置了一個dnscache@127.0.0.1執行本地解析代理 DNS 伺服器的服務,以及一個執行tinydns@127.53.0.1與之對話axfrdns@127.53.0.1的本地根內容 DNS 伺服器的服務dnscache@127.0.0.1enable我使用以下指令啟用這些服務/etc/system-control/presets/20-djbwares.preset
啟用 axfrdns@127.53.0.1
啟用 cyclog@axfrdns
啟用 tinydns@127.53.0.1
啟用 cyclog@tinydns
啟用 dnscache@127.0.0.1
啟用 cyclog@dnscache
  • 本地根內容 DNS 伺服器在其數據庫中混合了公共.數據,大約每年從 ICANN 提取axfr-get,以及我擁有的域名下的內部名稱數據。
% ls -dl root/{data*,p*,root*,Makefile}
-rw-r--r-- 1 根輪 968 9 月 16 日 09:43 根/Makefile
-rw-r--r-- 1 根輪 571334 11 月 28 日 00:33 根/數據
-rw-r--r-- 1 根輪 1088169 11 月 28 日 00:33 root/data.cdb
-rw-r--r-- 1 根輪 3243 9 月 16 日 09:55 根/私人
-rw-r--r-- 1 根輪 6962 11 月 28 日 00:32 根/公共
-rw-r--r-- 1 根輪 560853 2017 年 3 月 11 日根/根
-rw-r--r-- 1 根輪 3668733 2017 年 3 月 11 日 root/root.zone
%

root/private文件是我將擁有私人數據的地方,例如:

=machine97.jdebp.eu:192.168.100.97:::lo
  • 我為各種水平分割修剪點複製了root/servers/@文件,以便知道覆蓋可能恰好發送的那些點的任何公共內容 DNS 伺服器地址資訊:dnscache@127.0.0.1``dnscache
% ls -dli root/servers/{@,CEFip6.arpa,machine97.jdebp.eu}
352608 -rw-r--r-- 46 根輪 11 2016 年 11 月 23 日根/伺服器/@
352608 -rw-r--r-- 46 根輪 11 2016 年 11 月 23 日 root/servers/CEFip6.arpa
352608 -rw-r--r-- 46 根輪 11 2016 年 11 月 23 日 root/servers/machine97.jdebp.eu
%

(實際上,nosh 工具集為我設置了私有 IP 地址,作為標準。在nosh 指南中有一整章介紹了提供的內容以及使用它的各種方式。)

這是一個私有根設置。這是使用兩個內容 DNS 伺服器提供水平分割 DNS 服務的其他方式之一(有幾種方式)。(在上述unbound設置中,您也有多個內容 DNS 伺服器安排;您的本地內容 DNS 伺服器是LAN 上的其他機器上10.0.0.10和其他機器上的伺服器,而不是機器本身上的私有伺服器。)192.168.1.1``127.53.0.1

私有根還給我帶來了不存在的東西的 duff DNS 查詢流量的好處,從Google瀏覽器的探測到試圖反向映射 IPv6 地址fec0::/12和 IPv4 地址的東西192.168.0.0/16,而不是逃逸到整個網際網路。

您也可以使用私人根unbound。不過,它比存根區域更複雜。我把它留給讀者作為練習,它超出了這個答案的範圍。

進一步閱讀

引用自:https://unix.stackexchange.com/questions/413566