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

HS iptables et set mark pour séparer le trafic par interface

4 réponses
Avatar
daniel huhardeaux
Bonjour,

désolé pour le HS, j'ai posé la question sur la liste Netfilter et n'ai
eu aucune réponse. Peut être aurai je plus de succès en la posant ici :-)

Sur un serveur tournant en Debian squeeze iptables 1.4.8 j'ai 3
interfaces réseau: eth0=FAI1 eth1=FAI2 eth2=br0/Intranet. Mes actuelles
règles de routage répartissent le trafic Intranet vers Internet soit par
adresse IP source soit par adresse IP destination via ip rule. Ma route
par défaut est eth1. L'ensemble est fonctionnel.

Ce que j'aimerai à présent, en complément, c'est de pouvoir répartir
également par port de destination, comme par ex le http et ssh via eth0,
le reste via la route par defaut, peu importe l'IP source. J'utilise
donc le marquage de paquet d'iptables de la manière suivante (l'IP
source 192.168.10.6 étant un test de marquage par IP qui n'est pas plus
fonctionnel que celui des ports):

*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:CONNMARK1 - [0:0]
:CONNMARK2 - [0:0]
:RESTOREMARK - [0:0]
-A PREROUTING -j RESTOREMARK
-A PREROUTING -s 192.168.10.6/32 -m mark --mark 0x0 -j CONNMARK1
-A PREROUTING -p tcp -m mark --mark 0x0 -m tcp --sport 55555 -j CONNMARK1
-A POSTROUTING -p tcp -m mark --mark 0x0 -m tcp --dport 55555 -j CONNMARK1
-A POSTROUTING -j CONNMARK --save-mark --nfmask 0xffffffff --ctmask
0xffffffff
-A CONNMARK1 -j LOG --log-prefix "MARK=1" --log-level 5
-A CONNMARK1 -j CONNMARK --set-xmark 0x1/0xffffffff
-A CONNMARK2 -j LOG --log-prefix "MARK=2" --log-level 5
-A CONNMARK2 -j CONNMARK --set-xmark 0x2/0xffffffff
-A RESTOREMARK -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask
0xffffffff
COMMIT


Nat Table

-A POSTROUTING -m mark --mark 0x1 -j SNAT --to-source xxx.xxx.xxx.xxx
-A POSTROUTING -j SNAT --to-source yyy.yyy.yyy.yyy

xxx.xxx.xxx.xxx adresse IP publique eth0/FAI1
yyy.yyy.yyy.yyy adresse IP publique eth1/FAI2

Dans IP rule list j'ai bien le routage des paquets marqués:

32760: from all fwmark 0x2 lookup isp2
32761: from all fwmark 0x1 lookup isp1

À présent j'exécutenc -kl 55555 sur un serveur externe ainsi que tshark -i eth0 port 55555.

À partir de mon serveur Debian ou de l'un des postes de travail de l'Intranet
j'exécute nc -vvv<ip du serveur externe> 55555 ainsi que tshark -i eth0 dst<ip du serveur externe>

Ce que j'observe est que le trafic sortant utilise toujours la route par défaut en lieu et place de eth0/IP xxx.xxx.xxx.xxx

Ou est mon erreur?

Merci pour toute indication qui me permettrai de résoudre ce problème.

--
Daniel

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-french-REQUEST@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listmaster@lists.debian.org
Archive: http://lists.debian.org/512E0BA4.6010604@tootai.net

4 réponses

Avatar
Bruno Muller
Hello,

Le mercredi 27 février 2013 à 14:35 +0100, daniel huhardeaux a écrit :
Ou est mon erreur?



Faire du routage sans modifier les routes !?


Merci pour toute indication qui me permettrai de résoudre ce problème.



cf. exemple 2 de http://www.linuxhorizon.ro/iproute2.html

Bruno
--
DÉCEMBRE
P : Autant j'aime bien les SDF en hivers... autant je les déteste au
printemps. Au printemps, ils décongèlent et se mettent à puer...
M : Fumier !

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
daniel huhardeaux
Le 27/02/2013 15:46, Bruno Muller a écrit :
Hello,

Le mercredi 27 février 2013 à 14:35 +0100, daniel huhardeaux a écrit :
Ou est mon erreur?


Faire du routage sans modifier les routes !?



Je ne pense pas puisque comme annoncé dans mon message:

"Mes actuelles règles de routage répartissent le trafic Intranet vers
Internet soit par adresse IP source soit par adresse IP destination via
ip rule. Ma route par défaut est eth1. L'ensemble est fonctionnel."

Merci pour toute indication qui me permettrai de résoudre ce problème.


cf. exemple 2 de http://www.linuxhorizon.ro/iproute2.html



Il est identique à ce que j'ai sauf que les paquets sont marqués en
entrée de eth0. J'ai adapté, pas de changement.

Mes routes:

:~$ ip route show table main
default via xxx.xxx.xxx.xxx dev eth1
xxx.xxx.xxx.0/24 dev eth0 proto kernel scope link src xxx.xxx.xxx.xxx
yyy.yyy.yyy.yyy/28 dev eth1 proto kernel scope link yyy.yyy.yyy.yyy
192.168.10.0/24 dev br0 proto kernel scope link src 192.168.10.250

:~$ ip route show table isp2
default via 109.237.252.177 dev eth1
xxx.xxx.xxx.0/24 dev eth0 proto kernel scope link src xxx.xxx.xxx.xxx
yyy.yyy.yyy.yyy/28 dev eth1 proto kernel scope link src yyy.yyy.yyy.yyy
192.168.10.0/24 dev br0 proto kernel scope link src 192.168.10.250

:~$ ip route show table isp1
default via 78.230.113.254 dev eth0
xxx.xxx.xxx.0/24 dev eth0 proto kernel scope link src xxx.xxx.xxx.xxx
yyy.yyy.yyy.yyy/28 dev eth1 proto kernel scope link src yyy.yyy.yyy.yyy
192.168.10.0/24 dev br0 proto kernel scope link src 192.168.10.250

:~$ ip rule show
0: from all lookup local
32762: from all fwmark 0x2 lookup isp2
32763: from all fwmark 0x1 lookup isp1
32764: from yyy.yyy.yyy.yyy lookup isp2
32765: from xxx.xxx.xxx.xxx lookup isp1
32766: from all lookup main
32767: from all lookup default

Merci de t'être penché sur mon cas ;-)
--
Daniel

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
daniel huhardeaux
Je me répond ;-)

Le 27/02/2013 14:35, daniel huhardeaux a écrit :
Bonjour,

désolé pour le HS, j'ai posé la question sur la liste Netfilter et
n'ai eu aucune réponse. Peut être aurai je plus de succès en la posant
ici :-)

Sur un serveur tournant en Debian squeeze iptables 1.4.8 j'ai 3
interfaces réseau: eth0úI1 eth1úI2 eth2=br0/Intranet. Mes
actuelles règles de routage répartissent le trafic Intranet vers
Internet soit par adresse IP source soit par adresse IP destination
via ip rule. Ma route par défaut est eth1. L'ensemble est fonctionnel.

Ce que j'aimerai à présent, en complément, c'est de pouvoir répartir
également par port de destination, comme par ex le http et ssh via
eth0, le reste via la route par defaut, peu importe l'IP source.
J'utilise donc le marquage de paquet d'iptables de la manière suivante
(l'IP source 192.168.10.6 étant un test de marquage par IP qui n'est
pas plus fonctionnel que celui des ports):


[...]

Mes règles sont bonnes sauf que:

a) iptables ne tient pas compte de -j CONNMARK --set-mark [1|2] mais -j
MARK --set-mark [1|2] fonctionne
b) il faut désactiver le reverse path filtering qui protège de l'IP
spoofing ( /etc/sysctl.conf net.ipv4.conf.all.rp_filter =0)

Le lien magique
http://www.sysresccd.org/Sysresccd-Networking-EN-Iptables-and-netfilter-load-balancing-using-connmark

Bonne soirée

--
Daniel

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Avatar
Pascal Hambourg
Salut,

daniel huhardeaux a écrit :

a) iptables ne tient pas compte de -j CONNMARK --set-mark [1|2] mais -j
MARK --set-mark [1|2] fonctionne



Les deux ne font évidemment pas la même chose. L'option --set-mark de
CONNMARK modifie la marque de connexion qui est sans effet sur le
routage, alors que celle de MARK modifie la marque de paquet, qui peut
influer sur le routage. Pour copier la marque de connexion dans la
marque de paquet, il faut utiliser CONNMARK --restore-mark. Tout ceci
est expliqué dans la page de manuel d'iptables.

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/