1 votes

Routage avec iproute2 après NAT

Dans un système Linux, qui agit comme une passerelle sur mon réseau local, j'ai essayé d'acheminer le trafic en utilisant iproute2. De plus, avant le routage, il est nécessaire d'effectuer la NAT, puisque la machine Linux est connectée à un appareil qui permet la connexion à l'internet et elle a 2 adresses IP 172.16.61.1 y 172.16.62.100

J'ai 2 cartes réseau avec la configuration suivante :

DEVICE=eth3
ONBOOT=yes
BOOTPROTO=none
TYPE=Ethernet
NETMASK=255.255.255.0
IPADDR=192.168.1.150
USERCTL=no
IPV6INIT=no
PEERDNS=yes  

DEVICE=eth4
ONBOOT=yes
BOOTPROTO=none
TYPE=Ethernet
NETMASK=255.255.255.0
IPADDR=172.16.61.2
USERCTL=no
IPV6INIT=no
PEERDNS=yes
GATEWAY=172.16.61.1

et j'utilise l'instruction suivante pour la traduction d'ip via iptables

/sbin/iptables -t nat -A POSTROUTING -s 192.168.1.0/255.255.255.0 -j SNAT --to-source 172.16.61.2  

En utilisant la configuration susmentionnée, tous les ordinateurs appartenant au réseau 192.168.1.0/24 qui ont 192.168.1.150 comme passerelle sont en mesure de se connecter à l'internet.

Si j'essaie d'utiliser iproute2 pour configurer la passerelle, je supprime la passerelle par défaut de eth4, ce qui suppose la configuration suivante :

DEVICE=eth4
ONBOOT=yes
BOOTPROTO=none
TYPE=Ethernet
NETMASK=255.255.255.0
IPADDR=172.16.61.2
USERCTL=no
IPV6INIT=no
PEERDNS=yes

ET j'ai effectué les démarches suivantes :

1. In /etc/iproute2/rt_tables I have added the line 1 route61
2. /sbin/ip route add 172.16.61.0/24 via 172.16.61.1 table route61 proto static
3. /sbin/ip route add default via 172.16.61.1 table route61 proto static
4. /sbin/ip rule add from 172.16.61.0/24 pref 15000 table route61

La sortie de /sbin/ip route show table route61 es

172.16.61.0/24 via 172.16.61.1 dev eth4  proto static  
default via 172.16.61.1 dev eth4  proto static   

La sortie de /sbin/ip rule show es

0:      from all lookup local 
15000:  from 172.16.61.0/24 lookup route61 
32766:  from all lookup main 
32767:  from all lookup default

mais dans ce cas, cela ne fonctionne pas, qu'est-ce qui ne va pas ?

J'ai également essayé d'utiliser /etc/sysconfig/network-scripts/ifup-routes eth4 sans succès

Ce dont j'ai besoin, c'est de comprendre pourquoi je n'arrive pas à faire fonctionner le "routage basé sur une table", car je vais devoir l'utiliser dans un contexte où il y a plusieurs passerelles.

Mise à jour

Pour essayer ce qui est suggéré par dirkt, j'ai supprimé la passerelle par défaut

route del -net 0.0.0.0 gw 172.16.61.1 netmask 0.0.0.0 dev eth4

et j'ai utilisé :

ip rule add from 192.168.1.0/24 pref 15000 table route61

Ce qui se passe, c'est que

  1. le pc qui utilise 192.168.1.150 comme GW, c'est-à-dire le pc objet de ce post, est capable de se connecter à l'internet
  2. Je ne peux plus me connecter à GW si je ne supprime pas l'instruction. ip rule add from 192.168.1.0/24 pref 15000 table route61

Avec le postroutage, les paquets provenant de 192.168.1.0/24 ne devraient pas prendre 172.16.61.2 comme adresse source ?

Si j'utilise ou supprime la GW par défaut en utilisant route add -net 0.0.0.0 gw 172.16.61.1 netmask 0.0.0.0 dev eth4 OR route del -net 0.0.0.0 gw 172.16.61.1 netmask 0.0.0.0 dev eth4 et je le fais :

ip route get 216.58.205.78 from 192.168.1.5

J'ai RTNETLINK answers: Invalid argument

si j'utilise ip route get 216.58.205.78 from 172.16.61.2 J'ai 216.58.205.78 from 172.16.61.2 via 172.16.61.1 dev eth4

Après route add -net 0.0.0.0 gw 172.16.61.1 netmask 0.0.0.0 dev eth4 si je le fais :

nc -v 216.58.205.78 443

J'ai

Connection to 216.58.205.78 443 port [tcp/https] succeeded!

Si je supprime la GW par défaut route del -net 0.0.0.0 gw 172.16.61.1 netmask 0.0.0.0 dev eth4 nc ne se connecte que si je spécifie l'ip source :

nc -v 216.58.205.78 443 -s 172.16.61.2

1voto

dirkt Points 15364

Si je vous comprends bien, vous avez 192.168.1.0/24 en eth3 et vous voulez l'acheminer et le NAT vers quelque chose qui se trouve derrière eth4 Il n'est pas précisé ce qu'il y a exactement derrière l'idée de l'utilisation de l'énergie. eth4 S'il fait du DHCP, et s'il a besoin d'adresses statiques ou non.

(Dans la plupart des cas, vous disposez d'une sorte de routeur derrière eth4 qui gère le DHCP et distribue les adresses).

La méthode habituelle consiste donc à activer le transfert et à effectuer les opérations suivantes

iptables -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE

donde $EXTIF est votre interface externe ( eth4 ). Les MASQUERADE es SNAT avec l'adresse qui se trouve sur eth4 Le système est donc résistant à la réaffectation d'adresses. Et si vous ne mentionnez pas de protocoles, tout est traité par NAT, ce qui est généralement ce que vous voulez.

Deuxièmement, il n'y a aucune raison de faire du routage basé sur des tables (à moins qu'il y ait des détails supplémentaires que vous n'avez pas expliqués). Donc oubliez les tables, et s'il n'y a pas de DHCP derrière eth4 qui distribuerait les informations de passerelle pour la route par défaut, il suffit de faire

ip route default via 172.16.61.1

En supposant que eth4 a déjà une adresse en 172.16.61.*/24 , c'est suffisant (le 172.16.61.0/24 est défini lorsque vous définissez l'adresse IP).

Mais la meilleure chose à faire est d'utiliser le DHCP, s'il est activé sur votre routeur (je suppose que c'est le cas). BOOTPROTO=dhcp (s'il s'agit de Red Hat).


Si le problème est lié à l'acheminement de la politique : Vous souhaitez acheminer les paquets sortants provenant de 192.168.1.0/24 via une route par défaut dans la table route61 Vous devez donc faire ce qui suit

ip rule add from 192.168.1.0/24 pref 15000 table route61

et non from 172.16.61.0/24 .

Cela dit, je ne sais pas vraiment comment le NAT interagit avec le routage des politiques. J'aurais assumer les paquets de retour sont d'abord déNATés, puis les règles de la table principale les acheminent correctement, mais je n'ai jamais essayé cela moi-même.

Pour déboguer, ip route get X.X.X.X from Y.Y.Y.Y peut s'avérer utile, de même que tcpdump sur les deux interfaces comme vous l'avez déjà fait dans l'autre question que vous avez mentionnée.

Il sera également plus facile d'essayer d'abord sans tables. Une fois que cela fonctionne, vous savez que rien d'autre ne vous gêne, et vous pouvez essayer avec des tableaux.

0voto

setenforce 1 Points 204

En utilisant une nouvelle table de routage, vous devez ajouter même les routes connectées : 172.16.61.0/24 via 172.16.61.1 dev eth4 proto static devrait être proto scope link au lieu de cela avec l'IP source spécifiée, et vous manquez la route 192.168.1.0/24 La décision de routage est effectuée avant la sortie / post routage nat donc ip rule add from doit utiliser l'adresse IP d'origine. image

# Configure tables
echo '2 table61' >> /etc/iproute2/rt_tables 
echo '3 table62' >> /etc/iproute2/rt_tables 

# routing decision is performed before output / post routing nat
ip rule add from 192.168.1.5 lookup table62
ip rule add from 192.168.1.0/24 lookup table61

ip route add 192.168.1.0/24 dev eth3 proto kernel scope link src 192.168.1.150 table table61
ip route add 172.16.61.0/24 dev eth4 proto kernel scope link src 172.16.61.2 table table61
ip route add default via 172.16.61.1 table table61

ip route add 192.168.1.0/24 dev eth3 proto kernel scope link src 192.168.1.150 table table62
ip route add 172.16.62.0/24 dev eth4 proto kernel scope link src 172.16.62.100 table table62
ip route add default via 172.16.62.254 table table62

Par ailleurs, il se peut que j'aie mélangé vos questions dans ma tête. Si cela ne fonctionne pas immédiatement, pourriez-vous ajouter ce qui suit à votre question ?

ip a
ip r show table table61
ip r show table table62
ip rule show
iptables -L -n -v
iptables -t nat -L -n -v

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X