Reseau IP 1

De RotomaLUG.

Frontal web Wiki accueil Les forums La galerie La liste LUG La liste INSTALL PARTY


Ebauche48.png Cet article est une ébauche. Vous êtes invité à le corriger ou le compléter en le modifiant


Sommaire

Introduction aux réseaux IP : Connecter deux machines linux entre elles.

Histoire :

Je dispose de deux machines Linux.

La 1ère se nomme Ernesto (Debian ou Ubuntu) et est connectée à internet via une carte ethernet et une connexion de type FreeBOX, LiveBOX ... Elle récupère sa configuration IP automatiquement sans que ue n'ai eu besoin de la configurer pour cela.

La seconde se nomme Bukowski (Debian ou Ubuntu) et n'est reliée à rien du tout pour le moment mais dispose d'une carte réseau (c'est un ordinateur portable).

Je dispose d'une carte réseau supplémentaire, et d'un hub/switch, ou à défaut un câble croisé.

But :

Connecter Bukowski à Ernesto. - Bukowski devra accéder en SSH, HTTP, FTP à Ernesto. - Bukowski devra également accéder à internet via Ernesto.

Mode opératoire :

Nous allons donc configurer l'ensemble de cette manière :

- Installer une seconde carte réseau dans Ernesto. Ernesto aura donc une carte pour le réseau Internet, et une carte pour le réseau local privé.

- Faire en sorte qu'Ernesto permette à Bukowski d'aller sur internet.

- Héberger un serveur DHCP qui écoutera uniquement sur la carte du réseau local pour configurer automatiquement toutes les machines, que ce soit Bukowski ou une autre, qui voudraient se connecter à internet depuis Ernesto.

Ernesto : la machine "maîtresse"

Pour l'ensemble des manipulations, il faut être "root" soit par "su", soit par "sudo -s".

Installer une seconde carte réseau

Ernesto ne dispose que d'une seule carte réseau Intel Gigabit directement intégrée sur la carte mère. C'est une carte PCI qui est donc découverte très logiquement sous le doux nom de "eth0" .

lspci

 root@ernesto:/# lspci
 02:0c.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 02)

ifconfig

 root@ernesto:/# ifconfig
 eth0    Lien encap:Ethernet  HWaddr 00:0D:56:7E:D4:F0  
         inet adr:80.000.000.00  Bcast:80.00.255.255  Masque:255.255.255.0
         adr inet6: --------------------------------- Scope:Lien
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         Packets reçus:429250 erreurs:0 :0 overruns:0 frame:0
         TX packets:420558 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 lg file transmission:100 
         Octets reçus:419784021 (400.3 MB) Octets transmis:186858054 (178.2 MB)
         Adresse de base:0xdf40 Mémoire:fcfe0000-fd000000 
 lo      Lien encap:Boucle locale  
         inet adr:127.0.0.1  Masque:255.0.0.0
         adr inet6: ::1/128 Scope:Hôte
         UP LOOPBACK RUNNING  MTU:16436  Metric:1
         Packets reçus:1581 erreurs:0 :0 overruns:0 frame:0
         TX packets:1581 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 lg file transmission:0 
         Octets reçus:195729 (191.1 KB) Octets transmis:195729 (191.1 KB)

A ce niveau, Ernesto accède à internet par eth0 qui est automatiquement configurée en DHCP.

Je mets dans la machine une seconde carte réseau PCI de type 3com (3c59x). Au démarrage, je vérifie qu'elle est bien détectée :

 root@ernesto:/# lspci
 02:0c.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 02)
 02:09.0 Ethernet controller: 3Com Corporation 3c905C-TX/TX-M [Tornado] (rev 74)

Et je vérifie qu'elle n'est pas configurée :

 root@ernesto:/# ifconfig
 eth0    Lien encap:Ethernet  HWaddr 00:0D:56:7E:D4:F0  
         inet adr:80.000.000.00  Bcast:80.00.255.255  Masque:255.255.255.0
         adr inet6: --------------------------------- Scope:Lien
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         Packets reçus:429250 erreurs:0 :0 overruns:0 frame:0
         TX packets:420558 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 lg file transmission:100 
         Octets reçus:419784021 (400.3 MB) Octets transmis:186858054 (178.2 MB)
         Adresse de base:0xdf40 Mémoire:fcfe0000-fd000000 
 eth1    Lien encap:Ethernet  HWaddr 00:50:04:EF:5C:12  
         UP BROADCAST MULTICAST  MTU:1500  Metric:1
         Packets reçus:0 erreurs:0 :0 overruns:0 frame:0
         TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 lg file transmission:1000 
         Octets reçus:0 (0.0 b) Octets transmis:0 (0.0 b)
         Interruption:18 Adresse de base:0x6e80 
 lo      Lien encap:Boucle locale  
         inet adr:127.0.0.1  Masque:255.0.0.0
         adr inet6: ::1/128 Scope:Hôte
         UP LOOPBACK RUNNING  MTU:16436  Metric:1
         Packets reçus:23 erreurs:0 :0 overruns:0 frame:0
         TX packets:23 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 lg file transmission:0 
         Octets reçus:1272 (1.2 KB) Octets transmis:1272 (1.2 KB)

eth1 n'est donc pas configurée. Ernesto arrive toujours à se connecter à internet via eth0 et va devoir utiliser eth1 pour activer un serveur DHCP et permettre à ses hôtes de se connecter non seulement à elle mais à internet.

La première chose sera de configurer eth1 pour qu'elle dispose d'une IP fixe.

Configuration de eth1 sur ernesto

La configuration des interfaces réseau sous Debian / Ubuntu et dérivés se fait notamment au moyen d'un fichier texte qui est :

 /etc/network/interfaces

Pour l'éditer, choisissez votre éditeur préféré, je passerai moi par "vi".

 vi /etc/network/interfaces

Pour gagner du temps, je vous livre mon fichier directement modifié pour configurer à la foi eth0 et eth1 :

 # This file describes the network interfaces available on your system
 # and how to activate them. For more information, see interfaces(5).
 # The loopback network interface
 auto lo
 iface lo inet loopback
 # The primary network interface
 auto eth0
 iface eth0 inet dhcp
 # eth1 pour le reseau local
 auto eth1
 iface eth1 inet static
    address 192.168.1.1
    netmask 255.255.255.0
    broadcast 192.168.1.255
    network 192.168.1.0

Ce fichier dit à la machine de 1°) configurer dynamiquement eth0 en adressant une requête DHCP au modem/routeur du fournisseur d'accès internet, et 2°) de configurer en dur eth1 pour lui attribuer l'adresse IP privée 192.168.1.1.

Il ne reste plus qu'à relancer le réseau pour la prise en compte des changements :

 /etc/init.d/networking restart

et à vérifier avec "ifconfig" :

 root@ernesto:/# ifconfig
 eth0    Lien encap:Ethernet  HWaddr 00:0D:56:7E:D4:F0  
         inet adr:80.000.000.00  Bcast:80.00.255.255  Masque:255.255.255.0
         adr inet6: --------------------------------- Scope:Lien
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         Packets reçus:429250 erreurs:0 :0 overruns:0 frame:0
         TX packets:420558 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 lg file transmission:100 
         Octets reçus:419784021 (400.3 MB) Octets transmis:186858054 (178.2 MB)
         Adresse de base:0xdf40 Mémoire:fcfe0000-fd000000 
 eth1    Lien encap:Ethernet  HWaddr 00:50:04:EF:5C:12  
         inet adr:192.168.1.1  Bcast:192.168.1.255  Masque:255.255.255.0
         UP BROADCAST MULTICAST  MTU:1500  Metric:1
         Packets reçus:15 erreurs:0 :0 overruns:0 frame:0
         TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 lg file transmission:1000 
         Octets reçus:2080 (2.0 KB) Octets transmis:2577 (2.5 KB)
         Interruption:18 Adresse de base:0x6e80 
lo      Lien encap:Boucle locale  
        inet adr:127.0.0.1  Masque:255.0.0.0
        adr inet6: ::1/128 Scope:Hôte
        UP LOOPBACK RUNNING  MTU:16436  Metric:1
        Packets reçus:23 erreurs:0 :0 overruns:0 frame:0
        TX packets:23 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 lg file transmission:0 
        Octets reçus:1272 (1.2 KB) Octets transmis:1272 (1.2 KB)

Nous voyons alors que eth0 est configurée avec une IP attribuée par le modem, et que eth1 à bel et bien pris la valeur 192.168.1.1 que nous souhaitions. La configuration du réseau sur Ernesto est terminée. Il reste à installer et à configurer un serveur DHCP qui va écouter sur eth1

DHCP Server

Nous allons installer des paquets supplémentaires de la manière suivante :

 root@ernesto:/# apt-get install dhcp3-server dnsmasq ipmasq

Les paquets installés, nous allons nous rendre dans le fichier de configuration du serveur DHCP pour le configurer et le lancer par la suite. Nous n'allons pas détailler le fichier de configuration ici. Nous allons même déplacer le fichier livré à l'origine pour y mettre directement le notre. Vous pourrez, si vous êtes curieux, ouvrir la sauvegarde de ce fichier plus atrd.

 cd /etc/dhcp3
 mv  dhcpd.conf dhcpd.conf-origine
 vi dhcpd.conf

Dans ce nouveau fichier dhcpd.conf, recopiez ces lignes tel quel :

ddns-update-style none;
ddns-updates off;
deny client-updates;
one-lease-per-client false;
allow bootp;
option T150 code 150 = string;
subnet 192.168.1.0 netmask 255.255.255.0 {
  interface eth1;
   range 192.168.1.2 192.168.1.12;
       option subnet-mask 255.255.255.0;
       option routers 192.168.1.1;
       option domain-name-servers 212.27.54.252, 212.27.53.252, 192.168.1.1;
       default-lease-time 6000;
       max-lease-time 7200;
       option time-offset -3600;
}

Explications rapides :

ddns-update-style none;
ddns-updates off;
deny client-updates;

Il s'agit là des options de Dynamic DNS (le client récupère une adresse IP et va automatiquement inscrire son nom de machine associé à son IP dans un ficher de serveur DNS dynamique). Comme nous ne l'utilisons pas ici, les réglages sont sur Off et n'autorisent pas les clients à faire des updates...

subnet 192.168.1.0 netmask 255.255.255.0 {

Une machine Linux pouvant avoir plusieurs cartes réseau, ou le serveur dhcp pouvant officier sur plusieurs sous réseaux et donner des directives différentes en fonction des machines et de la politique d'accès décidée, il convient de lui indiquer sur quel partie du réseau on souhaite qu'il exerce les les directives suivantes. C'est donc sur le réseau 192.168.1.0 que je lui demande d'agir.

interface eth1;

Ernesto se connecte à internet via eth0. C'est donc eth1 qui va se connecter au réseau local. Le serveur DHCP ne doit alors écouter et répondre aux sollicitations que et uniquement que sur eth1. Cette balise permet de dire au serveur DHCP d'écouter sur cette interface réseau.

range 192.168.1.2 192.168.1.12;

Le serveur DHCP va offrir 11 adresses disponibles, de 192.168.1.2 à 192.168.1.12. Cette dernière valeur peut être augmentée si vous comptez connecter plus de 11 machines derrière votre passerelle, sinon il n'est pas très utile de la dépasser. En revanche, il ne faut pas non plus mettre une fourchette trop basse car en raison des la date de vie des baux, si vous connectiez plusieurs machines différentes dans un court laps de temps, vous risqueriez d'être à court d'adresses disponibles. 11 adresses pour plus ou moins 11 machines, c'est une bonne moyenne.

La 1ère adresse attribuée sera 192.168.1.2, puis 192.168.1.3 etc. 192.168.1.1 n'est pas disponible puisque c'est l'adresse du serveur DHCP...

option subnet-mask 255.255.255.0;
option routers 192.168.1.1;
option domain-name-servers 212.27.54.252, 212.27.53.252, 192.168.1.1;

La machine "cliente" (client par opposition au "serveur") va non seulement recevoir de son serveur DHCP son adresse IP, mais également son masque de sous réseau, son adresse de broadcast, sa passerelle, et les serveurs de noms.

Ici, les 2 premiers serveurs de noms qui apparaissent sont les serveurs de Free.fr. Il y a fort à parier que ces serveurs ne répondent qu'aux sollicitations des clients Free (filtre fait sur la classe d'adresse), vous devrez donc ici remplacer les adresses des serveurs de Free par celles des serveurs de noms (DNS) de votre propre fournisseur. Vous devrez conserver 192.168.1.1 puisque la passrelle (Ernesto) est aussi sensée fait du DNS caching.

       default-lease-time 6000;
       max-lease-time 7200;
       option time-offset -3600;

Ce sont ici les options de TTL (time to live) des baux accordés. Ne modifiez rien ici, cela n'est pas utile.

Si tout est bien écrit (copier / coller, ça devrait le faire), alors il ne reste plus qu'à lancer le serveur DHCP

root@ernesto:/# /etc/init.d/dhcp3-server start
* Starting DHCP server dhcpd3                                                             [ OK ]

Une petite vérification dans /var/log/messages :

root@ernesto:/# tail -f /var/log/messages
Nov  3 21:32:23 ernesto dhcpd: Internet Systems Consortium DHCP Server V3.0.5
Nov  3 21:32:23 ernesto dhcpd: Copyright 2004-2006 Internet Systems Consortium.
Nov  3 21:32:23 ernesto dhcpd: All rights reserved.
Nov  3 21:32:23 ernesto dhcpd: For info, please visit http://www.isc.org/sw/dhcp/

Ou encore :

root@ernesto:/var# cat /var/run/dhcp3-server/dhcpd.pid 
9248

Ça tourne !!!

Un lien utile (je ne l'ai pas trouvé utile mais il est de bonne facture) : http://doc.ubuntu-fr.org/dhcp3-server Il ne reste plus qu'à se tourner maintenant vers la seconde machine "Bukowski".

La liaison physique

Certaines cartes au Gbit savent s'autonégiocier et reconnaitre si elles sont reliées entre elles par des câbles droits ou croisés, et adapter leur fonctionnement en fonction. Nous allons partir du principe que nous avons des cartes peut être anciennes.

Donc, il existe deux solutions :

- les deux cartes, avec deux câbles droits, et un petit switch / routeur / hub pour faire la liaison (ma configuration).

- les deux cartes, reliées en direct entre elle avec un câble "croisé".


Bukowski : le client qui cherche une bonne adresse

Bukowski est un portable, mais cela pourrait tout aussi bien être une station fixe. Elle est basée sur Ubuntustudio, donc sur Ubuntu et fonctionne comme une Debian.

Son fichier de configuration du réseau est /etc/network/interfaces.

Maintenant que tout a été fait du côté d'Ernesto, il ne reste en fait rien à faire sur Bukowski à la condition que sa carte réseau soit configurée pour récupérer une adresse en DHCP :

 cyrille@bukowski:~$ cat /etc/network/interfaces 
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet dhcp

Voilà... Je n'ai qu'à démarrer Bukowski (c'est déjà fait pour accéder au bon fichier) et je regarde le retour de ifconfig

cyrille@bukowski:~$ ifconfig
eth0     Lien encap:Ethernet  HWaddr 00:04:76:51:6F:4F  
         inet adr:192.168.1.12  Bcast:192.168.1.255  Masque:255.255.255.0
         adr inet6: fe80::204:76ff:fe51:6f4f/64 Scope:Lien
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         Packets reçus:1798 erreurs:0 :0 overruns:0 frame:0
         TX packets:1369 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 lg file transmission:1000 
         Octets reçus:2090267 (1.9 MiB) Octets transmis:178772 (174.5 KiB)
         Interruption:10 Adresse de base:0x4c00 
lo       Lien encap:Boucle locale  
         inet adr:127.0.0.1  Masque:255.0.0.0
         adr inet6: ::1/128 Scope:Hôte
         UP LOOPBACK RUNNING  MTU:16436  Metric:1
         Packets reçus:2 erreurs:0 :0 overruns:0 frame:0
         TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 lg file transmission:0 
         Octets reçus:100 (100.0 b) Octets transmis:100 (100.0 b)

J'ai récupéré une adresse délivrée par mon serveur DHCP. Voyons si j'ai de la résolution DNS

cyrille@bukowski:~$ host rotomalug.org
rotomalug.org has address 195.221.21.148
rotomalug.org has IPv6 address 2001:660:7401:213::148
rotomalug.org mail is handled by 5 asso.crihan.fr.
rotomalug.org mail is handled by 0 rotomalug.crihan.fr.

Ça fonctionne. Voyons maintenant si j'accède à internet :

cyrille@bukowski:~$ ping rotomalug.org
PING rotomalug.org (195.221.21.148) 56(84) bytes of data.
64 bytes from rotomalug.crihan.fr (195.221.21.148): icmp_seq=1 ttl=51 time=10.3 ms

Bah voilà. Tout fonctionne. Ma seconde machine Bukowski est connectée à Ernesto sur sa seconde carte réseau, et Ernesto permet à Bukowski de sortir vers internet.

Bukowski peut donc tout aussi accéder à sa passerelle Ernesto :

cyrille@bukowski:~$ ftp 192.168.1.1
Connected to 192.168.1.1.
220 (vsFTPd 2.0.5)
Name (192.168.1.1:cyrille): cyrille
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 

Voilà, je me suis connecté en FTP pur (et en ligne de commandes) sur Ernesto depuis Bukowski.

Côté Ernesto, je vérifie que l'adresse à bien été enregistrée ;

root@ernesto:/# cat /var/log/syslog|grep DHCP
Nov  6 13:22:46 ernesto dhcpd: DHCPDISCOVER from 00:04:76:51:6f:4f via eth1
Nov  6 13:22:47 ernesto dhcpd: DHCPOFFER on 192.168.1.12 to 00:04:76:51:6f:4f (bukowski) via eth1
Nov  6 13:22:47 ernesto dhcpd: Wrote 11 leases to leases file.
Nov  6 13:22:47 ernesto dhcpd: DHCPREQUEST for 192.168.1.12 (192.168.1.1) from 00:04:76:51:6f:4f (bukowski) via eth1
Nov  6 13:22:47 ernesto dhcpd: DHCPACK on 192.168.1.12 to 00:04:76:51:6f:4f (bukowski) via eth1
Nov  6 13:23:00 ernesto dhcpd: DHCPREQUEST for 192.168.1.12 from 00:04:76:51:6f:4f (bukowski) via eth1
Nov  6 13:23:00 ernesto dhcpd: DHCPACK on 192.168.1.12 to 00:04:76:51:6f:4f (bukowski) via eth1

Le serveur enregistre bien les baux.

Reste a installer SSH sur les deux machines et à apprendre à l'utiliser.

Liens connexes

http://www.linux-france.org/article/formation/net.html

http://www.linux-france.org/prj/inetdoc/articles/adressage.ipv4/

http://www.linux-france.org/prj/inetdoc/articles/ethernet/

http://www.commentcamarche.net/internet/ip.php3

http://christian.caleca.free.fr/dhcp/serveur_dhcp.htm

http://www.touslesreseaux.com/tuto/Serveur-DHCP-sous-Linux.html


Cyrille Mortreux 6 novembre 2007 à 13:41 (CET)

Outils personnels