New user sign up using AWS Builder ID
New user sign up using AWS Builder ID is currently unavailable on re:Post. To sign up, please use the AWS Management Console instead.
如何避免 Amazon EC2 Linux 執行個體發生 DNS 解析失敗?
我想避免 Amazon Elastic Compute Cloud (Amazon EC2) Linux 執行個體發生 DNS 解析失敗的問題。
簡短描述
若要減少 CPU 和網路使用量並避免 DNS 解析失敗,請套用 DNS 快取。
如果您使用 DNS 快取來查詢外部 DNS 資源,快取會在本機回應大部分重複發生的 DNS 查詢。當快取執行此操作時,不會透過網路與 DNS 解析程式互動。您可以查詢外部 DNS 資源,如以下範例所示:
- Amazon Relational Database Service (Amazon RDS)
- Amazon ElastiCache
- Amazon Simple Storage Service (Amazon S3)
下列程序適用於 Amazon Linux 的所有版本。如果您使用的是其他發行版本,請從下列清單中選取您的發行版本的文件:
- 如需 Debian 的相關資訊,請參閱 debian.org 網站上的本機快取。
- 如需 Ubuntu 的相關資訊,請參閱 Ubuntu 網站上的本機 DNS 快取。
- 如需Red Hat Enterprise Linux (RHEL) 的相關資訊,請參閱 Red Hat 客戶入口網站上的如何在 RHEL 使用 dnsmasq 設定 DNS 快取伺服器。
解決方法
使用 dnsmasq 設定本機 DNS 快取
若要設定本機 DNS 快取,請使用 dnsmasq。 如需詳細資訊,請參閱 thekelleys.org.uk 網站上的 dnsmasq。
請完成下列步驟:
-
若要安裝 dnsmasq 伺服器,請執行下列命令:
sudo yum install -y dnsmasq
-
若要建立專屬的系統使用者來執行 dnsmasq,請執行下列命令:
sudo groupadd -r dnsmasqsudo useradd -r -g dnsmasq dnsmasq
注意事項:dnsmasq 通常以根使用者的身分執行,但啟動後就會變更為其他使用者。根據預設,使用者不是任何人。當 dnsmasq 變更為其他使用者時,根權限會被刪除。
-
若要建立 dnsmasq.conf 檔案的副本,請執行下列命令:
sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.ori
若要使用文字編輯器開啟組態檔案,請執行下列命令:
sudo vim /etc/dnsmasq.conf
-
若要編輯 /etc/dnsmasq.conf 檔案,請執行下列範例命令:
# Server Configurationlisten-address=127.0.0.1 port=53 bind-interfaces user=dnsmasq group=dnsmasq pid-file=/var/run/dnsmasq.pid # Name resolution options resolv-file=/etc/resolv.dnsmasq cache-size=500 neg-ttl=60 domain-needed bogus-priv
**注意事項:**dnsmasq 中的 bogus-priv 選項會導致不在 **/etc/hosts 中的私有 IP 範圍的反向 DNS 查詢失敗。**此選項也可能導致動態主機組態協定 (DHCP) 租用檔案的反向 DNS 查詢失敗。如果您想要成功執行反向查詢,請以註解排除或移除 bogus-priv。
-
建立 /etc/resolv.dnsmasq 檔案。然後,若要設定 Amazon DNS 伺服器,或您在 DHCP 選項集中指定的自訂網域名稱伺服器,請執行下列命令:
sudo bash -c "echo 'nameserver 169.254.169.253' > /etc/resolv.dnsmasq"
**注意事項:**如需 DNS 伺服器位置的詳細資訊,請參閱什麼是 DHCP?在某些情況下,您必須調整檔案 /etc/resolv.dnsmasq,以使用該網路的名稱伺服器。當您從具有 dnsmasq 快取的執行個體建立 AMI,以在具有不同 CIDR 的其他 VPC 中啟動時,請調整檔案。或者,當您在 DHCP 選項中指定自訂 DNS 伺服器時,請調整檔案。
-
若要重新啟動 dnsmasq 伺服器,並將服務設定為開機時啟動,請執行下列其中一個動作。
若要在開機時啟動 Amazon Linux 1,請執行下列命令:sudo service dnsmasq restart sudo chkconfig dnsmasq on
若要在重新開機時啟動 Amazon Linux 2 和 Amazon Linux 2023,請執行下列命令:
sudo systemctl restart dnsmasq.service sudo systemctl enable dnsmasq.service
-
若要驗證 dnsmasq 是否正常運作,請使用下列 dig 命令:
dig aws.amazon.com @127.0.0.1
如果回應類似於以下範例回應,表示 dnsmasq 快取正常運作:
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.56.amzn1 <<>> aws.amazon.com @127.0.0.1;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25122 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;aws.amazon.com. IN A ;; ANSWER SECTION: aws.amazon.com. 41 IN A 54.239.31.69 ;; Query time: 1 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ...
-
將 dnsmasq DNS 快取設定為預設的 DNS 解析程式。
**注意事項:**您必須抑制 DHCP 提供的預設 DNS 解析程式。若要這麼做,請變更或建立 /etc/dhcp/dhclient.conf 檔案。如需詳細資訊,請參閱如何將靜態 DNS 伺服器指派給重新開機後仍然存在的 Amazon EC2 執行個體?然後,若要將預設 DNS 解析程式設定為遞補選項,請執行下列命令:
sudo bash -c "echo 'supersede domain-name-servers 127.0.0.1, 169.254.169.253;' >> /etc/dhcp/dhclient.conf"
-
若要套用變更,請執行下列其中一個動作。執行下列 dhclient 命令:
sudo dhclient
-或-
若要重新啟動網路服務,請執行下列命令:sudo systemctl restart network
-或-
若要重新啟動執行個體,請執行下列命令:sudo reboot
**注意事項:**對於 Amazon Linux 2023,請執行
sudo systemctl restart systemd-networkd.service
而不是 dhclient。
若要確認執行個體是否使用 DNS 快取,請執行下列 dig 命令:dig aws.amazon.com
如果回應顯示回覆的伺服器為 127.0.0.1,則表示 DNS 快取正常運作。
回應範例:; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.56.amzn1 <<>> aws.amazon.com;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1028 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;aws.amazon.com. IN A ;; ANSWER SECTION: aws.amazon.com. 55 IN A 54.239.31.69 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) <<<------- ...
將 dnsmasq 自動化
若要在 Amazon Linux 上以 DNS 解析程式的形式將 dnsmasq 的安裝和設定作業自動化,請使用下列其中一種選項:
- AutomateDnsmasq.sh bash 指令碼
- AutomateDnsmasq.cloudinit 指令
如需有關 AutomateDnsmasq.sh bash 指令碼的詳細資訊,請參閱 GithHub 網站上的 #!/bin/bash。
如需有關 AutomateDnsmasq.cloudinit 指令的詳細資訊,請參閱 GithHub 網站上的 #cloud-config。
如果您想將其他 Linux 版本上的 dnsmasq 安裝作業自動化,請使用任一檔案來完成必要的自訂程序。
當這兩個檔案都使用 Amazon DNS 伺服器備用位址 169.254.169.253 時,這些檔案可以在 VPC 執行個體上執行。
若要在啟動時執行上述任一檔案,請在使用者資料欄位傳遞檔案內容。若要對執行個體執行操作,您可以將 Bash 指令碼作為獨立指令碼執行,或使用 AWS Systems Manager 執行命令 。
若要將 Bash 指令碼作為獨立指令碼來執行,請完成下列步驟:
-
若要將指令碼下載到您的執行個體並使其可執行,請執行下列命令:
wget https://raw.githubusercontent.com/awslabs/aws-support-tools/master/EC2/AutomateDnsmasq/AutomateDnsmasq.shchmod +x AutomateDnsmasq.sh
-
以根使用者身分執行下列命令或使用 sudo:
sudo ./AutomateDnsmasq.sh
相關資訊
相關內容
- 已提問 1 年前lg...
- 已提問 1 個月前lg...
- AWS 官方已更新 2 年前
- AWS 官方已更新 3 年前
- AWS 官方已更新 3 年前
- AWS 官方已更新 3 年前