GNU/Linux >> Tutoriels Linux >  >> Linux

Linux – Routage via Iptables ?

J'ai ce client vpn qui touche la table de routage, puis la surveille pour quitter si elle est touchée.
C'est le type de configuration nécessaire pour un point de terminaison, tel qu'un ordinateur portable.

Je souhaite utiliser un petit ordinateur comme point de terminaison vpn et l'acheminer vers d'autres machines de mon réseau local (192.168.0.0/24).
Comme je ne peux pas toucher à la table de routage et que tous les paquets sont forcés via le vpns tun0, je pensais qu'iptables pourrait m'aider à POSTROUTER les paquets vers le réseau 192.168.0.0 vers le périphérique eth1. il est déjà sur le réseau de destination, et je ne sais pas si le paquet a déjà été résolu ou ne se produira pas tant qu'il n'aura pas atteint l'iface.
Des indices ?

Réponse acceptée :

Comme vous n'avez pas fourni plus d'informations, je ne sais pas comment répondre au mieux.

Voici donc ma tentative de vous donner quelques indications, en ignorant volontairement que vous ne pouvez pas modifier votre table de routage (vous comprendrez pourquoi en lisant ma suggestion) :

Selon le client VPN et il s'accroche à la FIB (base d'information avancée) du noyau, vous pourriez avoir de la chance en ce que la surveillance de la FIB, ou, en utilisant votre table de routage d'expression, par le VPN ne se produit que pour le local et main tableaux de règles. Vous pouvez vérifier vos règles de routage à l'aide de

ip rule show

Pour chacune des chaînes derrière la balise "lookup" (qui sont les entrées de la table de règles), vous pouvez interroger les informations de routage correspondantes à partir du FIB, en utilisant

ip route show table <name>

Avec un peu de chance, vous pouvez essayer de construire une règle qui correspond à vos besoins et lui donner la préférence dans la table de recherche de règles. Par exemple (j'ai inventé quelque chose pour vous donner une longueur d'avance), ajoutons une nouvelle règle avec une préférence plus élevée que main à certains flux :

ip rule add from 192.168.1.0/24 to 10.10.212.1/30 iif eth0 oif eth2 lookup 888 pref 12000
ip rule show
   0:   from all lookup local 
   12000:   from 192.168.1.0/24 to 10.10.212.1/30 iif eth0 oif eth2 lookup 888 
   32766:   from all lookup main 
   32767:   from all lookup default 

Sur un système Linux standard (Ubuntu dans le cas de cet article), vous verriez les trois tables de règles par défaut local , main et default , dont vous ne voyez normalement que le main table lors de l'appel de netstat -rn par exemple.

Maintenant, nous voulons remplir les entrées FIB dans la table de recherche 888 avec une nouvelle entrée de routage :

ip route add default via 10.37.129.4 dev eth2 table 888

Voyons à quoi ressemblent nos entrées de routage dans la table 888 :

ip route show table 888
  default via 10.37.129.4 dev eth2

Je pense que vous avez compris l'idée. Maintenant, en ce qui concerne vos besoins de routage spécifiques, on ne sait pas exactement ce que vous essayez de réaliser. Assurez-vous de vider le cache de routage lorsque vous jouez avec les tables de règles :

ip route flush cache

Notez qu'en utilisant l'architecture iproute2, vous pouvez essentiellement filtrer et modifier pratiquement n'importe quelle entrée FIB ; les entrées de règles peuvent même être faites sur la base de fwmarks et/ou de classificateurs u32, comme suit (exemple tiré du livre de routage des politiques) :

tc filter add dev eth1 parent ffff: protocol ip prio 1 u32 
    match ip src 10.1.1.0/24 classid :1
ip rule add fwmark 1 table 1 prio 15000 realms 3/4
ip route add default via 192.168.1.1 table 1 src 192.168.1.254
ip route flush cache

Pour que les choses tournent mal dans les entrées des tables de règles, il y a de nombreuses années, j'avais préparé un petit extrait bash pour remettre mon système à l'état des règles de routage d'origine :

: ${KEEP:="local main default"}
while read prio rule; do
     continue=0
     for keep in ${KEEP}; do
         if [ "${rule//lookup ${keep}/}" != "${rule}" ]; then
             continue=1
         fi
     done
     if [ ${continue} -eq 0 ]; then
         ip rule del prio ${prio%%:*} ${rule//all/0/0}
     fi
done < <(ip rule show)

Étonnamment, il semble qu'après plus de 10 ans d'utilisation de iproute2 de l'existence, encore peu de gens semblent savoir qu'il existe un univers au-delà du classique "cassé" des outils comme ifconfig ou netstat .


Linux
  1. Linux IPTables :Exemples de règles entrantes et sortantes (SSH et HTTP)

  2. Linux IPTables :comment ajouter des règles de pare-feu (avec l'exemple Autoriser SSH)

  3. Introduction aux principes fondamentaux du routage IP Linux (Partie 1)

  4. Service d'exploitation Linux "iptables"

  5. Comment ouvrir un port sous Linux

Conduisez une locomotive via votre terminal Linux

Tutoriel Iptables :Guide ultime du pare-feu Linux

Comment configurer le pare-feu iptables sous Linux

Procédure :Dépannage de base d'IPTables

Top 5 des meilleurs pare-feu Linux

Comprendre l'utilitaire Linux fdisk