Here is some more info, namely an "strace" of the systemd-resolved
program.

(An "lsof"-excerpt with the open channels follows the trace-log, to make
sense of filedescriptors)

In a nutshell:  at some point, it receives the inet6 address 
"fe80::4687:fcff:fe9e:4ac7" in an "recvmsg" call on FD 9, which lsof prints as:
"systemd-r 4966 systemd-resolve    9u  netlink                         0t0 
15693998 ROUTE"
I don't understand what lsof tries to tell me here, but naively I'd assume that 
systemd-resolved also queries the routing table, and for that I also attach the 
output of "route -n -6" at the end of this message.

strace: Process 4966 attached
epoll_wait(4, [{EPOLLIN, {u32=3769468528, u64=94647668803184}}], 14, -1) = 1
clock_gettime(CLOCK_BOOTTIME, {tv_sec=1269407, tv_nsec=930758302}) = 0
recvfrom(12, NULL, 0, MSG_PEEK|MSG_TRUNC, NULL, NULL) = 21
recvmsg(12, {msg_name={sa_family=AF_INET, sin_port=htons(55365), 
sin_addr=inet_addr("127.0.0.1")}, msg_namelen=128->16, 
msg_iov=[{iov_base="j\204\1\0\0\1\0\0\0\0\0\0\3fpc\0\0\1\0\1", iov_len=3928}], 
msg_iovlen=1, msg_control=[{cmsg_len=28, cmsg_level=SOL_IP, 
cmsg_type=IP_PKTINFO, cmsg_data={ipi_ifindex=if_nametoindex("lo"), 
ipi_spec_dst=inet_addr("127.0.0.53"), ipi_addr=inet_addr("127.0.0.53")}}, 
{cmsg_len=20, cmsg_level=SOL_IP, cmsg_type=IP_TTL, cmsg_data=[64]}], 
msg_controllen=56, msg_flags=0}, 0) = 21
stat("/etc/hosts", {st_mode=S_IFREG|0644, st_size=356, ...}) = 0
stat("/etc/resolv.conf", {st_mode=S_IFREG|0644, st_size=324, ...}) = 0
clock_gettime(CLOCK_BOOTTIME, {tv_sec=1269407, tv_nsec=931200245}) = 0
sendto(9, {{len=24, type=RTM_GETADDR, flags=NLM_F_REQUEST|NLM_F_ACK|NLM_F_DUMP, 
seq=9, pid=0}, {ifa_family=AF_INET, ifa_prefixlen=32, ifa_flags=0, 
ifa_scope=RT_SCOPE_UNIVERSE, ifa_index=0}}, 24, 0, {sa_family=AF_NETLINK, 
nl_pid=0, nl_groups=00000000}, 16) = 24
recvmsg(9, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, 
msg_namelen=128->12, msg_iov=[{iov_base=NULL, iov_len=0}], msg_iovlen=1, 
msg_control=[{cmsg_len=20, cmsg_level=SOL_NETLINK, cmsg_type=0x3}], 
msg_controllen=24, msg_flags=MSG_TRUNC}, MSG_PEEK|MSG_TRUNC) = 256
recvmsg(9, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, 
msg_namelen=128->12, msg_iov=[{iov_base=[{{len=76, type=RTM_NEWADDR, 
flags=NLM_F_MULTI, seq=9, pid=4966}, {ifa_family=AF_INET, ifa_prefixlen=8, 
ifa_flags=IFA_F_PERMANENT, ifa_scope=RT_SCOPE_HOST, 
ifa_index=if_nametoindex("lo")}, [{{nla_len=8, nla_type=IFA_ADDRESS}, 
127.0.0.1}, {{nla_len=8, nla_type=IFA_LOCAL}, 127.0.0.1}, {{nla_len=7, 
nla_type=IFA_LABEL}, "lo"}, {{nla_len=8, nla_type=IFA_FLAGS}, IFA_F_PERMANENT}, 
{{nla_len=20, nla_type=IFA_CACHEINFO}, {ifa_prefered=4294967295, 
ifa_valid=4294967295, cstamp=3449, tstamp=3449}}]}, {{len=88, type=RTM_NEWADDR, 
flags=NLM_F_MULTI, seq=9, pid=4966}, {ifa_family=AF_INET, ifa_prefixlen=24, 
ifa_flags=IFA_F_PERMANENT, ifa_scope=RT_SCOPE_UNIVERSE, 
ifa_index=if_nametoindex("enp4s0")}, [{{nla_len=8, nla_type=IFA_ADDRESS}, 
10.2.2.1}, {{nla_len=8, nla_type=IFA_LOCAL}, 10.2.2.1}, {{nla_len=8, 
nla_type=IFA_BROADCAST}, 10.2.2.255}, {{nla_len=11, nla_type=IFA_LABEL}, 
"enp4s0"}, {{nla_len=8, nla_type=IFA_FLAGS}, IFA_F_PERMANENT}, {{nla_len=20, 
nla_type=IFA_CACHEINFO}, {ifa_prefered=4294967295, ifa_valid=4294967295, 
cstamp=3810, tstamp=3810}}]}, {{len=92, type=RTM_NEWADDR, flags=NLM_F_MULTI, 
seq=9, pid=4966}, {ifa_family=AF_INET, ifa_prefixlen=8, 
ifa_flags=IFA_F_PERMANENT, ifa_scope=RT_SCOPE_UNIVERSE, 
ifa_index=if_nametoindex("enp4s0")}, [{{nla_len=8, nla_type=IFA_ADDRESS}, 
10.2.2.250}, {{nla_len=8, nla_type=IFA_LOCAL}, 10.2.2.250}, {{nla_len=8, 
nla_type=IFA_BROADCAST}, 10.255.255.255}, {{nla_len=13, nla_type=IFA_LABEL}, 
"enp4s0:1"}, {{nla_len=8, nla_type=IFA_FLAGS}, IFA_F_PERMANENT}, {{nla_len=20, 
nla_type=IFA_CACHEINFO}, {ifa_prefered=4294967295, ifa_valid=4294967295, 
cstamp=10833228, tstamp=10833228}}]}], iov_len=5200}], msg_iovlen=1, 
msg_control=[{cmsg_len=20, cmsg_level=SOL_NETLINK, cmsg_type=0x3}], 
msg_controllen=24, msg_flags=0}, MSG_TRUNC) = 256
ppoll([{fd=9, events=POLLIN}], 1, {tv_sec=24, tv_nsec=999785000}, NULL, 8) = 1 
([{fd=9, revents=POLLIN}], left {tv_sec=24, tv_nsec=999783625})
recvmsg(9, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, 
msg_namelen=128->12, msg_iov=[{iov_base=NULL, iov_len=0}], msg_iovlen=1, 
msg_control=[{cmsg_len=20, cmsg_level=SOL_NETLINK, cmsg_type=0x3}], 
msg_controllen=24, msg_flags=MSG_TRUNC}, MSG_PEEK|MSG_TRUNC) = 20
recvmsg(9, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, 
msg_namelen=128->12, msg_iov=[{iov_base={{len=20, type=NLMSG_DONE, 
flags=NLM_F_MULTI, seq=9, pid=4966}, 0}, iov_len=5200}], msg_iovlen=1, 
msg_control=[{cmsg_len=20, cmsg_level=SOL_NETLINK, cmsg_type=0x3}], 
msg_controllen=24, msg_flags=0}, MSG_TRUNC) = 20
sendmsg(12, {msg_name={sa_family=AF_INET, sin_port=htons(55365), 
sin_addr=inet_addr("127.0.0.1")}, msg_namelen=16, 
msg_iov=[{iov_base="j\204\201\200\0\1\0\2\0\0\0\0\3fpc\0\0\1\0\1\300\f\0\1\0\1\0\0\0\0\0"...,
 iov_len=53}], msg_iovlen=1, msg_control=[{cmsg_len=28, cmsg_level=SOL_IP, 
cmsg_type=IP_PKTINFO, cmsg_data={ipi_ifindex=if_nametoindex("lo"), 
ipi_spec_dst=inet_addr("127.0.0.53"), ipi_addr=inet_addr("0.0.0.0")}}], 
msg_controllen=28, msg_flags=0}, 0) = 53
epoll_wait(4, [{EPOLLIN, {u32=3769468528, u64=94647668803184}}], 14, -1) = 1
clock_gettime(CLOCK_BOOTTIME, {tv_sec=1269407, tv_nsec=932073644}) = 0
recvfrom(12, NULL, 0, MSG_PEEK|MSG_TRUNC, NULL, NULL) = 21
recvmsg(12, {msg_name={sa_family=AF_INET, sin_port=htons(35665), 
sin_addr=inet_addr("127.0.0.1")}, msg_namelen=128->16, 
msg_iov=[{iov_base="\16j\1\0\0\1\0\0\0\0\0\0\3fpc\0\0\34\0\1", iov_len=3928}], 
msg_iovlen=1, msg_control=[{cmsg_len=28, cmsg_level=SOL_IP, 
cmsg_type=IP_PKTINFO, cmsg_data={ipi_ifindex=if_nametoindex("lo"), 
ipi_spec_dst=inet_addr("127.0.0.53"), ipi_addr=inet_addr("127.0.0.53")}}, 
{cmsg_len=20, cmsg_level=SOL_IP, cmsg_type=IP_TTL, cmsg_data=[64]}], 
msg_controllen=56, msg_flags=0}, 0) = 21
stat("/etc/resolv.conf", {st_mode=S_IFREG|0644, st_size=324, ...}) = 0
clock_gettime(CLOCK_BOOTTIME, {tv_sec=1269407, tv_nsec=932250666}) = 0
sendto(9, {{len=24, type=RTM_GETADDR, flags=NLM_F_REQUEST|NLM_F_ACK|NLM_F_DUMP, 
seq=10, pid=0}, {ifa_family=AF_INET6, ifa_prefixlen=128, ifa_flags=0, 
ifa_scope=RT_SCOPE_UNIVERSE, ifa_index=0}}, 24, 0, {sa_family=AF_NETLINK, 
nl_pid=0, nl_groups=00000000}, 16) = 24
recvmsg(9, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, 
msg_namelen=128->12, msg_iov=[{iov_base=NULL, iov_len=0}], msg_iovlen=1, 
msg_control=[{cmsg_len=20, cmsg_level=SOL_NETLINK, cmsg_type=0x3}], 
msg_controllen=24, msg_flags=MSG_TRUNC}, MSG_PEEK|MSG_TRUNC) = 144
recvmsg(9, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, 
msg_namelen=128->12, msg_iov=[{iov_base=[{{len=72, type=RTM_NEWADDR, 
flags=NLM_F_MULTI, seq=10, pid=4966}, {ifa_family=AF_INET6, ifa_prefixlen=128, 
ifa_flags=IFA_F_PERMANENT, ifa_scope=RT_SCOPE_HOST, 
ifa_index=if_nametoindex("lo")}, [{{nla_len=20, nla_type=IFA_ADDRESS}, ::1}, 
{{nla_len=20, nla_type=IFA_CACHEINFO}, {ifa_prefered=4294967295, 
ifa_valid=4294967295, cstamp=10601811, tstamp=10601811}}, {{nla_len=8, 
nla_type=IFA_FLAGS}, IFA_F_PERMANENT}]}, {{len=72, type=RTM_NEWADDR, 
flags=NLM_F_MULTI, seq=10, pid=4966}, {ifa_family=AF_INET6, ifa_prefixlen=64, 
ifa_flags=IFA_F_PERMANENT, ifa_scope=RT_SCOPE_LINK, 
ifa_index=if_nametoindex("enp4s0")}, [{{nla_len=20, nla_type=IFA_ADDRESS}, 
fe80::4687:fcff:fe9e:4ac7}, {{nla_len=20, nla_type=IFA_CACHEINFO}, 
{ifa_prefered=4294967295, ifa_valid=4294967295, cstamp=10601811, 
tstamp=10601811}}, {{nla_len=8, nla_type=IFA_FLAGS}, IFA_F_PERMANENT}]}], 
iov_len=5200}], msg_iovlen=1, msg_control=[{cmsg_len=20, 
cmsg_level=SOL_NETLINK, cmsg_type=0x3}], msg_controllen=24, msg_flags=0}, 
MSG_TRUNC) = 144
ppoll([{fd=9, events=POLLIN}], 1, {tv_sec=24, tv_nsec=999834000}, NULL, 8) = 1 
([{fd=9, revents=POLLIN}], left {tv_sec=24, tv_nsec=999832412})
recvmsg(9, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, 
msg_namelen=128->12, msg_iov=[{iov_base=NULL, iov_len=0}], msg_iovlen=1, 
msg_control=[{cmsg_len=20, cmsg_level=SOL_NETLINK, cmsg_type=0x3}], 
msg_controllen=24, msg_flags=MSG_TRUNC}, MSG_PEEK|MSG_TRUNC) = 20
recvmsg(9, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, 
msg_namelen=128->12, msg_iov=[{iov_base={{len=20, type=NLMSG_DONE, 
flags=NLM_F_MULTI, seq=10, pid=4966}, 0}, iov_len=5200}], msg_iovlen=1, 
msg_control=[{cmsg_len=20, cmsg_level=SOL_NETLINK, cmsg_type=0x3}], 
msg_controllen=24, msg_flags=0}, MSG_TRUNC) = 20
sendmsg(12, {msg_name={sa_family=AF_INET, sin_port=htons(35665), 
sin_addr=inet_addr("127.0.0.1")}, msg_namelen=16, 
msg_iov=[{iov_base="\16j\201\200\0\1\0\1\0\0\0\0\3fpc\0\0\34\0\1\300\f\0\34\0\1\0\0\0\0\0"...,
 iov_len=49}], msg_iovlen=1, msg_control=[{cmsg_len=28, cmsg_level=SOL_IP, 
cmsg_type=IP_PKTINFO, cmsg_data={ipi_ifindex=if_nametoindex("lo"), 
ipi_spec_dst=inet_addr("127.0.0.53"), ipi_addr=inet_addr("0.0.0.0")}}], 
msg_controllen=28, msg_flags=0}, 0) = 49
epoll_wait(4, [{EPOLLIN, {u32=3769468528, u64=94647668803184}}], 14, -1) = 1
clock_gettime(CLOCK_BOOTTIME, {tv_sec=1269407, tv_nsec=932976869}) = 0
recvfrom(12, NULL, 0, MSG_PEEK|MSG_TRUNC, NULL, NULL) = 21
recvmsg(12, {msg_name={sa_family=AF_INET, sin_port=htons(58010), 
sin_addr=inet_addr("127.0.0.1")}, msg_namelen=128->16, 
msg_iov=[{iov_base="\375\377\1\0\0\1\0\0\0\0\0\0\3fpc\0\0\17\0\1", 
iov_len=3928}], msg_iovlen=1, msg_control=[{cmsg_len=28, cmsg_level=SOL_IP, 
cmsg_type=IP_PKTINFO, cmsg_data={ipi_ifindex=if_nametoindex("lo"), 
ipi_spec_dst=inet_addr("127.0.0.53"), ipi_addr=inet_addr("127.0.0.53")}}, 
{cmsg_len=20, cmsg_level=SOL_IP, cmsg_type=IP_TTL, cmsg_data=[64]}], 
msg_controllen=56, msg_flags=0}, 0) = 21
stat("/etc/resolv.conf", {st_mode=S_IFREG|0644, st_size=324, ...}) = 0
getrandom("\xef\x0d", 2, GRND_NONBLOCK) = 2
clock_gettime(CLOCK_BOOTTIME, {tv_sec=1269407, tv_nsec=933163515}) = 0
openat(AT_FDCWD, "/run/systemd/netif/links/2", O_RDONLY|O_CLOEXEC) = -1 ENOENT 
(No such file or directory)
stat("/etc/resolv.conf", {st_mode=S_IFREG|0644, st_size=324, ...}) = 0
clock_gettime(CLOCK_BOOTTIME, {tv_sec=1269407, tv_nsec=933261481}) = 0
stat("/etc/resolv.conf", {st_mode=S_IFREG|0644, st_size=324, ...}) = 0
socket(AF_INET, SOCK_DGRAM|SOCK_CLOEXEC|SOCK_NONBLOCK, IPPROTO_IP) = 15
connect(15, {sa_family=AF_INET, sin_port=htons(53), 
sin_addr=inet_addr("10.2.2.3")}, 16) = 0
epoll_ctl(4, EPOLL_CTL_ADD, 15, {EPOLLIN, {u32=3769485520, 
u64=94647668820176}}) = 0
write(15, "\357\r\1\0\0\1\0\0\0\0\0\0\3fpc\0\0\17\0\1", 21) = 21
timerfd_settime(14, TFD_TIMER_ABSTIME, {it_interval={tv_sec=0, tv_nsec=0}, 
it_value={tv_sec=1269408, tv_nsec=715848000}}, NULL) = 0
epoll_wait(4, [{EPOLLIN, {u32=3769485520, u64=94647668820176}}], 17, -1) = 1
clock_gettime(CLOCK_BOOTTIME, {tv_sec=1269407, tv_nsec=936528358}) = 0
recvfrom(15, NULL, 0, MSG_PEEK|MSG_TRUNC, NULL, NULL) = 21
recvmsg(15, {msg_name={sa_family=AF_INET, sin_port=htons(53), 
sin_addr=inet_addr("10.2.2.3")}, msg_namelen=128->16, 
msg_iov=[{iov_base="\357\r\205\200\0\1\0\0\0\0\0\0\3fpc\0\0\17\0\1", 
iov_len=3928}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 21
epoll_ctl(4, EPOLL_CTL_DEL, 15, NULL)   = 0
close(15)                               = 0
sendmsg(12, {msg_name={sa_family=AF_INET, sin_port=htons(58010), 
sin_addr=inet_addr("127.0.0.1")}, msg_namelen=16, 
msg_iov=[{iov_base="\375\377\201\200\0\1\0\0\0\0\0\0\3fpc\0\0\17\0\1", 
iov_len=21}], msg_iovlen=1, msg_control=[{cmsg_len=28, cmsg_level=SOL_IP, 
cmsg_type=IP_PKTINFO, cmsg_data={ipi_ifindex=if_nametoindex("lo"), 
ipi_spec_dst=inet_addr("127.0.0.53"), ipi_addr=inet_addr("0.0.0.0")}}], 
msg_controllen=28, msg_flags=0}, 0) = 21
timerfd_settime(14, TFD_TIMER_ABSTIME, {it_interval={tv_sec=0, tv_nsec=0}, 
it_value={tv_sec=0, tv_nsec=0}}, NULL) = 0
epoll_wait(4, 




filedescriptors by "lsof":

systemd-r 4966 systemd-resolve    0r      CHR                1,3      0t0       
 6 /dev/null
systemd-r 4966 systemd-resolve    1u     unix 0xffff9602c499f800      0t0 
15693992 type=STREAM
systemd-r 4966 systemd-resolve    2u     unix 0xffff9602c499f800      0t0 
15693992 type=STREAM
systemd-r 4966 systemd-resolve    3u     unix 0xffff9602c499c000      0t0 
15693994 type=DGRAM
systemd-r 4966 systemd-resolve    4u  a_inode               0,13        0    
12693 [eventpoll]
systemd-r 4966 systemd-resolve    5u  a_inode               0,13        0    
12693 [signalfd]
systemd-r 4966 systemd-resolve    6u  a_inode               0,13        0    
12693 [timerfd]
systemd-r 4966 systemd-resolve    7r      REG                0,4        0    
16602 /proc/sys/kernel/hostname
systemd-r 4966 systemd-resolve    8r  a_inode               0,13        0    
12693 inotify
systemd-r 4966 systemd-resolve    9u  netlink                         0t0 
15693998 ROUTE
systemd-r 4966 systemd-resolve   10u  a_inode               0,13        0    
12693 [timerfd]
systemd-r 4966 systemd-resolve   11u     unix 0xffff9602c499e800      0t0 
15693999 type=STREAM
systemd-r 4966 systemd-resolve   12u     IPv4           15694000      0t0      
UDP localhost:domain 
systemd-r 4966 systemd-resolve   13u     IPv4           15694001      0t0      
TCP localhost:domain (LISTEN)
systemd-r 4966 systemd-resolve   14u  a_inode               0,13        0    
12693 [timerfd]


route -n -6
Kernel IPv6 routing table
Destination                    Next Hop                   Flag Met Ref Use If
::/0                           ::                         !n   -1  1     1 lo
fe80::/64                      ::                         U    256 2     1 
enp4s0
::/0                           ::                         !n   -1  1     1 lo
::1/128                        ::                         Un   0   10   698 lo
fe80::4687:fcff:fe9e:4ac7/128  ::                         Un   0   9    20 
enp4s0
ff00::/8                       ::                         U    256 9   354 
enp4s0
::/0                           ::                         !n   -1  1     1 lo


At this point, I don't know what sort of routing-facility systemd-resolved 
consults, but either that or systemd-resolved's interpretation of that info 
seems to be the root-cause.

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to systemd in Ubuntu.
https://bugs.launchpad.net/bugs/1853669

Title:
  systemd resolves own hostname to link local ipv6 address

Status in systemd package in Ubuntu:
  Incomplete

Bug description:
  I've got an ethernet-device that only has a configured ipv4 address,
  and some auto-generated link-local (aka "scope link") ipv6 address.

  Any tool doing a DNS query (and /lib/systemd/systemd-resolved is the
  DNS-server listening on 127.0.0.53) for this host's hostname gets back
  two addresses: the correct ipv4 address, and a broken ipv6 address.

  Unlike on ipv4,  it is possible for the same ipv6-address to be
  assigned to multiple devices, and therefore the address is only valid
  in the context of the eth-device.

  Now, if "ifconfig" shows "inet6 fe80::4687:fcff:fe9e:4ac7  prefixlen 64  
scopeid 0x20<link>"
  then "fe80::4687:fcff:fe9e:4ac7" is NOT a connectable address, and syscall 
connect() typically fails with EINVAL.

  To make it a valid address, it needs to be suffixed with a "%" and the device 
name, like:
  fe80::4687:fcff:fe9e:4ac7%enp4s0

  Either the resolver can return the link name attached to the address
  separated with a "%" char, or it needs to ignore link-local inet6
  addresses.

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/systemd/+bug/1853669/+subscriptions

-- 
Mailing list: https://launchpad.net/~touch-packages
Post to     : touch-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~touch-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to