====== Interfaces ====== ===== 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 ===== {{ :masquerade:cablage.png?300|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 [[http://www.free.fr|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 [[http://www.orange.fr|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 : "" "" " 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 [[http://www.freenix.org/unix/linux/HOWTO/SMB-HOWTO.html|SMB HOWTO]], mais ne faites pas tout en même temps