Ceci est une ancienne révision du document !


Interfaces

IP NAT MASQUERADE

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.

Installation

Câblage réseau Il va falloir deux interfaces réseaux:

  • 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 reconnaitre 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…

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 3 interfaces dont deux sont identiques.

Ceci 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 connaitre 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.

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.

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.

Vérifications

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

~# /etc/init.d/networking restart

Puis vérifions qu'eth0 est correctement configué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, le masque de sous réseau sont corrects.

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 connaitre :

  • 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.

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

PPPoE ?

Le fichier « pap-secrets »

Editez 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 une 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.

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.
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.

Au final, 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

Vérifications

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.

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

Question subsidiaire

Les clients de notre LAN vont avoir besoin de connaitre 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.

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.

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.

Conclusions

Résumé de la situation

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

  • 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.

Mises en garde

A 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 oeuvre 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