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 route612. /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
- 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
- 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