A-Record

在 libcurl 中禁用 AAAA 查找

  • September 29, 2014

在我們的大地圖減少過程中,我們有一個步驟來進行 DNS 解析。應用程序本身使用 c-ares 庫以及 libcurl。

我注意到,對於每個決議,首先是 AAAA 嘗試,然後是 A 決議。在我們的命名伺服器和主機上都可以通過 TCPdump 清楚地看到這一點。

這是到 S3 的流量範例

$ tcpdump dst port 53
20:28:35.259552 IP x.x.x.x.55271 > ec2-xx.amazonaws.com.domain: 21815+ AAAA? s3.amazonaws.com. (34)
20:28:35.261526 IP x.x.x.x.56058 > ec2-xx.amazonaws.com.domain: 21823+ A? s3.amazonaws.com. (34)

它對每個解析度重複。由於我們在此過程中進行了超過 7000 萬次解析度,因此希望將其中的 50% 視為浪費是有意義的。

如何在 Ubuntu 中禁用 IPv6 查找?

我嘗試將 /etc/gai.conf 中的優先級更改為:

precedence ::ffff:0:0/96 45

然而,我仍然看到 ubuntu 首先嘗試 IPv6 解析度。任何幫助將不勝感激

編輯:

我的 /etc/resolv.conf 很簡單,只需要一個名稱伺服器集:

cat /etc/resolv.conf 
nameserver x.x.x.x

IPv6,而不是 IPv4,是 IP 的前瞻性版本,你知道… IPv6 很遺憾看到你離開 :-( 但你可以禁用它。

如果您使用的是 libcURL,那麼您所要做的就是:

curl_easy_setopt(easy_handle, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);

但是,您是否擔心這些額外的 AAAA 請求所花費的時間或額外的網路流量?我希望 A 和 AAAA 是並行完成的,所以您不必擔心延遲。

引用自:https://serverfault.com/questions/483916