[Bug 1853669] Re: systemd resolves own hostname to link local ipv6 address

Andreas L avl.ramschbox at gmx.at
Sun Nov 24 15:01:51 UTC 2019


Most of the times, the first hit (namely the ipv4 address) is all that
is used from the DNS query.

In my case, it is essentially a testcase for Tcl's socket, which tries
to establish a connection to an unlistened port, and expects a
"connection refused" error.  But Tcl in this case(namely that the
connection gets refused) attempts the connect on the next address-
result, which is then the bad ipv6-address. That one then caused an
"EINVAL" from the connect() syscall, which it reported up, so the
testcase expecting "connection refused" failed.

I'm aware that the impact is not very big, but that just explains, why
it wasn't already noticed long before.

Conclusion is, that DNS should either not return an inet6 link-local
address at all, as this cannot be used that way (namely without the name
of the network-device), or it should only provide it together with the
network-device, if that is possible in the DNS protocol.

-- 
You received this bug notification because you are a member of Ubuntu
Foundations Bugs, 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:
  New

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



More information about the foundations-bugs mailing list