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.
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, 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
Alice
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
Bob
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
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, 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 : 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
.