Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Non-Officiels > Réseaux > Général > Lecture du tutoriel

Contourner le bridage de ports de certains FAI

Avatar
Auteur : e-t172
Créé : le 22/01/2006 00:53:40
Modifié : le 06/03/2007 20:37:05
Noter et commenter ce tutoriel
Imprimer ce tutoriel
Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Certains Fournisseurs d'Accès à Internet (FAI), Free notamment, pratiquent ce que l'on appelle communément le "bridage de ports" : autrement dit, ils brident les communications Internet effectuées sur des ports particuliers. Ce bridage peut passer par une limitation du nombre de connexions simultanées, une limitation de bande passante sur les transferts de données réalisés sur le port en question, voire une interdiction de connexion pure et simple.

Ainsi, il est quasiment impossible à certains abonnés de Free de communiquer par voix en utilisant le logiciel Ventrilo. En effet, le port par défaut de la plupart des serveurs (3784) étant bridé par ce FAI, l'abonné malchanceux se retrouve avec un décalage de 30 secondes de communication dans les secondes suivant son arrivée sur le serveur.

Pourquoi ? Parce que Free ayant quelques problèmes de réseau, il préfère limiter la bande passante sur les ports supérieurs à 1024 pour que les applications les plus utilisées (Web, FTP, Mail...) soient prioritaires, au détriment de toutes les autres applications. Mais si cette limitation peut s'avérer judicieuse pour limiter les logiciels de Peer-To-Peer (eMule...) grands consommateurs de bande passante, il s'avère carrément injustifié et préjudiciable pour d'autres applications totalement inoffensives (ici, de la voix sur IP).

Fort heureusement, il est possible de mettre en oeuvre des solutions pour contourner ces limitations, c'est l'objet du présent tutoriel.

Si vous avez le contrôle du serveur sur lequel vous souhaitez contourner le bridage, la solution la plus simple reste de modifier le port du serveur en question, si vos "collègues" sont d'accord. Nous partirons du principe que vous n'avez pas cette possibilité.


La solution présentée ici ne convient pas aux applications complexes manipulant plusieurs serveurs à la fois, et aux adresses inconnues (par exemple, les logiciels de P2P). Vous devez connaître à l'avance l'adresse IP et le port du serveur sur lequel vous voulez vous connecter pour pouvoir suivre ce tutoriel.
Sommaire du chapitre :

Comment ça marche ?

Le principe



Le bridage de la connexion s'effectue au niveau des routeurs du FAI concerné : autrement dit, lorsque des paquets transitent au niveau de ses routeurs, ceux-ci vérifient le port de destination du paquet : si celui-ci fait partie de la liste de ports à brider, le routeur appliquera des restrictions sur le transit dudit paquet.

Pour des raisons d'économies techniques, la plupart des routeurs se basent uniquement sur le port de destination des paquets pris séparément. Ils ne gardent à priori pas trace des connexions TCP. Cela signifie que le bridage ne s'effectue que sur les paquets que vous envoyez, pas sur ceux que vous recevez.


Prenons l'exemple de Ventrilo : vous envoyez des paquets sur le port 3784, les routeurs de votre FAI les détectent, et vous brident. Il nous faut donc communiquer avec le serveur en utilisant un autre port, qui lui ne sera pas bridé.

Mais, bien évidemment, tout n'est pas aussi simple : si on tente de communiquer avec le serveur Ventrilo sur le port 81 alors qu'il écoute le port 3784, ça ne fonctionnera pas (logique). La solution : utiliser un intermédiaire, une "passerelle" qui recevrait les paquets sur le port 81, et les renverrait au serveur sur le bon port, en se "faisant passer" pour vous, et qui vous retransmettrait les réponses.

Évidemment, cette passerelle se trouverait après les routeurs du FAI bridant, et non pas derrière (sinon ça ne servirait strictement à rien). Elle pourrait se trouver derrière un FAI concurrent, sur une machine hébergée en data center, ou, encore mieux, sur la machine abritant le serveur que vous essayez de contacter (en admettant que vous ayez un accès de type administrateur "root" dessus).

En termes plus techniques, on utilise en fait les mêmes technologies que celles employées sur les modems-routeurs grand public : un NAT (Network Address Translation), couplé à un Masquerading. Le NAT sert à rediriger les paquets reçus sur le port non bridé vers le "vrai" serveur, en modifiant l'adresse et le port de destination, et le Masquerading va modifier l'adresse et le port source de sorte que la passerelle "se fasse passer" pour vous.

Pourquoi la passerelle doit-elle se faire passer pour moi ? A priori, seul le NAT suffit, non ?


Non, pour deux raisons : la première est que la passerelle va tenter d'envoyer des paquets comportant une adresse source qui n'est pas la sienne, paquets qui seront donc rapidement jetés par les premiers routeurs par lesquels ils vont passer (parce que les routeurs sont configurés pour vérifier l'adresse source des paquets qu'ils routent, histoire d'éviter des attaques par spoofing) ; et même si ils arrivaient à passer, lorsque le "vrai" serveur enverra les réponses, votre ordinateur recevra des paquets dont l'adresse source ne correspond pas à celle de la passerelle (avec laquelle votre ordinateur "croit" avoir établi une connexion), et donc les ignorera.

Si vous n'avez rien compris, ce n'est pas bien grave. Retenez seulement que pour pouvoir contourner le bridage d'un port, il faut se connecter à une passerelle (sur un port non bridé) qui, elle, se fera passer pour vous auprès du "vrai" serveur en utilisant le vrai port. C'est à peu près le même principe que celui d'un serveur proxy (mais techniquement parlant, ça n'a rien à voir).


Exemple détaillé



Nous allons prendre l'exemple d'un internaute abonné chez Free, ayant comme adresse IP 1.1.1.1, et souhaitant se connecter à un serveur Ventrilo d'adresse 2.2.2.2 écoutant sur le port 3784.

Situation classique (bridage effectif)






Avec une passerelle



Imaginons que nous avons installé une passerelle sur la machine 3.3.3.3, et l'avons configurée de manière à ce qu'elle redirige les paquets entrant sur le port 81 vers la machine 2.2.2.2, port 3784.




Dans ce cas de figure :
  • 1.1.1.1 "croit" communiquer avec 3.3.3.3 et lui seul
  • 2.2.2.2 "croit" communiquer avec 3.3.3.3 et lui seul
L'adresse IP de 1.1.1.1 est donc masquée par la passerelle.

Prérequis

Pour pouvoir mettre en pratique cette technique, il vous faut une passerelle. Plus cette passerelle sera géographiquement proche ("réseau-parlant") du "vrai" serveur, plus les pings seront bas. Il convient de noter que tous les transferts de données passeront par là, aussi, vous serez limité par sa bande passante.

La passerelle peut être de deux types :

Un ordinateur



Il faut juste qu'il soit connecté à Internet, et qu'il possède les outils nécessaires à l'établissement d'un NAT avec Masquerading.

La meilleure configuration possible consiste à installer la passerelle sur la même machine que celle qui héberge le "vrai" serveur, auquel cas elle se renvoie les paquets à elle-même, en modifiant uniquement le port de destination, sans déperdition de performances. Bien évidemment, cela suppose que vous ayez un accès de type administrateur sur cette machine. Ceci dit, la machine d'un ami abonné chez un FAI concurrent ne bridant pas peut très bien faire l'affaire, pour peu que celui-ci accepte de se faire pomper une partie de sa bande passante par vos activités.

Un routeur



A priori, n'importe quel routeur supportant le NAT et le Masquerading peut servir de passerelle. La bonne nouvelle, c'est que ces deux fonctions sont présentes dans tous les modems-routeurs grand public, puisqu'elles sont indispensables pour partager un accès Internet entre plusieurs PCs.

Donc, si vous avez un ami abonné chez un FAI concurrent disposant de ce type de matériel, il y a de fortes chances que son modem-routeur puisse vous servir de passerelle.

Gardez à l'esprit que cet état de fait est très théorique. En effet, après avoir essayé successivement une Freebox, un modem-routeur Netgear, un Speedtouch, un D-Link, une CBox de Cegetel et un Inventel, seul l'Inventel a été capable de rerouter des paquets vers l'extérieur, alors que techniquement ils devraient tous pouvoir le faire !


Si vous ne voulez pas ou ne pouvez pas utiliser un modem-routeur comme passerelle, mais que vous souhaitez utiliser un ordinateur situé derrière ce modem-routeur, assurez-vous juste de rediriger correctement le port non bridé sur lequel vous souhaitez faire écouter votre passerelle.

Installer la passerelle sous Windows

Autant vous prévenir tout de suite : le nombre d'outils permettant de manipuler finement le routage sous Windows est très limité, et ceux-ci sont généralement particulièrement complexes à configurer. Du coup, on ne va pas ici configurer un "vrai" NAT, mais utiliser un petit logiciel gratuit qui recevra le flux TCP de votre ordinateur à la passerelle, et qui le reproduira à l'identique entre la passerelle et le "vrai" serveur. Il s'agit de TCPRelay. En pratique, cela revient au même qu'utiliser un NAT.

Curieusement, le très simpliste "redirecteur de ports" de Windows XP (accessible via les propriétés de la connexion réseau), refuse de "rerouter" des paquets vers l'extérieur, à l'instar de la plupart des modems-routeurs dits "familiaux".


TCPRelay est un service, et à ce titre ne fonctionne que sous la série NT de Windows, c'est-à-dire Windows NT/2000/XP/2003. A ma connaissance, il n'existe aucune solution pour les utilisateurs de Windows 95/98/Me.


TCPRelay ne permet pas de rediriger des communications sur le protocole UDP.


L'installation et la configuration de TCPRelay est loin d'être "user-friendly", mais elle n'est pas vraiment compliquée.

Installation



Tout d'abord, téléchargez TCPRelay. Décompressez le fichier TCPRelay.exe dans votre répertoire de Windows.

Ensuite, démarrez l'invite de commandes. Pour cela, cliquez sur Démarrer, Exécuter, puis entrez "cmd" dans le champ de texte, et validez.

A l'invite, entrez la commande suivante :

Code : Console
tcprelay -install


Cela devrait donner quelque chose comme ceci :

Image utilisateur

Configuration



Le programme ne dispose d'aucune interface graphique pour le configurer : on va devoir y aller à pleines mains dans la base de registre. C'est parti.

Vous n'avez pas besoin de faire de sauvegarde de la base de registre avant de commencer : les clés que vous allez modifier ne présentent strictement aucun risque pour votre système.


Cliquez sur Démarrer, Exécuter, entrez "regedit" et validez.

Déroulez l'arborescence jusqu'à la clé suivante :

Code : Autre
1
HKEY_LOCAL_MACHINE\SOFTWARE\XTWare\TCPRelay


Ajouter des redirections



Pour ajouter des redirections, vous devez ajouter des sous-clés dans la clé TCPRelay. Une clé représente une redirection. Par exemple, si vous voulez utiliser la passerelle pour vous connecter à deux serveurs Ventrilo et un serveur VNC, vous devez ajouter 3 clés.

Le nom que vous donnez à chacune des clés est totalement arbitraire et ne vous sert qu'à donner des noms aux redirections. C'est dans le contenu des clés que nous allons configurer chacune des redirections. La structure utilisée est décrite dans l'aide de TCPRelay. Pour fabriquer une redirection, nous devons créer deux valeurs de type chaîne :



Si vous souhaitez éviter que la passerelle soit utilisable par n'importe qui, deux directives de configuration supplémentaires permettent de limiter les adresses IP qui peuvent utiliser la passerelle. Reportez-vous à l'aide de TCPRelay pour plus d'informations.


Voici un exemple de configuration :

Image utilisateur

Dans ce cas précis, la passerelle va rediriger les données arrivant sur le port 81 vers ventrilo.serveur.org, port 3784.

Démarrer / Arrêter la passerelle



Pour lancer la passerelle, vous devez aller dans les outils d'Administration (Démarrer / Paramètres / Panneau de configuration / Outils d'administration), et choisir l'outil Services.

Cherchez TCPRelay dans la liste, et double-cliquez dessus ; pour démarrer ou arrêter la passerelle, cliquez sur le bouton correspondant. Pour lancer la passerelle au démarrage de la machine, il vous suffit de choisir "Automatique" dans "Type de démarrage".

Désinstaller la passerelle



Pour désinstaller TCPRelay, retournez dans l'invite de commandes et exécutez :

Code : Console
tcprelay -remove


Puis supprimez le fichier tcprelay.exe dans le répertoire de Windows.

Installer la passerelle sous Linux

Contrairement à Windows, la plupart des distributions Linux livrent un kernel compilé avec le support d'iptables, un outil incroyablement puissant pour contrôler et manipuler tout ce qui passe sur le réseau. Le NAT et le Masquerading font bien entendu partie de ses multiples fonctions.

Toutes les manipulations exposées ici nécessitent que vous ouvriez un shell Bash (via SSH, Konsole ou tout autre terminal).

Vérifier la présence d'iptables



Pour vérifier que votre système dispose d'iptables, exécutez la commande suivante :

Code : Console
# iptables


Si tout se passe bien, le système devrait vous répondre quelque chose comme ceci :

Code : Console
iptables v1.3.3: no command specified

Try `iptables -h' or 'iptables --help' for more information.


Si tel n'est pas le cas, vous devez installer iptables, ce qui nécessite le plus souvent que vous recompiliez votre Kernel ou certains de ses modules. Cette manipulation sort du cadre de ce document, je vous invite à vous reporter à la documentation de votre distribution pour de plus amples informations à ce sujet.

Même si iptables est présent, il est possible qu'il ne reconnaisse pas certaines de vos commandes. Cela signifie que certaines de ses fonctionnalités n'ont pas été compilées au niveau du Kernel (support du NAT et du Masquerading). Là encore, je vous invite à vous reporter à la documentation de votre distribution.


Déterminer l'interface réseau connectée à Internet



Pour afficher la liste des interfaces réseau connectées à votre machine, entrez la commande suivante :

Code : Console
# ifconfig


Dans la liste retournée, vous devez identifier l'interface connectée à Internet, et relever son identifiant (par exemple, eth0 ou ppp0). Elle est facile à identifier : ce doit être la seule dont l'adresse IP ("inet addr") ne commence ni par 10, ni par 172.16-31, ni par 192.168.0.

Si vous êtes derrière un routeur, aucune de vos interfaces réseau n'est connectée directement à Internet. Vous devez donc effectuer la manipulation en utilisant l'interface connectée à votre réseau local, en prenant soin de rediriger le port sur lequel écoutera votre passerelle au niveau de votre routeur vers la machine Linux.


Activer l'IP Forwarding



Avant toute chose, l'IP Forwarding doit être activé au niveau du Kernel, sinon celui-ci ne peut pas "forwarder" (rediriger) les paquets qu'on lui envoie. Voici comment l'activer :

Code : Console
# sysctl -w net/ipv4/ip_forward=1


Cette commande rendra l'IP Forwarding effectif jusqu'au prochain redémarrage de la machine. Pour rendre la modification permanente, il faut ajouter (ou décommenter) la ligne suivante dans /etc/sysctl.conf :

Code : Autre
1
net/ipv4/ip_forward=1


Si votre machine Linux sert de passerelle d'accès à Internet pour un réseau local "de maison", l'IP Forwarding est probablement déjà activé.


Activer le Masquerading



Le masquerading s'active via la commande suivante :

Code : Console
iptables -t nat -A POSTROUTING -o [interface] -j MASQUERADE


Par exemple :

Code : Console
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE


Si votre machine Linux sert de passerelle d'accès à Internet pour un réseau local "de maison", le Masquerading est probablement déjà activé.


Ajouter les règles NAT



Nous pouvons maintenant entrer dans le vif du sujet, à savoir l'ajout des règles de redirection. Voici la commande à utiliser :

Code : Console
iptables -t nat -A PREROUTING -i [interface] -p [protocole] --dport [port d'écoute] -j DNAT --to-destination [adresse de destination]:[port de destination]


Par exemple, toujours avec un serveur Ventrilo :

Code : Console
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 81 -j DNAT --to-destination 123.456.789.123:3784


Dans cette configuration, vous demandez à votre machine Linux de rediriger tout le trafic arrivant sur le port 81 vers 123.456.789.123, port 3784.

Si vous souhaitez éviter que n'importe qui puisse se servir de la passerelle, utilisez le paramètre --source pour spécifier une adresse source.


Vous devez utiliser cette commande autant de fois qu'il y a de serveurs à contacter.

Reconfigurer iptables au démarrage



Pour ajouter toutes ces règles dès le démarrage de la machine, il faut ajouter un script de démarrage. Le fonctionnement de ces scripts varie fortement entre les distributions. Celle que je vais présenter ici est conçue pour les systèmes tournant sous Linux Debian. Reportez-vous à la documentation de votre distribution pour prendre connaissance de la procédure adaptée à votre distribution.

Créez le fichier /etc/init.d/port-gateway :

Code : Bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#! /bin/sh
set -e

# /etc/init.d/port-gateway: start ports redirections

export PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"

case "$1" in
  start)
        echo -n "Starting ports redirections"
        # --- AJOUTEZ TOUTES LES COMMANDES IPTABLES ICI ---
        echo "."
        ;;
  *)
        echo "Usage: /etc/init.d/port-gateway {start}"
        exit 1
esac

exit 0


Ensuite exécutez :

Code : Console
# update-rc.d port-gateway defaults

Installer la passerelle sur un routeur

Le routeur est probablement l'équipement le plus judicieux pour installer une passerelle : ça fait partie de ses fonctions premières, et il consomme nettement moins d'électricité qu'un ordinateur laissé allumé en permanence.

Malheureusement, la passerelle que nous essayons d'installer ici a une caractéristique très singulière par rapport à ce pour quoi on utilise couramment un modem-routeur : on veut router des paquets arrivant de l'extérieur... vers l'extérieur.

Et là commence le parcours du combattant. Parce que la quasi-totalité des modems-routeurs grand public disponibles actuellement n'ont pas été conçus pour ce genre d'usage, même si en théorie ils ont toutes les technologies nécessaires pour faire ce que l'on attend d'eux ici. Ainsi, les Freebox imposent une adresse IP de destination commençant par 192.168.0 sans possibilité de la modifier, les SpeedTouch acceptent la configuration, mais le routage ne fonctionne pas, les Netgear ne permettent pas de modifier le port de destination, les D-Link non plus, et la palme revient à Cegetel avec sa CBox ne proposant que des configurations prédéfinies. Sur les routeurs de 6 marques différentes que j'ai pu tester, seul un a été capable de remplir la mission avec succès : l'Inventel.

Pour cette raison, cette partie expliquera uniquement comment configurer les routeurs d'Inventel pour qu'ils fassent office de passerelle : si vous parvenez à faire de même avec votre propre routeur, tant mieux, sinon, vous n'avez plus qu'à vous replier sur une passerelle Windows ou Linux.

Vous devez vous rendre sur l'interface d'administration de votre routeur, et vous diriger sur la page de configuration de la redirection de ports (ou NAT), puis remplir le formulaire proposé avec les informations suivantes :



Image utilisateur

Ici, le routeur est configuré pour diriger les données reçues sur le port non bridé 81 vers le "vrai" serveur 1.1.1.1, écoutant sur le port 3784. Une fois la redirection ajoutée, la passerelle est effective.

Une fois ces diverses manipulations achevées, que ce soit sous Windows, sous Linux ou sur votre routeur, la passerelle s'utilise de la même manière : vous devez spécifier au logiciel que vous souhaitez utiliser l'adresse et le port de votre passerelle en lieu et place de ceux du "vrai" serveur. L'ensemble est entièrement transparent.

Par exemple, sous Ventrilo :

Image utilisateur

Vous pouvez maintenant goûter aux joies du débridé ! ;)

Remerciements à Jambonneau, HLook, Injall, ZiPPeR, ApOph!s et Kegeruneku pour avoir accepté que leurs routeurs servent de cobaye à mes expériences, et à Ptipilou pour la zCorrection :)
Auteur : e-t172
Noter et commenter ce tutoriel
Imprimer ce tutoriel

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | Fil RSS | XHTML 1.0 | CSS 2.0
Édité par Simple IT SARL : Nous contacter | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 638 Zéros connectés | Requêtes SQL 7 requêtes | Temps de génération de la page : Total (SQL) 0.0244s (0.0094s)