Guest bridge issue in 4.0.10
Posted: 16. Jul 2011, 01:21
I am putting together a network setup using four virtual machines. It's basically client--bridge--bridge--client. I was not able to get it to work with 4.0.10. I found some posts where others are having a similar guest bridge issue after upgrading to 4.0.6, 4.0.8, or 4.0.10. Downgrading to 4.0.4 fixed my problem. I want to share my experience with others in case it helps shed light on what seems to be a bug in VirtualBox.
Host Systems: Tested with two separate Windows XP 32-bit and Windows 7 x64 hosts. Both had the same issue.
VM Systems: Four virtual machines running LFS (Linux From Scratch).
I first tried with all four VM's with Internal Networks.
LFS Client A
VM Adapter1: Internal Network - LANA - Intel PRO/1000 MT Desktop (82540EM)
Linux eth0: 10.0.0.1
LFS Client B
VM Adapter1: Internal Network - LANB - Intel PRO/1000 MT Desktop (82540EM)
Linux eth0: 10.0.0.2
LFS Bridge A
VM Adapter1: Internal Network - LANA - Intel PRO/1000 MT Desktop (82540EM)
VM Adapter2: Internal Network - WAN - Intel PRO/1000 MT Desktop (82540EM)
Linux eth0: UP <no ip address>
Linux eth1: UP <no ip address>
Linux br0: UP <no ip address>
LFS Bridge B
VM Adapter1: Internal Network - LANB - Intel PRO/1000 MT Desktop (82540EM)
VM Adapter2: Internal Network - WAN - Intel PRO/1000 MT Desktop (82540EM)
Linux eth0: UP <no ip address>
Linux eth1: UP <no ip address>
Linux br0: UP <no ip address>
I could not ping from 10.0.0.1 to 10.0.0.2 or vice-versa. In fact, the clients were not getting an ARP reply back. I did a packet sniff with tcpdump and saw that the ARP request got to the other client and it replied but the LFS Bridge virtual machines were not forwarding the ARP reply. Then I added static ARP entries in each client. That didn't fix it either. The ICMP packets would arrive on one interface of the bridge but would not be forwarded out the other.
Then I tried with just two VM's (one bridge, one client) and used a Bridged Adapter on the bridge so I could test with my office LAN.
LFS Bridge
VM Adapter1: Bridged Adapter - Intel 82566DM-2 Gigabit Network Connection - Intel PRO/1000 MT Desktop (82540EM)
VM Adapter2: Internal Network - intnet - Intel PRO/1000 MT Desktop (82540EM)
Linux eth0: UP <no ip address>
Linux eth1: UP <no ip address>
Linux br0: UP <no ip address>
LFS Client
VM Adapter1: Internal Network - intnet - Intel PRO/1000 MT Desktop (82540EM)
Linux eth0: 10.0.0.2
Windows Host
Local Area Network: 10.0.0.1
I was not able to ping from 10.0.0.1 to 10.0.0.2 or vice-versa. The LFS Bridge virtual machine was not responding to ARP or accepting any packets for the client on the other side of the bridge. However, I could see the MAC address of the client in the bridge configuration (brctl showmacs br0) so I knew the bridge configuration was correct.
I then tried from another Linux box on my physical 10.0.0.x network and it was not getting an ARP reply for 10.0.0.1. I added a static ARP entry and I saw it sent the ICMP packet but didn't see it arrive on eth0 of LFS Bridge. I did a packet sniff with Wireshark on the Windows host and saw the ICMP packets coming in but apparently the VM was not accepting them.
What is odd is that I could see broadcast traffic being forwarded to the client. Also, I added a VM running CentOS to the internal network and when it booted up it got an IP address from our office DHCP server. So broadcast packets gets forwarded but unicast packets do not.
Both these scenarios work fine with VirtualBox 4.0.4. However, it will break if you change the settings for the Virtual Adapters while the VM is running. This is easy to reproduce in my setup; just change the name of an internal network on one of the bridges, save it, then change it back. It stops working and I have to restart the VM to get it to work again.
I'll also add that routing worked fine with both VirtualBox 4.0.4 and 4.0.10. This is where instead of using two LFS systems as bridges, I use them as routers (client--router--router--client). I can even change Virtual Adapter settings without any problems.
Host Systems: Tested with two separate Windows XP 32-bit and Windows 7 x64 hosts. Both had the same issue.
VM Systems: Four virtual machines running LFS (Linux From Scratch).
I first tried with all four VM's with Internal Networks.
LFS Client A
VM Adapter1: Internal Network - LANA - Intel PRO/1000 MT Desktop (82540EM)
Linux eth0: 10.0.0.1
LFS Client B
VM Adapter1: Internal Network - LANB - Intel PRO/1000 MT Desktop (82540EM)
Linux eth0: 10.0.0.2
LFS Bridge A
VM Adapter1: Internal Network - LANA - Intel PRO/1000 MT Desktop (82540EM)
VM Adapter2: Internal Network - WAN - Intel PRO/1000 MT Desktop (82540EM)
Linux eth0: UP <no ip address>
Linux eth1: UP <no ip address>
Linux br0: UP <no ip address>
LFS Bridge B
VM Adapter1: Internal Network - LANB - Intel PRO/1000 MT Desktop (82540EM)
VM Adapter2: Internal Network - WAN - Intel PRO/1000 MT Desktop (82540EM)
Linux eth0: UP <no ip address>
Linux eth1: UP <no ip address>
Linux br0: UP <no ip address>
I could not ping from 10.0.0.1 to 10.0.0.2 or vice-versa. In fact, the clients were not getting an ARP reply back. I did a packet sniff with tcpdump and saw that the ARP request got to the other client and it replied but the LFS Bridge virtual machines were not forwarding the ARP reply. Then I added static ARP entries in each client. That didn't fix it either. The ICMP packets would arrive on one interface of the bridge but would not be forwarded out the other.
Then I tried with just two VM's (one bridge, one client) and used a Bridged Adapter on the bridge so I could test with my office LAN.
LFS Bridge
VM Adapter1: Bridged Adapter - Intel 82566DM-2 Gigabit Network Connection - Intel PRO/1000 MT Desktop (82540EM)
VM Adapter2: Internal Network - intnet - Intel PRO/1000 MT Desktop (82540EM)
Linux eth0: UP <no ip address>
Linux eth1: UP <no ip address>
Linux br0: UP <no ip address>
LFS Client
VM Adapter1: Internal Network - intnet - Intel PRO/1000 MT Desktop (82540EM)
Linux eth0: 10.0.0.2
Windows Host
Local Area Network: 10.0.0.1
I was not able to ping from 10.0.0.1 to 10.0.0.2 or vice-versa. The LFS Bridge virtual machine was not responding to ARP or accepting any packets for the client on the other side of the bridge. However, I could see the MAC address of the client in the bridge configuration (brctl showmacs br0) so I knew the bridge configuration was correct.
I then tried from another Linux box on my physical 10.0.0.x network and it was not getting an ARP reply for 10.0.0.1. I added a static ARP entry and I saw it sent the ICMP packet but didn't see it arrive on eth0 of LFS Bridge. I did a packet sniff with Wireshark on the Windows host and saw the ICMP packets coming in but apparently the VM was not accepting them.
What is odd is that I could see broadcast traffic being forwarded to the client. Also, I added a VM running CentOS to the internal network and when it booted up it got an IP address from our office DHCP server. So broadcast packets gets forwarded but unicast packets do not.
Both these scenarios work fine with VirtualBox 4.0.4. However, it will break if you change the settings for the Virtual Adapters while the VM is running. This is easy to reproduce in my setup; just change the name of an internal network on one of the bridges, save it, then change it back. It stops working and I have to restart the VM to get it to work again.
I'll also add that routing worked fine with both VirtualBox 4.0.4 and 4.0.10. This is where instead of using two LFS systems as bridges, I use them as routers (client--router--router--client). I can even change Virtual Adapter settings without any problems.