Deux connections pour un routeur

Fermé
Ben - 22 mars 2007 à 09:31
 Ben - 30 mars 2007 à 11:59
Bonjour à tous,

Je suis en train de programmer un routeur sous linux (fli4l).
J'ai déjà paramétrer ce routeur pour qu'il puisse se connecter par ADSL, par GPRS et par modem classique. Il fonctionne très bien dans les trois cas. Je souhaiterai pour des raisons que je ne souhaite pas développer ici, pouvoir diviser ma connexion internet en deux.

Je m'explique.
Je souhaite que les flux de sorties passent pas le modem, et que les flus de retour passent par le GPRS. Bref il s'agit de paramétrer deux connections unidirectionnelles pour d'en faire qu'une bidirectionnelle.

Je voulais savoir si c'était faisable à partir de SNAT et DNAT. C'est à dire de changer les adresses source des paquets sortants pour que ceux-ci reviennent par l'autre chemin.
On peut dire aussi: mettre l'adresse de la liaison GPRS au paquets sortant pas le modem pour que les paquets de retour viennent vers le GPRS. Et en chaine de Prerouting dans l'interface d'entrée du GPRS, changer l'adresse de déstination pour que ça retourne vers mon pc.

Pour résumer:
SNAT sur la liaison de sortie, le modem,
DNAT sur la liaison d'entrée, le GPRS

Cela est-il faisable? Y a-t-il un problème de raisonnement?

Merci de votre aide

9 réponses

brupala Messages postés 110592 Date d'inscription lundi 16 juillet 2001 Statut Membre Dernière intervention 3 décembre 2024 13 841
22 mars 2007 à 10:04
Salut,
ça n'est pas possible:
Pour cela il faudrait que tu maitrises les 2 extrémités de la liaison (les accès internet coté FAI). ça n'est pas le cas.
tous les accès internet sauf configuration spéciale du FAI répondent aux requetes à la même adresse qui les a envoyées (heureusement) .
0
Merci Brupala pour ta réponse.

Mais malgré tout il y a toujours quelque chose que je ne comprends pas. Le FAI, lorsqu'il retourne les paquets en réponse à une requète, utilise l'adresse source des paquets qu'il a reçu. L'ancienne adresse source devient alors la nouvelle adresse destination.

Si on change l'adresse source à l'origine de la communication par l'adresse d'une autre interface, le FAI renverra le paquet de retour vers cette autre interface, dont il pense que c'est la source.

Théoriquement cela marche-t-il?

Merci de votre réponse
0
Bon j'avance pas à pas à force de surfer sur le net.

J'ai découvert que ce type de routage s'appelle routage asymétrique (upstream et downstream par deux interfaces différentes).

Est-ce que quelqu'un connait une manière de paramétrer un routeur en routage asymétrque sous linux, avec des règles iptables notemment?
0
mrud Messages postés 216 Date d'inscription mardi 7 février 2006 Statut Membre Dernière intervention 19 mai 2010 100
22 mars 2007 à 12:13
salut,

Ce sujet m'a l'air interessant je n'y connais rien en gprs (je sais juste utiliser i-mode via mon mobile) tu utilise un mobile ? comment ça marche ?

si c'est qu'une histoire d'ip il faudrait inverser les ip dans les packets source et destination ça donnerait ça ?

envoi :
[modem (ip gprs)] ---> fai ----> .... ----> fai ---> gprs
retour :
[gprs (ip modem)] ---> fai ----> .... ----> fai ---> modem

c'est du spoofing ?

[edit] mais en fait, ça fait juste une boucle !?? tu veux communiquer de l'interface du modem vers l'interface gprs en passant par internet ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Salut mrud,

Non en fait je souhaite aller sur internet mais en empruntant deux chemins différents entre le upstream et le downstream.

C'est à dire utiliser le modem pour le uptream (envoie de requete http par exemple), et le gprs pour le downstream (réponse des requètes http).

Je ne sais pas vraiment ce qu'est le spoofing, mise à part qu'il s'agit d'un procédé utilisé lors de hacking.

Le problème que je rencontre c'est que d'habitude lors d'un SNAT sur une seule interface, le SNAT inverse est réalisé implicitement sur cette même interface. Or je souhaiterai que ce soit une autre interface qui réalise le SNAT inverse. Je sais pas si c'est possible. (une sorte de DNAT, mais je n'arrive pas à résoudre un problème de port)

J'ai vu que iproute2 était peut etre une solution pour réaliser du routage asymétrique... Qu'en est-il?
0
Voici ce que j'ai déjà fait pour que ce soit plus compréhensible:


J'ai un ordi perso (192.168.1.2) relié à un routeur (192.168.1.1).
Ce même routeur possède deux autres interfaces aui partenet vers internet (ppp0 et ppp1).

ppp0: 1.1.1.1
| |----------------->
Ordi perso ------------->| routeur|
LAN | |----------------->
ppp1: 2.2.2.2


Voici le schéma d'une requete http type:

Ordi perso --------------------------->routeur
src: 192.168.1.2:3000
dst: 5.5.5.5:80

Routeur ppp0 ------------------------>serveur http
src: @ppp1:10000
dst: 5.5.5.5:80


Voici le schéma retour correspondant:

Routeur ppp1 <----------------------- serveur http
src: 5.5.5.5: x
dst: @ppp1:10000

Ordi perso <-------------------- routeur
src: 192.168.1.1:y
dst: 192.168.1.2:3000

Voilà ce que fait le routeur:

A l'allée: route vers la passerelle ppp0 MAIS change la source en ppp1 (SNAT)

Au retour: change la destination vers l'ordi perso (DNAT). Cela revient à faire le SNAT inversé.

Problème:

Dans cette configuration, comment faire pour que le routeur, lors du retour, dirige le paquet vers le bon port de l'ordi peso?

Peut etre avec du port forwarding, mais... j'en sais trop rien...

J'espère que c'est plus clair ainsi. Ne vous découragez pas les gars!!!
0
mrud Messages postés 216 Date d'inscription mardi 7 février 2006 Statut Membre Dernière intervention 19 mai 2010 100
22 mars 2007 à 23:20
et si tu ne précises pas le port source et destination dans les régles iptables il gardera le bon port ou non ? faut tester

exemple de requete a un serveur web
une requete part de ton pc avec le port source et destination il arrive au routeur qui se charge de juste changer l'ip source en mettant celle de l'interface gprs, la requete arrive sur un serveur web qui renvoi alors la reponse sur le routeur interface gprs qui modifie l'ip destination en mettant celle de ton pc.

j'ai trouver ça à midi ça peut servir d'exemple pour configurer iptables avec les interfaces in et out et ip src et dst (enfin j'espère):

iptables -A OUTPUT --protocol icmp --out-interface eth1.1 --source 192.168.1.254 --destination 192.168.1.10 --jump ACCEPT
iptables -A INPUT --protocol icmp --in-interface eth1.1 --source 192.168.1.10 --destination 192.168.1.254 --jump ACCEPT
0
Malheureusement j'ai de bonnes raisons de croire que le port de destination change.
D'abords c'est ce que raconte ce site:
https://www.figer.com/Publications/nat.htm

De plus, j'ai fait le test, et ça n'a pas marché. Je crois que le problème venait des ports sources et destinations. Voilà pour info les règles iptables que j'avais écrites:

iptables -t nat -I POSTROUTING -o ppp1 -j SNAT --to-source $ppp0_IP

iptables -t nat -I PREROUTING -d $ppp0_IP -j DNAT --to-destination 192.168.1.2

iptables -I FORWARD -j ACCEPT

D'habitude tu as raison. Lorsque on opère un SNAT sur un ppaquet sortant, lorsqu'un paquet de retour revient, le SNAT inverse lui réattribue le port dont la requète est issue. Mais j'ai l'impresson (à confirmer) que la table SNAT est propre à l'interface. Ce qui signifierait que lorsque le paquet revient mais par l'autre interface, alors aucun SNAT inverse ne s'opère.
Je pensais remplacer cela par un DNAT, mais impossible de rerouter sur le bon port. En effet, sur l'ordi de départ, le port source est choisi quasi-aléatoirement...

Voilà ou j'en suis...

Ce qui m'étonne le plus, c'est que j'ai l'impression qu'aucun site ne traite de ce sujet. Comme si j'étais le premier, ce qui ne doit pas être le cas. Alors je ne dois pas utiliser les bons mots clés.
0
brupala Messages postés 110592 Date d'inscription lundi 16 juillet 2001 Statut Membre Dernière intervention 3 décembre 2024 13 841 > ben
23 mars 2007 à 15:12
bien sûr,
chaque table nat dynamique est liée à une interface , les tables de conversion de l'une ne sont pas valables pour l'autre, heureusement.
pour ta recherche:
déjà la nat n'est pas une chose "naturelle" sur internet alors qu 'une interface vers un fournisseur d'accès le fasse pour le compte d'un autre, c'est plus que tiré par les cheveux.
je vois comme toi qu'il ya une faille pouvant conduire à beaucoup d 'affabulations et de contournements, voire de piratages:
utiliser une connexion taxée à l'upload uniquement pour du download en envoyant le traffic upload sur une autre non taxée mais moins performante.
Mais sans équipements spécialement développés pour , ça n'est pas bien facile.
0
Merci brupala,

En effet je me rend compte que ce n'est vraiment pas simple.
J'ai vu qu'il existe un protocole utilisé majoritairement pour les communications satellites, c'est l'UDLR (unidirectionnal ... routing protocole ;)).
Qu'en est-il? Est ce implémentable sur linux?

Sinon serait-il possible de développer une application capable de filtrer les paquets (genre un nouveau patch netfilter)? Peut etre qu'une solution existe déjà dans cette direction?
Ainsi en forçant les paquets à monter vers la couche applicative (input---application---output) on pourrait peut etre soumettre chaque paquet à un NAT fait maison?? Ca demande des connaissances en programmation TCP et C surement. Ca s'annonce chaud chaud...

Je vois que la tâche devient compliqué pour le petit stagiaire que je suis... argh
0
mrud Messages postés 216 Date d'inscription mardi 7 février 2006 Statut Membre Dernière intervention 19 mai 2010 100
23 mars 2007 à 20:41
une idée : peut être en fusionnant les deux interfaces tout en gardant les régles iptables?
si ça peut t'aider j'ai trouver ça http://okki666.free.fr/docmaster/articles/linux093.htm
regarde le "bonding" heu "eql" dans ton cas
0
Je ne crois pas que cela peut m'aider, j'ai besoin malgré tout de garder deux interfaces distinctes.
Je vais en rester là pour l'instant. Le projet est remis à plus tard, tant mieux pour moi.
Merci à tous de votre aide.
0