Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

NAT avec plusieurs interfaces publiques

2 réponses
Avatar
Olivier
--001a114fe8726a1b820560dcfbec
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Bonjour,

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

Je souhaite r=C3=A9partir, en fonction de leur adresse IP, les utilisateurs=
du
r=C3=A9seau local vers les deux liens Internet.:
si l'adresse de l'utilisateur est dans le sous-r=C3=A9seau 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=C3=A9seau 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=C3=A8gle du=
type
iptables -t mangle -A PREROUTING -s 10.50.1.0/24 -j MARK --set-mark 2

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

Cette derni=C3=A8re r=C3=A8gle ne semble pas ex=C3=A9cut=C3=A9e pour un uti=
lisateur dont
l'adresse est bien dans le r=C3=A9seau 10.50.1.0/24.
=C3=80 la place, c'est la r=C3=A8gle "par d=C3=A9faut" comme celle ci-apr=
=C3=A8s qui semble
ex=C3=A9cut=C3=A9e:
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=3D"ltr"><div><div><div><div>Bonjour,<br><br></div>Je pr=C3=A9pare =
une installation dans laquelle un routeur (une machine sous Debian Stretch)=
aura 3 interfaces logiques:<br>une interface eth0.30 vers un r=C3=A9seau 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=C3=A9partir, en fo=
nction de leur adresse IP, les utilisateurs du r=C3=A9seau local vers les d=
eux liens Internet.:<br></div>si l&#39;adresse de l&#39;utilisateur est=C2=
=A0 dans le sous-r=C3=A9seau <a href=3D"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=C2=A0 dans le sous-r=C3=A9seau <a href=
=3D"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=C3=A8gle du type<br>iptables -t mangle -A PREROUTING -s <a href=3D"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=C3=A8gle qui j&#39;esp=C3=A9rais, devrait NATer, le trafic=
dont la marque est sp=C3=A9cifique:<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=C3=A8re r=C3=A8gle ne semble pas ex=C3=A9cut=C3=A9e pour un utilisat=
eur dont l&#39;adresse est bien dans le r=C3=A9seau <a href=3D"http://10.50=
.1.0/24">10.50.1.0/24</a>.<br></div><div>=C3=80 la place, c&#39;est la r=C3=
=A8gle &quot;par d=C3=A9faut&quot; comme celle ci-apr=C3=A8s qui semble ex=
=C3=A9cut=C3=A9e:<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--

2 réponses

Avatar
Christophe
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
<http://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
<http://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 <http://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 <http://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.
Avatar
Pascal Hambourg
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