I'm trying to get two virtual machines (running CentOS) to talk to host (Ubuntu 10.04) using VDE and the outside network.
So far I'm running into an ARP issue.
On Host I have a physical eth0 and a virtual tap0 interfaces bridged by br0. All on the same subnet.
br0 Link encap:Ethernet HWaddr 78:e3:b5:90:88:df inet addr:172.16.1.3 Bcast:172.255.255.255 Mask:255.0.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:10 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:1381 (1.3 KB) br0:1 Link encap:Ethernet HWaddr 78:e3:b5:90:88:df inet addr:172.16.1.4 Bcast:172.255.255.255 Mask:255.0.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 eth0 Link encap:Ethernet HWaddr 78:e3:b5:90:88:df inet addr:172.16.1.1 Bcast:172.255.255.255 Mask:255.0.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:18 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:2362 (2.3 KB) Interrupt:33 Base address:0x6000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:778 errors:0 dropped:0 overruns:0 frame:0 TX packets:778 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:62832 (62.8 KB) TX bytes:62832 (62.8 KB) tap0 Link encap:Ethernet HWaddr b6:22:43:93:ed:60 inet addr:172.16.1.2 Bcast:172.255.255.255 Mask:255.0.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:15 errors:0 dropped:3 overruns:0 carrier:0 collisions:0 txqueuelen:500 RX bytes:0 (0.0 B) TX bytes:1980 (1.9 KB) When I ping this Host Ubuntu machine from another machine (or from the Guest), the arp cache entry is stored as a br0 entry, so the Ubuntu machine never responds to ping.
Address HWtype HWaddress Flags Mask Iface 172.22.64.4 (incomplete) eth0 172.22.64.4 ether 00:25:b3:0f:0b:14 C br0 Here's the interfaces file that actually works for setting up the IP addresses on all interfaces: auto lo iface lo inet loopback
auto eth0 iface eth0 inet manual address 172.16.1.1 netmask 255.0.0.0 gateway 172.16.1.255 post-up ifconfig eth0 172.16.1.1 netmask 255.0.0.0 auto tap0 iface tap0 inet static address 172.16.1.2 netmask 255.0.0.0 gateway 172.16.1.255 pre-up vde_tunctl -t $IFACE post-up ifconfig tap0 172.16.1.2 netmask 255.0.0.0 post-up vde_switch -t $IFACE -s /tmp/vde-$IFACE -d -g rhuser -m 664 post-down vde_tunctl -d $IFACE auto br0 iface br0 inet static address 172.16.1.3 netmask 255.0.0.0 gateway 172.16.1.255 post-up ifconfig br0 172.16.1.3 netmask 255.0.0.0 post-up ifconfig br0:1 172.16.1.4 netmask 255.0.0.0 bridge_ports eth0 tap0 I've tried turning off ARP on br0 by ip link set br0 arp off. I've also tried setting things like arp_ignore for br0. In both cases Ubuntu never responds to ARP requests at all. And this is my first question - why does eth0 not respond to ARP requests when a bridge exists. It does well when bridge is commented out from interfaces.
Is arp_filter useful in this situation? It's documentation says "you must use source based routing for this to work". Can someone throw me a link that explains how I set up "source based routing" (I'm pretty new to the topic).
Can arptables or ebtables be used to control this behavior? Looking at their documentation, I see info on how to react to apr requests and when to respond to them, but not much regarding apr cache behavior.
Generally, should I be doing something with sysctl and ARP or should I set my IP assignments differently? I see guides on the net that tell you how to do this trouble-free, but they all assign guests to a separate subnet, making bridge as a gateway. That would not work for me - I need all devices to be on the same subnet.
Any idea would do as long as: