Auto-hébergement et QOS 2/7 : centraliser et NATer les flux sortants

Suite de l’épisode précédent : Auto-hébergement et QOS 1/7 : comment télécharger comme un goret.

« un routeur qui commute des paquets, c’est bête à manger du foin »1

Aujourd’hui on va piquer à la Chine ce qui a fait sa fierté nationale, à savoir « Chinternet » . Parce que bon c’est vrai quoi, nous aussi on a le droit d’avoir un accès Internet bridé, filtré et censuré.

Afin d’atteindre cet objectif, il est nécessaire que tout le trafic réseau (entrant et sortant) passe par la nobox. Je ne vous fais pas un dessin, on va donc instaurer un point unique de centralisation avec tous les effets de bord que cela comporte.

Bref, pour devenir un dictateur en puissance, z’avions deux solutions : remplacer la machinbox par n’importe quel Linux de base (mais ça va se voir) ou gentiment proposer à notre entourage « d’optimiser » leurs paramètres de connexion.

Comme la naïveté l’emporte toujours, il y a fort à parier qu’ils ne remarqueront pas le tout petit changement insignifiant qui consiste à modifier l’adresse IP de leur passerelle par défaut. Après ça, souriez, c’est du billard.

Depuis que ma nobox intercepte les connexions, c’est du fun à tous les étages

On peut modifier la passerelle par défaut de chaque équipement de deux façons : soit à la main (en se cognant le paramétrage sur chaque appareil), soit d’une manière beaucoup plus fourbe en installant un serveur DHCP sur la nobox. (N’oubliez pas ensuite de désactiver le DHCP de la machinbox car sinon ça va être la foire d’empoigne et au final, vous allez vous faire gauler)

La seconde méthode est de loin la plus élégante car la configuration est centralisée, vos « sujets » n’y verront que du feu et on peut assigner des IP fixes tout en réservant un pool d’adresses pour les nouveaux équipements qui voudraient se joindre à la fête.

Et si les « dissidents » au sein de votre joyeux foyer ne jurent que par le WiFi, même pas peur, ça marche aussi. (Pas besoin de configurer un Access Point sur la Nobox)

Activer le NAT sur sa nobox en deux coups de cuillère à pot

(Les exemples qui suivent sont en IPv4 car, mon routeur ne supportant pas l’IPv6, je n’ai pas pris le temps de m’y coller)

On va supposer que votre réseau local est 192.168.1.0/24, que votre machinbox utilise son IP par défaut (192.168.1.1) et enfin que votre nobox a pour adresse 192.168.1.2 sur l’interface eth0.

Généralement, la conf des interfaces réseaux se trouve dans le fichier « /etc/network/interfaces » donc celui de votre nobox devrait ressembler à ça :

auto lo eth0

iface lo inet loopback

iface eth0 inet static
  address 192.168.1.2
  netmask 255.255.255.0
  network 192.168.1.0
  broadcast 192.168.1.255
  gateway 192.168.1.1

Ensuite, pour activer le NAT sur le trafic sortant, c’est tout bête :

#!/bin/bash

echo 1 > /proc/sys/net/ipv4/conf/all/forwarding

iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.0/24 ! -d 192.168.1.0/24 -j SNAT --to-source 192.168.1.2

Hop ! Fin de l’histoire : désormais, tous les paquets à destination d’Internet et qui transiteront par votre nobox seront NATés.

Certains remarqueront qu’il n’est pas nécessaire de NATer le trafic sortant car il suffit juste d’autoriser le noyau à forwarder les paquets pour que cela fonctionne.

C’est vrai mais il y a deux inconvénients :

  1. vous ne verrez pas le trafic entrants car la machinbox va directement renvoyer les paquets vers les postes concernés sans passer par la nobox (donc, forcément, c’est moins drôle)
  2. le module suivi de connexion (/proc/net/ip_conntrack) ne va pas comprendre ce petit manège et vous allez vous retrouver avec tout plein de connexions « UNREPLIED »

Méthode 1 : configuration manuelle des postes que l’on veut filtrer/brider/atomiser

(Pour les Mac je n’en sais rien mais vous devriez trouver facilement)

Sur un poste Linux, on reprend notre fameux fichier « /etc/network/interfaces » qui va cette fois ressembler à ça :

auto lo eth0

iface lo inet loopback

iface eth0 inet static
  address 192.168.1.100
  netmask 255.255.255.0
  network 192.168.1.0
  broadcast 192.168.1.255
  gateway 192.168.1.2

Et sous Windows, on utilisera le clicodrome habituel :

(J’ai supposé que votre serveur DNS préféré est également installé sur la nobox (192.168.1.2) mais chacun est libre)

Bon, voilà, c’était super dur. Voyons maintenant la seconde méthode fourbe, bien plus pratique.

Méthode 2 : installer un serveur DHCP directement sur la nobox

Rappel : on va supposer que votre réseau local est 192.168.1.0/24, que votre machinbox utilise son IP par défaut (192.168.1.1) et enfin que votre nobox a pour adresse 192.168.1.2.

Sous debian (Squeeze) on commencera par un « apt-get install isc-dhcp-server » et ensuite on édite le fichier « /etc/dhcp/dhcpd.conf ».

authoritative;
ddns-update-style none;

default-lease-time 3600;
max-lease-time 14400;

# Pas vraiment utile sauf si vous avez configuré un serveur DNS local
option domain-name "mon-reseau.lan";

# Serveurs DNS : d'abord la nobox, ensuite la machinbox
option domain-name-servers 192.168.1.2, 192.168.1.1;

# Passerelle par défaut : l'IP de la nobox
option routers 192.168.1.2;

# Adresse de broadcast du réseau
option broadcast-address 192.168.1.255;

# Masque du réseau
option subnet-mask 255.255.255.0;

# Pool d'adresses IP à attribuer par défaut
subnet 192.168.1.0 netmask 255.255.255.0 {
  # Plage d'adresse : départ -> fin
  range 192.168.1.200 192.168.1.250;
}

# Adresse IP Fixe pour un premier PC
host machine1 {
  # Adresse MAC de la machine
  hardware ethernet xx:xx:xx:xx:xx:xx;
  # Adresse IP à attribuer
  fixed-address 192.168.1.100;
}

# Adresse IP Fixe pour une seconde machine
host machine2 {
  # Adresse MAC de la machine
  hardware ethernet xx:xx:xx:xx:xx:xx;
  # Adresse IP à attribuer
  fixed-address 192.168.1.101;
}

Pour connaitre les adresse MAC de chaque machine, commencez par leur envoyer un ping depuis la nobox et utilisez ensuite la commande « arp -n » pour récupérer les valeurs.

Désactivez le DHCP sur la machinbox, lancez le serveur DHCP sur la nobox et attendez sagement vos premiers « clients » avec un « tail -f /var/log/daemon.log | grep –line-buffered « dhcpd ».

Et pour le Wifi, ça se passe comment ?

Soit vous installez un Access Point sur la nobox, soit vous utilisez celui de votre machinbox (ou d’un autre routeur Wifi : dans mon cas, l’AP est géré par un WRT54GL)

A partir du moment où vous désactivez le DHCP sur la machinbox, les équipements en Wifi vont quand même se connecter dessus puis envoyer un paquet spécial en broadcast (DHCP DISCOVER) pour récupérer une adresse IP.

Ce paquet sera vu par votre nobox et c’est le serveur DHCP installé sur celle-ci qui va alors répondre. (D’où la nécessité de désactiver le serveur DHCP sur la machinbox)

Maintenant que tout est en place, passons aux choses rigolotes.

Maintenant que je suis le maitre du monde réseau local, on fait quoi ?

C’est vous qui voyez…

iftop et iptraf sont de petits outils qui vous indiqueront l’état du trafic en temps réel.

En installant munin sur la nobox, vous aurez des graphiques tout mignons qui vous montreront jour après jour la bande passante consommée (et bien plus encore).

Avec tcpdump ou dsnif vous pourrez renifler les mots de passe qui transitent en clair (mais c’est mal et vous ne pourrez plus jamais vous regarder dans le miroir).

Revenons à nos moutons : traffic shaping et QOS

Maintenant que le trafic de votre réseau local passe par la nobox, il devient possible de faire du traffic shaping sympathique, car bon, c’était quand même le but de la manoeuvre.

La QOS pourra être appliquée sur les flux sortants (donc vers Internet) mais aussi sur les flux entrants (si, si ! C’est possible).

Dans le prochain billet on va se focaliser sur l’overhead lié à votre connexion ADSL afin de pouvoir paramétrer correctement le packet scheduler retenu.

En attendant, vous trouverez plus d’informations sur le qdisc HTB ici : HTB queuing discipline ou QOS sous Linux avec TC.

A+

  1. Qu’est-ce qu’Internet ? 1/3, à la 37ème minute

Il y a 6 commentaires de gens bizarres, ce sont sûrement des drogués

Oui Jean-Pierre, je souhaite publier un commentaire assassin sur ce blog minable

(Votre adresse email ne sera jamais publiée, divulguée, revendue, broyée, atomisée, etc.)