我试图让两个虚拟机(运行CentOS)与使用VDE和外部networking的主机(Ubuntu 10.04)对话。
到目前为止,我遇到了一个ARP问题。
在主机上,我有一个物理eth0和一个虚拟的tap0接口桥接br0。 全部在相同的子网上。
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)
当我从另一台机器(或来自Guest)ping主机Ubuntu机器时,arpcaching条目被存储为br0条目,所以Ubuntu机器从不响应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
以下是实际用于在所有接口上设置IP地址的接口文件:auto lo if ine 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
我试过closuresbr0上的ARP,通过ip link set br0 arp off 。 我也尝试设置像br0 arp_ignore的东西。 在这两种情况下,Ubuntu从不响应ARP请求。 这是我的第一个问题 – 为什么eth0在网桥存在时不会响应ARP请求。 当桥接从接口中被注释掉的时候,它确实很好。
在这种情况下arp_filter是有用的吗? 它的文件说:“你必须使用源代码路由为此工作”。 有人可以给我一个链接,说明我如何设置“基于源代码的路由”(我是相当新的主题)。
可以使用arptables或ebtables来控制这种行为吗? 看看他们的文档,我可以看到如何对预览请求做出反应,以及何时对它们作出响应,但对于预览caching行为却没有太多的了解。
一般来说,我应该用sysctl和ARP做些什么,或者我应该设置不同的IP分配? 我看到网上的指南告诉你如何做到这一点无故障,但他们都分配到一个单独的子网,使网桥作为一个网关。 这对我不起作用 – 我需要所有的设备在同一个子网上。
任何想法都可以做,只要:
这就是所谓的“ARP问题”。
http://www.ssi.bg/~ja/#arp_announce
有关arp_announce和arp_ignore设备标志的更多信息,请参阅您的linux / Documentation / networking / ip-sysctl.txt文件。
我想你想arp_announce = 1的所有接口。
另见(一般):
http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.arp_problem.html