Guys, In fact, the "ethtool" workaround is far from perfect, I'm still seeing lots of connectivity issues within my KVM Host and its Guests, even after disabling gso/tso/tx on all interfaces, both virtual (within guests) and physical (at the host).
I really appreciate any help! Thanks! Thiago On 19 October 2014 03:30, Martinx - ジェームズ <thiagocmarti...@gmail.com> wrote: > Oops! > > It seems to be working now! :-D > > This that I just said: > > I tried to disable tso/gso/tx at another guest, of vlan100 net, didn't >> worked either. >> > > Isn't true... I created a new guest, side-by-side with "guest-fw-1", on > vlan100, and after disabling `tso/gso/tx`, its connectivity becomes stable! > > I'll try this: git://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git > > Nevertheless, I'm bit more confused now, the problem was fixed by > disabling `tso/gso/tx` but, I did this *only within this new > "guest-server-1"* that I created within vlan100... Only at it, I disabled > "tso/gso/tx", so, the problem seems to not be within the "guest-fw-1" as I > was thinking... Weird... > > Tks, > Thiago > > >> Regards, >> Thiago >> >> On 29 August 2014 11:20, Vlad Yasevich <vyase...@redhat.com> wrote: >> >>> [ realized that the bug and reporter were non cc'd, updated cc list] >>> >>> On 08/28/2014 02:40 PM, Thiago Martins wrote: >>> > Public bug reported: >>> > >>> > Guys, >>> > >>> > Trusty QEmu 2.0 Hypervisor fails to create a consistent virtual >>> network. >>> > It does not route tagged VLAN packets. >>> > >>> >>> The have a been a bunch of rather recent changes to the kernel to support >>> guest VLANs correctly. The issues have been around TSO/GSO >>> implementation >>> in the kernel. >>> >>> Could try disabling TSO/GSO and tx checksums on the vlan devices in the >>> guest >>> and see if it solves your problem? >>> >>> If it does, could you try the kernel from >>> git://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git >>> turn the offloads back on and see if the problem is solved? >>> >>> Thanks >>> -vlad >>> >>> > That's it, it is impossible to use Trusty acting as a QEmu 2.0 >>> > Hypervisor (metapakage `ubuntu-virt-server`), to make a basic virtual >>> > tagged network within itself. QEmu 2.X guest does not route traffic >>> when >>> > with tagged VLANs! >>> > >>> > So, Trusty QEmu 2.0 Hypervisor cannot be used to host guests acting as >>> > "firewalls / routers", and it have an easy to reproduce, connectivity >>> > problem. >>> > >>> > This network problem affects Ubuntu 14.04.1 (Linux-3.13.0-35-generic) >>> > with QEmu 2.0 (it also affects 14.10, Linux 3.16 - QEmu 2.1). >>> > >>> > I have this very same setup up and running, on about ~100 physical >>> > servers (others Trusty QEmu 2.0 Hypervisors), and in only a few of >>> them, >>> > the QEmu Hypervisors dedicated to host "guest acting as routers / >>> > firewalls", like a "borger gateway" for example, that it does not work >>> > as expected. >>> > >>> > One interesting thing to note is that, this BUG appear only, and only >>> > at, the QEmu Hypervisors dedicated to host guests that are used as >>> > `router / firewalls` (as I said above), others QEmu Hypervisors of my >>> > network does not suffer from this problem. >>> > >>> > Another interesting point is that it fails to route tagged VLAN packets >>> > only when these packets are originated from within the Hypervisor >>> > itself, I mean, packets from both host and other guests (not the >>> > router/firewall guest itself), suffer from this connectivity problem. >>> > >>> > As a workaroung / fix, Xen-4.4 can be used, instead of QEmu 2.0, as a >>> > "border hypervisor". So, this proves that there is something wrong with >>> > QEmu. >>> > >>> > I already tested it with both `openvswitch-switch` and with `bridge- >>> > utils`, same bad results. So, don't waste your time trying `bridge- >>> > utils` (optional steps while reproducing it), you can keep OVS bridges >>> > from original design. >>> > >>> > I think that I'm using the best pratices to build this environment, as >>> > follows... >>> > >>> > >>> > * Topology * >>> > >>> > >>> > QEmu 2.0 Hypervisor - (qemu-host-1.domain.com - the "border >>> hypervisor"): >>> > >>> > 1- Physical machine with 3 NICs; >>> > 2- Minimal Ubuntu 14.04.1 installed and upgraded; >>> > 3- Packages installed: "ubuntu-virt-server openvswitch-switch rdnssd >>> tcpdump". >>> > >>> > - eth0 connected to the Internet - VLAN tag 10; >>> > - eth1 connected to the LAN1 - VLAN tag 100; >>> > - eth2 connected to the LAN2 - VLAN tag 200; >>> > >>> > >>> > Guest (guest-fw-1.domain.com - the "border gateway" itself - regular >>> guest acting as a router with iptables/ip6tables): >>> > >>> > 1- Virtual Machine with 3 NICs (VirtIO); >>> > 2- Minimal Virtual Machine Ubuntu 14.04.1 installed and upgraded; >>> > 3- Packages installed: "aiccu iptables vlan pv-grub-menu". >>> > >>> > >>> > OBS: You'll need `virt-manager` to connect at `qemu-host-1` to install >>> > `guest-fw-1`. Then, use `guest-fw-1` as a default gateway for your >>> > (virt-)lab network, including the `qemu-host-1` itself. >>> > >>> > >>> > Steps to reproduce >>> > >>> > >>> > * Preparing the `qemu-host-1` host: >>> > >>> > - Configure the /etc/network/interfaces with: >>> > >>> > --- >>> > # The loopback network interface >>> > auto lo >>> > iface lo inet loopback >>> > >>> > auto eth0 >>> > iface eth0 inet manual >>> > up ip link set $IFACE up >>> > down ip link set $IFACE down >>> > >>> > auto eth1 >>> > iface eth1 inet manual >>> > up ip link set dev $IFACE up >>> > down ip link set dev $IFACE down >>> > >>> > auto ovsbr1p1 >>> > iface ovsbr1p1 inet6 auto >>> > >>> > iface ovsbr1p1 inet static >>> > address 192.168.1.10 >>> > netmask 24 >>> > gateway 192.168.1.1 >>> > >>> > auto eth2 >>> > iface eth2 inet manual >>> > up ip link set $IFACE up >>> > down ip link set $IFACE down >>> > --- >>> > >>> > >>> > - Creating the Hypervisor OVS Bridges: >>> > >>> > ovs-vsctl add-br ovsbr0 >>> > ovs-vsctl add-br ovsbr1 >>> > ovs-vsctl add-br ovsbr2 >>> > >>> > >>> > - Attaching the bridges to the NICs: >>> > >>> > ovs-vsctl add-port ovsbr0 eth0 >>> > ovs-vsctl add-port ovsbr1 eth1 >>> > ovs-vsctl add-port ovsbr2 eth2 >>> > >>> > >>> > - Creating the OVS internal tagged interface (best practice?), so the >>> QEmu Hypervisor itself can have its own IP (v4 and v6): >>> > >>> > ovs-vsctl add-port ovsbr1 ovsbr1p1 tag=100 -- set interface ovsbr1p1 >>> type=internal >>> > ovs-vsctl set interface ovsbr1p1 mac=\"32:ac:85:72:ab:fe\" >>> > >>> > >>> > NOTE: >>> > >>> > * I'm fixing the MAC Address of ovsbr1p1 because I like to use IPv6 >>> > with SLAAC, so, it remain fixed across host reboots. >>> > >>> > >>> > - Making Libvirt aware of OVS Bridges: >>> > >>> > Create 3 files, one for each bridge, like this (ovsbr0.xml, ovsbr1.xml >>> > and ovsbr2.xml): >>> > >>> > --- ovsbr0.xml contents: >>> > <network> >>> > <name>ovsbr0</name> >>> > <forward mode='bridge'/> >>> > <bridge name='ovsbr0'/> >>> > <virtualport type='openvswitch'/> >>> > </network> >>> > --- >>> > >>> > --- ovsbr1.xml contents: >>> > <network> >>> > <name>ovsbr1</name> >>> > <forward mode='bridge'/> >>> > <bridge name='ovsbr1'/> >>> > <virtualport type='openvswitch'/> >>> > </network> >>> > --- >>> > >>> > --- ovsbr2.xml contents: >>> > <network> >>> > <name>ovsbr2</name> >>> > <forward mode='bridge'/> >>> > <bridge name='ovsbr2'/> >>> > <virtualport type='openvswitch'/> >>> > </network> >>> > --- >>> > >>> > >>> > Run: >>> > >>> > virsh net-define ovsbr0.xml >>> > virsh net-define ovsbr1.xml >>> > virsh net-define ovsbr2.xml >>> > >>> > virsh net-autostart ovsbr0 >>> > virsh net-autostart ovsbr1 >>> > virsh net-autostart ovsbr2 >>> > >>> > virsh net-start ovsbr0 >>> > virsh net-start ovsbr1 >>> > virsh net-start ovsbr2 >>> > >>> > >>> > - Creating the "guest-fw-1.domain.com" (Ubuntu 14.04.1 - Minimum >>> Virtual Machine): >>> > >>> > 1- VM Configuration file (network-only / cutted): >>> > >>> > --- >>> > <interface type='network'> >>> > <mac address='52:54:00:41:8c:3f'/> >>> > <source network='ovsbr0'/> >>> > <model type='virtio'/> >>> > <address type='pci' domain='0x0000' bus='0x00' slot='0x03' >>> function='0x0'/> >>> > </interface> >>> > <interface type='network'> >>> > <mac address='52:54:00:27:b2:7d'/> >>> > <source network='ovsbr1'/> >>> > <model type='virtio'/> >>> > <address type='pci' domain='0x0000' bus='0x00' slot='0x09' >>> function='0x0'/> >>> > </interface> >>> > <interface type='network'> >>> > <mac address='52:54:00:ff:35:5c'/> >>> > <source network='ovsbr2'/> >>> > <model type='virtio'/> >>> > <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' >>> function='0x0'/> >>> > </interface> >>> > --- >>> > >>> > 2- Configure "guest-fw-1.domain.com" (the router / firewall guest) >>> > /etc/network/interfaces file like this: >>> > >>> > --- >>> > auto vlan10 >>> > iface vlan10 inet static >>> > vlan_raw_device eth0 >>> > address 200.2.1.106 >>> > netmask 29 >>> > gateway 200.2.1.105 >>> > dns-nameserver 8.8.8.8 >>> > >>> > auto vlan100 >>> > iface vlan100 inet6 static >>> > vlan_raw_device eth1 >>> > address 2001:129X:2XX:810X::2 >>> > netmask 64 >>> > dns-nameserver 2001:4860:4860::8844 2001:4860:4860::8888 >>> > >>> > iface vlan100 inet static >>> > vlan_raw_device eth1 >>> > address 192.168.4.1 >>> > netmask 24 >>> > >>> > auto vlan200 >>> > iface vlan200 inet6 static >>> > vlan_raw_device eth2 >>> > address 2001:1291:2de:10::1 >>> > netmask 64 >>> > >>> > iface vlan200 inet static >>> > vlan_raw_device eth2 >>> > address 172.16.0.1 >>> > netmask 24 >>> > --- >>> > >>> > 3- Enable radvd for your LANs: >>> > >>> > --- >>> > # SERVERS >>> > interface vlan100 { >>> > AdvSendAdvert on; >>> > MinRtrAdvInterval 3; >>> > MaxRtrAdvInterval 10; >>> > AdvLinkMTU 1500; >>> > AdvDefaultPreference high; >>> > prefix 2001:1291:200:850a::/64 { >>> > DeprecatePrefix on; >>> > AdvOnLink on; >>> > AdvAutonomous on; >>> > AdvRouterAddr on; >>> > }; >>> > route ::/0 { >>> > RemoveRoute on; >>> > }; >>> > RDNSS 2001:4860:4860::8844 2001:4860:4860::8888 { }; >>> > DNSSL domain.com.br { }; >>> > }; >>> > # DESKTOPS >>> > interface vlan200 { >>> > AdvSendAdvert on; >>> > MinRtrAdvInterval 3; >>> > MaxRtrAdvInterval 10; >>> > AdvLinkMTU 1500; >>> > AdvDefaultPreference high; >>> > prefix 2001:1291:2de:10::/64 { >>> > DeprecatePrefix on; >>> > AdvOnLink on; >>> > AdvAutonomous on; >>> > AdvRouterAddr on; >>> > }; >>> > route ::/0 { >>> > RemoveRoute on; >>> > }; >>> > RDNSS 2001:4860:4860::8844 2001:4860:4860::8888 { }; >>> > DNSSL igcorp.com.br { }; >>> > }; >>> > --- >>> > >>> > 4- HIT TUE BUG! >>> > >>> > Go to `qemu-host-1.domain.com` and try to run "apt-get update", it >>> will >>> > not work! Ping works... TCP connections doesn't. >>> > >>> > The gateway of `qemu-host-1.domain.com` (through ovsbr1p1), is the >>> QEmu >>> > 2.0 Virtual Machine hosted on itself, the guest `guest-fw-1.domain.com >>> `. >>> > >>> > Details: >>> > >>> > --- >>> > root@qemu-host-1:~# ip r >>> > default via 192.168.4.1 dev ovsbr1p1 >>> > 192.168.4.0/24 dev ovsbr1p1 proto kernel scope link src 192.168.4.2 >>> > 192.168.122.0/24 dev virbr0 proto kernel scope link src >>> 192.168.122.1 >>> > >>> > root@qemu-host-1:~# ip -6 r | grep ovsbr1p1 >>> > 2001:1291:200:850a::/64 dev ovsbr1p1 proto kernel metric 256 >>> expires 86397sec >>> > fe80::/64 dev ovsbr1p1 proto kernel metric 256 >>> > default via fe80::5054:ff:feb5:7744 dev ovsbr1p1 proto ra metric >>> 1024 expires 27sec >>> > >>> > >>> > # ping6 okay... >>> > root@qemu-host-1:~# ping6 google.com -c1 >>> > PING google.com(2800:3f0:4001:815::1007) 56 data bytes >>> > 64 bytes from 2800:3f0:4001:815::1007: icmp_seq=1 ttl=55 time=44.5 ms >>> > >>> > --- google.com ping statistics --- >>> > 1 packets transmitted, 1 received, 0% packet loss, time 0ms >>> > rtt min/avg/max/mdev = 44.579/44.579/44.579/0.000 ms >>> > >>> > # traceroute6 okay... >>> > root@qemu-host-1:~# traceroute6 google.com >>> > traceroute to google.com (2800:3f0:4001:815::1007) from >>> 2001:1291:200:850a:1054:3d86:369:d4b2, 30 hops max, 24 byte packets >>> > 1 2001:1291:200:850a::2 (2001:1291:200:850a::2) 0.394 ms 0.261 ms >>> 0.223 ms >>> > 2 gw-1291.udi-01.br.sixxs.net (2001:1291:200:50a::1) 21.536 ms >>> 20.738 ms 20.902 ms >>> > 3 brudi01.sixxs.net (2001:1291:2::b) 20.684 ms 20.74 ms 20.846 ms >>> > 4 ge-0-2-0-71.seed.ula001.ctbc.com.br (2001:1291:2::a) 197.392 ms >>> 141.706 ms 21.058 ms >>> > 5 ge-5-2-0-0.core-d.ula001.ctbc.com.br (2001:1291:0:98::a) 21.069 >>> ms 20.837 ms 20.903 ms >>> > 6 ae0-0.core-b.fac001.ctbc.com.br (2001:1291:0:d7::a) 24.564 ms >>> 24.464 ms 24.649 ms >>> > 7 et-1-0-0-0.border-a.fac001.ctbc.com.br (2001:1291:0:4b::b) >>> 24.734 ms 24.525 ms 25.273 ms >>> > 8 2001:1291:0:63::2 (2001:1291:0:63::2) 36.619 ms 36.245 ms >>> 36.335 ms >>> > 9 2001:4860::1:0:4f20 (2001:4860::1:0:4f20) 36.285 ms 41.017 ms >>> 36.375 ms >>> > 10 2001:4860:0:1::71 (2001:4860:0:1::71) 31.601 ms 31.623 ms >>> 31.512 ms >>> > 11 2800:3f0:4001:815::12 (2800:3f0:4001:815::12) 30.826 ms 30.683 >>> ms 30.769 ms >>> > >>> > # NOTE: the second hope is the "guest-fw-1". >>> > >>> > # "apt-get update", not okay! *BUG* >>> > >>> > root@qemu-host-1:~# apt-get update >>> > 0% [Connecting to us.archive.ubuntu.com (2001:67c:1562::14)] >>> [Connecting to sec >>> > >>> > # it remains "Waiting for headers" forever... >>> > >>> > # While waiting for "apt-get update" above, `tcpdump -ni ovsbr1p1` >>> > shows: >>> > >>> > http://pastebin.com/2BUiNEfQ >>> > >>> > --- >>> > >>> > >>> > (OPTIONAL STEP - replace OpenvSwitch by bridge-utils - does not fix >>> it!) >>> > >>> > Possible workarounds: is this an OpenvSwitch BUG? Lets try it with >>> > `bridge-utils` instead... >>> > >>> > * Reconfigure your "qemu-host-1.domain.com" to use `bridge-utils`, >>> > instead of openvswitch-switch. >>> > >>> > >>> > ------------------------ >>> > >>> > 1- Preparing the host, now using `bridge-utils` instead of OpenvSwitch: >>> > >>> > - Reconfigure `qemu-host-1`s /etc/network/interfaces file with: >>> > >>> > --- >>> > auto br0 >>> > iface br0 inet manual >>> > bridge_ports eth0 >>> > bridge_maxwait 5 >>> > bridge_fd 1 >>> > bridge_stp on >>> > >>> > auto br1 >>> > iface br1 inet manual >>> > bridge_ports eth1 >>> > bridge_maxwait 5 >>> > bridge_fd 1 >>> > bridge_stp on >>> > >>> > auto vlan100 >>> > iface vlan100 inet6 auto >>> > vlan_raw_device br1 >>> > >>> > iface vlan100 inet static >>> > vlan_raw_device br1 >>> > address 192.168.1.10 >>> > netmask 24 >>> > gateway 192.168.1.1 >>> > >>> > auto br2 >>> > iface br2 inet manual >>> > bridge_ports eth2 >>> > bridge_maxwait 5 >>> > bridge_fd 1 >>> > bridge_stp on >>> > --- >>> > >>> > >>> > 2- New VM Configuration file (network-only section / cutted), adjusted >>> > to make use bridges from `bridge-utils` package: >>> > >>> > --- >>> > <interface type='bridge'> >>> > <mac address='52:54:00:41:8c:3f'/> >>> > <source bridge='br0'/> >>> > <model type='virtio'/> >>> > <address type='pci' domain='0x0000' bus='0x00' slot='0x03' >>> function='0x0'/> >>> > </interface> >>> > <interface type='bridge'> >>> > <mac address='52:54:00:27:b2:7d'/> >>> > <source bridge='br1'/> >>> > <model type='virtio'/> >>> > <address type='pci' domain='0x0000' bus='0x00' slot='0x09' >>> function='0x0'/> >>> > </interface> >>> > <interface type='bridge'> >>> > <mac address='52:54:00:ff:35:5c'/> >>> > <source bridge='br2'/> >>> > <model type='virtio'/> >>> > <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' >>> function='0x0'/> >>> > </interface> >>> > --- >>> > >>> > * Start `guest-fw-1` as-is: >>> > >>> > virsh start guest-fw-1 >>> > >>> > >>> > New try: >>> > >>> > --- >>> > root@qemu-host-1:~# ip r >>> > default via 192.168.4.1 dev vlan100 >>> > 192.168.4.0/24 dev vlan100 proto kernel scope link src 192.168.4.2 >>> > 192.168.122.0/24 dev virbr0 proto kernel scope link src >>> 192.168.122.1 >>> > >>> > root@qemu-host-1:~# ip -6 r | grep vlan100 >>> > 2001:1291:200:850a::/64 dev vlan100 proto kernel metric 256 expires >>> 86397sec >>> > fe80::/64 dev vlan100 proto kernel metric 256 >>> > default via fe80::5054:ff:feb5:7744 dev vla100 proto ra metric 1024 >>> expires 27sec >>> > >>> > root@qemu-host-1:~# ip -6 r | grep ovsbr1p1 >>> > 2001:1291:200:850a::/64 dev ovsbr1p1 proto kernel metric 256 >>> expires 86394sec >>> > fe80::/64 dev ovsbr1p1 proto kernel metric 256 >>> > default via fe80::5054:ff:feb5:7744 dev ovsbr1p1 proto ra metric >>> 1024 expires 24sec >>> > >>> > # ping6 okay... >>> > root@qemu-host-1:~# ping6 google.com -c1 >>> > PING google.com(2800:3f0:4001:815::1007) 56 data bytes >>> > 64 bytes from 2800:3f0:4001:815::1007: icmp_seq=1 ttl=55 time=44.5 ms >>> > >>> > --- google.com ping statistics --- >>> > 1 packets transmitted, 1 received, 0% packet loss, time 0ms >>> > rtt min/avg/max/mdev = 44.579/44.579/44.579/0.000 ms >>> > >>> > # traceroute6 okay... >>> > root@qemu-host-1:~# traceroute6 google.com >>> > traceroute to google.com (2800:3f0:4001:815::1007) from >>> 2001:1291:200:850a:1054:3d86:369:d4b2, 30 hops max, 24 byte packets >>> > 1 2001:1291:200:850a::2 (2001:1291:200:850a::2) 0.394 ms 0.261 ms >>> 0.223 ms >>> > 2 gw-1291.udi-01.br.sixxs.net (2001:1291:200:50a::1) 21.536 ms >>> 20.738 ms 20.902 ms >>> > 3 brudi01.sixxs.net (2001:1291:2::b) 20.684 ms 20.74 ms 20.846 ms >>> > 4 ge-0-2-0-71.seed.ula001.ctbc.com.br (2001:1291:2::a) 197.392 ms >>> 141.706 ms 21.058 ms >>> > 5 ge-5-2-0-0.core-d.ula001.ctbc.com.br (2001:1291:0:98::a) 21.069 >>> ms 20.837 ms 20.903 ms >>> > 6 ae0-0.core-b.fac001.ctbc.com.br (2001:1291:0:d7::a) 24.564 ms >>> 24.464 ms 24.649 ms >>> > 7 et-1-0-0-0.border-a.fac001.ctbc.com.br (2001:1291:0:4b::b) >>> 24.734 ms 24.525 ms 25.273 ms >>> > 8 2001:1291:0:63::2 (2001:1291:0:63::2) 36.619 ms 36.245 ms >>> 36.335 ms >>> > 9 2001:4860::1:0:4f20 (2001:4860::1:0:4f20) 36.285 ms 41.017 ms >>> 36.375 ms >>> > 10 2001:4860:0:1::71 (2001:4860:0:1::71) 31.601 ms 31.623 ms >>> 31.512 ms >>> > 11 2800:3f0:4001:815::12 (2800:3f0:4001:815::12) 30.826 ms 30.683 >>> ms 30.769 ms >>> > >>> > >>> > # BUG effect! "apt-get update", not okay! >>> > >>> > root@qemu-host-1:~# apt-get update >>> > 0% [Connecting to us.archive.ubuntu.com (2001:67c:1562::14)] >>> [Connecting to sec >>> > >>> > # it remains "Waiting for headers" forever... >>> > >>> > - So! It is not an OpenvSwitch BUG! Removing `bridge-utils` bridges, >>> > falling back to OpenvSwitch as we started. >>> > >>> > >>> > ** Workaround #2: Use Xen-4.4 instead of QEmu 2.0 / Back to >>> OpenvSwitch. >>> > >>> > >>> > -- VM conf (`guest-fw-1` needs to have /etc/init/hvc0.conf): >>> > >>> > --- >>> > name = "guest-fw-1" >>> > >>> > uuid = "17e031c7-1264-4979-8f06-c5e016469474" >>> > >>> > bootloader = "pygrub" >>> > >>> > memory = 2048 >>> > >>> > vcpus = 2 >>> > >>> > vif = [ 'bridge=ovsbr0', 'bridge=ovsbr1', 'bridge=ovsbr2', >>> > 'bridge=ovsbr3', 'bridge=ovsbr4', 'bridge=ovsbr5' ] >>> > >>> > disk = [ >>> 'tap:raw:/var/lib/libvirt/images/guest-fw-1-disk0.img,xvda,rw' ] >>> > --- >>> > >>> > Details - Working as expected when with Xen!! Look: >>> > >>> > --- >>> > root@qemu-host-1:~# ping6 -c 1 google.com >>> > PING google.com(2800:3f0:4001:815::1002) 56 data bytes >>> > 64 bytes from 2800:3f0:4001:815::1002: icmp_seq=1 ttl=55 time=37.5 ms >>> > >>> > >>> > root@qemu-host-1:~# ip -6 r | grep ovsbr1p1 >>> > 2001:1291:200:850a::/64 dev ovsbr1p1 proto kernel metric 256 >>> expires 86394sec >>> > fe80::/64 dev ovsbr1p1 proto kernel metric 256 >>> > default via fe80::5054:ff:feb5:7744 dev ovsbr1p1 proto ra metric >>> 1024 expires 24sec >>> > >>> > # *BUG dissapeared!* >>> > >>> > root@qemu-host-1:~# apt-get update >>> > Ign http://us.archive.ubuntu.com trusty InRelease >>> > Ign http://security.ubuntu.com trusty-security InRelease >>> > Ign http://us.archive.ubuntu.com trusty-proposed InRelease >>> > Ign http://us.archive.ubuntu.com trusty-updates InRelease >>> > Ign http://us.archive.ubuntu.com trusty-backports InRelease >>> > Get:1 http://security.ubuntu.com trusty-security Release.gpg [933 B] >>> > Hit http://us.archive.ubuntu.com trusty Release.gpg >>> > Get:2 http://security.ubuntu.com trusty-security Release [59.7 kB] >>> > ........................ >>> > Ign http://us.archive.ubuntu.com trusty/main Translation-en_US >>> > Ign http://us.archive.ubuntu.com trusty/multiverse Translation-en_US >>> > Ign http://us.archive.ubuntu.com trusty/restricted Translation-en_US >>> > Ign http://us.archive.ubuntu.com trusty/universe Translation-en_US >>> > Fetched 1,011 kB in 19s (50.7 kB/s) >>> > Reading package lists... Done >>> > --- >>> > >>> > >>> > Now, both Xen Dom0 (`qemu-host-1`) and DomU (`guest-fw-1`) works as >>> expected! You guys can see that the `guest-fw-1` is working on top of Xen, >>> as-is, I mean, the changes happened only at the Hypervisor itself, problem >>> solved (not for QEmu)! >>> > >>> > But, QEmu still have a problem, if I remove Xen, back to QEmu, then, >>> the >>> > host `qemu-host-1` cannot browse the web again (`apt-get update` will >>> > not work if its gateway is a QEmu guest). >>> > >>> > >>> > ** Workaround #3: Untagging the VLANs with OpenvSwitch and its "fake >>> bridges". >>> > >>> > The presented workaround have one big downside, while it allows us to >>> > keep using QEmu (and KSM), it requires a complete reconfiguration of >>> the >>> > `guest-fw-1` interfaces! Also, for each VLAN tag, you'll need to create >>> > a fake bridge, a new VirtIO NIC for your guest (this might add a bit of >>> > overhead for your hypervisor as a whole, I'm not sure), plus a lot of >>> > extra work... If you need to add a new VLAN to your `guest-fw-1`, >>> you'll >>> > need to reboot it, to add a new VirtIO NIC (this isn't the best way to >>> > build hypervisors - not the best practice), this is just a real >>> > workaround that allows you to keep using QEmu (and benefits from KSM, >>> > Libvirt and etc)... >>> > >>> > While, when replacing QEmu by Xen, you don't need to change a single >>> > line within the guest itself... >>> > >>> > So, this network problem lies within the QEmu Virtual Machine! >>> > >>> > Doing this workaround: >>> > >>> > 1- Untagging the VLANs at OpenvSwitch, because QEmu can't handle it: >>> > >>> > ovs-vsctl add-br vlan10 ovsbr0 10 >>> > ovs-vsctl add-br vlan100 ovsbr1 100 >>> > ovs-vsctl add-br vlan200 ovsbr2 100 >>> > >>> > 2- Reconfigure the `guest-fw-1` to make use of new "fake bridges": >>> > >>> > --- >>> > <interface type='network'> >>> > <mac address='52:54:00:41:8c:3f'/> >>> > <source network='vlan10'/> >>> > <model type='virtio'/> >>> > <address type='pci' domain='0x0000' bus='0x00' slot='0x03' >>> function='0x0'/> >>> > </interface> >>> > <interface type='network'> >>> > <mac address='52:54:00:27:b2:7d'/> >>> > <source network='vlan100'/> >>> > <model type='virtio'/> >>> > <address type='pci' domain='0x0000' bus='0x00' slot='0x09' >>> function='0x0'/> >>> > </interface> >>> > <interface type='network'> >>> > <mac address='52:54:00:ff:35:5c'/> >>> > <source network='vlan200'/> >>> > <model type='virtio'/> >>> > <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' >>> function='0x0'/> >>> > </interface> >>> > --- >>> > >>> > 3- Reconfigure `guest-gw-1`s /etc/network/interfaces file: >>> > >>> > --- >>> > auto eth0 >>> > iface eth0 inet static >>> > # vlan_raw_device eth0 >>> > address 200.2.1.106 >>> > netmask 29 >>> > gateway 200.2.1.105 >>> > dns-nameserver 8.8.8.8 >>> > >>> > auto eth1 >>> > iface eth1 inet6 static >>> > # vlan_raw_device eth1 >>> > address 2001:129X:2XX:810X::2 >>> > netmask 64 >>> > dns-nameserver 2001:4860:4860::8844 2001:4860:4860::8888 >>> > >>> > iface eth1 inet static >>> > # vlan_raw_device eth1 >>> > address 192.168.4.1 >>> > netmask 24 >>> > >>> > auto eth2 >>> > iface eth2 inet6 static >>> > # vlan_raw_device eth2 >>> > address 2001:1291:2de:10::1 >>> > netmask 64 >>> > >>> > iface eth2 inet static >>> > # vlan_raw_device eth2 >>> > address 172.16.0.1 >>> > netmask 24 >>> > --- >>> > >>> > 4- Details: Working as expected when with QEmu but, without tagging the >>> > VLAN within the `guest-fw-1` itself. >>> > >>> > --- >>> > root@qemu-host-1:~# ping6 -c 1 google.com >>> > PING google.com(2800:3f0:4001:815::1002) 56 data bytes >>> > 64 bytes from 2800:3f0:4001:815::1002: icmp_seq=1 ttl=55 time=37.5 ms >>> > >>> > >>> > root@qemu-host-1:~# ip -6 r | grep ovsbr1p1 >>> > 2001:1291:200:850a::/64 dev ovsbr1p1 proto kernel metric 256 >>> expires 86394sec >>> > fe80::/64 dev ovsbr1p1 proto kernel metric 256. >>> > default via fe80::5054:ff:feb5:7744 dev ovsbr1p1 proto ra metric >>> 1024 expires 24sec >>> > >>> > # *BUG dissapeared!* >>> > >>> > root@qemu-host-1:~# apt-get update >>> > Ign http://us.archive.ubuntu.com trusty InRelease >>> > Ign http://security.ubuntu.com trusty-security InRelease >>> > Ign http://us.archive.ubuntu.com trusty-proposed InRelease >>> > Ign http://us.archive.ubuntu.com trusty-updates InRelease >>> > Ign http://us.archive.ubuntu.com trusty-backports InRelease >>> > Get:1 http://security.ubuntu.com trusty-security Release.gpg [933 B] >>> > Hit http://us.archive.ubuntu.com trusty Release.gpg >>> > Get:2 http://security.ubuntu.com trusty-security Release [59.7 kB] >>> > ........................ >>> > Ign http://us.archive.ubuntu.com trusty/main Translation-en_US >>> > Ign http://us.archive.ubuntu.com trusty/multiverse Translation-en_US >>> > Ign http://us.archive.ubuntu.com trusty/restricted Translation-en_US >>> > Ign http://us.archive.ubuntu.com trusty/universe Translation-en_US >>> > Fetched 1,011 kB in 19s (50.7 kB/s) >>> > Reading package lists... Done >>> > --- >>> > >>> > Conclusion: >>> > >>> > A QEmu guest router does not route tagged VLAN packages that are >>> > originated at its host, neighter from others guests hosted at the same >>> > hypervisor. Making it impossible to create a virtual network within a >>> > hypervisor. >>> > >>> > Best Regards, >>> > Thiago Martins >>> > >>> > ** Affects: qemu >>> > Importance: Undecided >>> > Status: New >>> > >>> >>> >>> >> >