Le DHCP ne peut pas fournir d'adresse IPv6 car DHCP est un protocole IPv4. Dans le cas des Freebox, c'est la Freebox qui fournit l'adresse IPv6 à chaque ordinateur. Le problème, c'est que les ordinateurs sont cachés derrière le routeur NAT Ubuntu (ou n'importe quel routeur NAT). Il ne reçoivent donc pas les paquets "Router Advertisement" que la Freebox envoie à chaque PC pour qu'il obtienne son adresse IPv6. De plus, les paquets normaux IPv6 de communication (par exemple, les échange de données lors du surf) sont aussi bloqués par le NAT. Il faut donc créer un passage virtuel entre l'interface eth1 branchée à la Freebox, et l'interface eth0 (ou autre, qui est reliée au réseau local) afin que les paquets IPv6 (et seulement eux) puissent traverser le routeur Ubuntu pour aller jusqu'aux PC du réseau local. Cela s'appelle un PONT ou BRIDGE.
apt-get install bridge-utilsLe problème du pont est qu'il n'est pas filtrant, et donc il laisse par défaut passer les paquets IPv4 et v6 et tout ce qui existe d'autre... (Je vous laisse imaginer la pagaille si tous les PC on la même adresse IPv4 public (par exemple 82.244...) de la Freebox..).
C'est pour cela qu'il faut installer ebtables et le configurer pour n'autoriser que les paquets IPv6 à traverser le bridge.
apt-get install ebtablesPour configurer tout cela, j'ai mis en place un script (dispo sur mon site) qui met en place le NAT pour l'IPv4, le bridge, le firewall, et le blocage de tout ce qui n'est pas IPv6 sur le bridge :
#!/bin/shJ'ai mis ce script dans /etc/init.d et il se lance à chaque démarrage grâce à :
#
# Script de démarrage qui lance l'interface réseau internet,
# met en place un firewall basique et un partage de connexion et le pont pour l'IPv6 de Free
#
# Inspiré du script de Mjules_at_ifrance.com
#
# Interface connectée à Internet
interface=eth1
# Interface connectée au réseau local
interfacelan=eth0
start() {
# Désactivation des interfaces réseau
/sbin/ifdown $interface
/sbin/ifdown $interfacelan
# Création du bridge pour faire transiter les paquets IPv6
brctl addbr br0
# activation du bridge
ifconfig br0 up
# Ajout des interfaces au bridge
brctl addif br0 eth1
brctl addif br0 eth0
# Activation des interfaces réseau
/sbin/ifup $interface
/sbin/ifup $interfacelan
# Dans cette partie, on met en place le firewall
#vidage des chaines
iptables -F
#destruction des chaines personnelles
iptables -X
#stratégies par défaut
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
#init des tables NAT et MANGLE (pas forcément nécessaire)
iptables -t nat -F
iptables -t nat -X
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t mangle -F
iptables -t mangle -X
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
# Acceptation de toutes les connexions en local (un process avec l'autre)
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
#iptables -A INPUT -i eth0 -j ACCEPT
#iptables -A OUTPUT -o eth0 -j ACCEPT
#création d'une nouvelle règle
iptables -N MAregle
#définition de la règle : accepter les nouvelles connexions ne venant pas de l'interface internet
# et accepter toutes les connexions établies et reliées (ex: une demande de page HTML provoque l'ouverture
# d'une connexion reliée pour acheminer cette page vers l'ordinateur)
iptables -A MAregle -m state --state NEW -i! $interface -j ACCEPT
iptables -A MAregle -m state --state ESTABLISHED,RELATED -j ACCEPT
#application de la règle au partage de connexion
iptables -A INPUT -j MAregle
iptables -A FORWARD -j MAregle
# activation du forwarding dans le noyau
echo 1 >/proc/sys/net/ipv4/ip_forward
# mise en place du partage de connexion sur le réseau local
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o $interface -j MASQUERADE
# Ouvertures de ports pour le routeur
iptables -A INPUT -p TCP --dport ssh -i $interface -j ACCEPT
iptables -A INPUT -p TCP --dport 80 -i $interface -j ACCEPT
iptables -A INPUT -p TCP --dport 443 -i $interface -j ACCEPT
# Port-Forwarding pour adsl TV
iptables -t nat -A PREROUTING -i eth1 -p udp --dport 31336 -j DNAT --to 192.168.0.3:31336
iptables -A FORWARD -i eth1 -p udp --dport 31336 -d 192.168.0.3 -j ACCEPT
# On n'autorise que l'IPv6 sur le bridge br0 (86DD Correspond à la valeur du champ type de protocole de couche 3 dans la trame Ethernet)
ebtables -t broute -A BROUTING -p ! 86DD -j DROP
}
stop() {
echo 0 >/proc/sys/net/ipv4/ip_forward
ifconfig br0 down
brctl delif br0 eth0
brctl delif br0 eth1
brctl delbr br0
ifdown $interface
iptables -F
iptables -X
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop && start
;;
*)
echo "Usage $0 {start|stop|restart}"
exit 1
esac
exit 0
sudo update-rc.d scriptconfrouteur start 99 2 . stop 00 2 0 1 6 .Voilà, c'est tout ce qu'il y a à faire.
Il manque encore des règles ip6tables pour le firewall IPv6. Pour l'instant je les ai mises sur chaque PC derrière le routeur.







