web-dev-qa-db-fra.com

Façon correcte de router entre 2 interfaces avec netplan dans Ubuntu 18.04

Problème et configuration du réseau

J'essaie actuellement de permettre la communication entre deux interfaces, chacune avec leur propre sous-réseau, sur un serveur Ubuntu 18.04 à l'aide de netplan, mais j'ai de la difficulté à obtenir la configuration correcte. Here est une représentation graphique de ce à quoi le réseau ressemble:

Image of Network Layout


Explication du réseau

Dans l'image, le dispositif central jaune est un serveur DHCP pour les clients de gauche utilisant l'interface enp8s0 avec adresse IP statique 192.168.254.254 et masque de sous-réseau de 255.255.255.240 . Les clients (boîtes orange) obtiennent leur adresse IP du serveur DHCP. Chaque client héberge également une page Web via Nginx. Tous ces appareils exécutent le serveur Ubuntu 18.04. Les adresses susceptibles de changer sur chaque ordinateur client ne sont pas une préoccupation.

Sur le côté droit, le "serveur" jaune a une interface enp7s0 configurée avec une adresse IP statique de 172.16.0.1 et masque de sous-réseau de 255.255.255.252 . Cette interface est ensuite connectée à mon ordinateur portable dont l'interface est définie sur 172.16.0.2 avec le même masque de sous-réseau.


But général

Ce que j'essaie de faire, c'est de pouvoir consulter le site Web de n'importe quel client à partir de mon ordinateur portable. Aucune de ces machines n’a besoin d’être connectée à Internet et toutes les connexions se font via des câbles Ethernet.


Configuration actuelle

Netplan:

Fichier de configuration netplan "serveur" jaune:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp7s0:
      addresses: [172.16.0.1/30]
      gateway4: 172.16.0.1
      routes:
        - to: 192.168.254.240/28
          via: 172.16.0.1
          on-link: true
    enp8s0:
      addresses: [192.168.254.254/28]
      gateway4: 192.168.254.254
      routes:
        - to: 172.16.0.0/30
          via: 192.168.254.254
          on-link: true

Transmission IP:

La ligne net.ipv4.ip_forward=1 n'est pas commentée dans le fichier /etc/sysctl.conf .

L'exécution de cat /proc/sys/net/ipv4/ip_forward renvoie 1 .

Serveur DHCP:

J'ai défini INTERFACESv4 égal à enp8s0 dans /etc/default/isc-dhcp-server .

Enfin, mon /etc/dhcp/dhcpd.conf est configuré comme suit:

# option definitions common to all supported networks...

default-lease-time 600;
max-lease-time 7200;

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;

# So DHCP server knows of other subnet
subnet 172.16.0.0 netmask 255.255.255.252 {
}

# DHCP server subnet
subnet 192.168.254.240 netmask 255.255.255.240 {
  range 192.168.254.241 192.168.254.253;
  option subnet-mask 255.255.255.240;
  option routers 192.168.254.254;
  option broadcast-address 192.168.254.255;
  default-lease-time 600;
  max-lease-time 7200;
}
3
John T

Je n'utiliserais pas les itinéraires pour essayer de router correctement le trafic entre les deux sous-réseaux. Vous pourriez vous retrouver dans une boucle de routage qui va casser des choses.

Ce que vous devriez probablement envisager est de faire en sorte que votre système se comporte comme un routeur et effectue tout le transfert avec NAT. Un moyen simple et rapide de procéder consiste à avoir NAT MASQUERADE sur chacune des interfaces. (Mais vous devrez également supprimer les règles de route que vous avez en place, car elles ne fonctionneront pas correctement.)

Vous devez ajouter des règles au pare-feu qui gèrent les cas suivants:

  • 192.168.254.240/28 -> 172.16.0.0/30
  • 172.16.0.0/30 -> 192.168.254.240/28

Avec iptables, vous devez le configurer comme suit (les lignes commentées avec # au début expliquent simplement le rôle de chaque règle):

# Allow traffic to be forwarded from enp7s0 to enp8s0
iptables -A FORWARD -i enp7s0 -j ACCEPT
# Allow traffic to be forwarded from enp8s0 to enp7s0
iptables -A FORWARD -i enp8s0 -j ACCEPT

Vous devez également configurer NAT règles, et cela ne va pas être très agréable, mais nous devons laisser le 'routeur' être celui que nous masquons comme source.

iptables -t nat -A POSTROUTING -o enp7s0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o enp8s0 -j MASQUERADE

Cela devrait permettre une traversée bidirectionnelle NAT entre les sous-réseaux. Assurez-vous de enregistrer ces règles pour l'avenir.

Faites-moi savoir si cela ne fonctionne pas, je vais aller plus loin dans la question, si cela se produit.

0
Thomas Ward