Debian - Transformer votre serveur Linux en routeur et en serveur DHCP

Page 1 / 1

Lorsque vous travaillez dans une entreprise, il est courant d'utiliser un serveur (sous Windows Server ou sous Linux) comme routeur, notamment pour effectuer du filtrage ou pour une autre raison.
Ensuite, lorsque l'on crée une passerelle, on installe aussi un serveur DHCP pour distribuer automatiquement les adresses IP aux PC clients. Ceci peut être effectué avec un périphérique physique ou via un programme installé sur un serveur.

Dans notre cas, notre serveur Linux servira de passerelle (routeur) et de serveur DHCP.

Configuration utilisée :
- un serveur sous Linux (Debian 7.7.0 x64) avec 2 cartes réseau. La 1ère connectée sur le réseau WAN (externe) et la 2ème sur le réseau LAN (interne).
- un client sous Windows, Linux ou autre. Dans notre cas, nous avons utilisé un PC sous Windows 7.

  1. Configuration des interfaces réseau
  2. Installer et configurer un serveur DHCP
  3. Attribuer une adresse IP fixe à une machine
  4. Transformer votre serveur Linux en routeur
  5. Routage de ports
  6. Test de la configuration

1. Configuration des interfaces réseau

Pour commencer, vous devez configurer les 2 interfaces réseau (carte réseau) de votre serveur Linux.
- Du côté WAN (eth0 dans notre cas), le serveur Linux aura une adresse IP statique (qui dépend de la classe d'IP du réseau WAN).
- Du côté LAN (eth1 dans notre cas), le serveur Linux aura une adresse IP statique qui devra correspondre à la classe d'IP du serveur DHCP existant sur le réseau LAN ou du serveur DHCP que nous installerons sous Linux.

Dans notre cas, nous utiliserons :
- une classe C pour le réseau WAN : 192.168.x.x
- une classe A pour le réseau LAN : 10.x.x.x

Pour définir une adresse IP statique, référez-vous à un de ces tutoriels :

Voici notre configuration réseau pour l'IP statique WAN (/etc/network/interfaces).
Note : ne supprimez pas la partie concernant l'interface lo (loopback).

Plain Text

auto eth0
iface eth0 inet static
address 192.168.1.10
netmask 255.255.255.0
gateway 192.168.1.1

Et notre configuration DNS (/etc/resolv.conf).
Note : il s'agit des serveurs DNS publics de Google.

Plain Text

nameserver 8.8.8.8
nameserver 8.8.4.4

Ensuite, pour l'interface LAN, vous devrez utiliser un ID réseau.
Dans notre cas, notre serveur Linux aura :
- une adresse IP "10.0.0.254" coté LAN. C'est cette adresse que les clients devront indiquer en tant que passerelle par défaut.
- un masque de sous réseau "255.0.0.0" (de classe A comme l'adresse IP citée précédemment)
- une adresse de broadcast "10.255.255.255" (il s'agit d'une adresse IP réservée reconnaissable aux valeurs : 255)
- et un ID réseau "10.0.0.0" (reconnaissables aux valeurs 0 indiquées à la fin)

Plain Text

auto eth1
iface eth1 inet static
address         10.0.0.254
netmask         255.0.0.0
broadcast       10.255.255.255
network         10.0.0.0

Pour finir, redémarrer la machine pour prendre en compte les changements.

2. Installer et configurer un serveur DHCP

Lorsque l'on configure un serveur pour qu'il agisse en tant que passerelle, on installe généralement un serveur DHCP sur ce même serveur.
En effet, les machines se trouvant sur le réseau LAN devront avoir une adresse IP pour pouvoir communiquer avec votre passerelle et donc avoir accès à Internet.

Si votre serveur Linux et vos clients sont branchés sur un switch, vous devrez aussi installer le serveur DHCP sur votre serveur Linux ou sur un serveur se trouvant sur le réseau LAN.
Dans notre cas, nous allons installer un serveur DHCP sous Linux.

Pour cela, installez le paquet "isc-dhcp-server".
Note : isc-dhcp-server est le remplaçant de dhcp3-server. De plus, si vous tentez d'installer le paquet "dhcp3-server", vous verrez que Linux choisira automatiquement d'installer le paquet "isc-dhcp-server".

Bash

apt-get install isc-dhcp-server

A la fin de l'installation, vous verrez que la tentative de démarrage du serveur DHCP provoquera une erreur.
Si vous regardez dans le fichier "/var/log/syslog", vous verrez que cette erreur est due à la non-configuration du fichier "dhcpd.conf".

Plain Text

Oct  7 13:20:19 debian dhcpd: No subnet declaration for eth1 (10.0.0.254).
Oct  7 13:20:19 debian dhcpd: ** Ignoring requests on eth1.  If this is not what
Oct  7 13:20:19 debian dhcpd:    you want, please write a subnet declaration
Oct  7 13:20:19 debian dhcpd:    in your dhcpd.conf file for the network segment
Oct  7 13:20:19 debian dhcpd:    to which interface eth1 is attached. **
Oct  7 13:20:19 debian dhcpd: 
Oct  7 13:20:19 debian dhcpd: Not configured to listen on any interfaces!

Pour résoudre ce problème et configurer votre serveur DHCP, vous devrez donc modifier le fichier "/etc/dhcp3/dhcpd.conf" ou "/etc/dhcp/dhcpd.conf" (en fonction de votre distribution Linux et de sa version).

Bash

vi /etc/dhcp/dhcpd.conf

Dans ce fichier, vous trouverez plusieurs informations importantes.

Le domaine (ou "Suffixe DNS propre à la connexion" sous Windows).
Il s'agit du nom de domaine local présent sur votre réseau.
Définir cette valeur est utile si vous posséder un serveur Active Directory sur votre réseau local, par exemple.

Plain Text

option domain-name "informatiweb.lan";

Ensuite, vous pourrez indiquer les serveurs DNS que vos clients devront utiliser.
Soit, vous indiquez les serveurs DNS publics de Google, soit ceux de votre fournisseur d'accès à Internet (FAI) ou l'adresse IP de votre passerelle si vous comptez y installer un serveur DNS (exemple : BIND).

Dans notre cas, nos clients utiliseront ceux de Google.

Plain Text

option domain-name-servers 8.8.8.8, 8.8.4.4;

Pour finir, vous devrez définir :
- une plage d'adresse IP pour votre réseau LAN (interne) : range x.x.x.x x.x.x.x;
- et l'adresse IP de la passerelle que vos clients devront utiliser : option routers x.x.x.x;

Plain Text

subnet 10.0.0.0 netmask 255.0.0.0 {
   range 10.0.0.10 10.0.0.20;
   option routers 10.0.0.254;
}

Notez que par défaut, le bail (durée de validité des adresses IP seront de 7200 secondes. Donc, 2 heures.).
Pour modifier la durée de validité des adresses IP, modifiez ces lignes :

Plain Text

default-lease-time 600;
max-lease-time 7200;

Redémarrez le serveur DHCP.

Bash

/etc/init.d/isc-dhcp-server restart

Note : si vous utilisez toujours l'ancien paquet "dhcp3-server" et non "isc-dhcp-server", vous devrez utiliser cette commande :

Bash

/etc/init.d/dhcp3-server restart

3. Attribuer une adresse IP fixe à une machine

Grâce au serveur DHCP, vous pouvez attribuer automatiquement des adresses IP aux ordinateurs de votre réseau.
Néanmoins, un serveur DHCP permet aussi d'attribuer à chaque fois la même adresse IP à une machine spécifique (par exemple : un autre serveur présent sur le même réseau).

Pour cela, il suffit de rajouter ceci pour chaque IP statique.
Dans ce bloc, vous indiquerez :
- le nom de la machine (en théorie, ce nom n'est pas vérifié) : my-server
- l'adresse MAC de la machine : 01:23:45:67:89:01
- l'adresse IP que cette machine obtiendra à chaque fois : 10.0.0.15

Note : pour trouver l'adresse MAC (adresse physique) d'une machine, utilisez la commande "ipconfig /all" sous Windows ou "ifconfig" sous Linux.

Plain Text

host my-server {
   hardware ethernet 01:23:45:67:89:01;
   fixed-address 10.0.0.15;
}

4. Transformer votre serveur Linux en routeur

Pour finir, nous allons activer le routage des paquets sur notre serveur Linux pour que celui-ci se comporte comme un routeur (une passerelle).

Pour cela, modifiez le fichier "/etc/sysctl.conf".

Bash

vi /etc/sysctl.conf

Et décommentez la ligne "net.ipv4.ip_forward=1".

Plain Text

net.ipv4.ip_forward=1

Ensuite, modifiez le fichier "/etc/rc.local".

Bash

vi /etc/rc.local

Et ajoutez ceci avant la ligne "exit".

Bash

/sbin/iptables -P FORWARD ACCEPT
/sbin/iptables --table nat -A POSTROUTING -o eth0 -j MASQUERADE

Maintenant, à chaque démarrage, ces 2 lignes seront exécutées et le pare-feu de Linux acceptera donc de routeur les paquets entre vos 2 interfaces réseau (cartes réseau).

Redémarrer votre serveur pour appliquer les changements :

Bash

reboot

Ou tapez les 2 commandes "/sbin/iptables ..." pour éviter de devoir redémarrer maintenant.

5. Routage de ports

Pour router des ports sous Linux et donc pouvoir accéder à un serveur local depuis l'extérieur (par exemple : Internet), il suffira d'ajouter ceci dans le fichier "rc.local".

Note :
- eth0 : correspond à l'interface WAN (externe / Internet) de votre serveur Linux.
- informatiweb.no-ip.org : au nom de domaine externe ou à l'adresse IP externe de votre serveur Linux.
- dport : le port externe (HTTP = 80 par défaut)
- to 10.0.0.2:80 : l'adresse IP du serveur sur votre réseau interne (LAN) et le port sur lequel votre serveur écoute. Ici un serveur web (Apache ou IIS) qui écoute par défaut sur le port 80 (HTTP).

Bash

/sbin/iptables -t nat -A PREROUTING -p tcp -i eth0 -d informatiweb.no-ip.org --dport 80 -j DNAT --to 10.0.0.2:80

6. Test de la configuration

Pour tester notre configuration, nous avons utilisé un client sous Windows.
Mais cela fonctionnera avec n'importe quelle machine et n'importe quel système d'exploitation (Windows, Mac, Linux, ...).

Comme vous pouvez le voir :
- le nom de domaine local (facultatif) est : informatiweb.lan
- notre PC client a bien reçu une adresse IP : 10.0.0.10
- le masque de sous-réseau est : 255.0.0.0
- l'adresse IPv4 de la passerelle (routeur) : 10.0.0.254
- l'adresse IP du serveur DHCP depuis lequel notre client a reçu une adresse IP est : 10.0.0.254
- et notre PC client utilisera les serveurs DNS de Google : 8.8.8.8 et 8.8.4.4