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 
        netmask 64

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

/etc/sysctl.conf

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

Voila, tuto ouvert aux idées, aux améliorations et corrections 🙂

Matt

un an plus tard

Bonjour,
Top et merci pour le tuto, j'ai réussi a faire marcher ma VM pour quelle se connecte à internet. 🙂
Maintenant je bloque sur un acces ssh depuis l'extérieur vers ma VM mais j'y arrive pas, voici ma config /etc/network/interfaces

Pouvez-vous m'aider à configurer cette redirection ?

Merci et belle journée à tous.

auto lo
iface lo inet loopback
iface lo inet6 loopback


auto enp2s0
iface enp2s0 inet static
        address 188.xx.xx.xx/26
        gateway 188.xx.xx.xx
        up route add -net 188.xx.xx.xx netmask 255.255.255.192 gw 188.xx.xx.xx dev enp2s0


iface enp2s0 inet6 static
        address xxxx:xxxx:xxx:xxxx::2/128
        gateway xxxx::1

auto vmbr0
iface vmbr0 inet static
    address  188.xx.xx.xx
    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 10.0.0.1/32 dev vmbr0
    up ip route add 10.0.0.2/32 dev vmbr0

iface vmbr0 inet6 static
    address 188.xx.xx.xx
    netmask 64

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 enp2s0 -j MASQUERADE
    post-down iptables -t nat -D POSTROUTING -s '10.20.30.0/24' -o enp2s0 -j MASQUERADE

    post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 22 -j DNAT --to 10.20.30.3:22
    post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 22 -j DNAT --to 10.20.30.3:22
...

Hello,
Il y'a beaucoup de choses incohérentes.

  • 1) les lignes up ip route add IP ? les ips sont celles que tu as mises ??
  • 2) iface vmbr0 inet6 l'adresse est une ipv4
  • 3) a ce moment là le prerouting devrais utilisé -i enp2s0 à mon avis...

J'ai jamais utilisé le vmbr1 qui est pour moi NAT et justement comme pour ne pas y'acceder depuis l'exterieur via son ipv4 mais seulement la6

6 jours plus tard

Bonjour,

effectivement, maintenant que vous m'attirez l'attention je me rende compte que il y'a des choses incohérentes.
Je vais reprendre la config réseau serveur depuis le zéro.

Je vous solliciterai si j'ai des questions.

Merci - Belle journée.

3 mois plus tard
MattProd a renommé le titre en [TUTO]Proxmox 7-8 / Hetzner ajout subnet.
8 mois plus tard
Répondre…