Partage de connexion sous Debian Linux

Y. Morère

Juillet 2003

Abstract

Cette article est tiré d'une expérience personnelle. Je tiens à remercier Anthony pour son aide pour la configuration d'IPtables.
Un grand merci aussi au créateur du site http://christian.caleca.free.fr/, qui a été d'une grande utilité à la compréhension de divers concepts.

Contents

1  Introduction
2  Installation des cartes réseaux.
3  Configurations du réseau
4  Installation du serveur DHCP(Dynamic Host Control Protocol)
    4.1  Installation des clients DHCP
        4.1.1  Client Win98
        4.1.2  Client indows NT4/2000/XP
        4.1.3  Client Linux
5  Installation du Firewall
    5.1  La table de filtrage
    5.2  La table de translation d'adresses
    5.3  La table Mangle
    5.4  Pratique
    5.5  Remarques
6  Installation du DNS (Domaine Name Server)
    6.1  Le serveur Domain Name System.
    6.2  Mise en place
7  Installation d'un modem standard
    7.1  Modem PCMCIA
    7.2  Modem externe sur port série
    7.3  Vérification du modem
    7.4  Configuration de la connexion vers le fournisseur d'accès

1  Introduction

Je considère tout d'abord que vous avez une distribtion linux installée sur votre machine. Pour ma part, tout l'article est basé sur une Debian Woody, installée sur un pentium 133, 40Mo de Ram et 1.2Go de disque dur.
J'ai pas d'interface graphique et tout se fera avec VI et le mode console.
Je considère aussi que vous savez installer (physiquement) une carte réseau dans votre machine.
Le but ultime de cet article est de présenter l'installation d'une passerelle internet sous linux, qui comprend un serveur DHCP, une DNS pour votre sous-réseau local, et un firewall.
Remarque : Les adresses IP sont fantaisistes afin d'éviter tout problèmes avec certains petits malins.

2  Installation des cartes réseaux.

Comme la manip s'est effectuée sur du matériel de récupération, et que la machine ne servira que de passerelle, l'installation et la configuration des carte réseau fut un peu plus longue.
Il s'agit en effet de carte réseau ISA, non PNP, compatible NE2000. De plus elles sont quasiment identiques.
À l'aide de l'utilitaire modconf, installez les modules correspondants à vos carte réseau.
Il se peut aussi que votre carte réseua soit déjà gérée dans le noyau; pour vérifier cela, rien de tel qu'un petit dmesg | grep eth0 devrai faire l'affaire.
Pour des information plus complète je vous renvoie sur le site de léalinux http://lea-linux.org/reseau/gateway.php3
Si comme moi, les cartes réseaux ne sont pas détectées automatiquement par les modules, il faut passer en paramètres l'adresse d'E/S et l'irq pour chaque carte réseau, soit par l'intermédiaire de modconf, soit directement par les fichier /etc/modules et /etc/modules.conf.
Si vous n'avez pas la documentation des cartes (parfois la configuration se trouve écrite sur la carte), il faudra essayer les différentes conbinaisons irq adresse E/S, ou encore tester les cartes sur une machines windows qui vous donnera les précieuses informations.
Il reste encore le bon vieux pnpdump livré avec isapnp, mais il n'a pas été d'un grand secours pour moi (carte non PNP).
voici donc les fichiers /etc/modules et /etc/modules.conf :
yann@pport:/etc$ more modules
# /etc/modules: kernel modules to load at boot time.
#
# This file should contain the names of kernel modules that are
# to be loaded at boot time, one per line.  Comments begin with
# a "#", and everything on the line after them are ignored.
ne

[snip]
### update-modules: start processing /etc/modutils/ne
options ne io=0x320,0x300 irq=10,5
[snip]

Un petit update-modules ou un redémarrage pour voir si tout cela fonctionne. Au final vous devriez avoir cela :
yann@pport:/etc$ dmesg | grep eth 
NE*000 ethercard probe at 0x320: 00 00 b4 3f ff 92
eth0: NE2000 found at 0x320, using IRQ 10.
NE*000 ethercard probe at 0x300: 00 40 05 54 d2 bd
eth1: NE2000 found at 0x300, using IRQ 5.
yann@pport:/etc$ 

Nous deux cartes réseaux sont maintenant reconnues. Il nous reste à les configurer.

3  Configurations du réseau

Dans mon exemple, ma machine possède un adresse IP fixe dans le réseau de l'université, cette machine servira de passerelle pour un sous réseau local à mon bureau (1 machine pour le moment). Le réseau de la Fac arrivera sur l'interface ETH0 et le réseau local sera connecté à l'interface ETH1.
Pour le réseau local, nous choisirons un réseau de classe C en 192.168.1.0. L'adresse de la passerelle dans ce réseau sera 192.168.1.254.
tout ceci nous donne le fichier /etc/network/interfaces suivant :
yann@pport:/etc$ more /etc/network/interfaces
# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)

# The loopback interface
auto lo
iface lo inet loopback

# The first network card - this entry was created during the Debian installation
# (network, broadcast and gateway are optional)
#reseau fac
auto eth0
iface eth0 inet static
        address 160.60.2.101
        netmask 255.255.255.0
        network 160.60.2.0
        broadcast 160.60.2.255
        gateway 160.60.2.254

#reseau local
auto eth1
iface eth1 inet static
        address 192.168.1.254
        netmask 255.255.255.0
        network 192.168.1.0
        broadcast 192.168.1.255

yann@pport:/etc$ 

Le fichier /etc/hosts :
yann@pport:/etc$ more /etc/hosts
127.0.0.1       localhost
160.60.2.153  pport.lasc.sciences.univ-metz.fr        pport

# The following lines are desirable for IPv6 capable hosts
# (added automatically by netbase upgrade)

::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
yann@pport:/etc$ 

et le fichier /etc/resolv.conf qui contient l'adresse du DNS de la fac.
yann@pport:/etc$ more /etc/resolv.conf 
search lasc.sciences.univ-metz.fr
nameserver 
yann@pport:/etc$

Il ne reste plus qu'a faire un /etc/init.d/networking restart pour redémarrer le réseau avec ces nouvelles configurations. Pour vérifier que les interfaces sont bien actives :
yann@pport:/etc$ /sbin/ifconfig 
eth0      Lien encap:Ethernet  HWaddr 00:00:B4:3F:FF:92  
          inet adr:160.60.2.153  Bcast:160.60.2.255  Masque:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:7712 errors:0 dropped:0 overruns:0 frame:0
          TX packets:584 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:100 
          RX bytes:893247 (872.3 KiB)  TX bytes:79661 (77.7 KiB)
          Interruption:10 Adresse de base:0x320 

eth1      Lien encap:Ethernet  HWaddr 00:40:05:54:D2:BD  
          inet adr:192.168.1.254  Bcast:192.168.1.255  Masque:255.255.255.0
          UP BROADCAST RUNNING 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 lg file transmission:100 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
          Interruption:5 Adresse de base:0x300 

lo        Lien encap:Boucle locale  
          inet adr:127.0.0.1  Masque:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:22 errors:0 dropped:0 overruns:0 frame:0
          TX packets:22 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0 
          RX bytes:1925 (1.8 KiB)  TX bytes:1925 (1.8 KiB)

yann@pport:/etc$ 

4  Installation du serveur DHCP(Dynamic Host Control Protocol)

d'après http://christian.caleca.free.fr/.
Ce protocole permet aux administrateurs de réseaux TCP/IP de configurer les postes clients de façon automatique. Il a été utilisé par les fournisseurs d'accès à l'Internet par le câble, mais a été abandonné au profit d'une connexion point à point type PPP, comme pour l'ADSL.
DHCP reste cependant un protocole de configuration de clients extrêmement pratique sur un réseau local Ethernet.
Bien que dans la plupart des cas, DHCP soit un luxe sur un réseau domestique, il peut tout de même y avoir plusieurs raisons pour vous pousser à l'utiliser :
Il faut tout d'abord installer un serveur DHCP sur votre machine. Je vous conseille le paquet dhcp3 de la distribution debian. Il n'est pas conseillé d'installer le client dhcp sur la machine serveur. Pour cela vous pouvez passer par dselect ou encore un bon vieux apt-get install dhcp3-server.
dans la cas de la configuration sous mandrake, je vous renvoie à la page http://christian.caleca.free.fr/dhcp/serveur_dhcp.htm.
Il faut ensuite configurer le serveur DHCP. Cela passe par le fichier de configuration /etc/dhcp3/dhcp.conf
# dhcpd.conf
#
# Sample configuration file for ISC dhcpd
#

# option definitions common to all supported networks...
# Durée de vie du bail
default-lease-time 86400;
max-lease-time 86400;

# Les options que l'on va refiler aux clients
option domain-name "ecole-belan.org";
option domain-name-servers 192.168.1.254;

option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option routers 192.168.1.254;

# La définition du seul "sous-réseau" dont nous disposons
# Avec la plage d'IP à distribuer.
subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.1 192.168.1.253;
}

Voici pour un réseau simple. Le ligne sont assez facile à comprendre. Les deux première concerne la durée de vie du bail de connexion de la machine cliente.
Ensuite viennes les options pour les clients. On retrouve entre autre le nom de domaine du sous-réseau (pour notre futur DNS) ainsi que le serveur de ce domaine qui est notre machine.
Ensuite viennent les options propres au sous-réseau.
Avant de lancer le serveur DHCP, il faut vérifier que ce dernier écoute bien sur la bonne carte réseau ses clients. Pour cela il faut se rendre dans le fichier /etc/default/dhcp3-server et posistionner la variable INTERFACES sur la bonne carte réseau. Dans notre cas, il s'agit d'ETH1.
pport:/etc#  more /etc/default/dhcp3-server 
# Defaults for dhcp initscript
# sourced by /etc/init.d/dhcp
# installed at /etc/default/dhcp3-server by the maintainer scripts

#
# This is a POSIX shell fragment
#

# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
#       Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACES="eth1"
pport:/etc# 

Il ne reste plus qu'a relancer le serveur DHCP par /etc/init.d/dhcp3-server restart.

4.1  Installation des clients DHCP

4.1.1  Client Win98

On va prendre l'exemple d'une machine sous windows 98. Il faut tout d'abord dans la configuration TCP/IP, enlever tout ce qu'il y a concernant l'IP, le masque de sous réseau, DNS, passerelle et juste dire que vous voulez une configuration dynamique (DHCP). Relancez vos services réseaux, la méthode la plus simple et la plus bestiale étant le "reboot", et voilà. Une fois le système remonté, vous devez avoir hérité d'une configuration automatique.
la configuration pour notre sous réseau sera la suivante :
images/Image5.jpg
Figure 1: Fenêtre de winipcfg sous Win98
images/Image6.jpg       images/Image7.jpg
Figure 2: La configuration IP et WinS
images/Image8.jpg       images/Image9.jpg
Figure 3: La configuration Passerelle et DNS

4.1.2  Client indows NT4/2000/XP

La configuration se fait dans le panneau de configuration, icône "réseau", onglet "protocoles", puis "propriétés" de TCP/IP. Là, vous avez indiqué que la carte doit recevoir une adresse IP dynamiquement.
Pour une vérification, tapez dans une console, la commande ïpconfig"
Votre adresse doit être affichée. Si vous voulez tous les détails, utilisez la commande ïpconfig /all":
La commande ipconfig permet également :
C'est cette commande qui est à utiliser pour essayer de récupérer une adresse IP lorsque vous avez des problèmes. Notes.
Les rubriques "Bail obtenu" et Ëxpiration du bail" contiennent des valeurs calculées par votre machine. Le serveur DHCP ne donne que la durée.
La commande en mode graphique "winipcfg" n'existe pas nativement sous Windows NT mais vous pouvez la récupérer dans le kit de ressources techniques (téléchargeable sur le site MS en cherchant bien :-).
N'essayez pas d'utiliser celle de Windows 95/98, les dll winsock32 utilisées ici ne sont pas compatibles.

4.1.3  Client Linux

Tiré de http://christian.caleca.free.fr/dhcp/serveur_dhcp.htm
Avec cet OS c'est beaucoup plus compliqué, parce qu'il y a beaucoup plus de configurations possibles.
La configuration utilisée dans l'exposé est la suivante : Notez que DHClient n'est pas le seul client possible. Vous pouvez parfaitement le remplacer par PUMP, DHCPXD ou par DHCPCD. Tous ces clients sont disponibles dans la distribution Mandrake, qui installe d'ailleurs DHCPCD par défaut, et non pas celui que j'utilise.
Son seul inconvénient est sa richesse. Il n'est pas le plus facile à mettre en oeuvre.
Dans tous les cas vous devriez avoir un fichier /etc/network/interfaces de ce style :
yann@yoda:~$ more /etc/network/interfaces
# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)

# The loopback interface
auto lo
iface lo inet loopback

# The first network card - this entry was created during the Debian installation
# (network, broadcast and gateway are optional)
auto eth0
iface eth0 inet dhcp
yann@yoda:~$ 

5  Installation du Firewall

Pour en savoir beaucoup plus sur Netfilter, le NAT, le filtrage ... je vous renvoie à l'adresse suivante http://christian.caleca.free.fr/netfilter/.
Dans cette partie je vais être assez bref et juste donner les commandes et les choses à ne pas oublier afin de faire fonctionner votre passerelle et de protéger un peu votre réseau local par quelques regles. Pour cette partie je remercie Anthony qui m'a fournit un script permettant de mettre en uvre facilement ces notions.
Dans la suite nous utiliserons IPTables. IPtables est en quelques sortes l'interface utilisateur de Netfilter. Dans sa partie "visible", ça ressemble à IPchains, mais ici, ce n'est qu'une interface de commande de Netfilter. La syntaxe est plus complète et plus rigoureuse.
Nous allons mettre en uvre 3 tables.

5.1  La table de filtrage

C'est la table qui va permettre de filtrer tous les paquets qui entrent et sortent de notre machine. Il n'y a ici aucune modification de ces paquets, ils seront comparés à des critères définis dans la table Filter. Dans notre cas, il peut se passer deux choses différentes :

5.2  La table de translation d'adresses

La traduction d'adresse (NAT comme Network Address Translation) est à prendre ici au sens le plus large, puisque cette table permet non seulement de faire de la translation stricte d'adresses, mais également de la translation de ports et un mélange des deux, dont le masquage d'adresse est une forme particulière. Mais qu'est-ce que c'est exactement ?
Dans un datagramme, en plus des données, on y trouve également quelques informations concernant le protocole utilisé et des identificateurs de l'émetteur et du destinataire. Ce sont ces identificateurs qui nous intéressent :
Ces informations constituent une ßocket", elles sont indispensables pour arriver à joindre le bon service sur le bon serveur, par exemple le service HTTP du serveur www.wanadoo.fr.
Ces informations constituent une autre ßocket", elles sont indispensables pour que l'émetteur d'un paquet puisse espérer recevoir une réponse.
Avec les fonctions NAT de Netfilter, Lorsqu'un paquet transite par notre passerelle, nous allons pouvoir "bricoler" ces sockets absolument comme on veut. Par exemple, nous pourrons changer l'adresse de l'émetteur ou le port de l'émetteur ou les deux. Nous pouvons aussi changer l'adresse du destinataires, ou le port du destinataire, ou les deux.
Mais à quoi ça sert ?
Ca sert à une quasi infinité de choses. Parmi les plus intéressantes, citons :

5.3  La table Mangle

Nous n'avons pas parlé de la table Mangle. Cette table permet d'effectuer un marquage des paquets.
Nous pouvions, avec les premières versions de Netfilter, marquer les paquets en PREROUTING ou en OUTPUT pour les sorties d'un processus local (en rouge sur l'illustration). Notez que depuis la version 2.4.18 du noyau, le système a été étendu à tous les "hooks" (en bleu sur l'illustration).
L'intérêt de ce marquage, qui n'est visible que dans la pile de la machine, est de pouvoir être relu par d'autres fonctions comme IPROUTE ou la gestion de la qualité de service (QoS).
Ainsi, nous pouvons disposer de toute la puissance de Netfilter pour la sélection de divers types de paquets, et utiliser ensuite ce marquage pour le routage ou les priorités de passage.
Donner ici des exemples précis nous mènerait trop loin parce qu'il faudrait étudier en détail IProute2 et les fonctions de QoS des noyaux 2.4 et la vie est courte.
Voici tout de même un cas de figure qui serait gérable par ce système : Avec le marquage de paquets associé à IProute, nous pourrons arriver à faire passer les mises à jour du serveur sur le lien rapide mais cher et tout le reste sur le lien ADSL.

5.4  Pratique

Le script est le suivant :
#!/bin/sh

IPT="/sbin/iptables"
MODPROBE="/sbin/modprobe"

IFACE_EXT="eth0"
#"ppp0"
IFACE_INT="eth1"

PRIVATE_ADDR="192.168.1.254"
PRIVATE_NET="192.168.1.0/255.255.255.0"

test -f $IPT || exit 0
test -f $MODPROBE || exit 0

case "$1" in
	start)
    	echo -n "Loading firwall's rules: "

        ############################
        # FLUSH TABLES
        ############################
        $IPT -t filter -F
        $IPT -t nat -F
        $IPT -t mangle -F
        ############################
        # MASQUERADING
        ############################
        $IPT -t nat -A POSTROUTING -s $PRIVATE_NET -j MASQUERADE

        ############################
        # FORWARDING RULES
        ############################
        $IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT # ESTABLISHED
        #$IPT -A FORWARD -p UDP -i $IFACE_INT --dport 53 -j ACCEPT  # DOMAIN
        #$IPT -A FORWARD -p TCP -i $IFACE_INT --dport 21 -j ACCEPT  # FTP
        #$IPT -A FORWARD -p TCP -i $IFACE_INT --dport 22 -j ACCEPT  # SSH
        #$IPT -A FORWARD -p TCP -i $IFACE_INT --dport 25 -j ACCEPT  # SMTP
        #$IPT -A FORWARD -p TCP -i $IFACE_INT --dport 80 -j ACCEPT  # HTTP
        #$IPT -A FORWARD -p TCP -i $IFACE_INT --dport 110 -j ACCEPT # POP3
        #$IPT -A FORWARD -p TCP -i $IFACE_INT --dport 443 -j ACCEPT # HTTPS

        $IPT -A FORWARD -p TCP -i $IFACE_EXT --dport 3389 -j ACCEPT # REMOTE DESKTOP
        $IPT -A FORWARD -i $IFACE_INT -s $PRIVATE_NET -j ACCEPT

        $IPT -A FORWARD -j LOG --log-prefix "Forwarding table : "
        $IPT -A FORWARD -j DROP

        ############################
        # INPUT LOOPBACK
        ############################
        $IPT -A INPUT -i lo -j ACCEPT

        ############################
        # INPUT INTRANET
        ############################
        $IPT -A INPUT -p UDP -i $IFACE_INT --dport 53 -j ACCEPT  # DNS
        $IPT -A INPUT -p UDP -i $IFACE_INT --dport 123 -j ACCEPT # NTP
        $IPT -A INPUT -p UDP -i $IFACE_INT --dport 137 -j ACCEPT # NETBIOS-NS
        $IPT -A INPUT -p UDP -i $IFACE_INT --dport 138 -j ACCEPT # NETBIOS-DGM
        $IPT -A INPUT -p TCP -i $IFACE_INT --dport 139 -j ACCEPT # NETBIOS-SSN

        ############################
        # INPUT INTERNET
        ############################

        ############################
        # INPUT GENERAL
        ############################
        $IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # ESTABLISHED
        $IPT -A INPUT -p ICMP -j ACCEPT                              # ICMP
        $IPT -A INPUT -p TCP --dport 21 -j ACCEPT                    # FTP
        $IPT -A INPUT -p TCP --dport 22 -j ACCEPT                    # SSH
        $IPT -A INPUT -p TCP --dport 80 -j ACCEPT                    # HTTP
        $IPT -A INPUT -p TCP --dport 113 -j ACCEPT                   # AUTH
        $IPT -A INPUT -p TCP --dport 443 -j ACCEPT                   # HTTPS
        $IPT -A INPUT -p TCP --dport 3000 -j ACCEPT                  # NTOP

        #$IPT -A INPUT -i $IFACE_EXT -j LOG --log-prefix "Input ppp0 : " # LOG..
        #$IPT -A INPUT -i $IFACE_INT -j LOG --log-prefix "Input eth0 : " # LOG..
        $IPT -A INPUT -j DROP                          # DENY ALL

        echo "Done."
        ;;
    stop)
        echo -n "Flushing firwall's rules: "

        ###########################
        # FLUSH TABLES
        ###########################
        $IPT -t filter -F
        $IPT -t nat -F
        $IPT -t mangle -F

        echo "Done."
        ;;
    restart)
        /etc/init.d/firewall stop
        /etc/init.d/firewall start
        ;;
    status)
        # List tables
        echo
        echo "---------- FILTER TABLE -----------"
        echo
        $IPT -t filter -L -v
        echo
        echo "----------  NAT TABLE -----------"
        echo
        $IPT -t nat -L -v
        echo
        ;;
    *)
        echo "Usage: /etc/init.d/firewall {start|stop|status}"
        exit 1
        ;;
esac

exit 0

Il s'agit d'un script qui permet de modifier facilement les règles mises dans les différentes tables. Il est facilement compréhensible et très configurable.
Je rajouterai une petite procédure afin que le firewall soit activé automatiquement sous ma Debian.
Avant toute chose, il ne faut pas oublier de d'autoriser l'ip_forward entre les deux cartes réseaux. Pour cela il suffit d'éditer le fichier /etc/sysctl.conf :
pport:/etc# more /etc/sysctl.conf 
#
# /etc/sysctl.conf - Configuration file for setting system variables
# See sysctl.conf (5) for information.
#
#kernel.domainname = example.com
#net/ipv4/icmp_echo_ignore_broadcasts=1
#config pour faire du routage
net/ipv4/ip_forward=1
pport:/etc# 

Ensuite voici la marche à suivre, pour avoir un firewall qui fonctionne au démarrage :
  1. charger les règles en mémoire à l'aide de notre script firewall : firewall start

  2. sauver ces tables dans le fichier active à l'aide le commande /etc/init.d/iptables save active

  3. effacer les tables à l'aide de firewall clear

  4. sauver ces tables dans le fichier inactive à l'aide le commande /etc/init.d/iptables save inactive

  5. finalement faire un dpkg-reconfigure iptables et choisir de le lancer au démarrage.

Afin de voir les portes que vous avez ouverts, la commande netstat est très interessante : Pour voir l'états des tables, il suffit de lancer iptables -L -v.

5.5  Remarques

Si vous avez configurer votre firewall pour que vos machines du réseau local puissent faire du ftp, il est nécessaire d'ajouter des modules au noyau. En effet lors d'une connexion ftp, les commandes sont envoyées sur un port, mais les réponses arrivent sur un autre port (qui n'est pas autorisé par votre firewall). Il faut donc ajouter les modules ip_nat_ftp et ip_conntrack_ftp. Ce qui donne :
yann@pport:/etc$ more modules
# /etc/modules: kernel modules to load at boot time.
#
# This file should contain the names of kernel modules that are
# to be loaded at boot time, one per line. Comments begin with
# a "#", and everything on the line after them are ignored.
ne
ip_nat_ftp
ip_conntrack_ftp

6  Installation du DNS (Domaine Name Server)

6.1  Le serveur Domain Name System.

Votre fournisseur d'accès met à votre disposition un outil pour traduire les noms FQDN en adresses IP. Chez Wanadoo, les DNS fournis aux clients sont généralement 193.252.19.3 et 193.252.19.4. Ce n'est pas une règle absolue, principalement pour les câblés.
Ce Serveur DNS travaille de manière "récursive" . Autrement dit, vous n'avez pas de questions à vous poser (sauf lorsqu'il ne fonctionne plus). Vous (ou votre logiciel) demandez de traduire un nom et vous attendez sagement la réponse, il s'occupe de tout. Le mécanisme est complètement transparent. Il est mis en route, par exemple, lorsque vous tapez quelque chose comme http://www.google.fr dans la barre d'adresse de votre navigateur.
Comme l'adresse de votre DNS vous est donnée avec le bail que vous accorde le DHCP (ou PPP), vous n'avez généralement même pas besoin de connaître son adresse IP.
Où les choses se compliquent un peu, c'est si vous avez par exemple réalisé la passerelle Linux entre le modem et votre (ou vos) ordinateur(s) personnel(s). Dans ce cas, la machine Linux est bien documentée sur l'adresse du DNS, mais pas votre ou vos postes qui sont, eux, configurés en "dur". Ils ont donc besoin de connaître une adresse de DNS pour pouvoir fonctionner.
Deux solutions sont alors possibles :

6.2  Mise en place

Il est bien évident que si votre sous-réseau ne comporte que quelques machines, un serveur DNS est un peu comme l'utilisation d'un char pour stopper une mouche. Mais bon, c'est surtout pour la beauté du geste :-).
Il est donc dans ce cas plus simple de passer par le fichier /etc/hosts
127.0.0.1	localhost
160.60.2.153	pport.lasc.sciences.univ-metz.fr	pport

#mettre les hosts sous la forme suivante si l'on utilise pas
#de DNS sur la machine passerelle. Il faut ensuite faire de même
#sur les machines clientes (/etc/hosts et c:\windows\hosts)
 192.168.1.2 pc1.ecole-belan.org pc1
 192.168.1.3 pc2.ecole-belan.org pc2
 192.168.1.4 pc3.ecole-belan.org pc3
 192.168.1.5 pc4.ecole-belan.org pc4
 192.168.1.6 pc5.ecole-belan.org pc5
 192.168.1.7 pc6.ecole-belan.org pc6
 192.168.1.8 pc7.ecole-belan.org pc7
 192.168.1.9 pc8.ecole-belan.org pc8

# The following lines are desirable for IPv6 capable hosts
# (added automatically by netbase upgrade)

::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

Allons y pour le DNS. Il faut tout d'abord installer un serveur de Noms. Je vous propose bind9 en standard sur la Debian. Toujours le même apt-get install bind9 pour l'installation.
Il faut ensuite configurer notre DNS par les fichiers qui se trouvent dans le répertoire /etc/bind.
Notre réseau local sera composé de quelques machine dont le nom de domaine sera ecole-belan.org. La passerelle vers internet et le serveur DNS sera notre machine actuelle. Il convient alors de modifier le fichier /etc/resolv.conf afin de ne plus pointer vers un DNS externe, mais sur la machine locale, c'est à dire 127.0.0.1. On fixe par la même occasion le domaine ecole-belan.org. Ceci nous donne : Fichier /etc/resolv.conf
search ecole-belan.org
nameserver 127.0.0.1

Il convient ensuite de configurer le fichier /etc/bind/named.conf, qui va permettre de définir le domaine de notre nouveau réseau. Il est assez facile de comprendre les différentes parties de ce fichier.
Ce fichier est le premier que BIND va lire. Nous y trouvons déjà des informations intéressantes...
options {
	directory "/var/cache/bind";

	// If there is a firewall between you and nameservers you want
	// to talk to, you might need to uncomment the query-source
	// directive below. Previous versions of BIND always asked
	// questions using port 53, but BIND 8.1 and later use an unprivileged
	// port by default.

	// query-source address * port 53;

	// If your ISP provided one or more IP addresses for stable 
	// nameservers, you probably want to use them as forwarders. 
	// Uncomment the following block, and insert the addresses replacing 
	// the all-0's placeholder.
/*
	allow-transfer {
		192.168.1.0/24;
		};
	allow-query {
		192.168.1.0/24;
		};
*/		
	forwarders {
		197.230.169.1; //dns de la fac
		};
		
	// forwarders {
	// 	0.0.0.0;
	// };

	auth-nxdomain no;  # conform to RFC1035

};

Au paragraphe öptions", on trouve:
zone "." {
	type hint;
	file "/etc/bind/db.root";
};

La zone "." est fondamentale pour ce que l'on veut réaliser. C'est elle qui permettra à BIND d'interroger les root-servers. Le fichier root.cache dont on a déjà parlé contient les adresses de ces root servers. Il doit être périodiquement mis à jour, nous verrons çà plus loin.
zone "127.in-addr.arpa" {
	type master;
	file "/etc/bind/db.127";
};

Cette zone est une zone de recherche inverse pour les adresses de type 127.0.0. Ces adresses sont utilisées exclusivement en interne par la pile TCP/IP et correspondent à l'hôte "localhost"
Maintenant nous allons ajouter un zone d'autorité. C'est un domaine ou un sous-domaine que le DNS sait traiter avec sa propre base de données. Nous pouvons en créer une pour résoudre les noms des hôtes de notre réseau privé. Ceci ne présente, encore une fois, pas un intérêt capital mais tant qu'on y est, pourquoi nous en priver? (surtout si vous montez par exemple un petit serveur apache pour réaliser votre intranet :-) Préparation du travail.
Vous avez en tête, bien entendu, l'adresse de chacun de vos postes privés ainsi que leur nom "NetBIOS", si ces postes sont sous Windows. Par ailleurs, vous connaissez également l'adresse et le nom de votre passerelle Linux.
Fixons les idées par un exemple: Nous allons nous choisir un joli nom de domaine : ecole-belan.org
zone "ecole-belan.org" {
	notify no;
	type master;
	file "/etc/bind/db.ecole-belan.org";
	};
	
zone "1.168.192.in-addr.arpa" {
	notify no;
	type master;
	file "/etc/bind/db.192.168.1";
	};

Ces deux zones ont été ajoutées, ce qui veut dire que l'on va trouver deux nouveaux fichiers dans le répertoire /etc/bind/ : Voici donc le fichier final :
Fichier /etc/bind/named.conf
// This is the primary configuration file for the BIND DNS server named.
//
// Please read /usr/share/doc/bind9/README.Debian for information on the 
// structure of BIND configuration files in Debian, *BEFORE* you customize 
// this configuration file.
//

options {
	directory "/var/cache/bind";

	// If there is a firewall between you and nameservers you want
	// to talk to, you might need to uncomment the query-source
	// directive below. Previous versions of BIND always asked
	// questions using port 53, but BIND 8.1 and later use an unprivileged
	// port by default.

	// query-source address * port 53;

	// If your ISP provided one or more IP addresses for stable 
	// nameservers, you probably want to use them as forwarders. 
	// Uncomment the following block, and insert the addresses replacing 
	// the all-0's placeholder.
/*
	allow-transfer {
		192.168.1.0/24;
		};
	allow-query {
		192.168.1.0/24;
		};
*/		
	forwarders {
		197.230.169.1;
		};
		
	// forwarders {
	// 	0.0.0.0;
	// };

	auth-nxdomain no;  # conform to RFC1035

};

// prime the server with knowledge of the root servers
zone "." {
	type hint;
	file "/etc/bind/db.root";
};

// be authoritative for the localhost forward and reverse zones, and for
// broadcast zones as per RFC 1912

zone "localhost" {
	type master;
	file "/etc/bind/db.local";
};

zone "127.in-addr.arpa" {
	type master;
	file "/etc/bind/db.127";
};

zone "0.in-addr.arpa" {
	type master;
	file "/etc/bind/db.0";
};

zone "255.in-addr.arpa" {
	type master;
	file "/etc/bind/db.255";
};

// add entries for other zones below here

zone "ecole-belan.org" {
	notify no;
	type master;
	file "/etc/bind/db.ecole-belan.org";
	};
	
zone "1.168.192.in-addr.arpa" {
	notify no;
	type master;
	file "/etc/bind/db.192.168.1";
	};

Fichier /etc/bind/db.O
;
; BIND reverse data file for broadcast zone
;
$TTL	604800
@	IN	SOA	localhost. root.localhost. (
			      1		; Serial
			 604800		; Refresh
			  86400		; Retry
			2419200		; Expire
			 604800 )	; Negative Cache TTL
;
@	IN	NS	localhost.

Fichier /etc/bind/db.127
;
; BIND reverse data file for local loopback interface
;
$TTL	604800
@	IN	SOA	localhost. root.localhost. (
			      1		; Serial
			 604800		; Refresh
			  86400		; Retry
			2419200		; Expire
			 604800 )	; Negative Cache TTL
;
@	IN	NS	localhost.
1.0.0	IN	PTR	localhost.

Le signifie qu'il est fait référence au serveur lui-même.
Notez le Start Of Authority (SOA) et le CNAME www de server1
Fichier /etc/bind/db.192.168.1
$TTL 86400
@	IN	SOA	pc.ecole-belan.org. root.ecole-belan.org. (
		2000042702; serial
		0; refresh
		0; retry
		0; expire
		0; default TTL
		)
@	IN	NS	pc.ecole-belan.org.
254	IN	PTR	pc.ecole-belan.org.

1	IN	PTR	pc1.ecole-belan.org.
2	IN	PTR	pc2.ecole-belan.org.
3	IN	PTR	pc3.ecole-belan.org.
4	IN	PTR	pc4.ecole-belan.org.
5	IN	PTR	pc5.ecole-belan.org.
6	IN	PTR	pc6.ecole-belan.org.
7	IN	PTR	pc7.ecole-belan.org.
8	IN	PTR	pc8.ecole-belan.org.

Pas grand chose à dire, de plus, si ce n'est que seul le dernier octet de l'adresse est signalé, c'est normal, nous sommes dans une classe C, les trois autres octets sont ceux du réseau.
Fichier /etc/bind/db.ecole-belan.org
$TTL 86400
@	IN	SOA 	pc.ecole-belan.org.	root.ecole-belan.org.(
		2000042701; serial
		3600; refresh
		900; retry
		1209600; expire
		43200; default TTL
		)
@	IN	NS	pc.ecole-belan.org
pc	IN	A	192.168.1.254
pc	IN	HINFO	"Pentium 133Mhz"	"Debian Woody 2.4.18fb"

pc1	IN	A	192.168.1.1
pc2	IN	A	192.168.1.2
pc3	IN	A	192.168.1.3
pc4	IN	A	192.168.1.4
pc5	IN	A	192.168.1.5
pc6	IN	A	192.168.1.6
pc7	IN	A	192.168.1.7
pc8	IN	A	192.168.1.8

Fichier /etc/bind/db.local
$TTL 86400
@	IN	SOA 	pc.ecole-belan.org.	root.ecole-belan.org.(
		2000042701; serial
		3600; refresh
		900; retry
		1209600; expire
		43200; default TTL
		)
@	IN	NS	pc.ecole-belan.org
pc	IN	A	192.168.1.254
pc	IN	HINFO	"Pentium 133Mhz"	"Debian Woody 2.4.18fb"

pc1	IN	A	192.168.1.1
pc2	IN	A	192.168.1.2
pc3	IN	A	192.168.1.3
pc4	IN	A	192.168.1.4
pc5	IN	A	192.168.1.5
pc6	IN	A	192.168.1.6
pc7	IN	A	192.168.1.7
pc8	IN	A	192.168.1.8

Fichier /etc/bind/db.root
;       This file holds the information on root name servers needed to
;       initialize cache of Internet domain name servers
;       (e.g. reference this file in the "cache  .  <file>"
;       configuration file of BIND domain name servers).
;
;       This file is made available by InterNIC registration services
;       under anonymous FTP as
;           file                /domain/named.root
;           on server           FTP.RS.INTERNIC.NET
;       -OR- under Gopher at    RS.INTERNIC.NET
;           under menu          InterNIC Registration Services (NSI)
;              submenu          InterNIC Registration Archives
;           file                named.root
;
;       last update:    Aug 22, 1997
;       related version of root zone:   1997082200
;
;
; formerly NS.INTERNIC.NET
;
.                        3600000  IN  NS    A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET.      3600000      A     198.41.0.4
;
; formerly NS1.ISI.EDU
;
.                        3600000      NS    B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET.      3600000      A     128.9.0.107
;
; formerly C.PSI.NET
;
.                        3600000      NS    C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET.      3600000      A     192.33.4.12
;
; formerly TERP.UMD.EDU
;
.                        3600000      NS    D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET.      3600000      A     128.8.10.90
;
; formerly NS.NASA.GOV
;
.                        3600000      NS    E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET.      3600000      A     192.203.230.10
;
; formerly NS.ISC.ORG
;
.                        3600000      NS    F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET.      3600000      A     192.5.5.241
;
; formerly NS.NIC.DDN.MIL
;
.                        3600000      NS    G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET.      3600000      A     192.112.36.4
;
; formerly AOS.ARL.ARMY.MIL
;
.                        3600000      NS    H.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET.      3600000      A     128.63.2.53
;
; formerly NIC.NORDU.NET
;
.                        3600000      NS    I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET.      3600000      A     192.36.148.17
;
; temporarily housed at NSI (InterNIC)
;
.                        3600000      NS    J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET.      3600000      A     198.41.0.10
;
; housed in LINX, operated by RIPE NCC
;
.                        3600000      NS    K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET.      3600000      A     193.0.14.129 
;
; temporarily housed at ISI (IANA)
;
.                        3600000      NS    L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET.      3600000      A     198.32.64.12
;
; housed in Japan, operated by WIDE
;
.                        3600000      NS    M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET.      3600000      A     202.12.27.33
; End of File

Il faur alors relancer le serveur de noms par :/etc/init.d/bind9 restart.
Maintenant il est possible de tester le bon fonctionnement du réseau. A partir d'un client il suffit de faire un ping pc pour essayer de communiquer avec le serveur. Si le pc répond c'est que tout fonctionne bien.

7  Installation d'un modem standard

Cette section concerne l'installation d'un modem standard en vue de faire passer notre passerelle et DNS en une machine de partage de connexion internet dans le cadre d'une utilisation personnelle ou un petit réseau de machine.
Comme toujours, le matérielle étant de récupération, il séagit d'un modem 28800 Kbits branché sur le port série de la machine.
Nous allon utiliser le paquet pppconfig pour la configuration de notre modem et de la connection.
La suite est tirée de http://www.via.ecp.fr/~alexis/formation-linux/internet.html
Cette section explique comment se connecter à Internet avec un modem classique branché sur une ligne téléphonique classique. La procédure ci-dessous doit marcher sans problèmes avec un modem externe branché sur port série, ou avec un modem PCMCIA ; par contre, pour les modems PCI ou les modems intégrés, la procédure est différente et dépend de chaque modem...

7.1  Modem PCMCIA

Vérifiez que le package pcmcia-cs est bien installé (si vous avez bien suivi mes consignes pour la procédure d'installation, il doit l'être). Avec la commande suivante, il installe le package s'il n'est pas installé, et, dans le cas contraire, t'informe qu'il est déjà installé.
# apt-get install pcmcia-cs

7.2  Modem externe sur port série

Regardez sur quel port série le modem est branché : Créez un lien symbolique /dev/modem pointant vers le bon périphérique ; par exemple, s'il est branché sur le port COM1, tapez :
# cd /dev
# ln -s ttyS0 modem

7.3  Vérification du modem

Si c'est un modem PCMCIA, insérez le carte dans votre portable ; si c'est un modem externe, allumez-le. Vous allez maintenant vérifier que le système a bien reconnu le modem :
# setserial /dev/modem
/dev/modem, UART: 16550A, Port: 0x03e8, IRQ: 0

7.4  Configuration de la connexion vers le fournisseur d'accès

Le plus simple pour configurer la connexion vers votre fournisseur d'accès est d'utiliser l'assistant qui est installé par défaut :
# pppconfig

Sélectionnez Create - Create a connection et répondez aux questions successives :
  1. Provider Name : rentrez un nom pour cette connexion (par exemple le nom de votre fournisseur d'accès Internet) ;

  2. Configure Nameservers (DNS) : sélectionnez Use dynamic DNS pour obtenir automatiquement les adresses des serveurs DNS de votre fournisseur d'accès à chaque connexion ;

  3. Authentication Method : sélectionnez PAP Peer Authentication Protocol [FIXME : je ne sais pas dans quel cas il faut sélectionner Chat] ;

  4. User Name : tapez le login qui vous a été attribué par votre fournisseur d'accès (tapez-le entre guillements si le login contient des caractères de ponctuation) ;

  5. Password : tapez le mot de passe qui vous a été donné par votre fournisseur d'accès (tapez-le entre guillements si le mot de passe contient des caractères de ponctuation) ;

  6. Speed : laissez la valeur 115200 qui est présente par défaut ;

  7. Pulse or Tone : si votre ligne téléphonique fonctionne à fréquences vocales (ce qui est le cas presque partout en France), sélectionnez Tone ; si votre ligne fonctionne avec les impulsions, sélectionnez Pulse ;

  8. Phone Number : rentrez le numéro de téléphone de votre fournisseur d'accès ;

  9. Choose Modem Config Method : répondez No ;

  10. Manually Select Modem Port : tapez /dev/modem, qui est le lien symbolique qui pointe vers le bon périphérique ;

  11. Properties of nom_de_la_connexion : si vous pensez avoir bien répondu à toutes les questions, sélectionnez Finished - Write files and return to main menu et OK ;

  12. Main Menu : sélectionnez Quit - Exit this utility.

Pour créer une deuxième connexion, changer une connexion existante ou supprimer une connexion, relancez cet assistant et laissez-vous guider par les boites de dialogues (qui ne sont malheureusement pas encore traduites). Se connecter
Pour se connecter au fournisseur d'accès, c'est très simple :
# pon nom_de_la_connexion

où nom_de_la_connexion est le nom que vous aviez entré à la première question de l'assistant.
Vous devez normalement entendre le modem se connecter. Pour suivre l'établissement de la connexion, tapez :
# plog -f

Dès que vous voyez une ligne du genre :
Dec 27 19:42:54 alpy pppd[1825]: Script /etc/ppp/ip-up started (pid 1843)

cela signifie que la connexion est établie. Vous pouvez alors arrêter l'affichage des messages (encore appelés logs) par la combinaison de touches Ctrl-c.
Pour se déconnecter :
# poff nom_de_la_connexion

Pour permettre à un simple utilisateur de se connecter et se déconnecter, il faut le rajouter aux groupes dialout et dip ; et pour lui permettre d'utiliser la commande plog, il faut le rajouter au groupe adm :
# adduser toto dialout
# adduser toto dip
# adduser toto adm

où toto est le nom de l'utilisateur à qui vous voulez rajouter les droits. Il pourra alors lancer lui-même les commandes pon, poff et plog.


File translated from TEX by TTH, version 3.40.
On 8 Jul 2003, 08:23.