Gentoo Logo

Guide du routeur personnel

Table des matières :

1.  Introduction

Mettre votre propre routeur sur pieds à partir de vieilles pièces détachées présente quelques avantages par rapport aux routeurs vendus dans le commerce tels que des Linksys ou autres. L'avantage majeur est le contrôle que vous avez sur la connexion ; les autres avantages dépendent de votre imagination et de ce que vous allez décider de faire avec votre routeur.

Ce guide va vous montrer comment utiliser NAT (« Network Address Translation ») qui permet à plusieurs machines d'accéder à Internet à partir d'une seule adresse IP, vous expliquer comment installer et utiliser des services courants tels que DNS (avec dnsmasq), DHCP (avec dhcpd), ADSL (avec ppp) et enfin vous présenter quelques exemples sympas d'utilisation de votre routeur tels que la redirection de ports.

Avant de poursuivre, veuillez vérifier que vous disposez des éléments requis. Vous avez besoin d'un ordinateur équipé d'au moins deux cartes réseau. Vous devez aussi avoir les informations relatives à votre connexion Internet sous la main (adresses IP, serveurs DNS, passerelle, nom d'utilisateur et mot de passe). Vous aurez aussi besoin d'un peu de temps et de considération pour Gentoo.

Ce guide utilise les conventions suivantes :

  • eth0 - carte réseau connectée à votre réseau local.
  • eth1 - carte réseau connectée à internet.
  • Le réseau local utilise des adresses IP 192.168.0.xxx
  • L'adresse du routeur est fixée à 192.168.0.1
  • Le routeur utilise Linux 2.4 ou 2.6 ; débrouillez-vous tout seul avec 2.0/2.2

Important : pour des raisons de sécurité, vous devriez désactiver tous les services qui ne sont pas indispensables sur votre routeur jusqu'à ce que le pare-feu soit configuré et activé. Pour afficher les services actifs, lancez rc-status.

2.  Configuration du noyau

Les pilotes de vos cartes réseau doivent avoir été activés. Pour vérifier si vos cartes sont activées, utilisez ifconfig. L'affichage sera sans doute un peu différent, mais l'important est que les deux cartes apparaissent.

Exemple de code 2.1 : vérifier les cartes réseau

# ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:60:F5:07:07:B8
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
          Interrupt:11 Base address:0x9800

eth1      Link encap:Ethernet  HWaddr 00:60:F5:07:07:B9
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
          Interrupt:10 Base address:0x9400

Si vos cartes réseau ne sont pas affichées et que vous ignorez quel type de carte vous avez, utilisez lspci | grep Ethernet. Cet outil est installé avec emerge pciutils. Une fois le type de carte déterminé, configurez votre noyau pour ajouter les pilotes ad hoc.

Vous devez aussi ajouter la prise en charge de iptables et de NAT (et la gestion du trafic si vous le désirez). Les options du noyau requises ci-dessous utilisent la convention suivante :(*) nécessaire, (a) nécessaire uniquement pour l'adsl via PPPoE, (x) conseillée, (s) gestion du trafic. Peu importe si vous compilez les options en dur ou en module pour autant que les modules soient chargés au moment où la fonctionnalité est utilisée. Le chargement des modules est laissé à la discrétion du lecteur.

Exemple de code 2.2 : options réseau du noyau

Networking options  --->
   [*] TCP/IP networking
      [*] IP: advanced router
   [*] Network packet filtering (replaces ipchains)
(Avec un noyau 2.4.x, vous devez activer l'option suivante pour DHCP)
   [*] Socket Filtering

   IP: Netfilter Configuration  --->
      [*] Connection tracking (required for masq/NAT)
         [x] FTP protocol support
         [x] IRC protocol support
      [*] IP tables support (required for filtering/masq/NAT)
         [*] IP range match support
         [x] MAC address match support
         [*] Multiple port match support
         [*] Packet filtering
            [*] REJECT target support
            [x] REDIRECT target support
         [*] Full NAT
            [*] MASQUERADE target support
         [s] Packet mangling
            [s] MARK target support
         [x] LOG target support

   QoS and/or fair queueing  --->
      [s] QoS and/or fair queueing
         [s] HTB packet scheduler
         [s] Ingress Qdisc

   [a] PPP (point-to-point protocol) support
      [a] PPP filtering
      [a] PPP support for async serial ports
      [a] PPP support for sync tty ports
      [a] PPP Deflate compression
      [a] PPP BSD-Compress compression
      [a] PPP over Ethernet

Note : certaines options ou leur position peuvent être un peu différentes d'une version du noyau à l'autre, mais vous devriez pourvoir les retrouver. Y compris parmi les noyaux 2.6, ces options ont tendance à être déplacées. Bonne chance !

3.  Connectez-vous à Internet

Introduction

Il y a de nombreuses façons de vous connecter à Internet. L'auteur a sélectionné les méthodes qui lui sont familières, c'est-à-dire l'ADSL (PPPoE) et un modem-câble (adresse statique ou dynamique). Si vous voulez ajouter une méthode, veuillez adresser un courriel à l'auteur (en anglais). Lisez uniquement la partie relative à votre type de connexion. Ce chapitre est seulement consacré à la connexion de votre routeur à Internet via eth1.

ADSL et PPPoE

Les logiciels requis pour une connexion ADSL via PPPoE qui étaient rassemblés dans un paquet nommé Roaring Penguin (N.d.t. le manchot rugissant) ont maintenant été intégrés dans le paquet standard PPP. Faites simplement emerge ppp et il ne vous restera plus qu'à configurer vos login/mots de passes dans /etc/conf.d/net.

Exemple de code 3.1 : configurer eth1

(Remplacez 'vla9h924' par le nom de l'utilisateur et
'boogie' par le mot de passe à utiliser.)

# nano /etc/conf.d/net
(Indiquer à openrc de configurer eth1 en ADSL pour ppp0.)
config_ppp0="ppp"
link_ppp0="eth1"
plugins_ppp0="pppoe"
pppd_ppp0="
  defaultroute
  usepeerdns
        Lisez /usr/share/doc/openrc-*/net.example.bz2 pour les autres possibilités.
)
username_ppp0="vla9h924"
password_ppp0="boogie"

# ln -s net.lo /etc/init.d/net.ppp0
# rc-update add net.ppp0 default
# /etc/init.d/net.ppp0 start

Attention : quand votre interface ADSL sera activée, elle créera ppp0. Bien que votre carte réseau s'appelle eth1, l'adresse IP sera liée à ppp0. À partir de maintenant, vous devrez remplacer eth1 par ppp0 dans tous les exemples proposés.

Attention : changez les permissions du fichier /etc/conf.d/net afin que personne d'autre que root ne puisse lire vos mots de passes.

Attention : pour les utilisateurs qui migrent depuis le paquet rp-pppoe ou pour ceux qui ont des problèmes de connexion, voyez la section MTU dans le chapitre des résolutions de problèmes.

Modem câble avec une adresse IP statique ou dynamique

Si votre FAI vous a attribué une adresse statique, vous avez besoin de plus d'informations que pour une adresse dynamique, c'est-à-dire votre adresse IP et celles de votre passerelle et des serveurs DNS de votre FAI.

Exemple de code 3.2 : configurer eth1

(Adresse dynamique)
# emerge dhcpcd
# nano /etc/conf.d/net
(Ajoutez une entrée telle que)
config_eth1="dhcp"

(Adresse statique)
# nano /etc/conf.d/net
(Ajoutez une entrée telle que)
config_eth1="66.92.78.102 broadcast 66.92.78.255 netmask 255.255.255.0"
routes_eth1="default via 66.92.78.1"
# nano /etc/resolv.conf
Ajoutez une ligne par serveur DNS de votre FAI
nameserver 123.123.123.123

(Configuration commune)
# ln -s net.lo /etc/init.d/net.eth1
# rc-update add net.eth1 default
# /etc/init.d/net.eth1 start

Cela devrait suffire.

4.  Connectez votre réseau local

Cette étape est du gâteau par rapport à la précédente.

Exemple de code 4.1 : configurer eth0

# nano /etc/conf.d/net
Ajoutez cette entrée
config_eth0="192.168.0.1/24 brd 192.168.0.255"
# rc-update add net.eth0 default
# /etc/init.d/net.eth0 start

5.  Services réseau à activer

Serveur DHCP

Ce serait sympa si tous vos ordinateurs pouvaient se connecter à votre réseau sans rien devoir reconfigurer ni sans devoir mémoriser des adresses IP. Installons un serveur DHCP pour allouer des adresses IP automatiquement.

Un serveur DHCP, comme son nom l'indique en anglais (« Dynamic Host Configuration Protocol »), permet de configurer les machines qui se connectent à votre réseau au moment où elles se connectent. Vous devez installer un serveur DHCP sur votre router et le configurer en fonction de votre réseau (adresses IP valides, serveurs DNS, passerelle, etc.). Ensuite, quand une machine se connecte, elle exécute un programme client qui reçoit une configuration du serveur et qui l'utilise automatiquement pour définir vos paramètres réseau. Vous trouverez un article complet à propos de DHCP sur Wikipedia.

Nous allons utiliser un paquet appelé dnsmasq qui fourni à la fois les services DHCP et DNS. Pour l'instant, concentrons-nous sur le serveur DHCP. Si vous désirez toutefois utiliser un serveur DHCP différent, vous pouvez trouver un autre exemple dans le chapitre des options sympas. De plus, si vous souhaitez manipuler la configuration du serveur DHCP, lisez simplement les commentaires présents dans /etc/dnsmasq.conf. Les choix par défaut devraient tous parfaitement fonctionner.

Exemple de code 5.1 : configurer DHCP

# emerge dnsmasq
# nano /etc/dnsmasq.conf
(Ajoutez la ligne suivante pour activer DHCP :)
dhcp-range=192.168.0.100,192.168.0.250,72h
(Pour que dnsmasq ne server que votre LAN :)
interface=eth0

# rc-update add dnsmasq default
# /etc/init.d/dnsmasq start

Votre routeur est maintenant un serveur DHCP. Connectez d'autres machines sur votre réseau et observez. Sur un système Windows, vous devez allez dans les propriétés TCP/IP et sélectionner « Obtain DNS server address automatically » et « Obtain DNS server address automatically ». Parfois, les changements ne sont pas pris en compte immédiatement. Dans ce cas, lancez les commandes ipconfig /release et ipconfig /renew dans un terminal.

Serveur DNS

Quand vous visitez un site Internet, vous utilisez un nom de site, car c'est bien plus facile à retenir qu'une adresse IP (vous préférez ebay.com ou 66.135.192.87 ?) Cela implique l'utilisation d'un serveur DNS qui va rechercher l'adresse IP d'un serveur à partir du nom du site que vous tapez. Vous trouverez plus d'informations à propos des serveurs DNS sur Wikipedia.

Comme nous utilisons dnsmasq en tant que serveur DHCP et qu'il inclut un serveur DNS, vous n'avez plus rien d'autre à faire ici ! Votre router fournit déjà la résolution de noms à ses clients DHCP. Vous aimeriez bien que tout soit aussi simple, n'est-ce pas ? ;)

Vous pouvez très bien choisir d'autres serveurs DNS si vous êtes plus à l'aise avec ces derniers, mais la raison pour laquelle dnsmasq est génial est qu'il a été conçu pour faire exactement ce que nous voulons et rien d'autre. C'est un petit serveur de cache et de propagation de DNS pour les réseaux locaux. Nous ne désirons pas fournir un service DNS pour notre propre domaine, mais simplement offrir un simple service DNS à tous les membres de notre réseau local.

NAT (ou IP-masquerading ou translation d'adresses)

Désormais, vos utilisateurs peuvent se parler sur votre réseau et ils peuvent envoyer des requêtes DNS, mais ils ne peuvent pas encore accéder à Internet. Cela vous laisse plus de bande passante, mais cela n'est sans doute pas votre but.

Pour pouvoir connecter plusieurs ordinateurs depuis une seule adresse IP (celle que votre FAI vous a attribuée), nous avons besoin de NAT pour effectuer des translations d'adresses IP. En effet, lorsqu'une requête est émise par un de vos ordinateurs, le monde extérieur (Internet) ne voit que votre adresse publique. Lorsqu'une réponse arrive sur votre routeur, il doit pouvoir déterminer quelle machine interne attend la réponse. Wikipedia vous en dira plus à propos du NAT.

Note : commencez par vérifier que iptables est installé sur votre routeur. Il devrait avoir été installé automatiquement, mais mieux vaut vérifier. S'il n'est pas installé, lancez simplement emerge iptables.

Exemple de code 5.2 : configurer iptables

(Effacez les règles en cours)
# iptables -F
# iptables -t nat -F

(Configurez les règles par défaut pour s'occuper du traffic restant)
# iptables -P INPUT ACCEPT
# iptables -P OUTPUT ACCEPT
# iptables -P FORWARD DROP

(Copiez et collez ces exemples...)
# export LAN=eth0
# export WAN=eth1

(Rendez les services accessibles uniquement à nos machines locales)
# iptables -I INPUT 1 -i ${LAN} -j ACCEPT
# iptables -I INPUT 1 -i lo -j ACCEPT
# iptables -A INPUT -p UDP --dport bootps ! -i ${LAN} -j REJECT
# iptables -A INPUT -p UDP --dport domain ! -i ${LAN} -j REJECT

(Facultatif : autoriser l'accès au serveur ssh depuis l'extérieur)
# iptables -A INPUT -p TCP --dport ssh -i ${WAN} -j ACCEPT

(Éliminez les paquets destinés aux ports privilégiés)
# iptables -A INPUT -p TCP ! -i ${LAN} -d 0/0 --dport 0:1023 -j DROP
# iptables -A INPUT -p UDP ! -i ${LAN} -d 0/0 --dport 0:1023 -j DROP

(Ajoutez les règles pour le NAT)
# iptables -I FORWARD -i ${LAN} -d 192.168.0.0/255.255.0.0 -j DROP
# iptables -A FORWARD -i ${LAN} -s 192.168.0.0/255.255.0.0 -j ACCEPT
# iptables -A FORWARD -i ${WAN} -d 192.168.0.0/255.255.0.0 -j ACCEPT
# iptables -t nat -A POSTROUTING -o ${WAN} -j MASQUERADE

(Indiquez au noyau d'effectuer le transfert IP)
# echo 1 > /proc/sys/net/ipv4/ip_forward
# for f in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 1 > $f ; done

(Enregistrez les règles ci-dessus pour le prochain démarrage)
# /etc/init.d/iptables save
# rc-update add iptables default
# nano /etc/sysctl.conf

(Ajoutez ou décommentez les lignes ci-dessous)
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1

(Si vous avez une adresse internet dynamique, vous désirez probablement
activer l'option suivante :)
net.ipv4.ip_dynaddr = 1

Une fois toutes ces commandes effectuées, les autres machines de votre réseau devraient pouvoir accéder à Internet comme si elles étaient connectées directement.

L'option ip_dynaddr est utile pour des connexions à la demande ou lorsque votre FAI vous attribue des adresses dynamiques. Ceci résoud les problèmes recontrés lorsque l'on tente d'établir une connexion avant que l'interface réseau ne soit opérationnelle. Cette option évite de nombreux problèmes aux utilisateurs de votre réseau situés derrière votre routeur.

6.  Options sympas (pour un jour de pluie)

Introduction

Croyez-le ou pas, vous avez terminé ! La suite de ce guide concerne des sujets qui peuvent vous intéresser, mais tout ce qui suit est facultatif.

Transfert de port

Dans certains cas, vous voudrez permettre un accès depuis Internet à des services qui tournent sur des machines de votre réseau local au lieu de votre routeur, par exemple un serveur FTP, HTTP, SSH ou encore VNC. Le transfert de port permet cela avec la seule restriction qu'un port ne peut être redirigé que vers une seule machine. Par exemple, pour un serveur FTP, vous ne pourriez pas rediriger le port 21 en entrée sur votre routeur vers différentes machines. Si vous voulez permettre l'accès à trois serveurs FTP différents sur votre réseau, vous devez choisir d'autres ports. Vous pouvez utilisez le port standard 21 pour un serveur, mais vous devez choisir, par exemple, 123 et 567 pour les deux autres serveurs.

Toutes les règles de transfert de port sont sous la forme iptables -t nat -A PREROUTING [-p protocole] --dport [port externe sur le routeur] -i ${WAN} -j DNAT --to [adresse ip et port vers lesquel rediriger]. Malheureusement, l'outil iptables n'accepte pas des noms de machine dans les règles de redirection. Si vous redirigez vers le même port que le port d'entrée sur votre routeur, vous n'êtes pas obligé de la répéter dans la règle. Utilisez man 8 iptables pour plus d'informations.

Exemple de code 6.1 : quelques exemples

(Copiez et collez ces exemples...)
# export LAN=eth0
# export WAN=eth1

(Rediriger le port 2 vers ssh sur un PC interne)
# iptables -t nat -A PREROUTING -p tcp --dport 2 -i ${WAN} -j DNAT --to 192.168.0.2:22

(Transfert des requêtes FTP vers un serveur FTP interne)
# iptables -t nat -A PREROUTING -p tcp --dport 21 -i ${WAN} -j DNAT --to 192.168.0.56

(Transfert des requêtes HTTP vers un serveur Web interne)
# iptables -t nat -A PREROUTING -p tcp --dport 80 -i ${WAN} -j DNAT --to 192.168.0.56

(Transfert des requêtes VNC vers un serveur interne)
# iptables -t nat -I PREROUTING -p tcp --dport 5900 -i ${WAN} -j DNAT --to 192.168.0.2
# iptables -t nat -I PREROUTING -p tcp --dport 5901 -i ${WAN} -j DNAT --to 192.168.0.3:5900
(Pour vous connecter au VNC de 192.168.0.3, ajoutez ':1' au nom de votre routeur

(Transfert des requêtes Samba vers un serveur interne)
# iptables -t nat -I PREROUTING -p tcp --dport 135 -i ${WAN} -j DNAT --to 192.168.0.2
# iptables -t nat -I PREROUTING -p tcp --dport 139 -i ${WAN} -j DNAT --to 192.168.0.2
# iptables -t nat -I PREROUTING -p tcp --dport 445 -i ${WAN} -j DNAT --to 192.168.0.2
# iptables -t nat -I PREROUTING -p udp --dport 137:138 -i ${WAN} -j DNAT --to 192.168.0.2
# iptables -t nat -I PREROUTING -p udp --dport 445 -i ${WAN} -j DNAT --to 192.168.0.2

(Redirection pour bittorrent)
# iptables -t nat -A PREROUTING -p tcp --dport 6881:6889 -i ${WAN} -j DNAT --to 192.168.0.2

(Redirection pour eDonkey/eMule)
# iptables -t nat -A PREROUTING -p tcp --dport 4662 -i ${WAN} -j DNAT --to 192.168.0.55

(Prise en charge du « Game Cube Warp Pipe »)
# iptables -t nat -A PREROUTING -p udp --dport 4000 -i ${WAN} -j DNAT --to 192.168.0.56

(Prise en charge  de « Playstation2 Online »)
# iptables -t nat -A PREROUTING -p tcp --dport 10070:10080 -i ${WAN} -j DNAT --to 192.168.0.11
# iptables -t nat -A PREROUTING -p udp --dport 10070:10080 -i ${WAN} -j DNAT --to 192.168.0.11

(Prise en charge  de « Xbox Live »)
# iptables -t nat -A PREROUTING -p tcp --dport 3074 -i ${WAN} -j DNAT --to 192.168.0.69
# iptables -t nat -A PREROUTING -p udp --dport 3074 -i ${WAN} -j DNAT --to 192.168.0.69
# iptables -t nat -A PREROUTING -p udp --dport 88 -i ${WAN} -j DNAT --to 192.168.0.69

Note : si vous avez d'autres exemples courants ou intéressants, vous pouvez les proposer à l'auteur (en anglais).

Identd (pour IRC)

IRC utilise beaucoup le service ident. Maintenant que vos utilisateurs de IRC sont derrière votre routeur, vous devriez utiliser un service ident pour le routeur et les ordinateurs. Ce service est fourni par le paquet midentd.

Exemple de code 6.2 : configurer ident

# emerge midentd
# rc-update add midentd default
# /etc/init.d/midentd start

D'autres serveurs ident sont disponibles dans Portage. Selon vos besoins, l'auteur vous recommande oidentd et fakeidentd.

Serveur de temps

Maintenir un ordinateur à l'heure est important pour garantir la bonne santé d'un système. Une des méthodes les plus courantes est d'utiliser NTP (« Network Time Protocol »). Le paquet ntp contient un client et un serveur.

De nombreux utilisateurs ont installé ntp sur leur ordinateur. Évidemment, plus il y a de clients, plus les serveurs sont chargés. Dans un réseau local, on peut alléger la charge des serveurs publics tout en gardant tous les ordinateurs à l'heure. De plus, toutes les mises à l'heure sur les machines locales seront plus rapides. Nous avons juste besoin d'un serveur local sur notre routeur qui se met à l'heure avec un serveur public sur Internet et qui est utilisé par toutes les autres machines locales. Commencez par faire emerge ntp sur votre routeur.

Exemple de code 6.3 : configurer un serveur NTP

# nano /etc/conf.d/ntp-client
(Ajustez les paramètres si nécessaire,
mais les valeurs par défaut devraient suffire)
# rc-update add ntp-client default

# nano /etc/ntp.conf
(Ajoutez les lignes suivantes)
restrict default ignore
restrict 192.168.0.0 mask 255.255.255.0 notrust nomodify notrap
(Ces lignes donnent accès au serveur NTP uniquement
aux clients avec une adresse IP 192.168.0.xxx)
# nano /etc/conf.d/ntpd
(Ajustez les paramètres si nécessaire,
mais les valeurs par défaut devraient suffire)
# rc-update add ntpd default

# /etc/init.d/ntp-client start
# /etc/init.d/ntpd start

Note : vous devez autoriser les connexions entrantes et sortantes sur le port ntp (123/udp) sur le serveur. Les clients se contentent d'une connexion sortante vers votre serveur.

Ensuite, exécutez emerge ntp sur les autres machines aussi, mais nous n'utiliserons que la partie client, ce qui est plus simple.

Exemple de code 6.4 : configurer un client NTP

# nano /etc/conf.d/ntp-client
(Remplacez le nom de serveur 'pool.ntp.org' par
'192.168.0.1' dans la variable NTPCLIENT_OPTS)
# rc-update add ntp-client default
# /etc/init.d/ntp-client start

Serveur rsync

Ceux qui ont plusieurs machines Gentoo sur le même réseau local souhaitent souvent éviter d'utiliser emerge sync avec des serveurs distants. En configurant un serveur rsync local, vous économisez votre bande passante et celle des serveurs rsync de Gentoo. C'est très simple à mettre en place.

Note : pour un guide sur rsync beaucoup plus détaillé, veuillez vous référer au guide rsync officiel.

Du fait que chaque machine Gentoo nécessite rsync, il n'est pas nécessaire de l'installer. Éditez le fichier de configuration par défaut (/etc/rsyncd.conf), décommentez la section [gentoo-portage] et assurez-vous que vous avez bien ajouté une option address. Tous les autres choix par défaut devraient convenir.

Exemple de code 6.5 : configurer un serveur rsync

pid file = /var/run/rsyncd.pid
use chroot = yes
read only = yes
address = 192.168.0.1

[gentoo-portage]
    path = /mnt/space/portage
    comment = Gentoo Linux Portage tree
    exclude = /distfiles /packages

Après cela, vous devez démarrer le service (de nouveau, les choix par défaut conviennent).

Exemple de code 6.6 : démarrer le serveur rsync

# /etc/init.d/rsyncd start
# rc-update add rsyncd default

La dernière chose à faire est de dire à vos clients de se synchroniser par rapport au routeur.

Exemple de code 6.7 : les options de synchronisation des clients dans make.conf

SYNC="rsync://192.168.0.1/gentoo-portage"

Serveur de courrier

Plusieurs raisons peuvent vous pousser à utiliser votre propre serveur de courrier (SMTP) sur votre routeur. L'auteur le fait pour que ses utilisateurs aient l'impression que leurs courriels sont envoyés immédiatement alors que l'envoi réel et les multiples tentatives éventuelles sont effectués par le routeur. Notez que certains FAI (comme Verizon) bloquent le relai de courriels qui ne sont pas destinés à leurs propres abonnés. De plus, vous pouvez aussi réduire la bande passante utilisée pour l'envoi de courriels de sorte que l'émission de grosses pièces jointes ne bloquent pas votre accès à Internet pendant leur envoi.

Exemple de code 6.8 : configurer un serveur SMTP

# emerge netqmail
(Vérifiez que l'affichage de la commande `hostname` est correct)
# emerge --config netqmail
# iptables -I INPUT -p tcp --dport smtp ! -i ${LAN} -j REJECT
# ln -s /var/qmail/supervise/qmail-send /service/qmail-send
# ln -s /var/qmail/supervise/qmail-smtpd /service/qmail-smtpd
# cd /etc/tcprules.d
# nano tcp.qmail-smtp

(Ajoutez une entrée comme celle-ci dans la section « allow »)
192.168.0.:allow,RELAYCLIENT=""

# rc-update add svscan default
# /etc/init.d/svscan start

L'auteur est un inconditionnel de Qmail, mais vous êtes libre d'utiliser un autre MTA. Quand vous configurez vos ordinateurs, définissez 192.168.0.1 comme serveur SMTP et tout devrait fonctionner tout seul. Vous trouverez plus d'informations sur la page d'accueil de netqmail.

Un serveur DHCP complet

Précédemment, nous avons utilisé dnsmasq pour fournir un service DHCP à nos clients. Pour la majorité des utilisateurs avec un simple réseau local, c'est parfait. Mais vous pourriez avoir besoin de plus de fonctionnalités. C'est pourquoi nous nous tournons vers un serveurs DHCP complet fourni par ISC.

Exemple de code 6.9 : configurer DHCP

# emerge dhcp
# nano /etc/dhcp/dhcpd.conf
(Ceci est un exemple de fichier de configuration)
authoritative;
ddns-update-style interim;
subnet 192.168.0.0 netmask 255.255.255.0 {
    range 192.168.0.100 192.168.0.250;
    default-lease-time 259200;
    max-lease-time 518400;
    option subnet-mask 255.255.255.0;
    option broadcast-address 192.168.0.255;
    option routers 192.168.0.1;
    option domain-name-servers 192.168.0.1;
}
# nano /etc/conf.d/dhcpd
(Définissez IFACE="eth0")
# rc-update add dhcpd default
# /etc/init.d/dhcpd start

Ceci est la configuration minimale requise pour remplacer les fonctions DHCP de dnsmasq que nous avons précédemment mises en place. À propos, vous avez pensé à désactiver les fonctions DHCP de dnsmasq, n'est-ce pas ? Sinon, vous devriez le faire maintenant (commentez simplement l'option dhcp-range dans /etc/dnsmasq.conf et redémarrez le service).

Connecter un autre réseau local (ou deux ou trois ou...)

Vous avez parfois besoin de connecter le routeur à un autre réseau local. Vous voulez peut-être temporairement vous raccorder à un groupe d'amis, ou alors vous êtes ordonné et vous voulez séparer différents groupes d'ordinateurs, ou encore vous vous ennuyez peut-être beaucoup. Quelles que soient vos raisons, étendre le routeur à d'autre réseaux locaux devrait être simple. Dans les exemples suivants, je vais considérer que le nouveau réseau est connecté à une troisième carte ethernet appelée eth2.

Tout d'abord, vous devez configurer l'interface. Utilisez les instructions de l'exemple de code 4.1 en remplaçant eth0 par eth2 et 192.168.0 par 192.168.1.

Ensuite, vous devez modifier dnsmasq pour qu'il gère également la nouvelle interface. Éditez le fichier /etc/conf.d/dnsmasq et ajoutez -i eth2 aux DNSMASQ_OPTS ; utiliser -i plusieurs fois est autorisé. Maintenant, éditez /etc/dnsmasq.conf et ajoutez une autre ligne semblable à l'exemple de code 5.1 en remplaçant 192.168.0 par 192.168.1. Il est possible d'avoir plusieurs lignes dhcp-range.

Enfin, regardez les règles dans l'exemple de code 5.2 et dupliquez les règles qui concernent -i ${LAN}. Vous voudrez sans doute créer une autre variable, par exemple LAN2, pour vous simplifier le travail.

7.  Troubleshooting

Outils intéressants

Si vous avez de problèmes pour faire communiquer vos ordinateurs, les outils suivants (tous dans la catégorie net-analyzer) peuvent vous aider à les résoudre :

Outils Description
wireshark Outil graphique de visualisation du trafic avec de nombreux filtres
tcpdump Outil en mode texte qui affiche le trafic et qui permet d'appliquer des filtres
iptraf Outil de contrôle de trafic réseau, utilise ncurses
ettercap Outil de contrôle de trafic réseau, utilise ncurses

DHCP ne démarre pas

Lorsque vous démarrer le script init.d de dhcp pour la première fois, il est possible qu'il échoue mais ne vous donne aucune information utile.

Exemple de code 7.1 : exemple d'échec de DHCP

# /etc/init.d/dhcp start
 * Setting ownership on dhcp.leases ...          [ ok ]
 * Starting dhcpd ...                            [ !! ]

L'astuce est de savoir où dhcp envoie ses messages. Naviguez simplement dans /var/log et lisez les fichiers journaux. Comme le fichier journal exact dépend du paquet que vous utilisez en tant que système de journalisation, essayez de lancer grep -Rl dhcpd /var/log pour réduire la liste des possibilités. Il y a de grandes chances pour que vous ayez laissé une coquille dans votre fichier de configuration. Vous pouvez également essayer de lancer dhcpd -d -f (débug en avant-plan) et chercher l'erreur en fonction des messages affichés.

Valeur MTU incorrecte

Si vous rencontrez des erreurs bizarres (certaines pages web s'affichent, d'autres pas, par exemple), il est possible que la valeur MTU soit incorrecte. La commande suivante permet de vérifier rapidement si c'est le cas :

Exemple de code 7.2 : éviter les problèmes MTU

# iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

Cette commande affectera toutes les nouvelles connexions. Essayer de visiter le site qui posait problème. Pour votre information, la valeur MTU standard pour un réseau Ethernet 100mbps est 1500 ; cela vaut aussi pour le PPPoA. PPPoE, quant à lui, utilise 1492. Vous trouverez des explications détaillées dans le chapitre 15 du Linux Advanced Routing & Traffic Control HOWTO.

Si cette commande ne marche pas pour vous, essayez d'ajouter la règle dans la table mangle. Ajoutez juste -t mangle au tout début de la commande.

Impossible de connecter deux machines directement

Si vous désirez connecter deux machines directement sans utiliser de concentrateur (hub) ou de switch, il est fort probable qu'un câble ethernet classique (aussi appelé câble droit) ne fonctionne pas, à moins que vous ne disposiez d'un adaptateur réseau capable de conversion MDI/MDI-X automatique. Vous aurez besoin d'un autre type de câble appelé câble croisé. Cette page sur Wikipedia vous expliquera les détails techniques.

8.  Notes finales

L'auteur n'a pas grand chose à ajouter. Toutefois, si vous avez rencontré des problèmes avec ce guide, veuillez envoyer un courriel à l'auteur (en anglais) ou soumettre un bug dans notre système de gestion de bogues. De plus, si vous avez de bonnes idées pour améliorer ce guide, n'hésitez pas à en faire part à l'auteur.



Imprimer

Dernière mise à jour le 3 avril 2013

La version originale de cette traduction n'est plus maintenue

Résumé : Ce document montre comment transformer une vieille machine Gentoo en un routeur destiné à connecter votre réseau personnel à Internet.

Mike Frysinger
Auteur

Xavier Neys
Traducteur

Nicolas Litchinko
Traducteur

José Fournier
Traducteur

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.