mirror of
https://github.com/hickory-dns/hickory-dns.git
synced 2026-04-25 11:15:54 +03:00
[GH-ISSUE #1480] resolve -s works, but ping fails #679
Labels
No labels
blocked
breaking-change
bug
bug:critical
bug:tests
cleanup
compliance
compliance
compliance
crate:all
crate:client
crate:native-tls
crate:proto
crate:recursor
crate:resolver
crate:resolver
crate:rustls
crate:server
crate:util
dependencies
docs
duplicate
easy
easy
enhance
enhance
enhance
feature:dns-over-https
feature:dns-over-quic
feature:dns-over-tls
feature:dnsssec
feature:global_lb
feature:mdns
feature:tsig
features:edns
has workaround
ops
perf
platform:WASM
platform:android
platform:fuchsia
platform:linux
platform:macos
platform:windows
pull-request
question
test
tools
tools
trust
unclear
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
starred/hickory-dns#679
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @MarkSwanson on GitHub (May 5, 2021).
Original GitHub issue: https://github.com/hickory-dns/hickory-dns/issues/1480
Describe the bug
trust-dns does not correctly support 'ping'.
To Reproduce
configure trust-dns for zone i.mark1010.com
@ IN SOA i.mark1010.com. root.i.mark1010.com. (
199609204 ; Serial
28800 ; Refresh
7200 ; Retry
604800 ; Expire
86400) ; Minimum TTL
linux A 192.168.1.201
www CNAME linux
ns1 CNAME linux
Note that i.mark1010.com has its own ns:
$ dig @173.245.58.51 i.mark1010.com ns
i.mark1010.com. 83276 IN NS 192.168.1.201.
$ strace -s 150 ping www.i.mark1010.com
FAILS.
strace relevant bits:
connect(5, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
sendmmsg(5, [{msg_hdr={msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="\347\1\1\0\0\1\0\0\0\0\0\0\3www\1i\10mark1010\3com\0\0\1\0\1", iov_len=36}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, msg_len=36}, {msg_hdr={msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="\374\34\1\0\0\1\0\0\0\0\0\0\3www\1i\10mark1010\3com\0\0\34\0\1", iov_len=36}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, msg_len=36}], 2, MSG_NOSIGNAL) = 2
recvfrom(5, "\374\34\204\0\0\1\0\1\0\1\0\0\3www\1i\10mark1010\3com\0\0\34\0\1\3www\1i\10mark1010\3com\0\0\5\0\1\0\1Q\200\0\10\5linux\300(\300(\0\2\0\1\0\1Q\200\0\6\3ns1\300(", 2048, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, [28->16]) = 92
recvfrom(5, "\347\1\204\0\0\1\0\1\0\1\0\1\3www\1i\10mark1010\3com\0\0\1\0\1\3www\1i\10mark1010\3com\0\0\5\0\1\0\1Q\200\0\10\5linux\300(\300(\0\2\0\1\0\1Q\200\0\6\3ns1\300(\300B\0\1\0\1\0\1Q\200\0\4\300\250\1\311", 65536, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, [28->16]) = 108
trust-dns log:
1620231073.530222:INFO:trust_dns_server::server::server_future:594:request: 10517 type: Query op_code: Query dnssec: false name: www.i.mark1010.com. type: A class: IN
1620231073.530266:INFO:trust_dns_server::authority::catalog:407:request: 10517 found authority: i.mark1010.com.
1620231073.530273:INFO:trust_dns_server::server::response_handler:49:response: 7953 response_code: 0
1620231073.530329:INFO:trust_dns_server::server::response_handler:49:response: 10517 response_code: 0
Note that trust-dns resolver client works fine (dig resolves things fine too):
$ resolve -s www.i.mark1010.com
Querying for www.i.mark1010.com A from udp:127.0.0.1:53, tcp:127.0.0.1:53
Success for query name: www.i.mark1010.com type: A class: IN
linux.i.mark1010.com. 86400 IN A 192.168.1.201
Expected behavior
I expect ping to work.
System:
ubuntu 20.04.2
rustc 1.53.0-nightly (42816d61e 2021-04-24)
Version:
from git a couple of days ago.
Also from trust-dns log: 1620231444.685286:INFO:named:349:Trust-DNS 0.20.1 starting
Additional context
I'm not running dnsmasq, avahi or any other dns-related server.
Also, in case it helps I tried (failed) again with 'ping -4':
strace -s 150 ping -4 www.i.mark1010.com
connect(4, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
sendto(4, "\200\333\1\0\0\1\0\0\0\0\0\0\3www\1i\10mark1010\3com\0\0\1\0\1", 36, MSG_NOSIGNAL, NULL, 0) = 36
recvfrom(4, "\200\333\204\0\0\1\0\1\0\1\0\1\3www\1i\10mark1010\3com\0\0\1\0\1\3www\1i\10mark1010\3com\0\0\5\0\1\0\1Q\200\0\10\5linux\300(\300(\0\2\0\1\0\1Q\200\0\6\3ns1\300(\300B\0\1\0\1\0\1Q\200\0\4\300\250\1\311", 1024, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, [28->16]) = 108
Also, resolve (success) strace is:
strace -s 150 resolve -s www.i.mark1010.com
sendto(6, "\302\211\1\0\0\1\0\0\0\0\0\0\3www\1i\10mark1010\3com\0\0\1\0\1", 36, MSG_NOSIGNAL, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 36
recvfrom(6, "\302\211\204\0\0\1\0\1\0\1\0\1\3www\1i\10mark1010\3com\0\0\1\0\1\3www\1i\10mark1010\3com\0\0\5\0\1\0\1Q\200\0\10\5linux\300(\300(\0\2\0\1\0\1Q\200\0\6\3ns1\300(\300B\0\1\0\1\0\1Q\200\0\4\300\250\1\311", 2048, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, [128->16]) = 108
ping is making a 200\333 request, and resolve is making a 302\211 request?
Thought? Suggestions? Thanks!!!
@MarkSwanson commented on GitHub (May 5, 2021):
Also, /etc/nsswitch.conf:
hosts: files dns
/etc/resolv.conf:
nameserver 127.0.0.1
@bluejekyll commented on GitHub (May 8, 2021):
Thanks for this report. I'll need to look at your report and decode some of what you've posted to try and understand what's going on here. I don't at the moment understand how
pingoperates differently in such a way as to dislike the responses from trust-dns.@MarkSwanson commented on GitHub (May 9, 2021):
Thanks for looking into it. I found it odd the first few sendto bytes were different - recvfrom too. If I can format things better, or do different tests please let me know.
I'm a little slow responding to email, but I'm happy to chat via discord if you want to debug/test a few things.