# Radvd

Radvd est une implementation du mécanisme d'autoconfiguration des adresses IP en 
ipv6. Il permet au client de connaitre l'adresse du routeur et de se construire 
lui même une adresse à partir du préfixe annoncé par le routeur et de son 
adresse MAC. Des extensions du protocoles permettes aussi la configuration des 
serveurs dns.

## Principe

### Adresse ipv6 et EUI-64

Il est possible pour un pair possédant une adresse MAC et un prefixe ipv6 de 
taille au plus `/64` de construire une adresse ipv6. Cependant, rien n'assure 
qu'elle soit unique à ce stade et il faudra par la suite le vérifier. Mais on ne 
s'interesse ici qu'au processus de construction.

De son adresse MAC (donnée à 48 bits), on dérive un identifiant de l'interface 
sur le lien de 64 bits en insertant les 16 bits `FF:FE` au milieu de l'adresse 
MAC puis on inverse le 7 ème bit. On peut ensuite suffixer cet identifiant au 
préfixe dans lequel on chercher à construire notre addresse ipv6. Ainsi 
`00:25:90:69:8c:74` devient `00:25:90:ff:fe:69:8c:74` puis 
`02:25:90:ff:fe:69:8c:74` qui donne l'adresse `fd00::10:0225:90ff:fe69:8c74/64` 
dans le prefixe `fd00:0:0:10::/64`.

### Processus d'autoconfiguration complet

Lorsqu'une machine configure une interface supportant l'ipv6 sur un lien, celle 
ci va tenter de se crééer une premier adresse local au lien. Elle est donc 
judicieusement appelé ip de lien locale. Pour cela, il va se contruire comme 
expliquer précedemment une adresse dans le prefixe `fe80::/64`. Pour s'assurer 
qu'elle est effectivement unique, il va envoyer au groupe ipv6 all-node 
(`ff02::1`) qui comme son nom l'indique contient tous les nœuds si quelqu'un 
utilise déjà l'adresse. Si c'est le cas, il ne poussera pas sa configuration 
plus loin. Sinon après un délai sans réponse, il s'assignera l'adresse. Notre 
pair a donc maintenant une adresse sur le lien et il peut écouter les annonces 
(judicieusement appelé routeur-advertissement ou RA) périodiques qu'envoie le 
routeur au groupe all-node. S'il ne désire pas patienté jusqu'à la prochaine 
annonce le client peut envoyer un routeur-sollicitation au groupe all-routers. 
Dans ces annonces le routeur inclut entre autre le prefixe dans lequel le client 
devrait prendre son adresse, son adresse de lien local ainsi que des informations à 
propos des serveurs dns. Une fois ces informations récupérées le client peut 
procéder aux dernières étape de configuration de son interface réseaux en 
assignant l'adresse qu'il a construit à partir du préfixe que lui a fourni le 
routeur (en vérifiant en amont son unicité sur le lien) et en configurant la 
gateway à l'adresse de lien local du routeur.

## Installation

On se contente de tirer le logiciel des repository debian `sudo apt install 
radvd`.

## Configuration

La page de manuel détaillant les options de configurations de radvd est 
consultable en utilisant `man 5 radvd.conf`.

La configuration du logiciel se fait par bloc d'interface sur lesquel on va 
publier nos RA. Dans un bloc on peut ensuite définir
  * des options génériques à propos de l'annonce comme par exemple l'intervalle 
  auquel notre routeur devrait publier des annonces ou le temps que la route 
  devrait être conservé par le client.
  * les prefixes que le routeur va annoncer sur le lien et certaines options 
  associées
  * les options de configurations du DNS

Par exemple, le bloc suivant configure des annonces sur l'interface ens1 envoyé 
toutes les 30 secondes avec comme préfixe `2a0c:700:12::/64`, `adh.crans.org` 
comme liste de recherche pour les dns et `2a0c:700:12::ff:fe00:9912` comme 
adresse du serveur dns.

```
interface ens1 {
        AdvSendAdvert on;
        AdvDefaultPreference high;
        MaxRtrAdvInterval 30;

        prefix 2a0c:700:12::/64 {
                AdvRouterAddr on;
        };

        # La zone DNS
        DNSSL adh.crans.org {};

        # Les DNS récursifs
        RDNSS 2a0c:700:12::ff:fe00:9912 {};
};
```