technique:old:alice_bob:network

Configuration du réseau

Cette page décrit la configuration réseau à effectuer après 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).

Attention:

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.

À 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, 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, 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 rebond SSH).
  • Utiliser eth1 comme une interface publique, connectée à Internet.
  • Configurer une interface bridge, 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.

Attention:

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

On modifie le fichier /etc/rc.local pour lui assigner le contenu suivant :

snippet.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 :

snippet.bash
chmod +x /etc/rc.local

Seules les IP changent. On modifie le fichier /etc/rc.local pour lui assigner le contenu suivant :

snippet.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 :

snippet.bash
chmod +x /etc/rc.local

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, 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

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.

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 : 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 : 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 (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 defe80::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.

  • technique/old/alice_bob/network.txt
  • de 91.224.148.61