BSD

Un article de IPv6.

Linux Table des matières Routage

Il existe de nombreux systèmes dérivés de BSD : BSD/OS, FreeBSD, NetBSD, OpenBSD, MAC OS X,... IPv6 est disponible sur ces systèmes depuis très longtemps, plusieurs implémentations ont existé. Aujourd'hui la plupart de ces systèmes proposent IPv6 en standard, en utilisant un code dérivé d'une même souche (KAME). On se concentrera ici sur FreeBSD et NetBSD, mais les mises en ?uvre sur les autres systèmes sont proches.

Sommaire

FreeBSD

FreeBSD propose IPv6 en standard depuis la version 4.0. La bibliothèque libc et la plupart des applications supportent IPv6 (RPC et NFS seulement à partir de FreeBSD 5). Dans le cas le plus simple (machine utilisant l'autoconfiguration sans état), les menus d'installation système proposent de configurer IPv6, il suffit de répondre à la question de configuration d'une interface en IPv6. Si on n'a pas activé IPv6 à l'installation, on peut rappeler le programme de configuration /stand/sysinstall pour reconfigurer les interfaces. On peut aussi configurer «à la main» en éditant le fichier /etc/rc.conf.

Le fichier /etc/rc.conf sert à définir la plupart des variables de configuration d'une machine FreeBSD. Les valeurs par défaut (et les commentaires) sont dans le fichier de référence /etc/default/rc.conf (à ne pas modifier).

Pour activer manuellement IPv6 dans le cas le plus simple (autoconfiguration sans état), il suffit d'ajouter dans le fichier /etc/rc.conf la ligne :

ipv6_enable=YES

IPv6 sera disponible au prochain reboot.

Pour vérifier que IPv6 fonctionne correctement, on dispose des commandes ping6 et traceroute6 pour tester l'accessibilité d'une machine, et netstat pour visualiser les tables de routage, et de connexions actives.

Par exemple pour tester la connectivité IPv6 :

> /usr/sbin/traceroute6 www6.ipv6.imag.fr
traceroute6 to www6.ipv6.imag.fr (2001:660:181:1::50) from 
2001:660:282:5:2b0:d0ff:fe3b:e565, 30   hops max, 12 byte packets
1 2001:660:282:5:200:c0ff:fee4:caa0 22.234 ms 0.993 ms 0.919 ms
2 pallas.ipv6.rennes.enst-bretagne.fr 3.81 ms * 3.684 ms
3 horace.ipv6.rennes.enst-bretagne.fr 7.93 ms * 15.773 ms
4 2001:660:80:4002::1 14.876 ms * 14.941 ms
5 2001:660:80:4004::2 22.877 ms * 22.835 ms
6 luna-v6.ipv6.imag.fr 50.509 ms 46.267 ms 46.148 ms

La commande suivante montre les interfaces activées en IPv6. Il existe un tunnel IPv4 dans IPv6 gif0, et l'interface xl0 a deux adresses IPv6 globales :

> netstat -inf inet6
Name Mtu Network Address Ipkts Ierrs Opkts Oerrs Coll
xl0 1500 <Link#1> 00:b0:d0:3b:e5:65 82186 0 74502 0 0
xl0 1500 193.52.74 193.52.74.217 58006 - 72342 - -
xl0 1500 fe80:1::2b0 fe80:1::2b0:d0ff: 70 - 2131 - -
xl0 1500 2001:660:28 2001:660:282:5:2b 1388 - 0 - -
xl0 1500 3ffe:305:10 3ffe:305:1002:5:2 467 - 0 - -
lp0* 1500 <Link#2> 0 0 0 0 0
gif0 1280 <Link#3> 279 0 388 0 0
gif0 1280 fe80:3::2b0 fe80:3::2b0:d0ff: 0 - 0 - -
gif0 1280 192.108.119.1 192.108.119.195 279 - 386 - -
...

Configuration manuelle

Pour configurer des adresses IPv6 de manière statique sur une interface de nom IFX, il suffit de mettre dans le fichier de configuration /etc/rc.conf les informations nécessaires. Les variables à définir ont pour nom ipv6_ifconfig_IFX (une seule adresse) ou ipv6_ifconfig_IFX_aliasY (Y entier de 0 à N-1 si IFX a N adresses IPv6). La syntaxe est celle des arguments de la commande ifconfig. L'adresse lien-local est toujours générée automatiquement et ne doit pas être positionnée de cette manière. Ainsi les lignes suivantes ajoutées dans le fichier /etc/rc.conf configurent deux adresses IPv6 sur l'interface fxp0 :

ipv6_ifconfig_fxp0_alias0="3ffe:3ff:92:55:a00:20ff:fe8e:f324 prefixlen 64"
ipv6_ifconfig_fxp0_alias1="2001:6ff:43:55:a00:20ff:fe8e:f324 prefixlen 64"

Configuration d'un tunnel

Pour créer un tunnel configuré, il faut configurer une interface de type gif. Les lignes suivantes ajoutées dans le fichier /etc/rc.conf déclarent un tunnel IPv6 dans IPv4, l'adresse de IPv4 de l'extrémité locale étant 128.1.2.3, celle de l'extrémité distante 192.1.2.5, le tunnel est entre les adresses IPv6 locale 2001:6ff::45 et distante 2001:6ff::46 :

gif_interfaces="gif0"
gif_config_gif0="128.1.2.3 192.1.2.5"
ipv6_ifconfig_gif0="2001:6ff:45 2001:6ff:46"

Configuration de règles de sécurité

FreeBSD propose le filtrage de paquets en IPv4 comme en IPv6. L'activation est contrôlée par les variables du fichier /etc/rc.conf ipv6_firewall_enable (YES ou NO) et ipv6_firewall_type. Cette seconde variable peut valoir open (pas de filtre installé), client (utiliser un jeu de filtre standard pour une machine simple), simple (utiliser un jeu de filtre standard pour un réseau), closed (tout interdire sauf le trafic via l'interface lo0), ou être le nom d'un fichier de règles (voir man ip6fw). Par exemple, on peut bloquer la commande «ping6 ::1» en positionnant «ipv6_firewall_type=/etc/my_ip6fw_rules» et en créant le fichier /etc/my_ip6fw_rules :

add 100 deny ipv6-icmp from ::1 to any
add 65000 pass all from any to any

Une autre méthode pour contrôler les connexions est d'utiliser la librairie «tcpwrappers». De nombreuses commandes réseau (sendmail, sshd, les commandes lancées par inetd, ...) utilisent cette librairie pour vérifier si un accès distant est autorisé par un fichier de configuration (voir man 5 hosts_access). Voici un exemple de fichier de configuration /etc/hosts.allow qui limite les connections entrantes ssh à deux réseaux :

sshd: [2001:660:5301:2::]/64 : allow
sshd: 192.0.2.32/255.255.255.224 : allow
sshd : ALL : deny

NetBSD

NetBSD propose IPv6 en standard depuis la version 1.5. La plupart des applications sont portées pour IPv6, y compris RPC et NFS.

Si on n'a pas activé IPv6 à l'installation, on peut le configurer «à la main» en éditant le fichier /etc/rc.conf.

Le fichier /etc/rc.conf définit la plupart des variables de configuration. Les valeurs par défaut (et les commentaires) sont dans le fichier /etc/default/rc.conf (à ne pas modifier).

Pour activer manuellement IPv6 sur une machine NetBSD dans le cas le plus simple (autoconfiguration sans état), il suffit d'ajouter dans le fichier /etc/rc.conf la ligne :

ip6mode=autohost

IPv6 sera disponible au prochain reboot.

Configuration manuelle

Pour configurer des adresses IPv6 de manière statique sur une interface de nom IFX, il suffit de mettre dans le fichier de configuration /etc/ifconfig.IFX les informations nécessaires, selon la syntaxe des arguments de la commande ifconfig. L'adresse lien-local est toujours générée automatiquement et ne doit pas être positionnée de cette manière. Par exemple les deux dernières lignes du fichier suivant définissent 2 adresses sur l'interface epic0 :

> cat /etc/ifconfig.epic0
up media autoselect
132.227.10.10 netmask 0xffffffe0
inet6 2001:660:282:1:260:97ff:fe41:6143 prefixlen 64
inet6 3ffe:304:282:1:260:97ff:fe41:6143 prefixlen 64 alias

Par défaut une machine NetBSD ne remplit pas la fonction de routeur. La valeur de la variable ip6mode dans le fichier /etc/rc.conf permet de choisir le mode de fonctionnement :

  • routeur relayant les paquets (ip6mode=router),
  • hôte s'autoconfigurant (ip6mode=autohost)
  • hôte avec adresses IPv6 statiques (ip6mode=host).

Configuration d'un tunnel

La configuration d'un tunnel passe par la configuration du pseudo-device gif qui est utilisé pour la configuration de tunnel IPv6 dans IPv4 et IPv6 dans IPv6.

De la même manière que nous avons configuré notre interface Ethernet, nous configurons notre premier tunnel créant le fichier /etc/ifconfig.gif0.

Pour un tunnel IPv6 dans IPv6 on aurait :

> cat /etc/ifconfig.gif0
inet6 tunnel 2001:660:10c:3d:280:c8ff:fe46:308f 2001:660:80:4000::2
inet6 3ffe:304:124:ff01::1 3ffe:304:124:ff01::2

et pour IPv6 dans IPv4 :

> cat /etc/ifconfig.gif0
tunnel 132.227.72.30 129.88.26.8
inet6 3ffe:304:124:ff01::1 3ffe:304:124:ff01::2

La première ligne établit le tunnel ; elle est équivalente à la commande suivante :

> ifconfig gif0 inet6 tunnel 132.227.72.30 129.88.26.8

Configuration de règles de sécurité

NetBSD propose le filtrage de paquets en IPv4 comme en IPv6. L'activation est contrôlée par la variable du fichier /etc/rc.conf ipv6_filter (YES ou NO). Le fichier de règles est /etc/ipf6.conf (voir man ipf6.conf). Par exemple, on peut bloquer la commande «ping6 ::1» avec le fichier suivant :

> cat /etc/ipf6.conf
block in quick from ::1 to any
pass in all

Une autre méthode pour contrôler les connexions est d'utiliser la librairie «tcpwrappers». De nombreuses commandes réseau (sendmail, sshd, les commandes lancées par inetd, ...) utilisent cette librairie pour vérifier si un accès distant est autorisé par un fichier de configuration (voir man 5 hosts_access). Voici un exemple de fichier de configuration /etc/hosts.allow qui limite les connections entrantes ssh à deux réseaux :

sshd: [2001:660:5301:2::/64] : allow
sshd: 192.0.2.32/255.255.255.224 : allow
sshd : ALL : deny

Linux Table des matières Routage
HOME