Skip to main content

Configuration du réseau

Configuration du réseau.

Pour utiliser toutes les adresses IP de votre subnet IPv4 / 6 sur un serveur dédié Hetzner. 
Vous avez besoin de créer un bridge sur votre hôte.

Editez le fichier ```/etc/network/interfaces``` 
Ignorez les deux premières définitions loopback IPv4 et IPv6.

auto lo
iface lo inet loopback

iface lo inet6 loopback

Seront différent selon votre serveur les occurrences suivantes :
- enp7s0 est le nom de ma carte sur mon serveur mais elle peut-être enp8s0, etc
- /26 et par extension le netmask 255.255.255.192 qui correspondent à votre serveur et son IP principale
Il s'agit donc de ne pas modifier ces occurrences sur votre serveur.

auto enp7s0 
iface enp7s0 inet static
address <YOUR MAIN IP>/26
gateway <YOUR GATEWAY>
up route add -net <YOUR NET> netmask 255.255.255.192 gw <YOUR GATEWAY> enp7s0

Petite correction sur la partie IPv6 par contre:

iface eth0 inet6 static
    address <ONE OF YOUR IPv6 ADDRESSES>
    netmask 128
    gateway fe80::1

On remplace ici 64 par 128 afin que votre hôte ne détienne seulement que son IP et pas le subnet entier.
On assignera le /64 au bridge ci dessous.

Il est maintenant temps de créer notre premier bridge qui reliera notre hôte à toutes les machines virtuelles et qu'elles puissent joindre et être jointes l’extérieur…

auto vmbr0
iface vmbr0 inet static
address <YOUR MAIN IP>
netmask 255.255.255.255
bridge_ports none
bridge_stp off
bridge_fd 0
bridge_maxwait 0
pre-up brctl addbr vmbr0
up ip route add <FIRST IP FROM YOUR SUBNET>/32 dev vmbr0
up ip route add <SECOND IP FROM YOUR SUBNET>/32 dev vmbr0
...

Nous voyons que notre netmask est a 255.255.255.255 soit /32. 
On ne ponte pas avec l'interface physique, c'est là où est la différence avec beaucoup de provider ou de proxmox at home.

Ajoutez une ligne "up ip route add ..." par adresses IPv4 de votre subnet.
On pourrait raccourcir en ajouter le subnet avec son /29 par exemple mais à ce moment là nous perdons la première et la dernière adresse de notre subnet. 
Je vais pas m'étaler mais un subnet est un découpage donc si on à :
192.168.2.0/29 alors les adresses de 2.1 a 2.6 sont utilisables. Mais avec cette façon de faire l'on peut utiliser 2.0 et 2.7 ce qui nous donnes un total de 8 adresses utilisable et non plus 6 !

Voilà maintenant elles pourront parler entre elles, avec l'hôte et avec le monde 0.0.0.0/0

Aussi ajoutons un bloc IPv6 à ce bridge ( le futur baby, le futur  !!) et nous notons comme sur le bloc aussi l'adresse principale et un mask en 64 :

iface vmbr0 inet6 static
    address <YOUR MAIN IPv6 ADDRESS>
    netmask 64

Voilà maintenant on un bridge qui prend en charge toutes nos IPv4 et IPv6 publiques.
Globalement ce à quoi doit ressembler votre configuration maintenant.

auto lo
iface lo inet loopback

iface lo inet6 loopback

auto enp7s0
iface enp7s0 inet static
address 136.xxx.yyy.zzz/26
gateway 136.xxx.yyy.zzz
up route add -net 136.xxx.yyy.zzz netmask 255.255.255.192 gw 136.xxx.yyy.zzz dev enp7s0
# route 136.xxx.yyy.zzz/26 via 136.xxx.yyy.zzz

iface enp7s0 inet6 static
address 2a01:4f8:xxxx:yyy::2/128
gateway fe80::1

auto vmbr0
iface vmbr0 inet static
address 136.xxx.yyy.zzz/32
bridge-ports none
bridge-stp off
bridge-fd 0
bridge_maxwait 0
pre-up brctl addbr vmbr0
up ip route add 144.xxx.yyy.zzz/32 dev vmbr0
up ip route add 144.xxx.yyy.zzz/32 dev vmbr0
up ip route add 144.xxx.yyy.zzz/32 dev vmbr0
up ip route add 144.xxx.yyy.zzz/32 dev vmbr0
[...]
#WAN

iface vmbr0 inet6 static
address 2a01:4f8:xxx:yyy::2/64
gateway fe80::1

Plus tard nous verrons comment configurer une vm Debian ou Ubuntu à la mano pour que ca fonctionne.
Mais pour l'instant ajoutons un autre bridge pour notre LAN...

Configuration d'un LAN

C’est très sympa d’équiper chaque machine virtuelle de deux interfaces réseau virtuelles et d’avoir la deuxième connectée à un réseau privé qui n’est accessible qu’à partir de votre hôte et de toutes les machines virtuelles.
De cette façon, vous pouvez, par exemple, créer des bases de données, de la mise en cache ou des machines de travail qui n’ont pas besoin d’adresse IP publique et ne seront jamais vus depuis l'extérieur.
Ou bien dans mon cas le plus souvent : avoir des VM avec une connectivité IPv6 Publique seulement mais qui peuvent joindre le monde par de l'IPv4. Plutôt pratique quand tu dois jouer avec un github qui n'a pas d'ipv6...

Toujours dans  ```/etc/network/interfaces``` ajoute la section suivante à la fin:

auto vmbr1
iface vmbr1 inet static
address 10.20.30.1
netmask 255.255.255.0
bridge_ports none
bridge_stp off
bridge_fd 0
post-up iptables -t nat -A POSTROUTING -s '10.20.30.0/24' -o enp7s0 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.20.30.0/24' -o enp7s0 -j MASQUERADE

Il faut adapter les 2 occurrences enp7s0 en fonction de votre carte physique.
Cela configure le LAN interne. Les deux dernières lignes s’occupent du NAT, pour que vos VM « privées » puissent se connecter à Internet, par exemple pour installer des logiciels via apt et télécharger des mises à jour, clone de repos github...
De cette façon, les machines virtuelles peuvent se connecter à l’extérieur de l’intérieur, mais ne peuvent pas être directement accessibles à partir d’Internet, exactement comme votre ordinateur personnel derrière un routeur.

Maintenant que notre hôte agit comme un routeur, nous devons être sur que son kernel est les fonctionnalités IP packet forwarding.
Un tour dans
[code]
/etc/sysctl.conf
[/code]
Assure toi d'avoir les 2 lignes suivantes décommentées :

net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1

Enfin, assure toi que ton hôte n'enverra pas de messages ICMP "redirect" aux guests leur disant de trouver la passerelle par eux-mêmes. Cela ne fonctionnera pas avec notre configuration réseau particulière.
Décommente cette ligne :

net.ipv4.conf.all.send_redirects=0

Ceci conclut la configuration de l’hôte.  Tu peut maintenant redémarrer le serveur une dernière fois.

Dans mon cas, je me fais une vm template sous Debian, en utilisant vmbr1 pour l'install.
Je lui installe cloud-init ce qui me permet de pouvoir mettre des ips publique rapidement à chaque clone.
Sinon si tu veut le faire a la main, voila à quoi doit ressembler ton fichier interface dans ta VM pour profiter de son ip publique.
ETH0 = Public
ETH1 = LAN
Tu n'es pas obliger d'avoir les deux

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address <ONE OF YOUR SUBNET'S IPs>
netmask 255.255.255.255
dns-nameservers 213.133.100.100 213.133.98.98 213.133.99.99
post-up ip route add <YOUR MAIN IP> dev eth0
post-up ip route add default via <YOUR MAIN IP> dev eth0
pre-down ip route del default via <YOUR MAIN IP> dev eth0
pre-down ip route del <YOUR MAIN IP> dev eth0

iface eth0 inet6 static
address <ONE OF YOUR IPv6 ADDRESSES>
netmask 64
gateway <YOUR MAIN IPv6 ADDRESS>

auto eth1
iface eth1 inet static
address 10.20.30.3
netmask 255.255.255.0
gateway 10.20.30.1