Ubuntu 16.04: resolução de DNS extremamente lenta usando wget / curl e em python usando solicitações (GET)

2

Estou no Ubuntu 16.04, totalmente atualizado. Percebendo alguma realmente muito lenta resolução de DNS em coisas como curl / dns e dentro de python. Eu fiz algumas pesquisas, mas nada resolveu. Eu estou tentando construir um aplicativo que requer tempo de resposta rápido, mas o desempenho do meu aplicativo está sendo esmagado por causa desse problema.

Eu já consertei isso de uma vez (ou pelo menos eu pensei) desligando o ipv6 que tornou meu apt-get mais rápido, e isso pareceu consertar todo o resto por um tempo também - mas de repente, está de volta levar uma eternidade para resolver. Não sei qual é o negócio ou se atualizei algum pacote e o redefino. wget / curl em um site leva uma eternidade para resolver, então de repente faz, e bam. Eu estou em uma conexão 100M / 100M. Eu devo mencionar que se eu forçar o --inet4-only com o wget, ele é instantatneous, fazendo-me pensar que esta é uma coisa de resolução ipv6 novamente, mas eu verifiquei que o ipv6 está desligado:

http://www.neuraldump.com/2016/11/how-to-disable-ipv6-in-ubuntu-16-04-xenial-xerus/

Aqui está o primeiro despejo.

00:14:19.512317 IP 10.10.10.10.57771 > google-public-dns-a.google.com.domain: 27177+ A? www.huffingtonpost.com. (40)
00:14:19.512323 IP 10.10.10.10.57771 > google-public-dns-a.google.com.domain: 4945+ AAAA? www.huffingtonpost.com. (40)
00:14:19.516199 IP google-public-dns-a.google.com.domain > 10.10.10.10.57771: 4945 3/0/0 CNAME www.huffingtonpost.com.huffpost.akadns.net., CNAME cs593.adn.mucdn.net., AAAA 2606:2800:221:18cd:1493:1b94:ea5:557 (154)
00:14:19.622120 IP resolver1-fs.opendns.com.domain > 10.10.10.10.57771: 27177 3/0/0 CNAME www.huffingtonpost.com.huffpost.akadns.net., CNAME cs593.adn.mucdn.net., A 152.195.54.95 (142)
00:14:24.517261 IP 10.10.10.10.57771 > google-public-dns-a.google.com.domain: 27177+ A? www.huffingtonpost.com. (40)
00:14:29.522261 IP 10.10.10.10.57771 > google-public-dns-a.google.com.domain: 27177+ A? www.huffingtonpost.com. (40)
00:14:34.527351 IP 10.10.10.10.50963 > google-public-dns-a.google.com.domain: 44146+ A? www.huffingtonpost.com. (40)
00:14:34.529688 IP google-public-dns-a.google.com.domain > 10.10.10.10.50963: 44146 3/0/0 CNAME www.huffingtonpost.com.huffpost.akadns.net., CNAME cs593.adn.mucdn.net., A 152.195.54.95 (142)
00:14:34.529730 IP 10.10.10.10.50963 > google-public-dns-a.google.com.domain: 8868+ AAAA? www.huffingtonpost.com. (40)
00:14:39.531792 IP 10.10.10.10.47933 > google-public-dns-a.google.com.domain: 44146+ A? www.huffingtonpost.com. (40)
00:14:39.629774 IP google-public-dns-a.google.com.domain > 10.10.10.10.47933: 44146 3/0/0 CNAME www.huffingtonpost.com.huffpost.akadns.net., CNAME cs593.adn.mucdn.net., A 152.195.54.95 (142)
00:14:39.629841 IP 10.10.10.10.47451 > google-public-dns-a.google.com.domain: 8868+ AAAA? www.huffingtonpost.com. (40)
00:14:39.696671 IP google-public-dns-a.google.com.domain > 10.10.10.10.47451: 8868 3/0/0 CNAME www.huffingtonpost.com.huffpost.akadns.net., CNAME cs593.adn.mucdn.net., AAAA 2606:2800:221:18cd:1493:1b94:ea5:557 (154)

Aqui está o segundo tcpdump. Se eu fizer isso de novo imediatamente (é o mesmo, não importa se é um nome de domínio diferente, estou fazendo o huffingtonpost novamente por causa de como o filtro tcpdump que usei é configurado), os resultados são muito rápidos:

00:15:09.575741 IP 10.10.10.10.47420 > google-public-dns-a.google.com.domain: 11015+ A? www.huffingtonpost.com. (40)
00:15:09.642151 IP google-public-dns-a.google.com.domain > 10.10.10.10.47420: 11015 3/0/0 CNAME www.huffingtonpost.com.huffpost.akadns.net., CNAME cs593.adn.mucdn.net., A 152.195.54.95 (142)
00:15:09.642229 IP 10.10.10.10.57342 > google-public-dns-a.google.com.domain: 40060+ AAAA? www.huffingtonpost.com. (40)
00:15:09.708198 IP google-public-dns-a.google.com.domain > 10.10.10.10.57342: 40060 3/0/0 CNAME www.huffingtonpost.com.huffpost.akadns.net., CNAME cs593.adn.mucdn.net., AAAA 2606:2800:221:18cd:1493:1b94:ea5:557 (154)

A outra coisa estranha é que se eu fizer isso dentro do python (usando a biblioteca de requisições, e especificamente, requests.packages.urllib3.connectionpool), ele fará o segundo normal de 20-ish no primeiro HTTP GET, mas se eu faça um segundo ou qualquer um depois disso, está brilhando rápido como deveria ser.

Abaixo estão dois tcpdumnps da versão "lenta" (você pode ver o atraso de 20) e, em seguida, novamente com o que você esperaria. O opendns retornando no primeiro é muito estranho.

    
por HodorTheCoder 15.09.2017 / 13:48

0 respostas