反向 DNS 查找減慢 LAN 上的網路操作
環境
我的 LAN 設置非常基本:
- 連接到 ISP 的調製解調器和網際網路的路由器
- 我的開發電腦直接連接路由器
路由器提供 DHCP 但不執行自己的 DNS 伺服器。事實上,我的 LAN 上的任何地方都沒有託管 DNS 伺服器(典型的家庭網路設置)。路由器配置為將 ISP 的 DNS 伺服器作為 DHCP 租約資訊的一部分發送。
我在我的開發 PC 上設置了一台 VirtualBox 機器並在其上安裝了 Debian Squeeze (6.0.4)。VirtualBox 網路模式是
Bridged Adapter
在我的區域網路上模擬一個獨立的伺服器。作為一個 VirtualBox 伺服器而不是一個物理伺服器並不是很重要,但我提到它是為了完整性。問題
每次網路操作在執行之前執行 LAN ip 的 DNS 反向查找時,伺服器都會有很長的延遲。一些慢速網路操作的例子:
- 從我的開發 PC 到伺服器的 SSH 連接
- 連接到 Glassfish 伺服器的管理埠
netstat -l
(netstat -nl
非常快)Starting MTA: exim4
開機需要很長時間才能完成其中一些具有解決方法,例如將我的開發電腦的 Ip 添加到
/etc/hosts
或添加特定於命令的選項以避免進行 DNS 反向查找。顯然,使用/etc/hosts
僅到目前為止,因為它與 DHCP 不一致。但是,我不禁認為我錯過了一些東西。我真的需要在區域網路的某個地方設置 DNS 伺服器嗎?對於我的需求來說,這似乎是一項巨大而無用的努力,我不敢相信在像我這樣的 DHCP 環境中沒有其他選擇。
我為此在網上搜尋了很多,也許我沒有正確的搜尋詞,但我找不到解決方案……
根據 BillThor 的回答更新 1
使用主機(探勘給出相同的結果):
# ip of stackoverflow.com $ time host -v 64.34.119.12 Trying "12.119.34.64.in-addr.arpa" ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15537 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;12.119.34.64.in-addr.arpa. IN PTR ;; ANSWER SECTION: 12.119.34.64.in-addr.arpa. 143 IN PTR stackoverflow.com. Received 74 bytes from 192.168.1.1#53 in 15 ms real 0m0.020s user 0m0.008s sys 0m0.000s # ip of dev pc $ time host -v 192.168.1.50 Trying "50.1.168.192.in-addr.arpa" ;; connection timed out; no servers could be reached real 0m10.004s user 0m0.004s sys 0m0.000s
我的 /etc/resolv.conf(在安裝過程中自動創建)
nameserver 192.168.1.1
對於公共 ip,host 和 dig 都非常快地返回,但對於 LAN ip,需要 10 秒才能超時。我猜 10s 是我目前的超時值。
更新 2
在
dev-pc
/etc/hosts 文件中:$ time getent hosts 192.168.1.50 192.168.1.50 dev-pc real 0m0.001s user 0m0.000s sys 0m0.000s
沒有
dev-pc
在 /etc/hosts 文件中:$ time getent hosts 192.168.1.50 real 0m10.012s user 0m0.004s sys 0m0.000s
它看起來越來越像我必須為每個嘗試進行反向 DNS 查找的程序選項或參數找到分段程序!沒有一台機器(虛擬機或非虛擬機)可以充當我 LAN 上的 DNS 伺服器,因為它們並不總是啟動。不幸的是,路由器的韌體不包括 DNS 伺服器。
192.168.1.1是你路由器的IP地址嗎?
nameserver 192.168.1.1
建議您的路由器將自己宣傳為 DNS 伺服器,而不是“發送 ISP 的 DNS 伺服器”。你有什麼品牌和型號的路由器?Web 界面是否顯示日誌消息?
我想知道您的路由器是否將請求轉發到您的 ISP 的名稱伺服器,但您的 ISP 的名稱伺服器正在丟棄該請求,因為他們不希望您知道他們的 IP 機器
192.168.1.50
被稱為什麼。建議:
- 仔細檢查路由器的設置。它應該回答您自己的專用網路的請求。也許您可以在路由器的 Web 界面中添加靜態主機條目?
- 嘗試在網路上的所有系統上安裝Avahi 。
- 告訴您的路由器使用Google 公共 DNS(
8.8.8.8
和8.8.4.4
)或OpenDNS
失敗的 DNS 查找應該很快就會失敗。但是,我通常執行 dnsmasq 它將讀取主機文件並為這些條目提供正向和反向查找。它還充當 DNS 記憶體伺服器,以減少上游 DNS 伺服器的負載。
您可能想使用
host
ordig
命令查看哪些查找速度較慢。如果您被重定向到未執行 DNS 的 DNS 伺服器,則需要很長時間才能失敗。您可以調整超時和重試/etc/resolv.conf
以加快故障速度。編輯:要測試解析器響應,請嘗試使用
time getent hosts 192.168.1.50
. 這應該從您的/etc/hosts
文件和 DNS 中返回查找。host
anddig
命令只檢查 DNS 。如果這返回但需要幾秒鐘,您可能希望將移動文件中的hosts
條目順序更改/etc/nsswitch.conf
到列表的前面。如果您有任何僅依賴 DNS 進行名稱查找的程序,則將其設置
dnsmasq
並用作您的主要 DNS 名稱伺服器應該可以解決該問題。/etc/resolve.conf
Exim 應該使用解析器進行基本查找。您將需要一個/etc/hosts
文件,除非您可以禁用路由器上的 DHCP 伺服器,否則您可以使用dnsmasq
DHCP。dnsmasq
如果在它處理的 DHCP 請求中提供了名稱,它將自動註冊名稱。EDIT2:如果您的電腦都沒有始終啟動,您可能需要查看安裝 samba 並
wins
在您的 nsswitch 配置中使用。它應該很快,所以如果你把它放在dns
主機條目的前面,它可能會起作用。您還可以查看安裝
avahi
將在連結本地網路上啟用自動發現的實用程序。我讓它在 IPv6 端工作,但它沒有發布 IPv4 地址。主機的預設域是“.local”。這可能不適合您的情況,但可以被覆蓋。查找似乎也比在wins
nsswitch配置中mdns
提前dns
可能不合適。