# IPv6 Globalement, cela fonctionne comme IPv4. Quelques différences : * ndp (l'équivalent d'arp) utilise du multicast (vs du broadcast) pour la résolution des adresses mac/IPv6 * Les IP à utiliser dans la documentation sont 2001:DB8::/32 * Il y a 2^128 IP. Pour calculer le nombre d'IP dans un bloc 2^(128-taille-du-préfixe) * Il n'y a pas d'adresse de réseau ni de broadcast Les tailles de bloc de bloc généralement : * /32 : ce qui est alloué par le [RIR](https://fr.wikipedia.org/wiki/Registre_Internet_r%C3%A9gional) * /48 : ce qui est parfois délégué aux 'end users' * /56 : ce qui est parfois délégué aux 'end users' * /64 : taille minimale du bloc pour avoir de l'autoconfiguration XXX: parler des link local etc ## ROUTEUR : Autoconfiguration ou DHCPv6 sous OpenBSD ### Mettre en place rtadvd Rtadvd permet d'annoncer que le routeur gère et donc route de l'IPv6. Ainsi les clients peuvent _s'auto-configurer_ en utilisant une adresse IPv6 composée avec le préfixe de l'adresse IPv6 du routeur (qui est en fait l'adresse du réseau), et de l'adresse MAC de la machine. Exemple : * Le préfixe est 2001:db8:33d8:4::/64 ; * L'adresse MAC d'une machine est 00:1e:c9:47:3e:44 ; * Son adresse IPv6 devient 2001:db8:33d8:4:21e:c9ff:fe47:3e44/64. ### Configuration de rtadvd Il faut indiquer sur quelle interface faire l'annonce, suivi du préfixe, et de la longueur de celui-ci. Enfin `raflags#64` indique que les clients choisissent leurs adresses IPv6 (auto-configuration) et peuvent récupérer d'autres informations, tel que le serveur DNS, via DHCPv6. Pour le _MTU_, voir la partie [#IPv6etPPPoE IPv6 et PPPoE] sis0:\ :addr="2001:db8:33d8:4::":prefixlen#64:raflags#64:\ :mtu#1492 ### WIDE-DHCPv6 Description du protocole DHCPv6 à faire... _WIDE-DHCPv6_ est un serveur DHCPv6 développé par [KAME](http://www.kame.net/). Pour l'installer utiliser _pkg_add_. Pour diffuser un serveur DNS en IPv6, modifier le fichier /etc/dhcp6s.conf en indiquant l'adresse IPv6 du serveur DNS : option domain-name-servers 2001:7a8:33d8:14:11:11ff:fecc:cf54; ## Client wide-dhcpv6-client C'est un client qui permet d'interroger un serveur DHPCv6, pour l'installer sous Debian : # apt install wide-dhcpv6-client Ensuite il faut configurer lors de l'installation ou dans le fichier `/etc/default/wide-dhcpv6-client` l'interface sur laquelle écouter. ## IPv6 et PPPoE Lorsqu'on utilise PPPoE il est nécessaire de diffuser un _MTU_ de 1492 dans la configuration de rtadvd, sinon les paquets ne traverseront par le lien en PPPoE. Voici un exemple de trame diffusé lorsque le routeur annonce qu'il gère l'IPv6. No. Time Source Destination Protocol Info 2076 214.592925 fe80::200:24ff:fec9:6b68 ff02::1 ICMPv6 Router advertisement Frame 2076 (118 bytes on wire, 118 bytes captured) Ethernet II, Src: Olicom_c9:6b:68 (00:00:24:c9:6b:68), Dst: IPv6mcast_00:00:00:01 (33:33:00:00:00:01) Internet Protocol Version 6 0110... = Version: 6 ... 0000 0000............... = Traffic class: 0x00000000 ......... 0000 0000 0000 0000 0000 = Flowlabel: 0x00000000 Payload length: 64 Next header: ICMPv6 (0x3a) Hop limit: 255 Source: fe80::200:24ff:fec9:6b68 (fe80::200:24ff:fec9:6b68) Destination: ff02::1 (ff02::1) Internet Control Message Protocol v6 Type: 134 (Router advertisement) Code: 0 Checksum: 0xa084 [correct] Cur hop limit: 64 Flags: 0x40 0...... = Not managed .1..... = Other ..0.... = Not Home Agent ...0 0... = Router preference: Medium Router lifetime: 1800 Reachable time: 0 Retrans timer: 0 ICMPv6 Option (Source link-layer address) Type: Source link-layer address (1) Length: 8 Link-layer address: 00:00:24:c9:6b:68 ICMPv6 Option (MTU) Type: MTU (5) Length: 8 MTU: 1492 ICMPv6 Option (Prefix information) Type: Prefix information (3) Length: 32 Prefix length: 64 Flags: 0xc0 1...... = Onlink .1..... = Auto ..0.... = Not router address ...0... = Not site prefix Valid lifetime: 2592000 Preferred lifetime: 604800 Prefix: 2001:7a8:33d8:4:: ## Configuration cliente sous OpenBSD ### Autoconfiguration Cela va rajouter une adresse link local en ipv6 (en fe80::/10), puis il va obtenir deux adresses IP, une liée à l'adresse mac (par exemple avec la mac c8:5b:76:90:5b:35 on obtient 2001:db8:37:129:ca5b:76ff:fe90:5b35) et une autre adresse avec un flag « autoconfprivacy » qui n'aura aucun lien avec l'adresse mac. C'est cette dernière qui sera utilisée. #### Configuration en dur Dans le fichier /etc/hostname.interface correspondant à votre interface, il suffit de rajouter le mot clé *rtsol* : dhcp rtsol #### Configuration (temporaire) en ligne de commande doas ifconfig em0 inet6 autoconf ### Configuration en IP fixe #### Configuration en dur Éditer le fichier /etc/hostname.interface correspondant à votre interface et indiquez l'adresse IPv6 après le mot-clé *inet6* suivie du préfixe, ici 64. Ce qui donne par exemple : inet inet6 2001:db8:6666:333:123:45ff:fe1d:3456 64 Pour la passerelle il faut éditer le fichier /etc/mygate et ajouter une ou plusieurs passerelles (IPv4 et IPv6) : 192.168.0.1 2001:db8:42::1 #### Configuration (temporaire) en ligne de commande # ifconfig sis0 inet6 2001:db8:42::42/64 # route add -inet6 default 2001:db8:42::1 ### Préférer l'IPv6 ou l'IPv4 Pour préférer l'IPv6, dans `/etc/resolv.conf` il faut mettre (à la fin) : family inet6 inet4 Sinon, l'IPv4 est préférée par défaut. ## Configuration cliente sous Debian ### Configuration en dur Editer le fichier */etc/network/interfaces* : auto lo iface lo inet loopback auto eth0 iface eth0 inet static address netmask gateway iface eth0 inet6 static address 2001:db8:42::42 netmask 64 up ip route add 2000::0/3 via 2001:db8:42::1 ### Configuration (temporaire) en ligne de commande # ifconfig eth0 add 2001:db8:42::42/64 # ip route add 2000::0/3 via 2001:db8:42::1 _Note : La commande route est fourni via le paquet `iproute`_ ### Préféfer l'IPv4 à l'IPv6 lors de la résolution DNS Mettre ceci dans /etc/gai.conf precedence ::ffff:0:0/96 100 ## Afficher/manipuler la table d'entrée IPv6 - adresse mac ### OpenBSD Il y a ndp(8). Pour afficher la table : ndp -s ### Debian Il y a la commande ip. Pour afficher la table : ip -6 n ## Avertissements ### Debian, kvm et les bridges Il se peut que le bridge sur l'hyperviseur ne laisse pas passer le multicast utilisé par le NDP. Il faut activer le *snooping multicast*. En CLI : echo 0 > /sys/class/net/br0/bridge/multicast_snooping Dans /etc/network/interfaces : auto br0 iface br0 inet manual bridge_ports eth0 up echo 0 > /sys/class/net/br0/bridge/multicast_snooping