qemu-system-x86_64: ipv6 and dns is broken with netdev user

Bug #1642421 reported by manut
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
QEMU
Expired
Undecided
Unassigned

Bug Description

Hi,

dhcp inside qemu returns an ipv6 address as dns-server. However this is not
working. If i replace it with the ipv4 address '10.0.0.2' dns is working
again. I would expect that the qemu emulated dhcp server responds either an
ipv4 configuration that is working or its dns server/forwarder listens on the
ipv6 address returned by the emulated dhcp server.

I used latest qemu from git ( b0bcc86d2a87456f5a276f941dc775b265b309cf) and used the following commands:

$ ./qemu-system-x86_64 -enable-kvm -M pc -device virtio-rng-pci -device
virtio-net-pci,netdev=user.0 -drive file=buildenv.img,if=virtio,bus=1,unit=0
-no-reboot -netdev user,id=user.0,hostfwd=tcp::5022-:22,hostfwd=tcp::7587-:7588
-m 1024 -usb -nographic -smp 4

buildenv.img is a debian jessie amd64 installation.

Inside qemu the network is configured to use dhcp:

$ cat /etc/network/interfaces
allow-hotplug eth0
iface eth0 inet dhcp

$ ifconfig eth0
eth0 Link encap:Ethernet HWaddr 52:54:00:12:34:56
          inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0
          inet6 addr: fe80::5054:ff:fe12:3456/64 Scope:Link
          inet6 addr: fec0::5054:ff:fe12:3456/64 Scope:Site
          UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
          RX packets:10 errors:0 dropped:0 overruns:0 frame:0
          TX packets:28 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:3215 (3.1 KiB) TX bytes:3638 (3.5 KiB)

$ cat /etc/resolv.conf
nameserver fec0::3

$ arp google.de
google.de: Host name lookup failure

$ strace -f arp google.de
...
socket(PF_INET6, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 4
connect(4, {sa_family=AF_INET6, sin6_port=htons(53), inet_pton(AF_INET6, "fec0::3", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = 0
poll([{fd=4, events=POLLOUT}], 1, 0) = 1 ([{fd=4, revents=POLLOUT}])
sendto(4, "\17\320\1\0\0\1\0\0\0\0\0\0\6google\2de\0\0\1\0\1", 27, MSG_NOSIGNAL, NULL, 0) = 27
poll([{fd=4, events=POLLIN}], 1, 5000) = 0 (Timeout)
poll([{fd=4, events=POLLOUT}], 1, 0) = 1 ([{fd=4, revents=POLLOUT}])
sendto(4, "\17\320\1\0\0\1\0\0\0\0\0\0\6google\2de\0\0\1\0\1", 27, MSG_NOSIGNAL, NULL, 0) = 27
poll([{fd=4, events=POLLIN}], 1, 5000) = 0 (Timeout)
close(4) = 0
...

$ echo nameserver 10.0.0.2 > /etc/resolv.conf

$ arp google.de
google.de (216.58.208.35) -- no entry

Note: I reported this bug also to debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=844566

Regards,

  Manuel

Revision history for this message
Rodrigo V. G. (rodrivg) wrote :

I have a similar issue with qemu 2.7 from current Debian amd64 unstable/sid. Starting qemu with:

kvm -m 640 -hda debian-8-amd64.qcow2 -net nic,model=rtl8139 -net user,hostfwd=tcp:127.0.0.1:5005-:22

I tested DNS resolution in the host and in the guest.

The conclusions are:

When the host's /etc/resolv.conf has, as the only line, a ipv6 nameserver like fd2d:[...]::1 or a ipv6 link-local address with a scope like fe80::[...]%wlan0 then:

 In the host, DNS resolution works ok in Debian sid. In Debian 8 'host' and 'dig' fail in the case of link-local address and work otherwise, and 'ping' works anyway.
 In the guest, DNS resolution does not work at all (but access to IPv4 addresses directly works).

In this case there is not global ipv6 connectivity, but some combinations of routers and network managers in the host lead to /etc/resolv.conf with only nameserver line a ipv6 or ipv6 link-local with scope address. This breaks DNS resolution in the guests. In this same configuration VirtualBox works ok.

An old (2007) patch from glibc for the ipv6 link-local with scope case is at:

https://sourceware.org/bugzilla/show_bug.cgi?id=5475

Revision history for this message
Thomas Huth (th-huth) wrote :

The QEMU project is currently considering to move its bug tracking to another system. For this we need to know which bugs are still valid and which could be closed already. Thus we are setting all older bugs to
"Incomplete" now.
If you still think this bug report here is valid, then please switch the state back to "New" within the next 60 days, otherwise this report will be marked as "Expired". Thank you and sorry for the inconvenience.

Changed in qemu:
status: New → Incomplete
Revision history for this message
Launchpad Janitor (janitor) wrote :

[Expired for QEMU because there has been no activity for 60 days.]

Changed in qemu:
status: Incomplete → Expired
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.