OVH Cloud OVH Cloud

route selective et processus local.

23 réponses
Avatar
DoMinix
Voila mon soucis :
J'ai une machine (linux) qui est sur un LAN avec 2 routeur ADSL bas de
gamme, l'un [ADSL1] est le routeur par default et je voudrais utiliser
l'autre [ADSL2] uniquement pour un service donné.

[LAN]
|
[LINUX]
|
+-----+---------+
| |
[ADSL1] [ADSL2]
| |
[INET1] [INET2]


J'ai utilisé sur la machine linux des règles iptables pour marquer
(FWMARK) les paquets concernés dans la table mangle, puis routage par
"ip rule add fwmark" + "ip route add default <x> table y", ca fait ce
que je veux, mais ca ne fonctionne que pour des paquets *forwardé*, pas
pour des paquets généré localement. :/

j'ai beaucoup cherché sur Google et dans mes documentations, et j'ai
compris que lorsque le processus de décision de route etait pris
localement les régles de marquage ou bien "iptables -t mangle -j ROUTE"
ne fonctionnais pas car elles operent dans PREROUTING et nous n'y
passons pas. J'ai trouvé des infos allant dans le sens de ce que je veux
faire avec des techniques que je ne connais pas bien encore, telle celle
utilisant tc et le selecteur u32 ou ebtables.

Ma questions est : par quel moyens puis je donner [localement] une route
différente que celle par default a des paquets généré localement (non
forwardé), que je peux désigner par leur port.

NB : ici il n'y a pas de soucis de NAT.

merci de vos éclairages et pointeurs.

--
dominix

10 réponses

1 2 3
Avatar
Vincent Bernat
OoO En cette fin de nuit blanche du lundi 18 décembre 2006, vers
06:21, DoMinix disait:

Voila mon soucis :
J'ai une machine (linux) qui est sur un LAN avec 2 routeur ADSL bas de
gamme, l'un [ADSL1] est le routeur par default et je voudrais utiliser
l'autre [ADSL2] uniquement pour un service donné.

[LAN]
|
[LINUX]
|
+-----+---------+
| |
[ADSL1] [ADSL2]
| |
[INET1] [INET2]



J'ai utilisé sur la machine linux des règles iptables pour marquer
(FWMARK) les paquets concernés dans la table mangle, puis routage par
"ip rule add fwmark" + "ip route add default <x> table y", ca fait ce
que je veux, mais ca ne fonctionne que pour des paquets *forwardé*, pas
pour des paquets généré localement. :/

j'ai beaucoup cherché sur Google et dans mes documentations, et j'ai
compris que lorsque le processus de décision de route etait pris
localement les régles de marquage ou bien "iptables -t mangle -j ROUTE"
ne fonctionnais pas car elles operent dans PREROUTING et nous n'y
passons pas. J'ai trouvé des infos allant dans le sens de ce que je veux
faire avec des techniques que je ne connais pas bien encore, telle celle
utilisant tc et le selecteur u32 ou ebtables.

Ma questions est : par quel moyens puis je donner [localement] une route
différente que celle par default a des paquets généré localement (non
forwardé), que je peux désigner par leur port.


Il y a une option dans le noyau à propos de local NAT. Cela permet
peut-être aux paquets locaux de passer en PREROUTING. Sinon, une
solution assez vieille que j'utilisais :
http://groups.google.fr/group/fr.comp.os.unix/browse_thread/thread/f5a57bdeb9f49b2f/7c9aca692deb8022?lnk=st&q=tos+vincent+bernat&rnum=1&hl=fr#7c9aca692deb8022

Cela marche impec.
--
panic("bad_user_access_length executed (not cool, dude)");
2.0.38 /usr/src/linux/kernel/panic.c

Avatar
Pascal Hambourg
Salut,

J'ai une machine (linux) qui est sur un LAN avec 2 routeur ADSL bas de
gamme, l'un [ADSL1] est le routeur par default et je voudrais utiliser
l'autre [ADSL2] uniquement pour un service donné.
[...]

J'ai utilisé sur la machine linux des règles iptables pour marquer
(FWMARK) les paquets concernés dans la table mangle, puis routage par
"ip rule add fwmark" + "ip route add default <x> table y", ca fait ce
que je veux, mais ca ne fonctionne que pour des paquets *forwardé*, pas
pour des paquets généré localement. :/


Je suppose que la règle iptables qui marque les paquets est seulement
dans la chaîne PREROUTING. Pour affecter le routage en sortie des
paquets émis localement, il faut une règle équivalente dans la chaîne
OUTPUT.

Avatar
DoMinix
OoO En cette fin de nuit blanche du lundi 18 décembre 2006, vers
06:21, DoMinix disait:

...


Ma questions est : par quel moyens puis je donner [localement] une route
différente que celle par default a des paquets généré localement (non
forwardé), que je peux désigner par leur port.


Il y a une option dans le noyau à propos de local NAT. Cela permet
peut-être aux paquets locaux de passer en PREROUTING.


pas trouvé dans sysctl (-a)
pas trouvé dans .config ( ? CONFIG_IP_NF_NAT ? )

Sinon, une
solution assez vieille que j'utilisais :
http://groups.google.fr/group/fr.comp.os.unix/browse_thread/thread/f5a57bdeb9f49b2f/7c9aca692deb8022?lnk=st&q=tos+vincent+bernat&rnum=1&hl=fr#7c9aca692deb8022

Cela marche impec.


j'ai lu mais j'ai pas compris en quoi cela me permettrais de regler un
probleme de route ? désolé.
cependant je precise que je ne devellope pas une appli mais utilise des
services existant.

Merci de votre contribution.

--
dominix


Avatar
CoolFox
-----BEGIN PGP SIGNED MESSAGE-----
Hash: RIPEMD160

DoMinix wrote:
Voila mon soucis :
J'ai une machine (linux) qui est sur un LAN avec 2 routeur ADSL bas de
gamme, l'un [ADSL1] est le routeur par default et je voudrais utiliser
l'autre [ADSL2] uniquement pour un service donné.

[LAN]
|
[LINUX]
|
+-----+---------+
| |
[ADSL1] [ADSL2]
| |
[INET1] [INET2]


J'ai utilisé sur la machine linux des règles iptables pour marquer
(FWMARK) les paquets concernés dans la table mangle, puis routage par
"ip rule add fwmark" + "ip route add default <x> table y", ca fait ce
que je veux, mais ca ne fonctionne que pour des paquets *forwardé*, pas
pour des paquets généré localement. :/

j'ai beaucoup cherché sur Google et dans mes documentations, et j'ai
compris que lorsque le processus de décision de route etait pris
localement les régles de marquage ou bien "iptables -t mangle -j ROUTE"
ne fonctionnais pas car elles operent dans PREROUTING et nous n'y
passons pas. J'ai trouvé des infos allant dans le sens de ce que je veux
faire avec des techniques que je ne connais pas bien encore, telle celle
utilisant tc et le selecteur u32 ou ebtables.

Ma questions est : par quel moyens puis je donner [localement] une route
différente que celle par default a des paquets généré localement (non
forwardé), que je peux désigner par leur port.

NB : ici il n'y a pas de soucis de NAT.

merci de vos éclairages et pointeurs.

Une possiblité couramment utilisée (car indépendate de l'O.S.) est de

faire une "Policy Routing" dans le routeur par défaut qui se chargera de
refiler le bébé au 2eme routeur, lorsque les requêtes lui arriveront
avec un N° de port défini (correspondant au service qui t'interesse).

Reste à voir si ton routeur le permet car ce n'est pas une
fonctionnalité que l'on trouve partout.

Cordialement,

- --
Cle GnuPG disponible sur http://www.keyserver.net (0x338F4E2F)

La vie c'est comme un concombre...
des fois tu l'as dans la main...
des fois tu l'as dans l'cul !

Paul Presbois (Poète avant-gardiste)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.0 (GNU/Linux)

iD8DBQFFhmgWg7GAHjOPTi8RA7JNAJ4jNxvfA+AMIWLwmzv3gMYopk8agwCgkK2m
OXntfrBD36/0MxxV6gVCQ3c =Swg6
-----END PGP SIGNATURE-----

Avatar
DoMinix
DoMinix wrote:
...


Ma questions est : par quel moyens puis je donner [localement] une route
différente que celle par default a des paquets généré localement (non
forwardé), que je peux désigner par leur port.

NB : ici il n'y a pas de soucis de NAT.

merci de vos éclairages et pointeurs.

Une possiblité couramment utilisée (car indépendate de l'O.S.) est de


faire une "Policy Routing" dans le routeur par défaut qui se chargera de
refiler le bébé au 2eme routeur, lorsque les requêtes lui arriveront
avec un N° de port défini (correspondant au service qui t'interesse).


Bien vu.


Reste à voir si ton routeur le permet car ce n'est pas une
fonctionnalité que l'on trouve partout.

Cordialement,


malheureusement !
ce sont de routeur cheap (netgear DG834G), avec des cisco j'aurais meme
pas posé de questions. mais la je pense que je dois faire la job en
amont sous linux.

merci.
--
dominix



Avatar
Pascal Hambourg

Il y a une option dans le noyau à propos de local NAT. Cela permet
peut-être aux paquets locaux de passer en PREROUTING.


pas trouvé dans sysctl (-a)


sysctl gère les paramètres du noyau, pas les options (de compilation).

pas trouvé dans .config ( ? CONFIG_IP_NF_NAT ? )


Vincent fait peut-être allusion à l'option CONFIG_IP_NF_NAT_LOCAL,
apparue dans le noyau 2.4.19 et supprimée à partir des noyaux 2.4.29 et
2.6.11 ; en fait la fonctionnalité qu'elle contrôlait (NAT en sortie
dans la chaîne OUTPUT) est activée d'office. Mais je ne vois pas le
rapport avec le sujet puisque cette option concerne la fonction NAT et
pas le routage avancé.

Sinon, une solution assez vieille que j'utilisais :
http://groups.google.fr/group/fr.comp.os.unix/browse_thread/thread/f5a57bdeb9f49b2f/7c9aca692deb8022?lnk=st&q=tos+vincent+bernat&rnum=1&hl=fr#7c9aca692deb8022


j'ai lu mais j'ai pas compris en quoi cela me permettrais de regler un
probleme de route ? désolé.


Je pense que Vincent veut parler de la politique de routage en fonction
de l'adresse source (ip rule add from), qu'il appelle de façon ambiguë
"source routing" (qui peut aussi désigner l'option de même nom de
l'en-tête IP, qui n'a rien à voir et qui est très rarement supportée par
les routeurs). Mais cela suppose que la machine utilise une adresse IP
source dédiée pour les paquets à faire sortir par l'autre routeur.


Avatar
DoMinix

Il y a une option dans le noyau à propos de local NAT. Cela permet
peut-être aux paquets locaux de passer en PREROUTING.


pas trouvé dans sysctl (-a)


sysctl gère les paramètres du noyau, pas les options (de compilation).


il n'avait pas precisé qu'il n'agissait de compilation. :)


pas trouvé dans .config ( ? CONFIG_IP_NF_NAT ? )


Vincent fait peut-être allusion à l'option CONFIG_IP_NF_NAT_LOCAL,
apparue dans le noyau 2.4.19 et supprimée à partir des noyaux 2.4.29 et
2.6.11 ; en fait la fonctionnalité qu'elle contrôlait (NAT en sortie
dans la chaîne OUTPUT) est activée d'office. Mais je ne vois pas le
rapport avec le sujet puisque cette option concerne la fonction NAT et
pas le routage avancé.

Sinon, une solution assez vieille que j'utilisais :
http://groups.google.fr/group/fr.comp.os.unix/browse_thread/thread/f5a57bdeb9f49b2f/7c9aca692deb8022?lnk=st&q=tos+vincent+bernat&rnum=1&hl=fr#7c9aca692deb8022



j'ai lu mais j'ai pas compris en quoi cela me permettrais de regler un
probleme de route ? désolé.


Je pense que Vincent veut parler de la politique de routage en fonction
de l'adresse source (ip rule add from), qu'il appelle de façon ambiguë
"source routing" (qui peut aussi désigner l'option de même nom de
l'en-tête IP, qui n'a rien à voir et qui est très rarement supportée par
les routeurs). Mais cela suppose que la machine utilise une adresse IP
source dédiée pour les paquets à faire sortir par l'autre routeur.


et il y a t'il moyen de faire cela sans ajouter de carte reseaux.
j'ai essayé en ajoutant une interface eth0:1 avec une autre adresse
mais ca route pas mieux mon service.

merci des eclaircissement.

--
dominix



Avatar
CoolFox
-----BEGIN PGP SIGNED MESSAGE-----
Hash: RIPEMD160

DoMinix wrote:

DoMinix wrote:


...

Ma questions est : par quel moyens puis je donner [localement] une route
différente que celle par default a des paquets généré localement (non
forwardé), que je peux désigner par leur port.

NB : ici il n'y a pas de soucis de NAT.

merci de vos éclairages et pointeurs.




Une possiblité couramment utilisée (car indépendate de l'O.S.) est de
faire une "Policy Routing" dans le routeur par défaut qui se chargera de
refiler le bébé au 2eme routeur, lorsque les requêtes lui arriveront
avec un N° de port défini (correspondant au service qui t'interesse).



Bien vu.


Reste à voir si ton routeur le permet car ce n'est pas une
fonctionnalité que l'on trouve partout.

Cordialement,



malheureusement !
ce sont de routeur cheap (netgear DG834G), avec des cisco j'aurais meme
pas posé de questions. mais la je pense que je dois faire la job en
amont sous linux.

merci.
Je viens de verifier et sur ce type de routeur tu as une fonction

"static route" mais qui ne te permet pas de spécifier un port ou plage
de port particulier.
Tu ne peux que définir en fonction de l'@ IP destination
Essaie de t'en servir pour voir si cela réponds à ton besoin.

Cordialement,
- --
Cle GnuPG disponible sur http://www.keyserver.net (0x338F4E2F)

La vie c'est comme un concombre...
des fois tu l'as dans la main...
des fois tu l'as dans l'cul !

Paul Presbois (Poète avant-gardiste)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.0 (GNU/Linux)

iD8DBQFFhnQ3g7GAHjOPTi8RAzQRAKCs3TOlg389C0n+MK75a5QhlknMVQCfaC+q
+JM0w6rYlomdibS5oNKHz5c =nX2X
-----END PGP SIGNATURE-----




Avatar
DoMinix
DoMinix wrote:

DoMinix wrote:
...






Une possiblité couramment utilisée (car indépendate de l'O.S.) est de


faire une "Policy Routing" dans le routeur par défaut qui se chargera de
refiler le bébé au 2eme routeur, lorsque les requêtes lui arriveront
avec un N° de port défini (correspondant au service qui t'interesse).


Bien vu.


Reste à voir si ton routeur le permet car ce n'est pas une
fonctionnalité que l'on trouve partout.

Cordialement,


malheureusement !
ce sont de routeur cheap (netgear DG834G), avec des cisco j'aurais meme
pas posé de questions. mais la je pense que je dois faire la job en
amont sous linux.

merci.
Je viens de verifier et sur ce type de routeur tu as une fonction


"static route" mais qui ne te permet pas de spécifier un port ou plage
de port particulier.
Tu ne peux que définir en fonction de l'@ IP destination
Essaie de t'en servir pour voir si cela réponds à ton besoin.

Cordialement,


malheureusement, les destinations ne sont pas connue a l'avance, il
s'agit d'un "service" comme http ou smtp seul le port source coté linux
est connue.

--
dominix






Avatar
CoolFox
-----BEGIN PGP SIGNED MESSAGE-----
Hash: RIPEMD160

DoMinix wrote:

DoMinix wrote:



DoMinix wrote:





...


Une possiblité couramment utilisée (car indépendate de l'O.S.) est de
faire une "Policy Routing" dans le routeur par défaut qui se chargera de
refiler le bébé au 2eme routeur, lorsque les requêtes lui arriveront
avec un N° de port défini (correspondant au service qui t'interesse).


Bien vu.



Reste à voir si ton routeur le permet car ce n'est pas une
fonctionnalité que l'on trouve partout.

Cordialement,


malheureusement !
ce sont de routeur cheap (netgear DG834G), avec des cisco j'aurais meme
pas posé de questions. mais la je pense que je dois faire la job en
amont sous linux.

merci.



Je viens de verifier et sur ce type de routeur tu as une fonction
"static route" mais qui ne te permet pas de spécifier un port ou plage
de port particulier.
Tu ne peux que définir en fonction de l'@ IP destination
Essaie de t'en servir pour voir si cela réponds à ton besoin.

Cordialement,



malheureusement, les destinations ne sont pas connue a l'avance, il
s'agit d'un "service" comme http ou smtp seul le port source coté linux
est connue.

Ouais je m'y attendais donc malheureusement cette possibilité la.... il

faut l'oublier.

Désolé mais désormais il va falloir régler ca avec iptables par exemple
ou bien avec 2 cartes réseaux en spécifiant dans la table de routage que
pour tel port il s'adresse a tel interface (physiquement relié a tel
routeur) et pour le reste il utilise la config par defaut.

Bonne continuation.

- --
Cle GnuPG disponible sur http://www.keyserver.net (0x338F4E2F)

La vie c'est comme un concombre...
des fois tu l'as dans la main...
des fois tu l'as dans l'cul !

Paul Presbois (Poète avant-gardiste)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.0 (GNU/Linux)

iD8DBQFFhndRg7GAHjOPTi8RA9O2AJ9hHdU02WZyqEECqcgnr5kudNnBAQCfSka+
/WQ1w+K3eY03Rt6PUJt0tqA =Setu
-----END PGP SIGNATURE-----





1 2 3