Testing an upgrade from 1.17.2 to 1.18.0 and all curl requests to internal names started failing with "Could not resolve host". adig and ahost are both able to resolve the names just fine. It appears that this affects any lookup that only returns IPv6 addresses, and possibly also any lookup that is behind a DNAME. The IPv6 case is easier to reproduce so that's what I've put below:
This can be easily reproduced from `curl -vs https://production-all-ipv6.easypost.com/health/ok` on any host with c-ares 1.18.0 installed and curl linked against c-ares. Bizarrely enough, if I strace curl, I see it actually connecting to the correct remote IP before returning the "Could not resolve host" error. ??? I did a git-bisect run and it points at 778d7cd9e7bf6b31ce697f47cbe935e33a63a5b4 <https://github.com/c-ares/c-ares/commit/778d7cd9e7bf6b31ce697f47cbe935e33a63a5b4> as the offending commit. I'm running dnsmasq on localhost and nothing about it has changed. Below is some probably-relevant output from a system with c-ares 1.17.2 installed system wide and c-ares 1.18.0 installed in the "./prefix" directory. $ curl --version curl 7.79.1 (x86_64-redhat-linux-gnu) libcurl/7.79.1 OpenSSL/1.0.2u zlib/1.2.3 zstd/1.4.9 c-ares/1.17.2 libidn2/2.3.0 libssh2/1.10.0 nghttp2/1.45.1 OpenLDAP/2.4.40 Release-Date: 2021-09-22 Protocols: dict file ftp ftps gopher gophers http https imap imaps ldap ldaps mqtt pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp Features: alt-svc AsynchDNS HSTS HTTP2 HTTPS-proxy IDN IPv6 Largefile libz NTLM NTLM_WB SSL UnixSockets zstd $ env LD_LIBRARY_PATH=./prefix/lib/ curl --version curl 7.79.1 (x86_64-redhat-linux-gnu) libcurl/7.79.1 OpenSSL/1.0.2u zlib/1.2.3 zstd/1.4.9 c-ares/1.18.0 libidn2/2.3.0 libssh2/1.10.0 nghttp2/1.45.1 OpenLDAP/2.4.40 Release-Date: 2021-09-22 Protocols: dict file ftp ftps gopher gophers http https imap imaps ldap ldaps mqtt pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp Features: alt-svc AsynchDNS HSTS HTTP2 HTTPS-proxy IDN IPv6 Largefile libz NTLM NTLM_WB SSL UnixSockets zstd $ curl https://production-all-ipv6.easypost.com/health/ok UP $ env LD_LIBRARY_PATH=./prefix/lib/ curl https://production-all-ipv6.easypost.com/health/ok curl: (6) Could not resolve host: production-all-ipv6.easypost.com $ env LD_LIBRARY_PATH=./prefix/lib/ strace curl https://production-all-ipv6.easypost.com/health/ok [snip] connect(5, {sa_family=AF_INET6, sin6_port=htons(53), inet_pton(AF_INET6, "::1", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = 0 sendto(5, "Q\337\1\0\0\1\0\0\0\0\0\0\23production-all-ipv6"..., 50, MSG_NOSIGNAL, NULL, 0) = 50 sendto(5, "~\311\1\0\0\1\0\0\0\0\0\0\23production-all-ipv6"..., 50, MSG_NOSIGNAL, NULL, 0) = 50 poll([{fd=5, events=POLLIN|POLLRDNORM}], 1, 0) = 1 ([{fd=5, revents=POLLIN|POLLRDNORM}]) recvfrom(5, "Q\337\201\200\0\1\0\0\0\0\0\0\23production-all-ipv6"..., 4097, 0, {sa_family=AF_INET6, sin6_port=htons(53), inet_pton(AF_INET6, "::1", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, [28]) = 50 recvfrom(5, "~\311\201\200\0\1\0\4\0\0\0\0\23production-all-ipv6"..., 4097, 0, {sa_family=AF_INET6, sin6_port=htons(53), inet_pton(AF_INET6, "::1", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, [28]) = 162 socket(PF_INET6, SOCK_DGRAM, IPPROTO_UDP) = 6 connect(6, {sa_family=AF_INET6, sin6_port=htons(443), inet_pton(AF_INET6, "2607:f0d0:2901:7e::3", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = 0 getsockname(6, {sa_family=AF_INET6, sin6_port=htons(43428), inet_pton(AF_INET6, "2607:f0d0:2901:4b::66", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, [28]) = 0 close(6) = 0 socket(PF_INET6, SOCK_DGRAM, IPPROTO_UDP) = 6 connect(6, {sa_family=AF_INET6, sin6_port=htons(443), inet_pton(AF_INET6, "2607:f0d0:3803:ca::3", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = 0 getsockname(6, {sa_family=AF_INET6, sin6_port=htons(44405), inet_pton(AF_INET6, "2607:f0d0:2901:4b::66", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, [28]) = 0 close(6) = 0 socket(PF_INET6, SOCK_DGRAM, IPPROTO_UDP) = 6 connect(6, {sa_family=AF_INET6, sin6_port=htons(443), inet_pton(AF_INET6, "2607:f0d0:3803:ca::2", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = 0 getsockname(6, {sa_family=AF_INET6, sin6_port=htons(33765), inet_pton(AF_INET6, "2607:f0d0:2901:4b::66", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, [28]) = 0 close(6) = 0 socket(PF_INET6, SOCK_DGRAM, IPPROTO_UDP) = 6 connect(6, {sa_family=AF_INET6, sin6_port=htons(443), inet_pton(AF_INET6, "2607:f0d0:2901:7e::2", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = 0 getsockname(6, {sa_family=AF_INET6, sin6_port=htons(59083), inet_pton(AF_INET6, "2607:f0d0:2901:4b::66", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, [28]) = 0 close(6) = 0 close(5) = 0 rt_sigaction(SIGPIPE, {SIG_IGN, [PIPE], SA_RESTORER|SA_RESTART, 0x7ff5cb5f4570}, NULL, 8) = 0 rt_sigaction(SIGPIPE, {SIG_IGN, [PIPE], SA_RESTORER|SA_RESTART, 0x7ff5cb5f4570}, NULL, 8) = 0 write(2, "c", 1c) = 1 write(2, "u", 1u) = 1 write(2, "r", 1r) = 1 write(2, "l", 1l) = 1 write(2, ":", 1:) = 1 write(2, " ", 1 ) = 1 write(2, "(", 1() = 1 write(2, "6", 16) = 1 write(2, ")", 1)) = 1 write(2, " ", 1 ) = 1 write(2, "C", 1C) = 1 write(2, "o", 1o) = 1 write(2, "u", 1u) = 1 write(2, "l", 1l) = 1 write(2, "d", 1d) = 1 write(2, " ", 1 ) = 1 write(2, "n", 1n) = 1 write(2, "o", 1o) = 1 write(2, "t", 1t) = 1 write(2, " ", 1 ) = 1 write(2, "r", 1r) = 1 write(2, "e", 1e) = 1 write(2, "s", 1s) = 1 write(2, "o", 1o) = 1 write(2, "l", 1l) = 1 write(2, "v", 1v) = 1 write(2, "e", 1e) = 1 write(2, " ", 1 ) = 1 write(2, "h", 1h) = 1 write(2, "o", 1o) = 1 write(2, "s", 1s) = 1 write(2, "t", 1t) = 1 write(2, ":", 1:) = 1 -- James Brown Engineer
-- c-ares mailing list c-ares@lists.haxx.se https://lists.haxx.se/listinfo/c-ares