NAT avec plusieurs interfaces publiques

Le
Olivier
--001a114fe8726a1b820560dcfbec
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Bonjour,

Je prépare une installation dans laquelle un routeur (une machine sous
Debian Stretch) aura 3 interfaces logiques:
une interface eth0.30 vers un réseau local
une interface eth0.20 vers un lien Internet
une interface eth0.10 vers un autre lien Internet

Je souhaite répartir, en fonction de leur adresse IP, les utilisateurs=
du
réseau local vers les deux liens Internet.:
si l'adresse de l'utilisateur est dans le sous-réseau 10.50.0.0/24, s=
ortir
sur Internet en nattant avec l'interface eth0.10,
si l'adresse de l'utilisateur est dans le sous-réseau 10.50.1.0/24, s=
ortir
sur Internet en nattant avec l'interface eth0.20.

Comment configurer cela ?


J'ai un script iptables qui marque le trafic entrant avec une règle du=
type
iptables -t mangle -A PREROUTING -s 10.50.1.0/24 -j MARK --set-mark 2

J'ai une autre règle qui j'espérais, devrait NATer, le trafic don=
t la
marque est spécifique:
iptables -t nat -A POSTROUTING -m mark --mark 2 -o eth0.20 -j SNAT
--to-source 2.2.2.2

Cette dernière règle ne semble pas exécutée pour un uti=
lisateur dont
l'adresse est bien dans le réseau 10.50.1.0/24.
À la place, c'est la règle "par défaut" comme celle ci-apr=
ès qui semble
exécutée:
iptables -t nat -A POSTROUTING -o eth0.10 -j SNAT --to-source 2.2.2.2

Qu'en pensez-vous ?

Slts

--001a114fe8726a1b820560dcfbec
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir="ltr"><div><div><div><div>Bonjour,<br><br></div>Je prépare =
une installation dans laquelle un routeur (une machine sous Debian Stretch)=
aura 3 interfaces logiques:<br>une interface eth0.30 vers un réseau l=
ocal<br>une interface eth0.20 vers un lien Internet<br>une interface eth0.1=
0 vers un autre lien Internet<br><br></div>Je souhaite répartir, en fo=
nction de leur adresse IP, les utilisateurs du réseau local vers les d=
eux liens Internet.:<br></div>si l&#39;adresse de l&#39;utilisateur est=
dans le sous-réseau <a href="http://10.50.0.0/24">10.50.0.0/24</=
a>, sortir sur Internet en nattant avec l&#39;interface eth0.10,<br>si l&#3=
9;adresse de l&#39;utilisateur est  dans le sous-réseau <a href=
="http://10.50.1.0/24">10.50.1.0/24</a>, sortir sur Internet en nattant a=
vec l&#39;interface eth0.20.<br><br>Comment configurer cela ?<br><br><br></=
div><div>J&#39;ai un script iptables qui marque le trafic entrant avec une =
règle du type<br>iptables -t mangle -A PREROUTING -s <a href="http:/=
/10.50.1.0/24">10.50.1.0/24</a> -j MARK --set-mark 2<br><br></div><div>J&#3=
9;ai une autre règle qui j&#39;espérais, devrait NATer, le trafic=
dont la marque est spécifique:<br>iptables -t nat -A POSTROUTING -m m=
ark --mark 2 -o eth0.20 -j SNAT --to-source 2.2.2.2<br><br></div><div>Cette=
dernière règle ne semble pas exécutée pour un utilisat=
eur dont l&#39;adresse est bien dans le réseau <a href="http://10.50=
.1.0/24">10.50.1.0/24</a>.<br></div><div>À la place, c&#39;est la r=
gle &quot;par défaut&quot; comme celle ci-après qui semble ex=
écutée:<br>iptables -t nat -A POSTROUTING -o eth0.10 -j SNAT --to=
-source 2.2.2.2<br><br></div><div>Qu&#39;en pensez-vous ?<br></div><div><br=
></div><div>Slts<br></div></div>

--001a114fe8726a1b820560dcfbec--
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Christophe
Le #26456645
Hello
Le 21/12/2017 à 18:25, Olivier a écrit :
Je prépare une installation dans laquelle un routeur (une machine sous
Debian Stretch) aura 3 interfaces logiques:
une interface eth0.30 vers un réseau local
une interface eth0.20 vers un lien Internet
une interface eth0.10 vers un autre lien Internet
Je souhaite répartir, en fonction de leur adresse IP, les utilisateurs
du réseau local vers les deux liens Internet.:
si l'adresse de l'utilisateur est  dans le sous-réseau 10.50.0.0/24
eth0.10,
si l'adresse de l'utilisateur est  dans le sous-réseau 10.50.1.0/24
eth0.20.
Comment configurer cela ?
J'ai un script iptables qui marque le trafic entrant avec une règle du type
iptables -t mangle -A PREROUTING -s 10.50.1.0/24 -j MARK --set-mark 2

C'est un bon début :)
J'ai une autre règle qui j'espérais, devrait NATer, le trafic dont la
marque est spécifique:
iptables -t nat -A POSTROUTING -m mark --mark 2 -o eth0.20 -j SNAT
--to-source 2.2.2.2

C'est encore un bon début.
Cette dernière règle ne semble pas exécutée pour un utilisateur dont
l'adresse est bien dans le réseau 10.50.1.0/24 À la place, c'est la règle "par défaut" comme celle ci-après qui semble
exécutée:
iptables -t nat -A POSTROUTING -o eth0.10 -j SNAT --to-source 2.2.2.2


iptables ne se suffira pas à lui même pour gérer la question du routage
des paquets. Ce sont bien deux étapes différentes vu du noyau Linux.
(
si ce n'est 3 :
mark à l'entrée sur une interface : iptables -t mangle (PREROUTING)
forward : ip route & ip rule
sortie de la machine avec NAT : iptables -t nat (POSTROUTING)
)
Il ne manque à mon avis pas grand chose à ton setup; il faut jouer un
peu avec la commande "ip" : ajouter une table de routage spéciale par
interface WAN , et ajouter des "rule" en fonction du trafic qui a été
précédemment "marké" dans la mangle d'iptables en PREROUTING.
Je le fais de mémoire,
ip route add table 2 default via <gw wan2> dev eth0.20
ip rule add fwmark 2 table 2
Ca peut par contre se compliquer un peu plus si les deux interfaces
"Wan" sont en adressage dynamique.
La bible pour ce genre d'utilisations, c'est le "LARTC"
http://lartc.org/
@+
Christophe.
Pascal Hambourg
Le #26456659
Le 21/12/2017 à 18:25, Olivier a écrit :
Bonjour,
Je prépare une installation dans laquelle un routeur (une machine sous
Debian Stretch) aura 3 interfaces logiques:
une interface eth0.30 vers un réseau local
une interface eth0.20 vers un lien Internet
une interface eth0.10 vers un autre lien Internet
Je souhaite répartir, en fonction de leur adresse IP, les utilisateurs du
réseau local vers les deux liens Internet.:
si l'adresse de l'utilisateur est dans le sous-réseau 10.50.0.0/24, sortir
sur Internet en nattant avec l'interface eth0.10,
si l'adresse de l'utilisateur est dans le sous-réseau 10.50.1.0/24, sortir
sur Internet en nattant avec l'interface eth0.20.
Comment configurer cela ?
J'ai un script iptables qui marque le trafic entrant avec une règle du type
iptables -t mangle -A PREROUTING -s 10.50.1.0/24 -j MARK --set-mark 2

Le marquage des paquets est inutile.
J'ai une autre règle qui j'espérais, devrait NATer, le trafic dont la
marque est spécifique:
iptables -t nat -A POSTROUTING -m mark --mark 2 -o eth0.20 -j SNAT
--to-source 2.2.2.2

A condition que les paquets en question sortent par l'interface
spécifiée. Mais dans ce cas, inutile de se baser sur la marque,
l'interface de sortie suffit. Pour rappel l'option -o introduit un
critère de correspondance, pas une action.
Cette dernière règle ne semble pas exécutée pour un utilisateur dont
l'adresse est bien dans le réseau 10.50.1.0/24.
À la place, c'est la règle "par défaut" comme celle ci-après qui semble
exécutée:
iptables -t nat -A POSTROUTING -o eth0.10 -j SNAT --to-source 2.2.2.2

Parce que c'est par eth0.10 que les paquets sortent.
Il faut faire du routage avancé. Pas besoin de marque puisqu'on peut se
baser sur l'adresse source.
ip rule add from 10.50.1.0/24 table 2
ip route add default via <adresse_passerelle> dev eth0.20 table 2
ip route add 10.50.0.0/23 dev eth0.30 table 2
Publicité
Poster une réponse
Anonyme