Table des matières

Routeur IP Miassou

Le routeur est une machine sous debian wheezy. Pour comprendre l'adressage utilisé par Ilico de manière globale, voir adressage

La configuration du routage IPv6 est traitée dans la seconde partie du document.

L'ensemble de cette documentation est reprise de celle de Rhizome disponible sous licence Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported (CC BY-NC-SA 3.0). Merci à eux pour le travail et le partage =)

Généralités et objectifs de la configuration

D'un côté, le réseau Ilico (AP sur adresses privées et abonnés sur adresses publiques). Côté FDN,

On veut :

Au niveau interfaces réseau, on aura à la fin de cette partie :

Il faut brancher le câble ethernet sur le port 1 du modem.

Configuration PPP/ADSL

Configurer le modem :

pppoeconf

Puis se laisser guider (les choix par défaut conviennent très bien)! Les identifiants de connexion sont ceux envoyés par FDN par mail (XXX@fdn.nerim).

Mémo des commandes ppp :

À l'issue de cette phase, le routeur devrait avoir un accès internet…

root@miassou:~# ping -c1 -q 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.

--- 8.8.8.8 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 45.245/45.245/45.245/0.000 ms

Reste à permettre aux abonnés d'être routés par cette interface.

Configuration réseau complète

Fichier /etc/network/interfaces

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
#allow-hotplug eth1
#iface eth1 inet dhcp

# Réseau privé des points d'accès radio
auto eth0
iface eth0 inet static
	address 10.42.1.1
	netmask 255.255.0.0

## eth0:abo Réseau abonnés
auto eth0:abo
iface eth0:abo inet static
	address 80.67.180.1
	netmask 255.255.255.0

## eth1:modem admin modem
#
# Le modem (son interface web/telnet)
# est accessible sur 192.168.1.1
auto eth1:modem
iface eth1:modem inet static
	address 192.168.1.2
	pointopoint 192.168.1.1
	netmask 255.255.255.255



## ppp0 interface WAN (ADSL FDN)
#
# Concerne le modem. L'activation de cette interface
#  - connecte le modem au réseau FDN
#  - crée une interface ppp0
#
auto dsl-provider
iface dsl-provider inet ppp
	pre-up /sbin/ifconfig eth1 up # line maintained by pppoeconf
	provider dsl-provider

	# lancement du pare-feu & du vpn au démarage 
	#openvpn work_vpn
	pre-up iptables-restore < /etc/iptables.up.rules

Routage

Le routage consiste du point de vue de la machine à recevoir un paquet IP qui ne lui est pas adressé et à le relayer vers son destinataire final. Pour savoir par où envoyer un paquet qu'il reçoit, le routeur consulte ses tables de routage.

Typiquement, les tables de routage des routeurs Ilico vont ressembler à ça (de manière simplifiée):

62.4.16.ZZ/32      ppp0   # Routeur FDN de l'autre côté du tunnel PPP/ADSL (LNS)
80.67.180.0/24     eth0   # Bloc d'IP défini sur le routeur
192.168.1.0/24     eth1   # Réseau privé contenant uniquement le modem (IP d'administration)
10.42.0.0/16       eth0   # Réseau privé du backbone Ilico (Access-points)
default            ppp0   # Route par défaut : le reste d'internet

Par défaut, le routage est désactivé sous Linux. Pour l'activer :

nano /etc/sysctl.conf

Décommenter la ligne net.ipv4.ip_forward=1

Cela prendra effet au prochain reboot. Pour l'appliquer immédiatement

sysctl -p

Cela active le routage de et vers tous les réseaux. Le pare-feu permet de contrôler plus finement le routage.

La commande ip route permet d'afficher la table de routage courante d'une machine.

root@miassou:~# ip route 
default dev ppp0  scope link 
10.42.0.0/16 dev eth0  proto kernel  scope link  src 10.42.1.1 
10.254.254.252 dev tun0  proto kernel  scope link  src 10.254.254.254 
62.4.16.41 dev ppp0  proto kernel  scope link  src 80.67.177.30 
80.67.180.0/24 dev eth0  proto kernel  scope link  src 80.67.180.1 
192.168.1.1 dev eth1  proto kernel  scope link  src 192.168.1.2 

Pare-feu

Le pare-feu répond à deux questions :

On utilise le pare-feu netfilter qui est intégré au noyau linux et qui se configure à l'aide des outils iptables.

Routage

On ne veut pas que le réseau backbone (10.42.0.0/16) ait accès à internet, ni que le routage soit effectif entre ce réseau et le réseau abonnés. Idem pour le réseau d'administration du modem.

Ces directives correspondent à la chaine FORWARD du pare-feu netfilter/iptables

Services sur le routeur

On ne veut pas non plus ouvrir le routeur à tous vents. Seuls certains services devront-être accessibles :

Ces directives correspondent à la chaine INPUT du pare-feu netfilter/iptables

Configuration iptables

Pour simplifier la configuration d'IPtables on peut définir des noms de réseau :

Contenu du fichier /etc/networks:

default		0.0.0.0
loopback	127.0.0.0
link-local	169.254.0.0

#blocs FDN
abo.ilico.fr		80.67.180.0		abo.wifi.ilico.fr
backbone.ilico.fr	10.42.0.0

La configuration IPTables est la suivante

/etc/iptables.up.rules

# /etc/iptables.up.rules
# iptables-restore(8) remet implicitement à zéro toutes les règles

# Les instructions qui suivent concernent la table « filter »,
*filter

#########################
# Politiques par défaut #
#########################

# Le traffic entrant est bloqué par défaut
-P INPUT DROP

# Le traffic destiné à être routé est refusé par défaut
-P FORWARD DROP

# Le traffic sortant est accepté par défaut
-P OUTPUT ACCEPT




######################
# Règles de filtrage #
######################

# Pas de filtrage sur l'interface de "loopback"
-A INPUT -i lo -j ACCEPT

# Accepter de forward les paquets relatifs à une connexion existante
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

# Accepter de forward tout le traffic des abonnés (entrant/sortant)
-A FORWARD -i eth0 --source 80.67.180.0/24 -j ACCEPT
-A FORWARD --destination 80.67.180.0/24 -j ACCEPT

# Accepter de forward tout ce qui vient du vpn (pour la maintenance)
-A FORWARD -i tun0 -j ACCEPT



#SNMP
-A INPUT -p udp --dport snmp -j ACCEPT

# VPN
-A INPUT -p udp --dport openvpn -j ACCEPT

# ICMP (ping & diagnostic)
-A INPUT -p icmp -j ACCEPT

# IGMP (pour le multicast)
-A INPUT -p igmp -j ACCEPT

# Accepter les packets entrants relatifs à des connexions établies
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# SSH autorisé partout
-A INPUT -p tcp --dport ssh -j ACCEPT

# HTTP pour le serveur web apache (stats munin)
# -A INPUT -p tcp --dport http -j ACCEPT

# Accepter DNS depuis les IPs abonnés 
-A INPUT -i eth0 -p tcp --dport domain --source 80.67.180.0/24 -j ACCEPT
-A INPUT -i eth0 -p udp --dport domain --source 80.67.180.0/24 -j ACCEPT

# Accepter les requêtes/réponses DHCP
-A INPUT -i eth0 -p udp --dport 67:68 --sport 67:68 -j ACCEPT

# Accepter les requêtes NTP
-A INPUT -i eth0 -p udp --dport 123 --source 80.67.180.0/24 -j ACCEPT

# Accepter les requêtes syslog
-A INPUT -i eth0 -p udp --dport 514 --source 80.67.180.0/24 -j ACCEPT

COMMIT


####################
# Problème de MTU… #
####################

# Les instructions qui suivent concernent la table « mangle », c'est
# à dire l'altération des paquets
*mangle

# Règle les différences de MTU entre ppp0 et ethX
-A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS -o ppp0 --clamp-mss-to-pmtu

COMMIT

Il est préférable de tester les règles avant de les appliquer :

iptables-apply <fichier-de-règles>

Puis tester d'établir une nouvelle connexion SSH vers le serveur et répondre à la question…

Cela permet de tester un fichier de règles pendant 30s. Si le nouveau fichier de règles contient une erreur vous coupant le cordon SSH, l'ancien sera rétabli au bout de 30s.

À chaque démarrage, la configuration iptables sera appliquée par la ligne que nous avions placée dans /etc/network/interfaces (ndlr: “pre-up iptables-restore < /etc/iptables.up.rules”).

Attention à ne placer dans le fichier /etc/iptables.up.rules qu'un jeu de règles fonctionnel et testé sous peine de surprise au prochain reboot…

DHCP et DNS avec DNSMasq

DNSMasq joue un double rôle :

Installer DNSMasq

apt-get intsall dnsmasq

Créer un fichier de conf /etc/dnsmasq.d/wifi-ilico_dhcp pour le DHCP Ilico (celui par défaut ne fait rien). (On considère que le routeur distribue les IPv4 publiques du bloc 80.67.180.0/24 et qu'il a lui-même dans ce bloc l'adresse 80.67.180.1)

# Fichier de configuration du serveur DHCP + DNS Wifi Ilico-Chanteix
#
##-> DHCP : Attribue les adresses publiques des abonnes a leurs
#           equipements (box routeur, selon). N'alloue que des IP fixes
#           et publiques, en fonction de l'adresse MAC. N'alloue pas
#           d'adresses IP a des equipements inconnus (addr MAC).
#

# Ne pas attribuer d'adresse aux equipements inconnus
# /!\ A desacitver (commenter) au momment du festival
# si on veut distribuer de l'IP publique

#dhcp-ignore=#known

# On écoute que sur l'adresse IP qui est au début du bloc abonné 
listen-address=80.67.180.1
interface=eth0

# La plage d'IP allouee par ce routeur
dhcp-range=80.67.180.2,80.67.180.254,60m
log-dhcp
dhcp-leasefile=/var/lib/misc/dnsmasq.leases


# Les correspondances @mac <-> @IP publique sont definies dans
# le fichier /etc/ethers
read-ethers

#
##-> DNS  : Fait office de serveur DNS (relaie vers les DNS FDN)
#           Garde les reponses en cache pour accelerer les suivantes.           


# Ne transfere pas les requetes DNS incompletes
#domain-needed

# Ne transfere pas les requetes reverse-DNS sur des adresses privees.
#bogus-priv

# les abonnes sont localement accessibles par 
# <nom_equipement>.abo.wifi.ilico.fr
domain-suffix=abo.wifi.ilico.fr

# Taille du cache DNS
cache-size=256
port=53

C'est le fichier ethers qui contient les associations @MAC ↔ @IP. On peut le remplir initialement avec une ligne prête pour chaque IP publique que le routeur est censé distribuer. Par exemple, si le routeur distribue 80.67.180.0/24 et que les IP 80.67.180.2-80.67.180.42 sont pour les abonnés, on peut préparer /etc/ethers comme suit :

# Pour ajouter un abonne, renseigner le commentaire et l'adresse MAC et
# décommenter la ligne contenant l'adresse MAC.
# Utilisé par dnsmasq (/etc/dnsmasq.d/)

# Pour voir les baux DHCP en cours : cat /var/lib/misc/dnsmasq.leases
# dnsmaq est logué dans /var/log/dnsmasq
 
#-------------------------------------------------------------

# MARQUE MODEL de l'équipement (type d'équipementà - Nom Prenom Abonné
# 00:00:00:00:00:00 80.67.180.XX

# XXXXX YYYYYY (serveur Debian) - Jhon Doe
00:f0:63:e7:aF:ff 80.67.180.2

# TP LINK TL-WR741ND (routeur wifi) - Richard Matthew Stallman
00:2d:84:88:ac:a3 80.67.180.3

# TP LINK TL-WR741ND (routeur wifi) - Anakin Skywalker
a0:f3:c1:67:52:f9 80.67.180.4

# [...]

# LINKSYS WRT54GL (routeur wifi) -  Douglas Adams
10:e1:c0:8c:02:28 80.67.180.42

# ect.

… Puis redémarrer

/etc/init.d/dnsmasq restart

Il suffira de renseigner et décommenter une ligne pour ajouter les abonnés lors de la configuration du matériel pour un nouvel abonné.

Routage inter-routeur

Il serait dommage de faire passer les paquets échangés entre les abonnés du reseau wifi par internet. On met donc en place un routage entre les antennes des abonnés. En théorie, il faudrait mettre en place des IP publiques pour le routage, mais malheureusement nous n'en avons pas assez. Nous utiliserons donc le réseau en 10.42 pour le routage.

ip route add 80.67.180.0/24 via 10.42.1.1

Ajout des routes au démarrage de l'interface

Ajout dans la conf de /etc/network/interfaces (pour que les routes soient effectives au demarrage du routeur)

# Ajout des routes au démarrage de l'interface (Routage inter-routeur)
        post-up ip route add 80.67.180.0/24 via 10.42.1.1
# La route sera définie dès que l'interface sera up

Connectiivité IPv6

Le but est de fournir une connectivité IPv6 en sus de celle IPv4 à tous les abonnés du réseau Wifi de Chanteix. Cette documentation est reprise de celle de Rhizome disponible sous licence Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported (CC BY-NC-SA 3.0). Merci à eux pour le travail et le partage =)

Ressources et modèle d'adressage

Sur chaque ligne ADSL est routé par FDN un bloc IPv6 en /48. On veut redistribuer à chaque abonné un /56.

En pratique, l'abonné a donc la possibilité de définir 256 réseaux locaux /64 (taille standard) chez lui. Autrement dit chaque abonné a sa disposition 256 x 2^64 (4,722366483 trilliards) adresses Ipv6 !

A voir: Nos amis de LDN on mis en ligne une conférence sur le découpage des blocs IPv4 et IPv6 qui on été mis à leur disposition par Gitoyen. Cette conférence technique revient sur l'adressage IPv4/IPv6 et sur quelques principes de base du fonctionnement d'un réseau IP

Exemple avec 1 routeur sur lequel sont reliées 2 box abonnés.

                                                     .-,(  ),-.     
                                                  .-(          )-.  
                                                 ( FDN -> internet )
                                                  '-(          ).-' 
                                                      '-.( ).-'     
                                                          |                                        
                                                          |route 2001:910:111e::/48                < (1*)
                                                          |
                                                     _____v____ 
       ROUTEUR MIASSOU                              [_...__...°]
                                                    /           \
                                                   /             \
      BACKBONE WIFI 5GHz                          /               \                                < (2*)
      (transparent L2)                           /                 \                                   
                                                /                   \
                                               /                     \
                                              /route                  \route                  
                                             /80.67.180.5              \80.67.180.8           
                                            /2001:910:111e:500::/56     \2001:910:111e:800::/56
                                           /                             \
                                          /                               \
                                         v                                 v
        BOX ABONNES                   |_|_| Distribue en autoconf        |_|_| 
                                     [____°]2001:910:111e:501::/64     [____°]
                                     /    \
                                    /      \
                                   /        \                                                      < (3*)          
                              ____v          v____                                                                                       
   MACHINES FINALES          |    |          |    |
   (PC,smartphones)          |____|          |____|
                             /::::/          /::::/
                            
                 2001:910:111e:501:       2001:910:111e:501:                     
                 c2e7:65ff:fb4e:456b/64    f65e:3cff:feb4:613c/64                  
                                                                                   

Calcul des IPv6

Une adresse IPv6 est découpée, pour Ilico, de la manière suivante :

 Le préfixe ammené sur chaque routeur par Gitoyen/FDN     <préfixe abonné> f(IPv4)                    laissé à l'abonné
|-------------------------------------------------------|-------------------------|---------------------------------------------|
                      48 bits                                 8 bits                                 72 bits
|-------------------------------------------------------------------------------------------------------------------------------|
                                                        Adresse IPv6 128 bits

On calcule le numéro du bloc IPv6 de chaque abonné en fonction de son IPv4.

Le bloc IPv6 est calculé depuis l'adresse IPv4 de l'abonné. Si, l'abonné a reçu l'adresse A.B.C.D. Son identifiant sur 8 bits sera D.

Cela ne fonctionne et permet d'avoir une adresse unique que parce que chaque routeur ne gère que des blocs IPv4 de taille inférieure à un /24 (255 adresses).
Exemple

Le bloc délégué à l'abonné sera donc 2001:910:111e:0400::/56

Configuration des routes et adresses

L'objectif ici est de rester dans une facilité que nous avons actuellement avec la configuration IPv4 : les box sont interchangeables et ne possèdent aucune configuration statique spécifique à un routeur en particulier (ce qui permet de déplacer/remplacer les box facilement). Doivent donc être configurés automatiquement :

En IPv6, l'autoconfiguration sans état est le maitre mot… Cependant il existe un protocole DHCPv6 pouvant réaliser de l'attribution de préfixes (blocs) et d'adresses.

Attribution d'adresse Délégation de préfixe (bloc) Anonce de route par défaut1)
Autoconfiguration IPv6 2)
DHCPv6 3)

Si on veut faire de la délégation de préfixe, il nous faut soit utiliser une configuration statique soit utiliser l'autoconfiguration et DHCPv6. C'est ce que nous faisons.

Assignation d'une adresse à l'interface

On assigne une adresse simplement à l'interface eth0 (côté abonné). On utilise l'adresse IPv6-subnet-anycast.

L'adresse IPv6-subnet-anycast est la “zéroième” adresse d'un bloc

Par exemple, pour le bloc 2001:910:111e:800::/56. Il s'agit de l'adresse 2001:910:111e:800::. En IPv4, utiliser la zéroième adresse d'un bloc est interdit. En IPv6. C'est une adresse particulière anycast : elle peut-être attribuée à plusieurs machines : l'ensemble des routeurs du bloc concerné.

/etc/network/interfaces (extrait)
# Reseau abonnes IPv6
iface eth0 inet6 static
        address 2001:910:111e::
        netmask 48
        # Configuration du pare-feu
        pre-up ip6tables-restore < /etc/ip6tables.up.rules # ipv6
        post-up IPv6_routes --enable # On crée les routes après que l'interface ait eu son IP

On redémarre l'interface :

ifdown eth0 ; ifup eth0

Réception du préfixe via PPP

Il faut négocier le préfixe IPv6 avec IPv6CP (par défaut, PPP ne négocie qu'une adresse IPv4 avec IPCP) et son routage avec le LNS de FDN qui négocie la connexion.

Rajouter la ligne suivante en fin de fichier :

/etc/ppp/options (extrait)
…
# Support IPv6 (IPv6CP)
ipv6 ,
…

Puis redémarrer la connexion PPP :

poff dsl-provider ; pon dsl-provider

Activation du routage

En IPv6, une machine a soit un rôle d'host, soit un rôle de routeur, selon la valeur de la variable net.ipv6.conf.all.forwarding. Avant tout, le routeur doit-être configuré, comme en IPv4 pour router les paquets IPv6 :

/etc/sysctl.conf
  net.ipv6.conf.all.forwarding=1

Puis pour recharger la conf sysctl

sysctl -p

Serveur DHCPv6 : dhcp6d

Le serveur DHCPv6 s'occupe donc

L'adresse IPv6-subnet-anycast est la “zéroième” adresse d'un bloc

Par exemple, pour le bloc 2001:910:111e:800::/56. Il s'agit de l'adresse 2001:910:111e:800::. En IPv4, utiliser la zéroième adresse d'un bloc est interdit. En IPv6. C'est une adresse particulière anycast : elle peut-être attribuée à plusieurs machines : l'ensemble des routeurs du bloc concerné.

Installation

On utilise le serveur WIDE-DHCPv6 du projet kame.

apt-get install wide-dhcpv6-server
Configuration

Le fichier de configuration est à créer :

/etc/wide-dhcpv6/dhcp6s.conf
# DNS, on refile l'IP des DNS de FDN
option domain-name-servers 2001:910:800::12;
 
# Les attributions de blocs/adresses sont générées dans un fichier à part
# Ce fichier est généré automatiquement par un script "genDHCPv6conf"
include "/etc/wide-dhcpv6/ethers-v6";

Le fichier inclus /etc/wide-dhcpv6/ethers-v6.conf est généré par la commande “genDHCPv6conf” (disponible dans /opt/ilico-sysadmin/script/router/). Il est de la syntaxe suivante :

host 80.67.180.3 {
        duid 00:03:00:06:00:18:84:88:ac:63;
        prefix 2001:910:111e:300::/56 infinity;
        address 2001:910:111e:300:: infinity;
 
};
Le DUID (DHCPv6 Unique Identifier) identifie une machine de manière unique auprès du serveur IPv6.

Une convention (utilisée pour nous) est de la dériver de l'adresse MAC ex : MAC 18:84:88:ac:63 → DUID 00:03:00:06:18:84:88:ac:63. 4).

On peut aussi bien entendu choisir des DUID arbitraires.

# Mise à jour de la configuration de DHCPv6 :
genDHCPv6conf
service wide-dhcpv6-server restart

Démon d'autoconfiguration (radvd)

Le démon radvd installé sur le routeur a pour but de distribuer la route par défaut. Et c'est tout !

Installation

apt-get install radvd
Configuration

Le fichier de configuration est simple :

/etc/radvd.conf
interface eth0
{
# On envoie des RA (Router-Announce) en multicast
AdvSendAdvert on;
# Les RA sont envoyées avec une période comprise entre 3 et 5 secondes.
MaxRtrAdvInterval 5;
MinRtrAdvInterval 3;
AdvDefaultLifetime 60;
};

Dans notre fonctionnement, la box ne demande pas explicitement d'annonce de routeur, elle attend une annonce de la part du routeur qui broadcast périodiquement sa route. Aussi, on force des délais assez courts dans le fichiers de configuration précédent..

On redémarre le service :

service radvd restart

Firewall

Les règles de firewall sont les mêmes que pourla configuration IPv4.

/etc/ip6tables.up.rules
# /etc/ip6tables.up.rules
# Script qui démarre les règles de filtrage IPv6
# Formation Debian GNU/Linux par Alexis de Lattre
# http://formation-debian.via.ecp.fr/
 
# iptables-restore(8) remet implicitement à zéro toutes les règles
# Les instructions qui suivent concernent la table « filter »,
# c'est-à-dire... le filtrage.
*filter
 
#########################
# Politiques par défaut #
#########################
# Les politiques par défaut déterminent le devenir d'un paquet auquel
# aucune règle spécifique ne s'applique.
 
# Les connexions entrantes sont bloquées par défaut
-P INPUT DROP
# Les connexions destinées à être routées sont refusées par défaut
-P FORWARD DROP
# Les connexions sortantes sont acceptées par défaut
-P OUTPUT ACCEPT
 
######################
# Règles de filtrage #
######################
# Nous précisons ici des règles spécifiques pour les paquets vérifiant
# certaines conditions.
 
# Pas de filtrage sur l'interface de "loopback"
-A INPUT -i lo -j ACCEPT
 
## Règles relatives au routage ##
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 --source 2001:910:111e::/48 -j ACCEPT
-A FORWARD --destination 2001:910:111e::/48 -j ACCEPT
 
## Règles relatives aux services ##
 
# Accepter le protocole ICMPv6 (notamment le ping)
-A INPUT -p icmpv6 -j ACCEPT
 
# Accepter les packets entrants relatifs à des connexions déjà
# établies : cela va plus vite que de devoir réexaminer toutes
# les règles pour chaque paquet.
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
 
# Accepter SSH de partout
-A INPUT -p tcp --dport ssh -j ACCEPT
-A INPUT -p tcp --dport http -j ACCEPT
 
# Interface aircontrol en HTTPS
-A INPUT -p tcp --dport 9443 -j ACCEPT
-A INPUT -p tcp --dport 9080 -j ACCEPT
 
# Webservices Ilico
-A INPUT -p tcp --dport 8080 -j ACCEPT
 
# Accepter DNS depuis les IPs abonnés Ilico
-A INPUT -i eth0 -p tcp --dport domain --source 2001:910:111e::/48 -j ACCEPT
-A INPUT -i eth0 -p udp --dport domain --source 2001:910:111e::/48 -j ACCEPT
 
# Accepter les requêtes/réponses DHCPv6
-A INPUT -i eth0 -p udp --dport dhcpv6-server --sport dhcpv6-client -j ACCEPT
 
COMMIT

Comme pour IPv4, on charge ces règles au démarrage de l'interface :

/etc/network/interfaces (extrait)
…
# Reseau abonnes IPv6
iface eth0:abo6 inet6 static
        address 2001:910:111e::
        netmask 48
        # Configuration du pare-feu pour l'IPv6
        pre-up ip6tables-restore < /etc/ip6tables.up.rules # ipv6
 
…

Et pour les activer immédiatement (sans redémarrer) :

sudo iptables-apply /etc/ip6tables.up.rules

Routage des préfixes abonnés

On a la route par défaut de la box vers le reste d'internet. Reste l'autre partie du routage : du routeur vers chaque box. Il faut indiquer vers quel routeur envoyé les paquets destinés à tel ou tel préfixe /56. Cette partie n'est pas automatisée par la prefix-delegation.

Il faut donc générer un fichier de règles de routages à appliquer.

Le script est “IPv6_routes”. Pour activer les routes, on fait “IPv6_routes –enable”.

Le script active les routes. On peut verifier la prise en compte des routes par la comande :

route -A inet6
root@miassou:~# route -A inet6
Table de routage IPv6 du noyau
Destination                    Next Hop                   Flag Met Ref Use If
2001:910:111e:200::/56         2001:910:111e:200::        UG   1024 0     0 eth0
2001:910:111e:300::/56         2001:910:111e:300::        UG   1024 0     0 eth0
2001:910:111e:400::/56         2001:910:111e:400::        UG   1024 0     0 eth0
2001:910:111e:500::/56         2001:910:111e:500::        UG   1024 0     0 eth0
2001:910:111e:600::/56         2001:910:111e:600::        UG   1024 0     0 eth0
2001:910:111e:700::/56         2001:910:111e:700::        UG   1024 0     0 eth0
2001:910:111e:800::/56         2001:910:111e:800::        UG   1024 0     0 eth0
2001:910:111e:a00::/56         2001:910:111e:a00::        UG   1024 0     0 eth0
2001:910:111e::/48             ::                         U    1024 0     8 eth0
fe80::/64                      ::                         U    256 0     0 eth1
fe80::/64                      ::                         U    256 0     0 eth0
fe80::/64                      ::                         U    256 0     0 ppp0
fe80::/10                      ::                         U    1   0     0 ppp0
fe80::/10                      ::                         U    256 0     0 ppp0
::/0                           ::                         U    1024 0     0 ppp0
::/0                           ::                         !n   -1  1 24251 lo
::1/128                        ::                         Un   0   1  7568 lo
2001:910:111e::/128            ::                         Un   0   1    94 lo
fe80::/128                     ::                         Un   0   1     0 lo
fe80::/128                     ::                         Un   0   1     0 lo
fe80::/128                     ::                         Un   0   1     0 lo
fe80::225:22ff:fee4:6feb/128   ::                         Un   0   1     0 lo
fe80::5043:b11e:0:0/128        ::                         Un   0   1     0 lo
fe80::fad1:11ff:fe10:9001/128  ::                         Un   0   1  1346 lo
ff00::/8                       ::                         U    256 0     0 eth1
ff00::/8                       ::                         U    256 0     0 eth0
ff00::/8                       ::                         U    256 0     0 ppp0
::/0                           ::                         !n   -1  1 24251 lo

Ne pas oublier de le rendre exécutable

De même, il faut indiquer que la route par défaut est ppp0 :

echo '#!/bin/bash' > /etc/ppp/ipv6-up.d/01-enable_ipv6_route
echo 'ip -6 route add default dev ppp0' >> /etc/ppp/ipv6-up.d/01-enable_ipv6_route
echo 'exit 0' >> /etc/ppp/ipv6-up.d/01-enable_ipv6_route
chmod +x /etc/ppp/ipv6-up.d/01-enable_ipv6_route

Redémarrer la connexion pour que la route soit activée ou tapez “ip -6 route add default dev ppp0”.

Nameserver

À ce niveau de la configuration, le ping vers une IPv6 devrait fonctionner (ex: “ping6 2001:910:800::12”). Par contre, les DNS ne fonctionnent pas encore (ping6 google.com ne fonctionne pas).

On ajoute donc à /etc/resolv.conf :

/etc/resolv.conf
...
# IPv6
nameserver 2001:910:800::12 # Serveur DNS IPv6 de FDN

Vérification

Pour faire des tests, on peut vérifier que la table de routage IPv6 est bonne :

ip -6 route

elle doit ressembler à :

root@miassou:~# ip -6 route
2001:910:111e:200::/56 via 2001:910:111e:200:: dev eth0  metric 1024 
2001:910:111e:300::/56 via 2001:910:111e:300:: dev eth0  metric 1024 
2001:910:111e:400::/56 via 2001:910:111e:400:: dev eth0  metric 1024 
2001:910:111e:500::/56 via 2001:910:111e:500:: dev eth0  metric 1024 
2001:910:111e:600::/56 via 2001:910:111e:600:: dev eth0  metric 1024 
2001:910:111e:700::/56 via 2001:910:111e:700:: dev eth0  metric 1024 
2001:910:111e:800::/56 via 2001:910:111e:800:: dev eth0  metric 1024 
2001:910:111e:a00::/56 via 2001:910:111e:a00:: dev eth0  metric 1024 
2001:910:111e::/48 dev eth0  metric 1024 
fe80::/64 dev eth1  proto kernel  metric 256 
fe80::/64 dev eth0  proto kernel  metric 256 
fe80::/64 dev ppp0  proto kernel  metric 256 
fe80::/10 dev ppp0  metric 1 
fe80::/10 dev ppp0  proto kernel  metric 256 
default dev ppp0  metric 1024 

Ping d'une IP:

ping6 2001:910:800::12 # dns fdn

Ping & résolution DNS:

ping6 google.com

Se faire féliciter par Google : http://ipv6test.google.com/

1)
ou de route tout court d'ailleurs…
2)
calculé depuis l'adresse mac ou aléatoire
3)
aléatoire, dans un pool ou associé à l'@mac comme en DHCPv4… Bref, selon le bon vouloir de l'administrateur, le bloc étant géré côté serveur DHCPv6 et non de manière décentralisée comme avec l'autoconfiguration
4)
00:03:00:06 est une constante dépendant du type de medium sous-jacent à IP. Voir RFC3315 section 6