ToutSurTout.biz
Monter son propre routeur pour booster sa connexion


Transformer un NAS homemade (vieux PC etc) en routeur pour diminuer son ping de 25-50% et maximiser ses débits de façon stable (car une box est toujours moins puissante qu'un PC).
Cette méthode permet également de faire face à des attaques externes de type flood.
Il faudra aussi utiliser les derniers kernel dispo (>= 3.2), car ils sont plus performants pour gérer du trafic réseau.

Prérequis :
- Mettre sa box en mode bridge (elle ne sera plus qu'un simple modem). Attention, cette opération coupe les services annexes (TV, téléphone).
- Contrairement aux autres tutos, on n'aura besoin que d'une seule carte réseau.
- On branche tout le réseau sur le même switch : box, NAS/routeur, autres PC
- On fixe des IPs sur les autres PC (à partir de 192.168.0.2, netmask de 255.255.255.0, gateway sur 192.168.0.1, dns sur 8.8.8.8).
- Debian.

Etape 1 : nouvelle interface réseau
Une carte réseau physique peut supporter une multitude d'interfaces différentes (donc IP différentes). Nous allons garder "eth0" pour l'Internet et créer un "eth0:0" pour le réseau privé.
Ouvrez /etc/network/interfaces et modifier les lignes comme ci-dessous (en laissant "lo" tel quel).

# The primary network interface
auto eth0
iface eth0 inet dhcp

auto eth0:0
iface eth0:0 inet static
    address 192.168.0.1
    network 192.168.0.0
    netmask 255.255.255.0
    broadcast 192.168.0.255

Donc l'eth0 recevra une IP par DHCP attribuée par le FAI. Pour notre réseau interne, nous allons attribuer manuellement l'IP 192.168.0.1, celle que nous avons mis en passerelle sur les autres PC. Ces derniers savent déjà que pour accéder à un autre réseau extérieur (autre que 192.168.0.xxx), ils doivent demander ça à 192.168.0.1.

Remarque : même si les autres PCs sont reliés physiquement au modem, ils sont totalement inaccessibles, car ils ne sont pas dans le même réseau, à condition d'avoir fixer une IP interne.

Redémarrez la gestion du réseau avec :

/etc/init.d/networking restart

Cette opération met plus de temps que d'habitude, c'est normal. Il faut que votre routeur demande l'IP publique à votre FAI.

Etape 2 : activer le routage
Par défaut, tous les paquets que reçoit votre routeur qui ne lui sont pas destinés... il les jette ! Il faut dire au noyau de regarder dans sa table de routage pour savoir où acheminer les paquets qui ne sont pas pour lui.
Modification à chaud :

echo 1 > /proc/sys/net/ipv4/ip_forward

Modification persistante (redémarrage) : décommentez la ligne "net.ipv4.ip_forward = 1" dans /etc/sysctl.conf

Etape 3 : table de routage
Normalement, il n'y a rien à faire. Votre routeur est déjà configuré pour joindre les deux réseaux. Faites un ping sur Google et un ping sur un ordinateur de votre réseau interne : les pings répondent !

A ce stade, si vous lancez un navigateur sur un autre ordinateur, allez sur Google et la page ne s'affiche pas. C'est normal, le routage fonctionne bien, les paquets vont bien sur l'Internet... mais avec une IP interne ! Impossible donc de gérer le retour des informations.

Etape 4 : modifier les paquets avec l'IP publique
IpTables, le firewall, va nous permettre de tricher sur les paquets. Exécutez donc cette commande :

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE

Nous allons demander à IpTables, une fois le routage terminé (postrouting) de "masquer" toutes les IPs internes par la sienne. De plus iptables se souvient également comment réaffecter l'adresse IP interne pour tous les paquets arrivent avec son IP.

A ce stade, le routage fonctionne parfaitement ! Les pages s'affichent. Mais notre routeur est encore une vraie passoire.

Etape 5 : bloquer tout le trafic entrant.
Nous allons exécuter ces commandes successivement :

iptables -A INPUT --source 192.168.0.0/24 -j ACCEPT

On autorise tous les ordis interne à communiquer directement avec le serveur (partages de fichiers SAMBA, imprimante...).

iptables -A INPUT --dport 6881 -j ACCEPT

On autorise le trafic BitTorrent d'où qu'il vienne (Internet) en TCP&UDP.

iptables -A INPUT -i lo -j ACCEPT

Le routeur a besoin de communiquer avec lui-même.

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Dès lors que notre routeur établit une connexion de lui-même, on autorise le retour des informations.

iptables -P INPUT DROP

On coupe les vannes si les règles ci-dessus ne sont pas satisfaites.


Etape 6 : les tests
Alors, il n'est pas tellement possible de benchmarker un routeur, c'est assez difficile. Cependant, je peux vous conseiller de lancer un torrent Linux (qui ont énormément de peers), de débrider le nbre de connexions (genre 100, vous le poussez à 9999). Admirez la vitesse à laquelle votre serveur accroche les peers. ^^


Pistes et améliorations :
- Coupler l'eth0:0 avec un wlan0 pour n'avoir qu'un seul réseau internet à la fois filaire et wireless (attention, il faut une clé WiFi compatible AP/Station mode pour émettre son propre réseau, telle une box).
- Foutre un DNS relai sur le serveur pour booster les requêtes DNS
- Supprimer 50% des TCP/ACK pour booster les débits.

Tuto réalisé par Optix (Membre qualifié non inscrit sur TST).
Merci à lui pour son partage de connaissances.