L'Internet Rapide et Permanent

Connexion à un réseau Haut Débit

Christian Caleca

Vous disposez d'une connexion permanente et rapide… et maintenant, vous êtes perdu dans la technique…

Cette série « L'Internet Rapide et Permanent », que Christian Caleca nous a aimablement autorisés à reproduire, est là pour répondre à quelques-unes de ces questions. Cet article parlera de la réalisation d'une connexion au réseau Haut Débit de votre FAI.

N'hésitez pas à commenter cet article ! Commentez ♪

- Titre : L'Internet Rapide et Permanent

- Auteur : Christian Caleca

- Parution : 3 mars 2009

- Public visé :

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2009 Christian Caleca. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- 1. Introduction

- 1-1. Présentation

- 1-2. Prérequis

- 2. Théorie

- 2-1. Architecture du travail terminé

- 2-1-1. Réseau privé

- 2-1-2. Connexion au FAI

- 2-1-3. Configuration des clients

- 2-1-4. Et après ?

- 2-1-5. Une démonstration…

- 2-2. Le masquage d'adresses

- 2-2-1. Un peu de logique

- 2-2-1-1. L'opération de masquage (ou camouflage)

- 2-2-2. Avantages

- 2-2-3. Inconvénients

- 3. Interfaces

- 3-1. Prérequis

- 3-2. Installation

- 3-2-1. Retrouver ses billes

- 3-3. Configuration Ethernet

- 3-3-1. Côté LAN

- 3-3-1-1. Vérifications

- 3-3-2. Côté modem

- 3-3-2-1. DHCP ?

- 3-3-2-2. PPPoE ?

- 3-3-2-2-1. Le fichier « pap-secrets »

- 3-3-2-2-2. Le fichier « dsl-provider »

- 3-3-2-2-3. Le fichier « interfaces »

- 3-3-3. Vérifications

- 3-3-3-1. DHCP

- 3-3-3-2. PPPoE

- 3-4. Question subsidiaire

- 3-4-1. DHCP

- 3-4-2. PPPoE

- 3-5. Conclusions

- 3-5-1. Résumé de la situation

- 3-5-2. Mises en garde

- 4. Passerelle simple

- 4-1. Netfilter et IPtables

- 4-1-1. Installation

- 4-1-2. Configuration simpliste

- 4-2. Vous croyez que c'est fini ?

- 4-2-1. Rendre ces choses définitives

- 4-2-2. Et la sécurité ?

- 4-2-3. Plus de confort

- 4-2-3-1. Le problème du DNS

- 4-2-3-2. La configuration IP des clients

- 5. Remerciements Developpez

1 - Introduction

1-1 - Présentation

Vous allez apprendre à configurer un serveur LINUX pour connecter un réseau privé à l'Internet par votre belle connexion Haut Débit, qu'elle soit ADSL ou Câble. Bien qu'aujourd'hui les fournisseurs d'accès proposent tous une « box » qui fait office de modem/routeur/borne Wi-Fi, il reste intéressant de réaliser son propre routeur NAT, qui disposera de fonctions bien plus avancées que les « box ».

Comme l'immense majorité des connexions, câble ou ADSL utilisent maintenant PPPoE, il est vivement conseillé de lire d'abord le chapitre sur ce sujet. Tout ceci sera tout de même facile à transposer si votre fournisseur propose une configuration par DHCP.

Comme une passerelle vers l'Internet sur une connexion permanente présente quelques dangers potentiels éventuellement lourds de conséquences :

- indiscrétions dans vos données ou destruction pure et simple de ces dernières ;

- pire, emploi de votre machine comme relais pour d'autres actes de piraterie, situation qui risquerait fort de vous attirer pas mal d'ennuis.

Je vous conseille également de lire le chapitre sur la sécurité, pour avoir un premier aperçu de ce qui risque de vous arriver.

1-2 - Prérequis

Vous savez déjà installer LINUX et vous avez quelques notions des fichiers de configuration, des commandes en ligne, vous savez installer un « package ». Il sera intéressant pour vous de savoir utiliser un éditeur de texte tel que nano qui est d'un emploi facile et propose des options d'édition suffisantes.

Vous disposez d'une connexion Internet. Ce qui est dit ici fonctionne avec tout type de connexion, mais s'appuie sur une connexion de type PPPoE Câble ou ADSL. Alors, n'oubliez pas de lire le chapitre sur PPPoE…

La manipulation proposée est faite sur un PENTIUM 166. La version utilisée dans cet exposé est une Debian etch. Pour la configuration du routage, c'est IPtables qui sera utilisé.

Ce chapitre, juste destiné à montrer combien il est simple de réaliser une passerelle, est à considérer comme une introduction au chapitre suivant : « Netfilter et IPtables », qui vous expliquera plus en détail le fonctionnement du filtrage de paquets et les méthodes de sécurisation de votre passerelle.

2 - Théorie

2-1 - Architecture du travail terminé

Les adresses IP définies sur le schéma sont données à titre d'exemple…

2-1-1 - Réseau privé

Bien entendu, tout fonctionne avec TCP/IP, vous configurez donc votre réseau privé avec des adresses privées. Les réseaux 192.168.xxx.yyy sont des réseaux destinés à cet usage. Ce ne sont pas les seuls, mais comme vous avez peu de chances d'avoir plus de 254 machines sur votre réseau privé, une classe C devrait vous suffire. Vous n'avez déjà rien compris à ce que j'ai raconté ? Alors, vous devriez commencer par lire les chapitres sur TCP/IP(v4) et IP et le Routage…

Sur ce réseau privé, nous trouvons :

- tous vos postes clients (ici 1, 2 et 3) ;

- une interface réseau de votre passerelle GNU/Linux.

Dans notre exemple, l'adresse 192.168.0.0 NE DOIT PAS être utilisée par une machine, elle représente l'adresse du réseau dans son ensemble. De même, l'adresse 192.168.0.255 est réservée au « broadcast ». Pour plus de détails, voir TCP/IP(v4) sur ce site.

2-1-2 - Connexion au FAI

La deuxième carte réseau placée dans le serveur LINUX est directement connectée au modem-câble ou modem ADSL. Généralement, vous n'avez droit qu'à une adresse IP dynamique. C'est votre FAI qui vous la prête pour une durée qui, le plus souvent, ne dépassera pas 24h.

Théoriquement, une connexion par USB devrait aussi faire l'affaire, bien qu'avec les débits actuels, cette connectivité ne soit plus du tout souhaitable. Elle n'est pas traitée ici, mais si vous arrivez à faire fonctionner un modem en USB sous Linux, le reste de ce chapitre est certainement exploitable, avec un minimum d'interprétation.

2-1-3 - Configuration des clients

Les clients (les postes du réseau privé) peuvent être de n'importe quelle nature, pourvu qu'ils disposent d'un OS réseau gérant le protocole TCP/IP.

Il faut donc installer TCP/IP et le configurer de la façon suivante:

- donner une adresse IP fixe dans un réseau privé (192.168.0.x dans notre exemple).

- indiquer comme passerelle par défaut l'adresse IP de la machine LINUX dans le réseau privé (Celle qui est attachée à eth0: 192.168.0.253 dans notre exemple).

- indiquer l'adresse du  DNS de votre fournisseur d'accès (vous pouvez la trouver en faisant un host -v ou encore, un dig sur la machine LINUX). Vous pourrez aussi construire votre propre DNS sur votre machine Linux, comme c'est indiqué dans le chapitre « DNS ».

Cela devrait suffire. Le client PPPoE que nous allons utiliser est suffisamment performant pour résoudre tout seul l'épineux problème du MTU. Voir le chapitre sur PPPoE à ce sujet.

2-1-4 - Et après ?

Après, vous arrivez sur la passerelle de votre FAI. Elle ne fonctionne pas tout à fait comme celle que nous allons monter, mais presque (masquerade en moins, ici, nous avons des « vraies » adresses IP).

Nous n'allons pas ici entrer dans les détails du routage, c'est déjà fait ailleurs sur ce site, mais il faut en parler un petit peu tout de même. Lorsqu'une machine d'un réseau A (par exemple 192.168.0.0) veut communiquer avec une machine d'un réseau B (par exemple 192.168.1.0), même si ces deux machines sont physiquement connectées au même média, elles ne se verront pas. Il faut mettre en place une passerelle entre ces deux réseaux, c'est-à-dire une machine qui a un pied dans chaque réseau, un peu comme votre machine GNU/Linux. En plus, il faudra expliquer à cette machine qu'elle doit établir un passage entre les deux réseaux.

2-1-5 - Une démonstration…

Trace l'itinéraire vers watteau.auteuil.cnrs-dir.fr [193.51.136.4]
avec un maximum de 30 tronçons :

Durée du ping

Nom de la machine

Adresse IP de la machine

1 <10 ms <10 ms <10 ms

LINUX

[192.168.0.253]

2 12 ms 12 ms 13 ms

ca-ol-marseille-1-1.abo.wanadoo.fr

[80.8.128.1]

3 12 ms 12 ms 35 ms

172.19.46.65

[172.19.46.65]

4 11 ms 12 ms 12 ms

GE1-1-811.ncmar301.Marseille.francetelecom.net

[193.252.227.82]

Ce n'est pas la peine d'aller plus loin :

1. Ma passerelle. Elle s'appelle poétiquement LINUX, son IP dans mon réseau: 192.168.0.253 ;

2. La 1° passerelle du FAI, je ne parle pas de son nom, son IP: 80.8.128.1 ;

3. La Passerelle de sortie du FAI: 172.19.46.65.

La route complète aurait pu être tracée, nous aurions vu alors toutes les passerelles d'interconnexions de réseaux. Vous ferez la manip. vous-même :

- tracert <nom de la machine> sous Windows (console) ;

- traceroute <nom de la machine> sous LINUX.

2-2 - Le masquage d'adresses

(Encore appelé « camouflage d'adresses ».)

2-2-1 - Un peu de logique

Nous devons être quelques millions dans le monde (et peut-être plus…) à utiliser les mêmes classes privées, elles sont faites pour ça ! Ces adresses ne transitent JAMAIS sur l'Internet. Mais alors, comment faire? C'est l'objet de la fonction de masquage, appelée MASQUERADE chez LINUX. Génériquement, c'est du NAT (Network Address Translation), associé à du PAT (Port Address Translation). Par extension, on parle systématiquement de NAT.

2-2-1-1 - L'opération de masquage (ou camouflage)

1. Récupère votre socket,

2. Remplace votre adresse IP par la sienne, côté extérieur

3. Remplace votre port de réponse X par un qu'il choisit lui-même (Y)

4. Tient à jour une table avec votre socket et le numéro de port Y.

5. Transmet la requête à votre place, avec le socket qu'il a construit.

6. Récupère la réponse sur son port Y.

7. Remet dans la réponse votre adresse à la place de la sienne.

8. Vous transmet la réponse sur votre port X.

Simple non ?

2-2-2 - Avantages

- Votre machine est inaccessible directement depuis l'Internet puisque votre IP est inconnue, seule celle du camoufleur est visible.

- Vous n'avez besoin que d'une seule IP “officielle”, celle fournie par votre FAI, pour accéder à l'Internet depuis toutes les machines de votre réseau privé.

- L'opération est complètement transparente pour le client de votre réseau privé, il suffit de configurer correctement votre pile IP. (adresse IP interne, masque de sous-réseau qui, dans notre cas serait 255.255.255.0, et adresse du DNS de votre FAI pour avoir la résolution des noms).

2-2-3 - Inconvénients

Mais en est-ce un ? Votre machine est inaccessible (par IP) directement depuis l'Internet puisque votre IP est inconnue, seule celle du camoufleur est visible. Vous ne pouvez donc pas placer un serveur derrière votre passerelle, du moins pas très simplement. Des solutions existent cependant, comme nous le verrons avec Netfilter.

Attention toutefois, cette protection ne vous met pas à l'abri de toutes les formes d'intrusions. Si un malveillant ne peut accéder directement par IP à votre poste de travail, il peut toujours arriver à vous faire installer une « porte dérobée » par un moyen ou un autre, qui lui donnera tout de même l'accès à votre machine. Mais pour intéressante que soit cette question, elle ne fait pas partie du sujet qui nous occupe ici.

3 - Interfaces

3-1 - Prérequis

Votre réseau privé est déjà installé, les postes disposent de leur adresse IP et ont un nom de machine. Le réseau est testé et tout fonctionne. (Nous supposerons que les clients sont sous Windows, toutes versions confondues. Si ce n'est pas le cas, il vous faudra traduire). Nous supposerons que le modem est utilisé avec une connexion Ethernet. C'est aussi possible d'utiliser USB, mais plus compliqué, surtout sur Linux, à cause des difficultés à trouver les drivers du modem.

3-2 - Installation

Il va falloir deux interfaces réseau :

- l'une pour vous connecter à l'Internet via le modem ;

- l'autre pour vous connecter à votre réseau privé. (N'oublions pas que nous sommes en présence de deux réseaux distincts et que nous voulons faire une passerelle entre les deux).
Note pour les bricoleurs :
Un bricolage sordide permet de tout faire avec une seule interface, Linux permettant de faire du « multihosting », c'est-à-dire permettant d'attribuer deux IP différentes à la même interface. Amusant, mais pas très utile.

Nous allons installer deux interfaces Ethernet dans notre future passerelle, afin de disposer de deux nœuds eth0 et eth1. Une difficulté éventuelle sera de savoir qui sera eth0 et qui sera eth1. Les distributions « modernes » savent reconnaître automatiquement les interfaces et leur attribuer un nom. C'est le gestionnaire de périphériques udev qui se charge de l'affaire. Comme c'est automatique, ça se passe dans votre dos…

3-2-1 - Retrouver ses billes

La commande lspci vous indiquera où sont placées les interfaces réseau sur votre bus PCI :

~# lspci
00:00.0 Host bridge: Intel Corporation 430VX - 82437VX TVX [Triton VX] (rev 01)
00:07.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II] (rev 01)
00:07.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II]
00:09.0 Ethernet controller: Accton Technology Corporation SMC2-1211TX (rev 10)
00:0a.0 Ethernet controller: Accton Technology Corporation SMC2-1211TX (rev 10)
00:0b.0 Ethernet controller: 3Com Corporation 3c905C-TX/TX-M [Tornado] (rev 74)

Ici nous sommes servis, il y a trois interfaces dont deux sont identiques.

Cela est bien beau, mais ne nous dit pas comment ces interfaces sont appelées par le système. Nous devons trouver les informations fournies par udev.

Nous sommes sur Debian etch, ce que nous cherchons se trouve dans le fichier /etc/udev/rules.d/z25_persistent-net.rules :

~# cat /etc/udev/rules.d/z25_persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program, probably run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single line.
# MAC addresses must be written in lowercase.

# PCI device 0x1113:0x1211 (8139too)
SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:00:e8:8e:cb:b7", NAME="eth0"

# PCI device 0x1113:0x1211 (8139too)
SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:10:b5:4d:55:a0", NAME="eth1"

# PCI device 0x10b7:0x9200 (3c59x)
SUBSYSTEM=="net", DRIVERS=="?*", ATTRS{address}=="00:50:da:07:dc:76", NAME="eth2"

Notez deux choses :

- il existe une relation entre le nom attribué à l'interface et le module utilisé pour la gérer ; 139too pour eth0 et eth1, 3c59x pour eth2 ;

- il existe également une relation entre le nom attribué à l'interface et son adresse MAC.

Cet exemple nous montre clairement que si nous utilisons plusieurs interfaces de même type, donc utilisant le même module pour leur gestion, le seul moyen de s'y retrouver est de connaître l'adresse MAC de chaque interface. Une bonne pratique est donc de noter cette adresse, normalement indiquée sur la carte, avant de la monter dans la boite.

3-3 - Configuration Ethernet

Nous allons procéder par étapes, en configurant d'abord l'interface côté LAN.

S'il existe un domaine où les distributions GNU/Linux diffèrent grandement entre elles, c'est bien dans la configuration du réseau. Nous sommes avec Debian, où tout se passe dans /etc/network/interfaces. Pour d'autres distributions, il vous faudra adapter.

3-3-1 - Côté LAN

Nous écrivons dans /etc/network/interfaces :

auto eth0
iface eth0 inet static
address 192.168.0.253
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255

Nous aurons ainsi eth0 configuré de façon statique, pour notre réseau local.

Notez qu'il n'est pas indiqué de passerelle par défaut gateway. Cette information devra venir du côté configuré par notre fournisseur d'accès.

3-3-1-1 - Vérifications

Commençons par redémarrer le réseau :

~# /etc/init.d/networking restart

Puis vérifions qu'eth0 est correctement configurée :

~# ifconfig eth0
eth0      Lien encap:Ethernet  HWaddr 00:20:18:2D:D2:91
inet adr:192.168.0.253  Bcast:192.168.0.255  Masque:255.255.255.0
...

Constatez que l'IP et le masque de sous-réseau sont corrects.

3-3-2 - Côté modem

Il nous faut connecter eth1 au modem. Pour la configuration IP, nous avons deux cas de figure, suivant que notre fournisseur a choisi d'utiliser DHCP ou PPPoE. Ces deux méthodes ne sont pas du tout comparables.

Le premier cas considère que vous êtes sur un réseau Ethernet (comme sur votre LAN) et votre configuration sera fournie grâce au protocole DHCP. Il n'y a pas dans ce cas d'identification du client (rassurez-vous, elle est faite autrement). Le fournisseur Free par exemple, utilise cette méthode.

Le second cas, le plus fréquent, établit un lien ppp entre vous et un équipement de votre fournisseur. Cette méthode ressemble beaucoup à ce qu'il se fait avec un modem téléphonique simple, mais ici, le lien ppp est construit sur la couche Ethernet. PPPoE utilise RADIUS pour :

- authentifier le client ;

- lui fournir sa configuration IP.

Configurer une connexion ppp est un peu moins simple, puisque déjà, il nous faut connaître :

- le nom d'utilisateur qui nous a été attribué par le fournisseur (quelque chose du genre fti/epikoi@fti par exemple, pour Orange) ;

- le mot de passe, également attribué par notre fournisseur.

Il y aura également trois fichiers à modifier sans se tromper…

Sous Debian Etch, il y a un utilitaire : pppoeconf (à installer éventuellement) qui aidera à opérer. Nous allons tout de même voir rapidement ce qu'il y a à faire.

3-3-2-1 - DHCP ?

Dans ce cas c'est facile, il suffit d'ajouter dans /etc/network/interfaces le paragraphe suivant :

auto eth1
iface eth1 inet dhcp

Au total, vous devriez avoir dans /etc/network/interfaces

auto eth0
iface eth0 inet static
address 192.168.0.253
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255

auto eth1
iface eth1 inet dhcp

N'oublions pas de relancer le réseau de relancer le réseau :

/etc/init.d/networking restart

3-3-2-2 - PPPoE ?

3-3-2-2-1 - Le fichier « pap-secrets »

Éditez le fichier /etc/ppp/pap-secrets pour y placer les informations d'identification données par le fournisseur d'accès. Ce fichier est de la forme :

"<nom d'utilisateur>"  "<domaine>"  "<mot de passe">

Le domaine sera avantageusement remplacé par un astérisque *. Exemple :

"fti/epikoi@fti" * "password"

Dans certains cas, un fichier identique, mais nommé /etc/ppp/chap-secrets pourra être nécessaire. Son contenu est exactement le même.

3-3-2-2-2 - Le fichier « dsl-provider »

Le fichier /etc/ppp/peers/dsl-provider installé par défaut contient beaucoup de commentaires explicatifs. Il y a deux lignes qu'il faut modifier :

user "fti/3fdyg6v@fti"
pty "/usr/sbin/pppoe -I eth1 -T 80 -m 1452"

- la ligne user doit contenir le nom d'utilisateur tel qu'écrit dans pap-secrets ;

- la ligne pty doit être modifiée en fonction de l'interface connectée au modem (ici eth1).

Au total, nous devrions avoir un fichier proche de ceci :

~# cat /etc/ppp/peers/dsl-provider
user "fti/epikoi@fti"
pty "/usr/sbin/pppoe -I eth1 -T 80 -m 1452"
noipdefault
defaultroute
hide-password
lcp-echo-interval 60
lcp-echo-failure 3
connect /bin/true
noauth
persist
mtu 1492
noaccomp
default-asyncmap

Je vous laisse retrouver par vous-même la signification exacte des divers paramètres. Notons tout de même :

- defaultroute qui permettra de placer automatiquement la route par défaut sur cette connexion ;

- mtu 1492 qui évitera une fragmentation toujours peu souhaitable. Voir les détails sur le fonctionnement de PPPoE.

3-3-2-2-3 - Le fichier « interfaces »

Nous devons ajouter dans /etc/network/interfaces les lignes suivantes :

auto ppp0
iface ppp0 inet ppp
provider dsl-provider

Notez que dans le cas de PPPoE, le lien ppp se faisant sur Ethernet, l'interface eth1 n'a pas besoin d'être configurée au niveau IP. Vous n'aurez besoin de configurer au niveau IP que si votre modem propose un accès IP pour sa configuration, ou simplement pour la lecture de son état, mais cette configuration IP n'est absolument pas nécessaire à PPPoE.

Finalement, vous devriez avoir dans /etc/network/interfaces :

auto eth0
iface eth0 inet static
address 192.168.0.253
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255

auto ppp0
iface ppp0 inet ppp
provider dsl-provider

3-3-3 - Vérifications

3-3-3-1 - DHCP

Les interfaces :

~# ifconfig
eth0      Lien encap:Ethernet  HWaddr 00:20:18:54:5A:E9
inet adr:192.168.0.253  Bcast:192.168.0.255  Masque:255.255.255.0
...
...

eth1      Lien encap:Ethernet  HWaddr 00:50:DA:07:DC:76
inet adr:82.243.80.13  Bcast:82.243.80.255  Masque:255.255.255.0
...

Les routes :

~# route -n
Table de routage IP du noyau
Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
82.243.80.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1
0.0.0.0         82.243.80.254   0.0.0.0         UG    0      0        0 eth1

Traceroute pour voir :

:~# traceroute -n mir1.ovh.net
traceroute to mir1.ovh.net (213.186.33.37), 30 hops max, 40 byte packets
1  82.243.80.254  37.080 ms  36.893 ms  36.931 ms
2  213.228.20.254  37.204 ms  47.425 ms  37.225 ms
...
9  213.186.33.37  48.645 ms  48.504 ms  50.597 ms

Nous identifions bien la passerelle par défaut, aussi bien dans la table des routes que dans le traceroute.

3-3-3-2 - PPPoE

Les interfaces :

~# ifconfig
eth0      Lien encap:Ethernet  HWaddr 00:20:18:54:5A:E9
inet adr:192.168.0.253  Bcast:192.168.0.255  Masque:255.255.255.0
...
...

ppp0      Lien encap:Protocole Point-à-Point
inet adr:82.127.57.95  P-t-P:193.253.160.3  Masque:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1
...

Les routes :

~# route -n
Table de routage IP du noyau
Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
193.253.160.3   0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
0.0.0.0         0.0.0.0         0.0.0.0         UG    0      0        0 ppp0

Notez surtout que la route du LAN est sur eth0 et la route par défaut est bien sur ppp0

Traceroute, pour voir :

~# traceroute -n mir1.ovh.net
traceroute to mir1.ovh.net (213.186.33.37), 30 hops max, 40 byte packets
1  193.253.160.3  52.392 ms  53.781 ms  53.367 ms
2  80.10.215.249  54.146 ms  53.199 ms  52.268 ms
...
11  213.186.33.37  53.750 ms  55.160 ms  53.864 ms

Notez que dans cet exemple, nous retrouvons l'adresse 193.253.160.3 dans la route où mène ppp0 et comme premier « hop » dans le traceroute. Un lien ppp n'a que deux bouts, il ne relie que deux nœuds entre eux. Dans cet exemple, il relie 82.127.57.95 à 193.253.160.3 (ce que nous savions déjà grâce à la commande ifconfig qui, pour ppp0, nous a donné :

inet adr:82.127.57.95  P-t-P:193.253.160.3  Masque:255.255.255.255

3-4 - Question subsidiaire

Les clients de notre LAN vont avoir besoin de connaître des adresses de DNS. DHCP comme PPPoE fournissent ces informations, mais elles ne seront pas communiquées aux clients du LAN. Il faut pour l'instant savoir les retrouver.

3-4-1 - DHCP

Si nous utilisons le client par défaut de Debian qui est dhclient, il écrit tout dans les logs /var/lib/dhcp/dhclient.eth1.leases :

# cat /var/lib/dhcp/dhclient.eth1.leases
...
lease {
interface "eth1";
fixed-address 82.243.80.13;
server-name ".dslg.proxad.net";
option subnet-mask 255.255.255.0;
option routers 82.243.80.254;
option domain-name-servers 212.27.54.252,212.27.53.252;
option broadcast-address 82.243.80.255;
option dhcp-lease-time 604800;
option dhcp-message-type 5;
option dhcp-server-identifier 82.243.80.254;
renew 1 2008/5/26 20:46:25;
rebind 4 2008/5/29 11:46:25;
expire 5 2008/5/30 08:46:25;
}

Ici, nous avons deux DNS : 212.27.54.252 et 212.27.53.252. Il nous suffit de renseigner nos clients avec ces informations qui normalement ne changent que très rarement, voire jamais.

3-4-2 - PPPoE

Ici, c'est ppp qui laisse des traces dans /etc/ppp/resolv.conf :

# cat /etc/ppp/resolv.conf
nameserver 80.10.246.1
nameserver 80.10.246.132

Deux DNS: 80.10.246.1 et 80.10.246.132 à indiquer à nos clients.

3-5 - Conclusions

3-5-1 - Résumé de la situation

Vous disposez maintenant d'une machine qui possède deux connexions réseau :

- l'une: Eth0 sur votre réseau privé, protocole TCP/IP, la pile est configurée manuellement, en fonction de vos paramètres de réseau ;

- l'autre peut paraître un peu plus complexe et nous sommes allés tellement vite qu'il faudrait maintenant faire le point.

- Eth1 est, comme son nom l'indique, une interface Ethernet. Elle ne sert à rien d'autre d'important qu'à supporter la connexion PPP over Ethernet vers votre fournisseur d'accès. En aucun cas, la configuration IP de cette interface n'est utilisée pour accéder à l'Internet.
Je sais que ce n'est pas facile à comprendre, mais lorsque vous aurez tout compris de ce qui est dit sur ce site, vous n'aurez plus de difficultés.
PPPoE c'est, répétons-le, du Point to Point Protocol over Ethernet, la couche IP que l'on peut ajouter par dessus ne sert à rien pour PPPoE. Elle ne sert éventuellement qu'à une chose : permettre d'accéder au serveur HTTP situé dans le modem. Si vous n'avez rien à faire de cette fonctionnalité, vous pouvez vous contenter de définir votre carte Ethernet, sans lui attribuer d'adresse IP ni de masque de sous réseau, ça n'empêchera absolument pas PPPoE de fonctionner par dessus.

- ppp0, en revanche, est un lien ppp monté par rp-pppoe lorsque la session est ouverte. Ce lien dispose d'une adresse IP dynamique, fournie par votre FAI, selon un principe proche de DHCP, mais ce n'est pas DHCP, c'est un serveur d'accès distant de type RADIUS. Tout ça est expliqué en détail dans le chapitre sur PPPoE (peut-être l'avez-vous déjà lu ?).
Ce lien ppp0, qui n'existe que lorsqu'une session PPPoE a été ouverte avec succès, présente donc :

- une adresse IP dynamique (renouvelable à chaque session PPPoE, session qui ne dépasse pas, en général, 24h) ;

- un masque de sous-réseau ;

- une adresse de passerelle par défaut pour les connexions hors du réseau de votre FAI ;

- deux adresses de DNS pour la résolution des noms.

3-5-2 - Mises en garde

À ce stade, même si votre machine LINUX est connectée aux deux réseaux, elle ne fonctionnera pas encore en tant que passerelle pour votre réseau privé. Il faut encore :

- mettre en œuvre le système de “masquerading” sur la machine LINUX ;

- vous assurer que tous vos postes du réseau privé sont correctement configurés :

- une IP dans la même classe (192.168.0.0 dans notre exemple), mais toutes différentes,

- un masque de sous réseau convenable, 255.255.255.0 dans l'exemple,

- la passerelle par défaut pointant sur votre machine Linux (192.168.0.253 dans l'exemple),

- au moins un DNS, le premier des deux que votre FAI vous propose (voir plus haut). Attention, le FAI peut être amené à changer de DNS. Votre machine Linux en sera automatiquement informée, mais pas les clients de votre réseau. Si vous en restez là, il sera de votre responsabilité de vérifier périodiquement que le DNS n'a pas changé. D'ailleurs, vous vous apercevrez vite que quelque chose ne va plus…

Tout ce que vous pouvez faire pour l'instant, c'est :

- vous connecter à l'Internet depuis votre machine LINUX

- envoyer des pings depuis votre machine LINUX vers :

- votre réseau privé (avec les adresses IP, nous n'avons pas mis en place de résolutions de noms pour le réseau privé),

- l'Internet. Ici, le DNS du FAI saura, en principe, résoudre les noms.

Ne vous attendez pas à “voir” la machine LINUX dans votre voisinage réseau Windows! LINUX n'utilise pas NetBIOS. Si vous voulez le faire, il vous faudra installer SAMBA sur LINUX, qui crée une couche de dialogue avec NetBIOS, mais ceci est une autre histoire… Si vous voulez le faire et ne savez pas comment, consultez au moins le SMB HOWTO, mais ne faites pas tout en même temps.

4 - Passerelle simple

Comme je suis prof depuis assez longtemps pour avoir compris qu'il n'y a rien de plus frustrant que de se taper des heures de théorie avant de pouvoir passer, enfin, à la pratique, nous allons d'abord réaliser vite fait une passerelle opérationnelle. Sommaire, rudimentaire, mais opérationnelle.

Après, nous verrons plus en détail comment tout ceci fonctionne.

4-1 - Netfilter et IPtables

4-1-1 - Installation

Netfilter, c'est le système de filtrage des paquets. C'est lui qui va permettre de réaliser le routage dans de bonnes conditions. Les bonnes distributions l'intègrent sous forme de modules.

IPtables, c'est en quelque sorte l'interface qui permet de configurer Netfilter. Là, il vous faudra vérifier que le paquetage iptables est bien installé, ce qui est maintenant unanimement le cas.

4-1-2 - Configuration simpliste

Dans la suite, ne confondez pas le script /etc/init.d/iptables avec /sbin/iptables, qui est un exécutable.

Incantation magique

Signification

iptables -t nat -À POSTROUTING -o ppp0 -j MASQUERADE

On applique le « masquerading » sur tout ce qui doit sortir par ppp0

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

On déverrouille le « forwarding », autrement dit, on active le routage.

Et voilà. La passerelle fonctionne. Assurez-vous d'abord que votre connexion PPPoE est bien active, par exemple en faisant un

ifconfig ppp0

qui doit vous indiquer que cette interface est bien montée. Si ce n'est pas le cas, commencez par arriver à obtenir ce lien.

4-2 - Vous croyez que c'est fini ?

4-2-1 - Rendre ces choses définitives

Les règles iptables sont volatiles. Si vous redémarrez votre machine, il faudra les réécrire. Pour éviter ce désagrément, une fois vos règles établies, créez un répertoire /etc/iptables et utilisez la commande iptables-save pour créer un fichier contenant vos règles :

~# mkdir /etc/iptables
~# iptables-save > iptables-active

Si nous regardons ce que nous avons dans /etc/iptables/iptables-active :

:~# cat /etc/iptables/iptables-sactive
# Generated by iptables-save v1.3.8 on Fri May 23 19:13:20 2008
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [4:228]
:OUTPUT ACCEPT [4:228]
-À POSTROUTING -o ppp0 -j MASQUERADE
COMMIT
# Completed on Fri May 23 19:13:20 2008
# Generated by iptables-save v1.3.8 on Fri May 23 19:13:20 2008
*filter
:INPUT ACCEPT [45334:56750206]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [33598:2416238]
COMMIT
# Completed on Fri May 23 19:13:20 2008

Ce n'est pas tout, il nous faudra aussi ajouter la ligne :

pre-up iptables-restore < /etc/iptables/iptables-active

Dans /etc/network/interfaces à la configuration de l'interface connectée au modem (eth1 ou ppp0 suivant le cas). Exemple :

auto eth0
iface eth0 inet static
address 192.168.0.253
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255

auto ppp0
iface ppp0 inet ppp
provider dsl-provider
pre-up iptables-restore < /etc/iptables/iptables-active

Pour être tout à fait propre, il faudrait également ajouter la ligne :

post-down iptables -t nat -F

Pour vider la table nat lorsque ppp0 (ou eth1) est désactivée. Ce qui donne finalement :

auto eth0
iface eth0 inet static
address 192.168.0.253
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255

auto ppp0
iface ppp0 inet ppp
provider dsl-provider
pre-up iptables-restore < /etc/iptables/iptables-active
post-down iptables -t nat -F

Le déverrouillage du « forwarding » est également volatile par défaut. Pour remédier à ce problème :

- éditez le fichier /etc/sysctl.conf ;

- ajoutez à ce fichier la ligne :
net.ipv4.ip_forward=1.

Au prochain redémarrage, vous devriez retrouver la valeur 1 dans /proc/sys/net/ipv4/ip_forward :

:~# cat  /proc/sys/net/ipv4/ip_forward
1

4-2-2 - Et la sécurité ?

Votre passerelle fonctionne, certes, mais c'est un vaste trou béant au sens de la sécurité. Pour faire quelque chose de propre, il vous faudra lire le chapitre sur la sécurité et aussi celui sur Netfilter, pour comprendre mieux ce qu'il y a à faire.

Dans l'état actuel des choses, vous être fortement exposé à toutes sortes d'ennuis…

4-2-3 - Plus de confort

4-2-3-1 - Le problème du DNS

Sur vos postes du réseau privé, vous devez indiquer « en dur » l'adresse IP des DNS de votre FAI. Ce n'est pas pratique, parce qu'ils peuvent la changer sans vous le dire. Il vaut mieux installer sur votre passerelle un service DNS qui pourra soit résoudre les noms directement par lui-même, soit servir de proxy DNS, c'est-à-dire retransmettre au DNS de votre FAI les requêtes de résolution que vous lui adresserez.

Dans ce cas, vous indiquerez sur vos clients l'adresse de votre passerelle pour le DNS et c'est elle qui se chargera de vous communiquer les résolutions.

À vous de voir ce qui vous convient le mieux. Normalement, un proxy DNS est suffisant. Vous pouvez faire ça assez simplement avec BIND. Lisez le chapitre consacré au DNS pour en savoir plus.

4-2-3-2 - La configuration IP des clients

Configurer ses clients du réseau privé à la main, c'est bien, mais c'est vite fastidieux si vous en avez beaucoup. Il existe une possibilité de faire ça automatiquement au démarrage de vos machines en utilisant les services de DHCP. Vous pouvez aussi installer un serveur DHCP sur votre passerelle. C'est vraiment du luxe pour un petit réseau domestique, mais comme ce luxe ne vous coûtera rien de plus que de lire le chapitre sur DHCP…

Mais, avant tout, pensez d'abord à la sécurité et passez à Netfilter au plus vite.

5 - Remerciements Developpez

Vous pouvez retrouver l'article original ici : L'Internet Rapide et Permanent. Christian Caleca a aimablement autorisé l'équipe « Réseaux » de Developpez.com à reprendre son article. Retrouvez tous les articles de Christian Caleca sur cette page.

Nos remerciements à ced pour sa relecture orthographique.

N'hésitez pas à commenter cet article ! Commentez