web-dev-qa-db-fra.com

IPv6 ne fonctionne pas sur un pont

J'ai installé le serveur Ubuntu 14.04 il y a une semaine. Je l'utilise en tant qu'hôte de machine virtuelle (tasksel installé). ce qui signifie que je l’utilise avec kvm + libvirt.

J'ai mis en place le même pont que j'avais en 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

Contre br0 je connecte mes machines virtuelles avec <source bridge='br0'/> défini dans libvirt.

Mes machines virtuelles reçoivent les messages Annonce de routeur sans problème. Toutes les machines virtuelles obtiennent des adresses IPv6.

Mon problème est que IPv6 ne fonctionne pas sur le pont. Mais ça marche quand j'active tcpdump contre br0 pour le dépannage. J'ai essayé de configurer l'interface manuellement en mode promiscous mais cela ne le fait pas fonctionner, ifconfig br0 promisc.

Pourquoi j'ai les adresses IPv4 sur le pont? Je ne sais pas, vieille habitude, ne la remets jamais en question. IPv6 ne fonctionne pas sur l'hôte de la machine virtuelle, mais l'hôte obtient l'adresse IPv6 par l'autorité d'enregistrement, tout comme les machines virtuelles.

6
Niklas Hagman

Chaque adresse IPv6, même les adresses locales des liaisons, s’abonne automatiquement à un groupe de multidiffusion basé sur ses 24 derniers bits. Si la surveillance multidiffusion est activée, le pont filtre (presque) tout le trafic multidiffusion par défaut. Lorsqu'une adresse IPv6 est affectée à une interface, le système doit informer le réseau que cette interface est intéressée par ce groupe de multidiffusion particulier et doit être exclue par le filtre. Voici une bonne vidéo d’introduction: https://www.youtube.com/watch?v=O1JMdjnn0ao

La surveillance de multidiffusion est là pour éviter de saturer le réseau de paquets de multidiffusion auxquels la plupart des systèmes ne s'intéressent pas. Vous pouvez désactiver la surveillance multidiffusion dans de petits déploiements sans remarquer de différence majeure. Mais cela peut avoir un impact significatif sur les performances des déploiements plus importants.

Vous pouvez désactiver l'espionnage avec:

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

Si vous souhaitez protéger vos ordinateurs virtuels contre le trafic indésirable et le traitement de paquets inutile, vous pouvez laisser la surveillance activée, mais également activer un interrogateur de multidiffusion sur le réseau. Un interrogateur diffuse périodiquement des paquets de requête et met à jour les filtres de surveillance du trafic sur les commutateurs et les ponts. Il est possible d'activer un interrogateur sur votre système avec:

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

Si vous avez activé la surveillance, vous devez également avoir un interrogateur sur le réseau.

Il n'est pas nécessaire d'activer STP. Il est probablement plus prudent de l'éteindre, à moins que vous ne sachiez que vous reliez des segments créant des trajectoires circulaires. Cela n'a pas d'importance non plus si SLAAC est activé (c'est-à-dire autoconf=1, accept_ra=1). L'activation du mode PROMISC sur le pont désactive implicitement la surveillance.

Voici un bon résumé de la modernité défis de la découverte de voisins IPv6 (ND) et de la découverte d'auditeurs multidiffusion (MLD) .

6
forcefsck

avez-vous activé IPv6 sur l'interface? Si le périphérique de pont est br0, procédez comme suit:

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
3
Paul M

Le seul problème évident que je vois avec votre configuration est le suivant:

    bridge_stp off

Pour diverses raisons STP doit être activé sur les ponts libvirt.

Changez la configuration pour:

    bridge_stp on

Vous pouvez également l'activer immédiatement sans redémarrer le réseau:

$ Sudo brctl stp br0 on
0
Michael Hampton