===== Routeur IP Miassou =====
Le routeur est une machine sous debian wheezy. Pour comprendre l'adressage utilisé par Ilico de manière globale, voir [[technique:adressage|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 [[http://doc.rhizome-fai.net |Rhizome]] disponible sous licence
[[https://creativecommons.org/licenses/by-nc-sa/3.0/|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,
* Une adresse IPv4 publique est attribuée par le radius de FDN au modem (80.67.177.30/32) ;
* un bloc d'adresses (80.67.180.0/24) est routé sur la ligne ADSL ;
On veut :
* Que les abonnés soient routés vers internet
* Que les AP sur le réseau privé ne soient pas routés vers internet
* Qu'il n'y ait pas de routage entre le réseau abonné et le réseau backbone
Au niveau interfaces réseau, on aura à la fin de cette partie :
* eth0: 10.42.1.0/16 (backbone radio, réseau privé des access-points).
* eth0:abo : réseau des IPs publiques des abonnés routés sur cette connexion ADSL (80.67.180.0/24)
* ppp0: 80.67.177.30/32 ptp (adresse attribuée par FDN via le modem), interface WAN, route par défaut.
* eth1:modem 192.168.1.2/32 ptp (modem, adressage privé, pour configuration uniquement)
Il faut brancher le câble ethernet sur le port 1 du modem.
==== Configuration PPP/ADSL ====
Configurer le modem :
* Pour qu'il ne serve pas de DHCP,
* Qu'il aie une adresse LAN statique 192.168.1.1
* Qu'il fonctionne en mode bridge
* Le brancher sur eth1 du routeur
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 :
* Activer la connexion : //pon dsl-provider//
* Désactiver: //poff dsl-provider//
* Regarder le journal PPP //plog//
À 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 :
* Quels sont les paquets que l'on accepte de router (en fonction de leur source/destination) ?
* Quels sont les connexion entrantes destinées au routeur lui-même que l'on accepte ?
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 :
* SSH depuis partout
* ICMP (pings, rapports d'erreurs…) depuis partout
* DNS depuis l'intérieur du réseau
* IGMP (annonces multicast) depuis l'intérieur du réseau
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
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 :
* **Serveur DHCP** : il attribue les //adresses publiques// aux équipements des abonnés et envoie les informations de configuration (route par défaut… etc).
* **Serveur DNS** : il reçoit les [[http://fr.wikipedia.org/wiki/Domain_Name_System|requêtes de noms ]] de la part des abonnés et y répond. Il résoud réellement les noms des machines abonnées et se contente de transmettre les autres aux serveurs DNS supérieurs (ceux de FDN pour l'instant)
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
# .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 [[http://doc.rhizome-fai.net |Rhizome]] disponible sous licence
[[https://creativecommons.org/licenses/by-nc-sa/3.0/|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 [[http://ldn-fai.net/|LDN]] on mis en ligne [[http://ldn-fai.net/adressage-ipv6ipv4/|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 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 ==
* Un routeur Rhizome gère les ressources suivantes :
*// 2001:910:111e::/48//
* //1.2.3.0/24//
* Un abonné Ilico reçoit l'adresse //1.2.3.**4**//
Le bloc délégué à l'abonné sera donc //2001:910:111e:**04**00::/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 :
* Le bloc attribué à la box
* La route par défaut vers internet
* Les serveurs DNS
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éfaut((ou de route tout court d'ailleurs…)) ^
^ Autoconfiguration IPv6 | ✔ ((calculé depuis l'adresse mac ou aléatoire)) | ✔ | ✘ |
^ DHCPv6 | ✔ ((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)) | ✘ | ✔ |
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 [[http://www.ietf.org/rfc/rfc2526.txt| 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é.
# 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 [[http://en.wikipedia.org/wiki/Point-to-point_protocol#Automatic_self_configuration|IPv6CP]] (par défaut, PPP ne négocie qu'une adresse IPv4 avec [[http://en.wikipedia.org/wiki/Internet_Protocol_Control_Protocol|IPCP]]) et son routage avec le [[http://en.wikipedia.org/wiki/L2TP|LNS]] de FDN qui négocie la connexion.
Rajouter la ligne suivante en fin de fichier :
…
# 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 :
net.ipv6.conf.all.forwarding=1
Puis pour recharger la conf sysctl
sysctl -p
=== Serveur DHCPv6 : dhcp6d ===
Le serveur DHCPv6 s'occupe donc
* **D'attribuer son bloc** à chaque box ([[http://tools.ietf.org/html/rfc3769|prefix-delegation]]) ;
* **D'attribuer une adresse** à chaque routeur : l'adresse [[http://www.ietf.org/rfc/rfc2526.txt| 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é.
== Installation ==
On utilise le serveur WIDE-DHCPv6 du projet [[http://www.kame.net|kame]].
apt-get install wide-dhcpv6-server
== Configuration ==
Le fichier de configuration est à créer :
# 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 [[http://tools.ietf.org/html/rfc6355|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**//. ((//00:03:00:06// est une constante dépendant du type de medium sous-jacent à IP. Voir [[http://www.ietf.org/rfc/rfc3315.txt|RFC3315 section 6]])).
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 :
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
# 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
:
…
# 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 :
...
# 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/