如何在 Ubuntu 上使用 dnsmasq 設置 DNS 緩存

已發表: 2022-10-19

DNSmasq 可用於緩存 Linux 發行版的 DNS 請求。 但是,這可能有點挑戰性。

DNS 緩存的作用是加快將網站域名轉換為其關聯 IP 地址的 DNS 查找過程。 當您網絡上的多個用戶訪問同一個網站地址時,利用本地 DNS 緩存服務器可以減少 Web 加載所需的時間。

首先讓我們看看什麼是DNS緩存。

什麼是 DNS 緩存?

互聯網使用 DNS 來跟踪所有可公開訪問的在線站點及其相關 IP 地址。 它可以比作電話簿。 使用 DNS 可以讓我們不必記住每個站點的 IP,這是網絡基礎設施與 Internet 站點交互所必需的。

每當您請求搜索引擎顯示網頁時,這實際上是在幕後發生的。

儘管您的系統可以訪問大量外部 DNS 服務器,但問題是擁有 DNS 的中央副本仍然可以加快傳輸和解析速度。 這是 DNS 緩存發揮作用的時候。

dns緩存

在將請求發送到 Web 之前,DNS 緩存會處理最近和經常訪問的域的身份解析,以進一步加快該過程。

每當需要將 IP 地址解析為域名時,都會訪問 DNS 服務器。 這會給 DNS 服務器帶來額外的負載,尤其是在網站同時接收大量請求的情況下。

使用 DNS 緩存以減少 DNS 請求和響應時間。 解析的 IP 地址以及主機詳細信息保存在本地。 與其啟動新的 DNS 查詢,不如在下次必須解析 IP 或域名時從 DNS 緩存中檢索結果。

DNS 緩存如何幫助解決 Amazon EC2 實例上的間歇性 DNS 解決問題?

大多數 Linux 系統不使用本地 DNS 緩存。 這意味著所有 DNS 請求都直接發送到 Amazon 提供的權威 DNS 解析器,該解析器對一次可以處理的請求數量有限制。 當有大量請求時,就會出現 DNS 解析問題。

在系統中部署本地 DNS 緩存將幫助您降低 CPU 和網絡利用率,同時防止 DNS 解析錯誤 本地 DNS 緩存響應對外部 DNS 資源(如 Amazon RDS 和 S3)的查詢。

連接到 Amazon VPC 的 Amazon EC2 實例在啟動期間使用 DHCP 協議來請求 DNS 服務器地址。

鋸

當您使用 Amazon VPC 構建虛擬私有云時,Route 53 DNS 解析器有效地利用 VPC 上的解析器來響應在本地 Amazon VPC Web 地址和私有管理區域中的條目下運行的 EC2 實例的 DNS 請求。 Resolver 在公共 DNS 服務器上反複查找所有其他網址。

DNS 緩存用作先前 DNS 查詢的臨時記錄,我們的系統可以在嘗試訪問在線網站時快速檢查這些查詢。 它維護每個現有和後續會話的日誌。 此 DNS 緩存使域解析更容易,並防止 Amazon EC2 Linux 實例出錯。

許多用戶在訪問 AWS 時通常使用 Amazon 的 Route 53 服務作為 DNS。 它真的很容易使用而且幾乎是免費的。 但是有許多原因可能會影響用戶使用本地 DNS 服務器的決定。

儘管 bind9 仍然是設置本地 DNS 緩存服務器的絕佳選擇,但 dnsmasq 在 EC2 實例和本地計算機上的安裝和配置要簡單得多。

什麼是dnsmasq?

DNSmasq 是一個 Linux 相關的工具,支持 DNS、DHCP、TFTP 和 DNS 緩存。 它結構緊湊、重量輕,非常適合資源限制較少的網絡和防火牆。

安裝和配置非常簡單。 為了為子網設置 DNS 和 DHCP,dnsmasq 是一種靈活實用的解決方案。

可以為每個服務器或底層控制器設置這些 DHCP 分配的標識符和相關說明。 dnsmasq 都支持動態和靜態 DHCP 選項。 它是可移植的,並且能夠為至少 1,000 個客戶端管理 DNS 和 DHCP。

當收到 DNS 查詢時,dnsmasq 要么從本地緩存響應,要么將其傳輸到權威 DNS 服務器。 除了響應帶有 DHCP 配置的地址的 DNS 請求外,它還檢查/etc/hosts文件的內容以識別公共 DNS 中未列出的本地主機名。

使用 dnsmasq 工具代替瀏覽器的內置 DNS 緩存可大大提高互聯網瀏覽性能。 它非常適合資源受限的集成環境,因為它的設置非常簡單,並且只需要很少的磁盤空間。

dnsmasq 的特點

  • 使用 dnsmasq 集成內部 DNS 服務器很簡單,方法是將其配置為將特定的域名解析查詢傳輸到特定的權威服務器。
  • 使用配置的本地 DNS 服務器減少了服務器的工作量並增強了可靠性。
  • 啟用防火牆的端點的 DNS 配置相當簡單,並且獨立於 ISP 使用的 DNS。
  • 如果在計算機上執行 DNS 檢查時無法訪問鏈接到 Internet 的端口,則查找操作將立即暫停。
  • 通過 PPP(點對點協議)或 DHCP 查詢,dnsmasq 確實可以配置為直接從底層域解析服務器定期收集數據。

安裝

在安裝和配置dnsmasq實用程序之前,必須關閉systemd-resolved服務。

 systemctl stop systemd-resolved

您也可以使用mask屬性隱藏它,以便在您重新啟動時它不會自動啟動。

 systemctl mask systemd-resolved

安裝 dnsmasq 是關閉systemd-resolved後需要執行的初始操作。 幾乎所有 Linux 發行版都預裝了 DNSmasq。 如果沒有,您可以手動安裝它。 啟動命令終端,然後鍵入以下命令來執行此操作。

 sudo apt-get install dnsmasq

如果您是 yum 用戶,請使用以下命令:

 sudo yum install -y dnsmasq

此命令會自動安裝該工具並在後台啟動dnsmasq

dnsmap安裝

安裝成功後,您可以使用以下命令檢查dnsmasq的狀態。

 systemctl status dnsmasq

如果它顯示其狀態為“活動(運行)”,則表示安裝完成並配置到端口 53。如果它顯示其狀態為“非活動(死)”,那麼您需要重新啟動 Ubuntu 機器和 dnsmasq。 這將修復錯誤。

dnsmasqstatus

配置

Dnsmasq 現在已準備好在您的計算機上設置為本地緩存 DNS 服務器。 默認配置文件位於/etc/dnsmasq.conf 。 必須修改此配置文件才能在系統中設置dnsmasq實用程序。

使用此命令打開和編輯配置文件。

 nano /etc/dnsmasq.conf

配置文件只能使用 root 權限進行編輯。 只需清除文件中的所有內容,包括註釋,然後簡單地複制粘貼並保存此配置設置。

 port=53 domain-needed bogus-priv listen-address=127.0.0.1 expand-hosts domain=geek-demo.com cache-size=1000

讓我簡要介紹一下每個參數的含義。

  • 端口– 指定或綁定 Dnsmasq 將用於接收 DNS 請求的端口。
  • domain-needed – 僅將域名傳輸到上游 DNS 服務器。
  • bogus-priv – 防止域和端口轉發
  • listen-address – 定義名稱服務器地址。 通常,localhost 用作默認設置,用於設置本地 DNS 服務器。
  • domain – 配置 dnsmasq 附加到短標識符的域。
  • cache-size – 存儲中允許的最大 DNS 緩存大小。
dnsmasqhost

執行所有必要的更改後,保存並關閉配置文件。 下一步是編輯/etc/resolv.conf文件以添加本地主機解析地址。 使用以下命令使用 nano 編輯器打開。

 nano /etc/resolv.conf

在這裡,您可以找到系統用於地址解析的所有名稱服務器。 在該列表中,還要添加環回地址。 添加“ nameserver 127.0.0.1 ”並將其保留在第一行。

dns解析

保存並退出配置文件。 為了使更新的設置生效,請重新啟動 dnsmasq 實用程序。

 systemctl restart dnsmasq

測試本地 DNS 緩存服務器

測試本地 DNS 服務器很容易。 打開命令行並使用 dig 命令檢查 DNS 緩存。 第一次運行 dig 命令時,結果應該很常見。

 ┌──(rootkali)-[/home/writer] └─# dig geekflare.com 1 ; <<>> DiG 9.18.0-2-Debian <<>> geekflare.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 623 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 512 ;; QUESTION SECTION: ;geekflare.com. IN A ;; ANSWER SECTION: geekflare.com. 227 IN A 172.66.43.163 geekflare.com. 227 IN A 172.66.40.93 ;; Query time: 31 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP) ;; WHEN: Sat Oct 15 07:52:49 EDT 2022 ;; MSG SIZE rcvd: 74

這裡請注意,從上游名稱服務器查詢詳細信息的查詢時間約為 31 毫秒。 再次執行相同的 dig 命令,您會發現查詢時間顯著減少。

 ┌──(rootkali)-[/home/writer] └─# dig geekflare.com 1 ; <<>> DiG 9.18.0-2-Debian <<>> geekflare.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21942 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;geekflare.com. IN A ;; ANSWER SECTION: geekflare.com. 281 IN A 172.66.40.93 geekflare.com. 281 IN A 172.66.43.163 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP) ;; WHEN: Sat Oct 15 07:58:10 EDT 2022 ;; MSG SIZE rcvd: 74

這裡,查詢時間為 0 毫秒。 這是因為在執行初始搜索之後,dnsmasq 存儲了數據,並且由於使用了存儲的緩存,所有後續執行的查找都是瞬時的。 如果要刪除存儲的 DNS 緩存,則需要重新啟動 dnsmasq。

包起來

在本文中,我們了解瞭如何設置和配置 dnsmasq 以充當本地 DNS 服務器。 您可能也有興趣了解如何更改 DNS 服務器以在不同操作系統中進行更快的瀏覽。