Cela fait maintenant quelques temps que je cherche en vain une vraie
solution à ce problème. Avant de passer à des solutions plus radicales
j'aimerais avoir des avis différents.
Dans une application, j'utilise des sockets en mode non connecté pour
acheminer des flux de données. Il me serait plus qu'utile de pouvoir
choisir l'interface ethernet de sortie par laquelle sortent chacun de
mes flux, et ce avec des critères de plus haut niveau que l'adresse (en
l'occurence le port).
Voici le cas du figure typique :
Émission : Réception :
+-un modem, par exemple
+------+ v +-----+
| ETH0+----+~~~WAN~~~ | |
| ETH1+----+~~~WAN~~~+---------+ETH0 |
+------+ ^ +-----+
+- un routeur
Dans ce cas, l'adresse de destination est celle du routeur et bien
qu'il y ait deux flux distincts au sens d'UDP, je ne connais pas de
moyen d'utiliser les fonctions de routage de la machine émettrice pour
distinguer ces flux et en envoyer un sur ETH0 et l'autre sur ETH1.
J'espère que le problème est clair. Trêve de blabla. Existe-t-il un
moyen d'arriver à choisir l'interface de sortie quitte à outrepasser
(grâce à setsockopt avec l'option SO_DONTROUTE) les fonctions de routage
du noyau ?
Merci pour tous information et avis à ce sujet.
Fabrice
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Vincent Bernat
OoO Lors de la soirée naissante du mardi 25 octobre 2005, vers 17:19, fabrizio disait:
J'espère que le problème est clair. Trêve de blabla. Existe-t-il un moyen d'arriver à choisir l'interface de sortie quitte à outrepasser (grâce à setsockopt avec l'option SO_DONTROUTE) les fonctions de routage du noyau ?
En utilisant les raw sockets. Cela consiste à construire toi-même l'intégralité du paquet IP, puis à l'envoyer sur la socket connectée à la bonne interface. Tu peux t'inspirer de ce qui est fait dans un client DHCP qui doit faire de telles choses. -- I AM NOT MY LONG-LOST TWIN I AM NOT MY LONG-LOST TWIN I AM NOT MY LONG-LOST TWIN -+- Bart Simpson on chalkboard in episode 4F03
OoO Lors de la soirée naissante du mardi 25 octobre 2005, vers 17:19,
fabrizio <watch.the@stars.mw> disait:
J'espère que le problème est clair. Trêve de blabla. Existe-t-il un
moyen d'arriver à choisir l'interface de sortie quitte à outrepasser
(grâce à setsockopt avec l'option SO_DONTROUTE) les fonctions de routage
du noyau ?
En utilisant les raw sockets. Cela consiste à construire toi-même
l'intégralité du paquet IP, puis à l'envoyer sur la socket connectée à
la bonne interface. Tu peux t'inspirer de ce qui est fait dans un
client DHCP qui doit faire de telles choses.
--
I AM NOT MY LONG-LOST TWIN
I AM NOT MY LONG-LOST TWIN
I AM NOT MY LONG-LOST TWIN
-+- Bart Simpson on chalkboard in episode 4F03
OoO Lors de la soirée naissante du mardi 25 octobre 2005, vers 17:19, fabrizio disait:
J'espère que le problème est clair. Trêve de blabla. Existe-t-il un moyen d'arriver à choisir l'interface de sortie quitte à outrepasser (grâce à setsockopt avec l'option SO_DONTROUTE) les fonctions de routage du noyau ?
En utilisant les raw sockets. Cela consiste à construire toi-même l'intégralité du paquet IP, puis à l'envoyer sur la socket connectée à la bonne interface. Tu peux t'inspirer de ce qui est fait dans un client DHCP qui doit faire de telles choses. -- I AM NOT MY LONG-LOST TWIN I AM NOT MY LONG-LOST TWIN I AM NOT MY LONG-LOST TWIN -+- Bart Simpson on chalkboard in episode 4F03
fabrizio
Vincent Bernat wrote:
OoO Lors de la soirée naissante du mardi 25 octobre 2005, vers 17:19, fabrizio disait:
J'espère que le problème est clair. Trêve de blabla. Existe-t-il un moyen d'arriver à choisir l'interface de sortie quitte à outrepasser (grâce à setsockopt avec l'option SO_DONTROUTE) les fonctions de routage du noyau ?
En utilisant les raw sockets.
Merci pour cette piste qui m'a l'air intéressante.
D'autres idées ?
Vincent Bernat wrote:
OoO Lors de la soirée naissante du mardi 25 octobre 2005, vers 17:19,
fabrizio <watch.the@stars.mw> disait:
J'espère que le problème est clair. Trêve de blabla. Existe-t-il un
moyen d'arriver à choisir l'interface de sortie quitte à outrepasser
(grâce à setsockopt avec l'option SO_DONTROUTE) les fonctions de routage
du noyau ?
En utilisant les raw sockets.
Merci pour cette piste qui m'a l'air intéressante.
OoO Lors de la soirée naissante du mardi 25 octobre 2005, vers 17:19, fabrizio disait:
J'espère que le problème est clair. Trêve de blabla. Existe-t-il un moyen d'arriver à choisir l'interface de sortie quitte à outrepasser (grâce à setsockopt avec l'option SO_DONTROUTE) les fonctions de routage du noyau ?
En utilisant les raw sockets.
Merci pour cette piste qui m'a l'air intéressante.
D'autres idées ?
Nicolas George
fabrizio wrote in message <djlid3$uqm$:
Dans une application, j'utilise des sockets en mode non connecté pour acheminer des flux de données. Il me serait plus qu'utile de pouvoir choisir l'interface ethernet de sortie par laquelle sortent chacun de mes flux, et ce avec des critères de plus haut niveau que l'adresse (en l'occurence le port).
Voici le cas du figure typique : Émission : Réception : +-un modem, par exemple +------+ v +-----+ | ETH0+----+~~~WAN~~~ | | | ETH1+----+~~~WAN~~~+---------+ETH0 | +------+ ^ +-----+ +- un routeur Dans ce cas, l'adresse de destination est celle du routeur et bien qu'il y ait deux flux distincts au sens d'UDP, je ne connais pas de moyen d'utiliser les fonctions de routage de la machine émettrice pour distinguer ces flux et en envoyer un sur ETH0 et l'autre sur ETH1.
Je n'arrive vraiment pas à comprendre ce qui est voulu. Est-ce qu'un exemple plus précis et détaillé serait possible ?
fabrizio wrote in message <djlid3$uqm$1@utcnews.utc.fr>:
Dans une application, j'utilise des sockets en mode non connecté pour
acheminer des flux de données. Il me serait plus qu'utile de pouvoir
choisir l'interface ethernet de sortie par laquelle sortent chacun de
mes flux, et ce avec des critères de plus haut niveau que l'adresse (en
l'occurence le port).
Voici le cas du figure typique :
Émission : Réception :
+-un modem, par exemple
+------+ v +-----+
| ETH0+----+~~~WAN~~~ | |
| ETH1+----+~~~WAN~~~+---------+ETH0 |
+------+ ^ +-----+
+- un routeur
Dans ce cas, l'adresse de destination est celle du routeur et bien
qu'il y ait deux flux distincts au sens d'UDP, je ne connais pas de
moyen d'utiliser les fonctions de routage de la machine émettrice pour
distinguer ces flux et en envoyer un sur ETH0 et l'autre sur ETH1.
Je n'arrive vraiment pas à comprendre ce qui est voulu. Est-ce qu'un exemple
plus précis et détaillé serait possible ?
Dans une application, j'utilise des sockets en mode non connecté pour acheminer des flux de données. Il me serait plus qu'utile de pouvoir choisir l'interface ethernet de sortie par laquelle sortent chacun de mes flux, et ce avec des critères de plus haut niveau que l'adresse (en l'occurence le port).
Voici le cas du figure typique : Émission : Réception : +-un modem, par exemple +------+ v +-----+ | ETH0+----+~~~WAN~~~ | | | ETH1+----+~~~WAN~~~+---------+ETH0 | +------+ ^ +-----+ +- un routeur Dans ce cas, l'adresse de destination est celle du routeur et bien qu'il y ait deux flux distincts au sens d'UDP, je ne connais pas de moyen d'utiliser les fonctions de routage de la machine émettrice pour distinguer ces flux et en envoyer un sur ETH0 et l'autre sur ETH1.
Je n'arrive vraiment pas à comprendre ce qui est voulu. Est-ce qu'un exemple plus précis et détaillé serait possible ?
fabrizio
Nicolas George wrote:
Émission : Réception : +-un modem, par exemple +------+ v +-----+ | ETH0+----+~~~WAN~~~ | | | ETH1+----+~~~WAN~~~+---------+ETH0 | +------+ ^ +-----+ +- un routeur Je n'arrive vraiment pas à comprendre ce qui est voulu. Est-ce qu'un exemple
plus précis et détaillé serait possible ?
Avec plaisir :) J'ai laissé le schéma, on ne sait jamais.
Faisons plus pragmatique. J'ouvre deux sockets pour émettre. L'adresse de destination positionnée est celle du routeur (celui indiqué après le WAN sur le schéma). Donc les paquets qui sortent par ces deux sockets ont la même destination. Si je me réfère au grand principe du routage : même adresse de destination => même interface de sortie.
Or je voudrais que les paquets qui sortent du socket A passe par eth0 pour aller rejoindre le modem A (celui du haut) et ceux qui sortent par le socket B passe par le modem B (celui du bas).
Ce qui distingue ces sockets c'est le port de destination (outre le port de départ).
J'espère avoir été plus clair.
Nicolas George wrote:
Émission : Réception :
+-un modem, par exemple
+------+ v +-----+
| ETH0+----+~~~WAN~~~ | |
| ETH1+----+~~~WAN~~~+---------+ETH0 |
+------+ ^ +-----+
+- un routeur
Je n'arrive vraiment pas à comprendre ce qui est voulu. Est-ce qu'un exemple
plus précis et détaillé serait possible ?
Avec plaisir :) J'ai laissé le schéma, on ne sait jamais.
Faisons plus pragmatique. J'ouvre deux sockets pour émettre.
L'adresse de destination positionnée est celle du routeur (celui indiqué
après le WAN sur le schéma). Donc les paquets qui sortent par ces deux
sockets ont la même destination. Si je me réfère au grand principe
du routage : même adresse de destination => même interface de sortie.
Or je voudrais que les paquets qui sortent du socket A passe par eth0
pour aller rejoindre le modem A (celui du haut) et ceux qui sortent par
le socket B passe par le modem B (celui du bas).
Ce qui distingue ces sockets c'est le port de destination (outre le port
de départ).
Émission : Réception : +-un modem, par exemple +------+ v +-----+ | ETH0+----+~~~WAN~~~ | | | ETH1+----+~~~WAN~~~+---------+ETH0 | +------+ ^ +-----+ +- un routeur Je n'arrive vraiment pas à comprendre ce qui est voulu. Est-ce qu'un exemple
plus précis et détaillé serait possible ?
Avec plaisir :) J'ai laissé le schéma, on ne sait jamais.
Faisons plus pragmatique. J'ouvre deux sockets pour émettre. L'adresse de destination positionnée est celle du routeur (celui indiqué après le WAN sur le schéma). Donc les paquets qui sortent par ces deux sockets ont la même destination. Si je me réfère au grand principe du routage : même adresse de destination => même interface de sortie.
Or je voudrais que les paquets qui sortent du socket A passe par eth0 pour aller rejoindre le modem A (celui du haut) et ceux qui sortent par le socket B passe par le modem B (celui du bas).
Ce qui distingue ces sockets c'est le port de destination (outre le port de départ).
J'espère avoir été plus clair.
Vincent Bernat
OoO Lors de la soirée naissante du mardi 25 octobre 2005, vers 18:31, fabrizio disait:
D'autres idées ?
Quel est le système qui route ? S'il est capable de router selon le TOS, il est possible de placer différemment ceux-ci sur chacun des paquets. -- BUTT.COM IS NOT MY E-MAIL ADDRESS BUTT.COM IS NOT MY E-MAIL ADDRESS BUTT.COM IS NOT MY E-MAIL ADDRESS -+- Bart Simpson on chalkboard in episode 5F19
OoO Lors de la soirée naissante du mardi 25 octobre 2005, vers 18:31,
fabrizio <watch.the@stars.mw> disait:
D'autres idées ?
Quel est le système qui route ? S'il est capable de router selon le
TOS, il est possible de placer différemment ceux-ci sur chacun des
paquets.
--
BUTT.COM IS NOT MY E-MAIL ADDRESS
BUTT.COM IS NOT MY E-MAIL ADDRESS
BUTT.COM IS NOT MY E-MAIL ADDRESS
-+- Bart Simpson on chalkboard in episode 5F19
OoO Lors de la soirée naissante du mardi 25 octobre 2005, vers 18:31, fabrizio disait:
D'autres idées ?
Quel est le système qui route ? S'il est capable de router selon le TOS, il est possible de placer différemment ceux-ci sur chacun des paquets. -- BUTT.COM IS NOT MY E-MAIL ADDRESS BUTT.COM IS NOT MY E-MAIL ADDRESS BUTT.COM IS NOT MY E-MAIL ADDRESS -+- Bart Simpson on chalkboard in episode 5F19
fabrizio
Vincent Bernat wrote:
OoO Lors de la soirée naissante du mardi 25 octobre 2005, vers 18:31, fabrizio disait:
D'autres idées ?
Quel est le système qui route ? S'il est capable de router selon le TOS, il est possible de placer différemment ceux-ci sur chacun des paquets.
C'est un linux, noyau 2.6. Il s'agirait si je comprends bien de positionner le champ TOS au niveau application ? Mais je ne sais pas (pour avoir cherché un peu) comment se baser ce champ pour effectuer du routage. Si vous avez à portée de main quelques infos ou liens, je suis intéressé.
Vincent Bernat wrote:
OoO Lors de la soirée naissante du mardi 25 octobre 2005, vers 18:31,
fabrizio <watch.the@stars.mw> disait:
D'autres idées ?
Quel est le système qui route ? S'il est capable de router selon le
TOS, il est possible de placer différemment ceux-ci sur chacun des
paquets.
C'est un linux, noyau 2.6. Il s'agirait si je comprends bien
de positionner le champ TOS au niveau application ?
Mais je ne sais pas (pour avoir cherché un peu) comment se baser
ce champ pour effectuer du routage. Si vous avez à portée de main
quelques infos ou liens, je suis intéressé.
OoO Lors de la soirée naissante du mardi 25 octobre 2005, vers 18:31, fabrizio disait:
D'autres idées ?
Quel est le système qui route ? S'il est capable de router selon le TOS, il est possible de placer différemment ceux-ci sur chacun des paquets.
C'est un linux, noyau 2.6. Il s'agirait si je comprends bien de positionner le champ TOS au niveau application ? Mais je ne sais pas (pour avoir cherché un peu) comment se baser ce champ pour effectuer du routage. Si vous avez à portée de main quelques infos ou liens, je suis intéressé.
Kevin Denis
Le 26-10-2005, fabrizio a écrit :
C'est un linux, noyau 2.6. Il s'agirait si je comprends bien de positionner le champ TOS au niveau application ? Mais je ne sais pas (pour avoir cherché un peu) comment se baser ce champ pour effectuer du routage. Si vous avez à portée de main quelques infos ou liens, je suis intéressé.
l'advanced-routing HOWTO? On peut router a peu pres a partir de n'importe quel champ d'un paquet ip: 1. marquage du paquet avec iptables 2. routage des paquets marques a l'aide de la commande "ip route"
-- Kevin
Le 26-10-2005, fabrizio <watch.the@stars.mw> a écrit :
C'est un linux, noyau 2.6. Il s'agirait si je comprends bien
de positionner le champ TOS au niveau application ?
Mais je ne sais pas (pour avoir cherché un peu) comment se baser
ce champ pour effectuer du routage. Si vous avez à portée de main
quelques infos ou liens, je suis intéressé.
l'advanced-routing HOWTO? On peut router a peu pres a partir de n'importe
quel champ d'un paquet ip:
1. marquage du paquet avec iptables
2. routage des paquets marques a l'aide de la commande "ip route"
C'est un linux, noyau 2.6. Il s'agirait si je comprends bien de positionner le champ TOS au niveau application ? Mais je ne sais pas (pour avoir cherché un peu) comment se baser ce champ pour effectuer du routage. Si vous avez à portée de main quelques infos ou liens, je suis intéressé.
l'advanced-routing HOWTO? On peut router a peu pres a partir de n'importe quel champ d'un paquet ip: 1. marquage du paquet avec iptables 2. routage des paquets marques a l'aide de la commande "ip route"