IPv6不适用于网桥

我一周前安装了Ubuntu 14.04服务器。 我将它用作虚拟机主机(安装了tasksel)。 意思是用kvm + libvirt运行它。

我在13.10建立了同样的桥梁。

auto p4p1 iface p4p1 inet manual up ifconfig $IFACE up down ifconfig $IFACE down auto br0 iface br0 inet static address 46.182.xxx.xxx netmask 255.255.255.240 gateway 46.182.xxx.xxx dns-nameservers 46.182.xxx.xxx 46.182.xxx.xxx bridge_ports p4p1 bridge_stp off bridge_maxwait 0 iface br0 inet6 auto 

针对br0,我将我的虚拟机与libvirt中定义的连接起来。

我的虚拟机没有问题地获得路由器广告消息。 所有虚拟机都获得IPv6地址。

我的问题是IPv6不适用于网桥。 但是当我打开tcpdump对br0进行故障排除时,它确实有效。 我已经尝试手动将接口设置为promiscous模式,但这并没有使它工作, ifconfig br0 promisc

为什么我在桥上有IPv4地址? 我不知道,老习惯,从不质疑它。 IPv6不适用于虚拟机主机,但主机通过RA获取IPv6地址,就像虚拟机一样。

每个IPv6地址,甚至链路本地地址,都会根据最后24位自动订阅组播组。 如果启用了多播侦听,则网桥默认过滤掉(几乎)所有多播流量。 将IPv6地址分配给接口时,系统必须通知网络该接口对该特定组播组感兴趣,并且必须由filter排除。 以下是一个很好的介绍性video: https : //www.youtube.com/watch?v = 01JMdjnn0ao

组播侦听可以防止大多数系统不感兴趣的组播数据包泛滥网络。 您可以在小型部署中禁用多播侦听,而不会发现任何重大差异。 但这可能会对大型部署产生重大性能影响。

您可以使用以下命令禁用监听:

 echo -n 0 > /sys/class/net//bridge/multicast_snooping 

如果要保护VM免受不必要的流量和不必要的数据包处理,可以启用侦听function,但也可以在网络上启用多播查询器。 查询器将定期广播查询数据包并更新交换机和网桥上的监听filter。 可以在系统上启用查询器:

 echo -n 1 > /sys/class/net//bridge/multicast_querier 

如果启用了侦听,则还必须在网络上拥有查询器。

无需启用STP。 关闭它可能更安全,除非你知道你正在桥接导致圆形路径的段。 如果您启用了SLAAC(即autoconf=1accept_ra=1 ),这也无关紧要。 在网桥上启用PROMISC模式会隐式禁用监听。

以下是IPv6邻居发现(ND)和多播侦听器发现(MLD)的现代挑战的一个很好的总结。

你在界面上启用了IPv6吗? 如果桥接设备是br0,那么执行以下操作:

 sysctl net.ipv6.conf.br0.disable_ipv6=0 sysctl net.ipv6.conf.br0.autoconf=1 sysctl net.ipv6.conf.br0.accept_ra=1 sysctl net.ipv6.conf.br0.accept_ra_defrtr=1 

我在配置中看到的唯一明显问题是:

  bridge_stp off 

由于各种原因, 需要在libvirt网桥上启用STP 。

将配置更改为:

  bridge_stp on 

您也可以立即激活它而无需重新启动网络:

 $ sudo brctl stp br0 on