[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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



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


Reply to: