# Configuration du réseau Cette page décrit la configuration réseau à effectuer après [[technique:old:alice_bob:install_debian|l'installation de Debian]] pour que les machines physiques et les futures machines virtuelles soient accessibles via une IP publique (v4 et v6) et un nom de domaine. Les IP mentionnées dans cette page nous ont été attribuées par Tetaneutral et, tant que nos machines sont connectées à leur réseau, nous sommes libres d'utiliser ces IP sur n'importe quelle machine (elles ne sont pas assignées à une machine en particulier). Cette page reprend la documentation initiale et essaye de l'expliquer. Mais comme je (Quentin) suis un peu une bille en réseau, il y a sans doute des informations douteuses ou superflues. ## Assignation des IP statiques et routage vers les VM À l'époque de l'installation des machines, le fichier `/etc/rc.local` était utilisé. Il semblerait que l'utilisation de ce fichier [soit dépréciée depuis un moment](https://unix.stackexchange.com/a/471871/96250), on le garde ici pour référence, mais il faudra probablement vraisemblablement utiliser une autre méthode pour l'installation d'une nouvelle machine physique. Les instructions sont inspirées du [wiki de Tetaneutral](https://chiliproject.tetaneutral.net/projects/tetaneutral/wiki/Routage), et pourront donc également varier en fonction du FAI. L'idée est la suivante : * Utiliser `eth0` comme une interface de debug, avec une IPv4 privée, accessible uniquement depuis l'intérieur du réseau de TTNT (par exemple par [[technique:infrastructure:urgence|rebond SSH]]). * Utiliser `eth1` comme une interface publique, connectée à Internet. * Configurer une [interface bridge](https://wiki.debian.org/fr/BridgeNetworkConnections), `vmbr0`, qui permettra d'accéder à la machine physique et aux machines virtuelles qu'elle héberge. Elle "répondra" à toutes les IP (machine physique et machines virtuelles) et routera vers la bonne interface virtuelle si c'est celle d'une machine virtuelle (Proxmox se charge de créer cette interface virtuelle et de la connecter au bridge). * Configurer une interface bridge, `vmbr1`, qui sera utilisée pour créer des machines virtuelles sur un réseau privé. Ces machines seraient par exemples accessibles via un NAT (IP publique de l'hyperviseur + port). Elles ne sont pas directement exposée sur Internet. Si jamais la configuration réseau semble être écrasée par une configuration IPv6, il est nécessaire de supprimer le paquet `rdnssd` qui fait du DNS discovery pour l'IPv6. Il casse la configuration IPv6 statique, on peut donc le supprimer. ``` apt-get purge rdnssd ``` ### Alice On modifie le fichier `/etc/rc.local` pour lui assigner le contenu suivant : ```bash # On attend 3 secondes au boot pour être sûr d'avoir les interfaces réseau sleep 3 # Désactiver l'auto-configuration IPv6 pour permettre # l'utilisation d'une adresse IPv6 statique for i in /proc/sys/net/ipv6/conf/*; do \ for j in autoconf accept_ra; do echo 0 > $i/$j; done;done # Active le routage des paquet IP, pour router # les paquets à destination des machines virtuelles # vers l'interface bridge echo 1 > /proc/sys/net/ipv4/ip_forward # Interface sur le réseau privé réservée au debug ip link set eth0 up ip addr add 192.168.128.153/24 dev eth0 # Interface publique ip link set eth1 up # Interface de bridge pour les VM, connectée à l'interface publique brctl addbr vmbr0 ip link set vmbr0 up brctl addif vmbr0 eth1 # Interface de bridge privée pour les VM, sur laquelle il faudra ajouter du NAT brctl addbr vmbr1 ip link set vmbr1 up ip addr add 10.0.42.1/24 dev vmbr1 echo 1 > /proc/sys/net/ipv4/conf/vmbr1/proxy_arp iptables -t nat -A POSTROUTING -s '10.0.42.0/24' -o vmbr0 -j MASQUERADE # Configuration de l'IPv4 de la machine physique : une seule IPv4 ip addr add 91.224.148.84/32 dev vmbr0 # Passerelle par défaut IPv4 : routeur de TTNT ip route add default via 91.224.148.0 dev vmbr0 onlink # Configuration de l'IPv6 de la machine physique : une plage IPv6/56 ip -6 addr add 2a03:7220:8080:5400::1/56 dev vmbr0 # Passerelle IPv6 par défaut : lien-local statique du routeur TTNT ip -6 route add default via fe80::31 dev vmbr0 # Lien-local IPv6 ip -6 addr add fe80::80:54/64 dev vmbr0 # Routage des IP publiques des VM vers l'interface bridge # pica01 ip route add 91.224.148.57 dev vmbr0 scope link ip -6 route add fe80::80:39 dev vmbr0 # stph1 ip route add 91.224.148.58 dev vmbr0 scope link # pica01-test ip route add 91.224.148.59 dev vmbr0 scope link ip -6 route add fe80::80:3b dev vmbr0 # Utilisation des DNS de Tetaneutral echo nameserver 91.224.148.10 > /etc/resolv.conf echo nameserver 91.224.149.254 >> /etc/resolv.conf # Si une requête DNS n'a pas de ., on ajoute # .picasoft.net derrière le nom de domaine echo search picasoft.net >> /etc/resolv.conf exit 0 ``` Puis : ```bash chmod +x /etc/rc.local ``` ### Bob Seules les IP changent. On modifie le fichier `/etc/rc.local` pour lui assigner le contenu suivant : ```bash # On attend 3 secondes au boot pour être sûr d'avoir les interfaces réseau sleep 3 # Désactiver l'auto-configuration IPv6 pour permettre # l'utilisation d'une adresse IPv6 statique for i in /proc/sys/net/ipv6/conf/*; do \ for j in autoconf accept_ra; do echo 0 > $i/$j; done;done # Active le routage des paquet IP, pour router # les paquets à destination des machines virtuelles # vers l'interface bridge echo 1 > /proc/sys/net/ipv4/ip_forward # Interface sur le réseau privé réservée au debug ip link set eth0 up ip addr add 192.168.128.154/24 dev eth0 # Interface publique ip link set eth1 up # Interface de bridge pour les VM connectée à l'interface publique brctl addbr vmbr0 ip link set vmbr0 up brctl addif vmbr0 eth1 # Interface de bridge privée pour les VM, sur laquelle il faudra ajouter du NAT brctl addbr vmbr1 ip link set vmbr1 up ip addr add 10.0.42.1/24 dev vmbr1 echo 1 > /proc/sys/net/ipv4/conf/vmbr1/proxy_arp iptables -t nat -A POSTROUTING -s '10.0.42.0/24' -o vmbr0 -j MASQUERADE # Configuration de l'IPv4 de la machine physique : une seule IPv4 ip addr add 91.224.148.85/32 dev vmbr0 # Passerelle par défaut IPv4 : routeur de TTNT ip route add default via 91.224.148.0 dev vmbr0 onlink # Configuration de l'IPv6 de la machine physique : une plage IPv6/56 ip -6 addr add 2a03:7220:8080:5500::1/56 dev vmbr0 # Passerelle IPv6 par défaut : lien-local statique du routeur TTNT ip -6 route add default via fe80::31 dev vmbr0 # Lien-local IPv6 ip -6 addr add fe80::80:55/64 dev vmbr0 # Routage des IP publiques des VM vers l'interface bridge # pica02 ip route add 91.224.148.60 dev vmbr0 scope link ip -6 route add fe80::80:3c dev vmbr0 # monitoring ip route add 91.224.148.61 dev vmbr0 scope link ip -6 route add fe80::80:3d dev vmbr0 # Utilisation des DNS de Tetaneutral echo nameserver 91.224.148.10 > /etc/resolv.conf echo nameserver 91.224.149.254 >> /etc/resolv.conf # Si une requête DNS n'a pas de ., on ajoute # .picasoft.net derrière le nom de domaine echo search picasoft.net >> /etc/resolv.conf exit 0 ``` Puis : ```bash chmod +x /etc/rc.local ``` ## Configuration du serveur DNS On suppose qu'un serveur DNS est installé sur les machines et que le registrar du domaine Picasoft a délégué la zone `picasoft.net` à la machine qui héberge le serveur DNS maître, [[technique:adminsys:dns:picasoft|comme décrit sur cette page]]. On ajoute la configuration suivante, qui va faire la correspondance entre les noms de domaine en `.picasoft.net` et les IP définies ci-dessus : ``` alice IN A 91.224.148.84 ; fe80::80:54 alice IN AAAA 2a03:7220:8080:5400::1 bob IN A 91.224.148.85 ; fe80::80:55 bob IN AAAA 2a03:7220:8080:5500::1 pica01 IN A 91.224.148.57 ; fe80::80:39 pica01 IN AAAA 2a03:7220:8080:3900::1 stph1 IN A 91.224.148.58 pica01-test IN A 91.224.148.59 ; fe80::80:3b pica01-test IN AAAA 2a03:7220:8080:3b00::1 pica02 IN A 91.224.148.60 ; fe80::80:3c pica02 IN AAAA 2a03:7220:8080:3c00::1 monitoring IN A 91.224.148.61 ; fe80::80:3d monitoring IN AAAA 2a03:7220:8080:3d00::1 ``` ## Finalisation On exécute les scripts `/etc/rc.local` sur les deux machines, on vérifie qu'ils ne produisent pas d'erreur, on redémarre le serveur DNS. On vérifie qu'on peut accéder aux machines via leurs IP et, après propagation, par leur nom de domaine. ## Explications concernant le routage IPv6 Ce paragraphe reflète ma compréhension de quelque chose "d'étrange" à première vue. Prenons le cas de `pica01`, qui a les IP suivantes : * v4 : `91.224.148.57` * v6 : `2a03:7220:8080:3900::1` Dans la configuration permettant de router les paquets à destination de la machine virtuelle `pica01` (hébergée sur la machine physique Alice) vers l'interface `vmbr0`, on a les lignes suivantes : ``` ip route add 91.224.148.57 dev vmbr0 scope link ip -6 route add fe80::80:39 dev vmbr0 ``` On retrouve bien l'IPv4 déclarée dans le DNS, mais d'où vient `fe80::80:39` ? Quel rapport avec `2a03:7220:8080:3900::1` ? En fait, chez Tetaneutral, chaque IPv4 est livrée avec une **plage d'IPv6** ([source](https://chiliproject.tetaneutral.net/projects/tetaneutral/wiki/IPv6#Comment-activer-le-routage-sur-son-56-IPv6-) : *Chaque IPv4 livrée par tetaneutral.net est associé à un /56 IPv6*). Par défaut, Tetaneutral route bien `2a03:7220:8080:3900::1` vers Alice, mais doit en conséquence router à la main la plage `2a03:7220:8080:39::/56` vers notre machine ([source](https://chiliproject.tetaneutral.net/projects/tetaneutral/wiki/IPv6#Etape-2-faire-router-votre-plage-56-par-Tetaneutral) : *Dans la configuration par défaut des VM Tetaneutral, l'hôte des VM crée la route vers l'adresse XXX::1 [...] par l'utilisation de l'équivalent IPv6 d'ARP.*). Tetaneutral indique donc de router la plage `2a03:7220:8080:39::/56` via `fe80::80:39`, qui est une des adresse IPv6 de `pica01`. Ces adresses en `fe80::/10` : * Sont dites [link-local](https://en.wikipedia.org/wiki/Link-local_address) (ou lien-local), et ne sont valides qu'au sein d'un réseau local * Sont obligatoires pour chaque interface IPv6 * Par convention de TTNT, sont construites à partir des derniers chiffres non-nuls de l'IPv6 (remarquez `80:39` à la fin de l'adresse IPv6 publique et de l'adresse IPv6 link-local). Je me demande pourquoi TTNT ne route pas la plage via l'IPv6 publique de `pica01` : peut-être que ça ferait une sorte de boucle, puisque notre IPv6 publique est dans cette plage, justement ? Pour résumer, à ce stade, tous les paquets à destination des IP de la plage `2a03:7220:8080:39::/56`, y compris l'IP publique de `pica01`, sont routés vers `fe80::80:39`. Mais où est `fe80::80:39` ? On retrouve justement la configuration suivante, sur l'hôte (Alice) : ``` ip -6 route add fe80::80:39 dev vmbr0 ``` Ce qui indique finalement qu'il faut router tous les paquets à destination de`fe80::80:39` sur l'interface bridge. Comme `pica01` aura une IPv6 lien-local valant `fe80::80:39`, elle recevra donc tous les paquets à destination des IP de la plage `2a03:7220:8080:39::/56`, et en particulier de son IPv6 publique, `2a03:7220:8080:3900::1`.