Deux cartes réseau, deux liens internet, une "default route"

Résolu/Fermé
guillaumegilbertsoucy Messages postés 326 Date d'inscription vendredi 11 octobre 2013 Statut Membre Dernière intervention 4 juillet 2023 - Modifié le 5 janv. 2023 à 10:44
guillaumegilbertsoucy Messages postés 326 Date d'inscription vendredi 11 octobre 2013 Statut Membre Dernière intervention 4 juillet 2023 - 14 janv. 2023 à 03:32

Bonjour,

En premier, ceci est mon fichier de configuration netplan sur Ubuntu Server 22.04 LTS.

GNU nano 6.2                                                                                              /etc/netplan/01-netcfg.yaml                                                                                                        

  # This file describes the network interfaces available on your system
  # For more information, see netplan(5).
  network:
    ethernets:
      ens18:
        addresses:
        - 192.168.2.104/24
        nameservers:
          addresses:
          - 192.168.2.1
          search: []
        routes:
        - to: 192.168.2.104
          via: 192.168.2.1
  
 
      ens19:
        addresses:
        - 192.168.104.104/24
        nameservers:
          addresses:
          - 184.149.24.65
          search: []
        routes:
        - to: default
          via: 192.168.104.1
  
 
    version: 2

J'ai deux cartes réseau dans ce système Ubuntu et deux liens internet et je voudrais trouver une façon d'avoir :

  • l'interface ens19 192.168.104.104 à laquelle est associée la route par défaut via la passerelle 192.168.104.104
  • l'interface ens18 192.168.2.104 avec pour passerelle 192.168.2.1 pour atteindre internet.

Si je "bind" quelque chose vers cet interface comme wget, exemple:

wget --bind-address=192.168.2.104 ...

Présentent, je suis incapable d’atteindre internet avec ens18 avec la configuration que j'ai plus haut. Le trafic peut passer par l'interface ens19 192.168.104 mais pas par ens18 192.168.2.104

J'ai effectué quelques recherches avant de poster ici mais malheureusement incapable de trouver quelques chose qui réglerais mon problème.

Merci de m'aider.

Guillaume

A voir également:

3 réponses

avion-f16 Messages postés 19243 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 8 avril 2024 4 496
23 déc. 2022 à 15:53

Bonjour,

Ce que tu souhaites accomplir s'appelle du « Policy-based Routing ».

Actuellement, la table de routage principale "main" contient une route par défaut via la passerelle 192.168.104.1 (dev ens19 src 192.168.104.104).

Par contre, ta route pour atteindre 192.168.2.104 via 192.168.2.1 est inutile car 192.168.2.104 est l'adresse assignée à l'interface ens18, il n'y a donc pas besoin de passerelle pour cela.

À la place, tu peux créer une table de routage secondaire, "isp2" par exemple, et lui donner une route par défaut via 192.168.2.1 (dev ens18 src 192.168.2.104).

Il faudra ensuite définir des "règles" afin que le trafic correspondant à certains critères utilise cette table secondaire. Les critères possibles sont multiples : interface sortante (oif), IP source, IP de destination, ports, espace de nom, mark, ...

netplan supporte en partie les "routing-policy" mais ça ne semble pas aussi complet que l'utilitaire « ip ».

https://netplan.io/reference

0
guillaumegilbertsoucy Messages postés 326 Date d'inscription vendredi 11 octobre 2013 Statut Membre Dernière intervention 4 juillet 2023 8
Modifié le 5 janv. 2023 à 10:45

Salut avion-f16,

Je ne veux pas passer pour un quelqu'un de lâche mais, pouvez-vous svp me donner une exemple de ce que je dois mettre dans mon fichier de configuration? Pour être honnête avec vous, oui je m'y connais en réseau mais pas à un point pour être capable de jouer avec les Policy-based Routing.

J'ai chercher sur internet mais je comprends pas très bien ce que j'ai à faire et essayer encore pendant des heures ne mènera à rien.

C'est pour cette raison que j'ai besoin de quelqu'un comme vous pour oui, on va se le dire, "me le donner tout cru dans le bec", autrement, le Policy-based routing c'est au delà de mes compétences.

Si les étapes me sont expliqué, la prochaine fois je vais pouvoir exécuter cette tâche par mon même. J'ai été lire sur le sujet mais, ça m'a seulement mis plus confus.

Juste besoin d'un petit coup de pouce ;-)

Merci pour l'aide en continue!

Guillaume

0
avion-f16 Messages postés 19243 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 8 avril 2024 4 496
27 déc. 2022 à 14:03

Bonjour,

N'étant pas utilisateur de Ubuntu avec netplan, je ne suis pas plus avancé que toi sur la question.

Je t'invite d'abord à créer la table de routage secondaire (ip route) et ensuite créer des règles afin qu'une partie du trafic utilise cette table secondaire (ip rule).

Les réglages posés via la commande "ip" seront perdus au redémarrage, mais ça te permettra de te familiariser avec ces notions, avant de voir comment netplan peut les rendre permanents.

0
guillaumegilbertsoucy Messages postés 326 Date d'inscription vendredi 11 octobre 2013 Statut Membre Dernière intervention 4 juillet 2023 8 > avion-f16 Messages postés 19243 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 8 avril 2024
2 janv. 2023 à 15:57

Bonjour,

Merci, j'ai été en mesure d’organiser les routes en fonction de mes besoins grâce à https://blog.scottlowe.org/2013/05/29/a-quick-introduction-to-linux-policy-routing/ que vous avez posté plus haut mais juste un seul bémol, je ne parviens à les mettre persistant.

Les directives à suivre dans le Blog ci-haut fait référence à 

/etc/network/interfaces

Qui n'est plus utilisé dans 22.04

J'ai donc eu l'idée de faire un script content les commandes à exécuter et l’exécuter au démarrage dans un cronjob mais avant, j'ai chercher un peut, quelques posts suggèrent aussi le cronjob mais je ne trouve pas grand chose de plus pour Ubuntu 22.04. 

Par hasard sauriez-vous comment procéder?

Merci encore,

Guillaume

0
avion-f16 Messages postés 19243 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 8 avril 2024 4 496 > guillaumegilbertsoucy Messages postés 326 Date d'inscription vendredi 11 octobre 2013 Statut Membre Dernière intervention 4 juillet 2023
2 janv. 2023 à 16:44

Bonjour,

La configuration réseau sous Ubuntu Server étant gérée par netplan, il ne faut pas interférer en modifiant toi-même la configuration réseau via les "fichiers de base" comme /etc/network/interfaces

netplan propose des attributs :

  • "routes" : équivalents de "ip route add..."
  • "routing-policy" : équivalents de "ip rule add..."

Ils sont documentés ici : https://netplan.io/reference

Sinon, comme mentionné ici, il est possible d'exécuter des scripts lorsqu’une interface réseau est créée/détruite via networkd-dispatcher mais c'est mieux d'éviter si netplan permet de faire sans.

0
mamiemando Messages postés 33076 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 17 avril 2024 7 748
5 janv. 2023 à 11:06

Bonjour,

Pardon de m'immiscer dans cette discussion, mais il y a quelque chose qui me paraît suspect.

J'ai un peu de mal à voir comment on peut vouloir vouloir une route par défaut pour ens18 et vouloir atteindre internet par ens19. Et vu comment Guillaume par le de Policy-based routing je me demande si c'est bien ce qu'il a envie de faire.

Peut-être qu'il serait bon de déjà bien comprendre ce que Guillaume veut faire :

  • quels préfixes IP doivent être atteints par ens18 ?
  • quels préfixes IP doivent être atteints par ens19 ?

À toutes fins utiles, je me permets aussi de redonner quelques rappels de routage IP :

  • Une interface réseau a une adresse IP et un masque réseau. Cela induit une route qui permet de joindre les IPs appartenants à ce même réseau. Dans l'exemple présent :
    • si ens18 a pour IP et masque sous réseau le préfixe 192.168.2.104/24, alors toutes les IP 192.168.2.* sont directement joignables par ens18.
    • si ens19 a pour IP et masque sous réseau le préfixe 192.168.104.104/24, alors toutes les IP 192.168.104.* sont directement joignables par ens19.
    • Les IPs concernées sont atteindre sans passerelle.
  • Une passerelle sert à expliquer comment atteindre un préfixe IP par l'intermédiaire d'une IP intermédiaire routable. Par exemple si 192.168.2.1 peut servir de relai pour atteindre Internet, comme cette IP est routable grâce à la première route sus-mentionnée, elle peut faire office de passerelle pour atteindre des IPs actuellement non routables. Si tout le trafic qui n'est ni destiné à 192.168.2.* ni 192.168.104.* doit passer par 192.168.2.1, alors le préfixe en question est 0/0 (route par défaut) et la passerelle est 192.168.2.1.
  • Si pour certains préfixes (disons 192.168.105.*) on veut passer par 192.168.104.104, alors on pourrait définir une route supplémentaire (192.168.105.0/24, passerelle 192.168.104.104). Cela présuppose que la passerelle 192.168.104.104 est routable et capable d'atteindre le préfixe 192.168.105.0/24.
    • Si on ajoute la route 192.169.105/24, passerelle 192.168.104.104, alors cette nouvelle route prendra le pas sur la route par défaut (0/0 passerelle 192.168.2.1) pour toutes les IPs de la forme 192.168.105.*. En effet le préfixe destination de cette route (192.168.105.0/24) est plus spécifique que celui de la route (longueur de masque = 24) que que celui de la la route par défaut (0/0, longueur de masque = 0)

Donc dans l'exemple ci-dessus on aurait en résumé les routes :

  • 192.168.2.0/24, pas de passerelle (0.0.0.0), interface ens18
  • 192.168.104.0/24, pas de passerelle (0.0.0.0), interface ens19
  • 0/0, passerelle 192.168.2.1, interface ens18 (route par défaut)
  • 192.168.105.0/24, passerelle 192.168.104.104, interface ens19

Avec cette table de routage, les préfixes 192.168.104.0/24 et 192.168.105.0/24 sont atteints par ens19 et le reste par ens18.

Bonne chance

0
guillaumegilbertsoucy Messages postés 326 Date d'inscription vendredi 11 octobre 2013 Statut Membre Dernière intervention 4 juillet 2023 8
14 janv. 2023 à 03:32

Salut,

Ne vous en faites pas, plus de personnes qui joignent un fils de discussions, plus de chance de résolution il y a! ;-)

J'ai finalement trouver la solution avec la modification de /etc/netplan/fichier_netplan.yaml

network:
  ethernets:
    ens18:
      addresses:
      - 192.168.2.x/24
      nameservers:
        addresses:
        - 192.168.2.1
        search: []

    ens19:
      addresses:
      - 192.168.104.x/24
      nameservers:
        addresses:
        - 184.149.24.65
        search: []
      routes:
      - to: default
        via: 192.168.104.1

  version: 2

Remplaçons les "x" pour ce que ça sois un IP valide.

#!/bin/sh

ip rule add from 192.168.2.x lookup custom
ip route add default via 192.168.2.1 dev ens18 table custom

Créons le fichier routing.sh ci haut, remplaçons encore le "x" et mettons le exécutable avec

chmod u+x 

Ajoutons une entrée avec crontab -e

@reboot /root/scripts/routing.sh >/dev/null 2>&1
#

Exécution ensuite de cette commande:

echo 200 custom >> /etc/iproute2/rt_tables

et on reboot...

Maintenant:

Si on "bind" rien, ens19 est utilisé par défaut, très utile dans mon cas car j'ai 138 machines virtuelles qui se mettre à jours par group aux petites heures du matin.

Utiliser ens19 fait en sorte de ne pas surcharger le lien internet donc je sert des services web depuis. ens18 quand a lui peut tout à fait être utilisé à condition qu' on le "bind" dans la syntaxe de commande par exemple quand on télécharge quelque chose wget, yt-dlp, curl.

Merci,

Guillaume

0