3.
Configuration du routeur Linux
3.1 INSTALLATION D'UNE DISTRIBUTION LINUX ET COMPILATION
DU NOYAU
On a choisi
arbitrairement de travailler sous Mandrake Linux 9.0.
Cette distribution comporte déjà un noyau 2.4 (en fait, 2.4.19). Il suffit donc
de le recompiler en validant les options de routage avancé (cf. section 3.1),
en particulier :
CONFIG_IP_ADVANCED_ROUTER=y
CONFIG_IP_MULTIPLE_TABLES=y
CONFIG_IP_ROUTE_FWMARK=y
CONFIG_IP_ROUTE_TOS=y
Ainsi que celles de
gestion des files d’attente :
#
# QoS and/or fair queueing
#
CONFIG_NET_SCH_CBQ=y
CONFIG_NET_SCH_HTB=y
CONFIG_NET_SCH_CSZ=y
CONFIG_NET_SCH_PRIO=y
CONFIG_NET_SCH_RED=y
CONFIG_NET_SCH_SFQ=y
CONFIG_NET_SCH_TEQL=y
CONFIG_NET_SCH_TBF=y
CONFIG_NET_SCH_GRED=y
CONFIG_NET_SCH_DSMARK=y
CONFIG_NET_SCH_INGRESS=y
CONFIG_NET_QOS=y
CONFIG_NET_CLS=y
CONFIG_NET_CLS_TCINDEX=y
CONFIG_NET_CLS_ROUTE4=y
CONFIG_NET_CLS_ROUTE=y
CONFIG_NET_CLS_FW=y
CONFIG_NET_CLS_U32=y
CONFIG_NET_CLS_RSVP=y
CONFIG_NET_CLS_RSVP6=y
CONFIG_NET_CLS_POLICE=y
3.2 CONFIGURATION DE L'INTERFACE RESEAU (CARTE ETHERNET)
Il est nécessaire
d’avoir les droits de super utilisateur root pour effectuer les configurations de la machine. Pour toute
la suite de ce document, on supposera que l’on est en root
(commande su par exemple). On attribue à la carte Ethernet l’adresse IP
192.168.0.2 en modifiant le fichier /etc/sysconfig/network-scripts/ifconfig_eth0 :
DEVICE = eth0
BOOTPROTO = static
IPADDR = 192.168.0.2
NETMASK = 255.255.255.0
NETWORK = 192.168.0.0
BROADCAST = 192.168.0.255
ONBOOT = yes
On réactive l’interface eth0 :
# ip link
set eth0 up
On obtient alors la
table de routage suivante :
# ip route show
192.168.0.0/24 via 192.168.0.2 dev eth0 scope link
192.168.0.0/24 dev eth0 scope link
127.0.0.0/8 dev lo
scope link
default via 192.168.0.1 dev
eth0
default via 192.168.0.1 dev
eth0 metric 2
3.3
CONFIGURATION DU RESEAU VIRTUEL
On cherche à simuler
une deuxième carte Ethernet sur notre machine, d’adresse IP 192.168.1.2, avec
toujours pour destination par défaut l’adresse 192.168.0.1. Pour cela, on
utilise le procédé d’IP Aliasing
(avec ifconfig) ou de labelisation (iproute2) :
# ifconfig eth0:0 192.168.1.2
ou encore avec l’outil iproute2 :
# ip addr add
local 192.168.1.2/24 brd 192.168.1.255 dev eth0 label eth0:0 scope link
où l’on spécifie une
adresse réseau sur 24 bits, soit l’équivalent d’une classe C, et une adresse de
diffusion 192.168.1.255 sur l’interface eth0:0. On vérifie en affichant la configuration de nos
interfaces :
# ip addr
show
1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet
127.0.0.1/8 brd 127.255.255.255 scope host lo
2: eth0: <BROADCAST,MULTICAST,PROMISC,UP> mtu
1500 qdisc pfifo_fast qlen 100
link/ether
00:06:29:a9:d4:30 brd ff:ff:ff:ff:ff:ff
inet
192.168.1.2/24 brd 192.168.1.255 scope link eth0:0
inet
192.168.0.2/24 brd 192.168.0.255 scope global eth0
On remarque au
passage que le gestionnaire de file d’attente (qdisc) par défaut est de type pfifo_fast et que la longueur de la file qlen est de 100.
On obtient la table
de routage ci-dessous :
# ip route
192.168.1.0/24
dev eth0 proto kernel scope link
src 192.168.1.2
192.168.0.0/24
via 192.168.0.2 dev eth0 scope link
192.168.0.0/24
dev eth0 scope link
127.0.0.0/8
dev lo scope link
default via 192.168.0.1 dev
eth0
qui correspond avec l’outil route à la table qui suit :
#
route –n
Table
de routage IP du noyau
Destination Passerelle Genmask Indic Metric Ref Use
Iface
192.168.1.0 0.0.0.0 255.255.255.0 U
0 0 0
eth0
192.168.0.0 192.168.0.2 255.255.255.0 UG
0 0 0
eth0
192.168.0.0 0.0.0.0 255.255.255.0 U
0 0 0
eth0
127.0.0.0 0.0.0.0 255.0.0.0 U
0 0 0 lo
0.0.0.0 192.168.0.1 0.0.0.0 UG
0 0 0 eth0
3.4
CONFIGURATION RESEAU DU NOYAU
Il ne reste plus qu’à
indiquer au noyau qu’il doit transmettre les paquets, ici du réseau 192.168.0.0
au réseau 192.168.1.0 et vice versa, ce que l’on effectue avec la commande
suivante :
echo 1 > /proc/sys/net/ipv4/ip_forward
3.5
VERIFICATIONS D'USAGE
Une fois le routeur
configuré, on vérifie si tout s’est bien déroulé en envoyant des ping sur ses deux adresses IP :
# ping -c 3 192.168.0.2
PING 192.168.0.2 (192.168.0.2) from 192.168.0.3 :
56(84) bytes of data.
64 bytes from 192.168.0.2: icmp_seq=1 ttl=128 time=0.370
ms
64 bytes from 192.168.0.2: icmp_seq=2 ttl=128
time=0.239 ms
64 bytes from 192.168.0.2: icmp_seq=3 ttl=128
time=0.251 ms
--- 192.168.0.2 ping statistics ---
3 packets transmitted, 3 received, 0% loss, time
1998ms
rtt min/avg/max/mdev = 0.239/0.286/0.370/0.062 ms
# ping -c 3 192.168.1.2
PING 192.168.1.2 (192.168.1.2) from 192.168.1.2 :
56(84) bytes of data.
64 bytes from 192.168.1.3: icmp_seq=1 ttl=64
time=0.048 ms
64 bytes from 192.168.1.3: icmp_seq=2 ttl=64
time=0.034 ms
64 bytes from 192.168.1.3: icmp_seq=3 ttl=64
time=0.034 ms
--- 192.168.1.3 ping statistics ---
3 packets transmitted, 3 received, 0% loss, time
1998ms
rtt min/avg/max/mdev = 0.034/0.038/0.048/0.009 ms
ainsi que vers le modem adsl d’adresse
IP 192.168.0.1 :
# ping -c 3 192.168.0.1
PING 192.168.0.1 (192.168.0.1) from 192.168.0.3 :
56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=1 ttl=254
time=1.07 ms
64 bytes from 192.168.0.1: icmp_seq=2 ttl=254
time=0.625 ms
64 bytes from 192.168.0.1: icmp_seq=3 ttl=254 time=0.628
ms
--- 192.168.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% loss, time
2007ms
rtt min/avg/max/mdev = 0.625/0.776/1.076/0.213 ms
On vérifie également
que l’on a bien accès à Internet, par exemple, en ouvrant une page web.