Linux

反向 DNS 查找減慢 LAN 上的網路操作

  • April 6, 2019

環境

我的 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 -lnetstat -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被稱為什麼。

建議:

失敗的 DNS 查找應該很快就會失敗。但是,我通常執行 dnsmasq 它將讀取主機文件並為這些條目提供正向和反向查找。它還充當 DNS 記憶體伺服器,以減少上游 DNS 伺服器的負載。

您可能想使用hostordig命令查看哪些查找速度較慢。如果您被重定向到未執行 DNS 的 DNS 伺服器,則需要很長時間才能失敗。您可以調整超時和重試/etc/resolv.conf以加快故障速度。

編輯:要測試解析器響應,請嘗試使用time getent hosts 192.168.1.50. 這應該從您的/etc/hosts文件和 DNS 中返回查找。hostanddig命令只檢查 DNS 。如果這返回但需要幾秒鐘,您可能希望將移動文件中的hosts條目順序更改/etc/nsswitch.conf到列表的前面。

如果您有任何僅依賴 DNS 進行名稱查找的程序,則將其設置dnsmasq並用作您的主要 DNS 名稱伺服器應該可以解決該問題。/etc/resolve.confExim 應該使用解析器進行基本查找。您將需要一個/etc/hosts文件,除非您可以禁用路由器上的 DHCP 伺服器,否則您可以使用dnsmasqDHCP。 dnsmasq如果在它處理的 DHCP 請求中提供了名稱,它將自動註冊名稱。

EDIT2:如果您的電腦都沒有始終啟動,您可能需要查看安裝 samba 並wins在您的 nsswitch 配置中使用。它應該很快,所以如果你把它放在dns主機條目的前面,它可能會起作用。

您還可以查看安裝avahi將在連結本地網路上啟用自動發現的實用程序。我讓它在 IPv6 端工作,但它沒有發布 IPv4 地址。主機的預設域是“.local”。這可能不適合您的情況,但可以被覆蓋。查找似乎也比在winsnsswitch配置中mdns提前dns可能不合適。

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