Résumé
Le code des outils de configuration réseau ne faisant pas partie du noyau est généralement appelé : userspace code.
À partir de la version 2.2 du noyau LINUX, de nombreuses
fonctionnalités sont apparues dans le support du protocole
TCP/IP, notamment au niveau du routage. Pour pouvoir
utiliser ces nouveautés, les outils classiques tels que
ifconfig ou route ne suffisent plus. Il
convient d'utiliser un nouvel outil, appelé
iproute2. Le paquet de la distribution
Debian GNU/Linux est baptisé
iproute.
La syntaxe générale pour l'outil iproute2 est la suivante :
Usage: ip [ OPTIONS ] OBJET { COMMAND | help }
où OBJET := { link | addr | route | rule | neigh | tunnel |
maddr | mroute | monitor }
OPTIONS := { -V[ersion] | -s[tatistics] | -r[esolve] |
-f[amily] { inet | inet6 | dnet | link } | -o[neline] }
Les différents objets permettent de voir ou de configurer un élément du réseau.
L'objet link permet de visualiser l'état des périphériques réseaux et de les modifier. La syntaxe générale pour cette option est la suivante :
Usage: ip link set DEVICE { up | down | arp { on | off } |
dynamic { on | off } |
multicast { on | off } | txqueuelen PACKETS |
name NEWNAME |
address LLADDR | broadcast LLADDR |
mtu MTU }
ip link show [ DEVICE ]
Cette option ne s'intéresse qu'au niveau 2 du modèle OSI.
Cet objet permet d'attacher une ou plusieurs adresses IPv4 ou IPv6 à un périphérique réseau.
Usage: ip addr {add|del} IFADDR dev STRING
ip addr {show|flush} [ dev STRING ] [ scope SCOPE-ID ]
[ to PREFIX ] [ FLAG-LIST ] [ label PATTERN ]
IFADDR := PREFIX | ADDR peer PREFIX
[ broadcast ADDR ] [ anycast ADDR ]
[ label STRING ] [ scope SCOPE-ID ]
SCOPE-ID := [ host | link | global | NUMBER ]
FLAG-LIST := [ FLAG-LIST ] FLAG
FLAG := [ permanent | dynamic | secondary | primary |
tentative | deprecated ]
La configuration de base d'une interface réseau ressemble à ceci :
# ifconfig eth0 192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255 # route add default gw 192.168.0.1
Les commandes équivalentes avec l'outil
iproute2 sont les suivantes :
# ip addr add 192.168.0.2/24 dev eth0 brodcast 192.168.0.255 # ip route add default dev eth0 via 192.168.0.1
Le routage du trafic IP a été complètement revu avec le noyau 2.2. Avant cette version, la prise de décision ne se faisait qu'en consultant l'adresse de destination. Dans certaines circonstances, on peut souhaiter router les paquets IP en se basant sur d'autres champs : adresse source, champs TOS, etc.
Le routage est maintenant basé sur l'existence d'un ensemble de règles,
qui dirigent le paquet vers des tables de routage. L'ensemble de ces règles
est vu comme une base de données par le noyau, que l'on appelle
Routing Policy DataBase (RPDB).
Cette base de données de la politique de routage est en fait une liste
linéaire de règles ordonnées par une valeur numérique de priorité. La gestion
de ces règles se fait par l'intermédiaire de l'objet rule,
dont voici la syntaxe :
Usage: ip rule [ list | add | del ] SELECTOR ACTION
SELECTOR := [ from PREFIX ] [ to PREFIX ] [ tos TOS ] [ fwmark FWMARK ]
[ dev STRING ] [ pref NUMBER ]
ACTION := [ table TABLE_ID ] [ nat ADDRESS ]
[ prohibit | reject | unreachable ]
[ realms [SRCREALM/]DSTREALM ]
TABLE_ID := [ local | main | default | NUMBER ]
Chaque règle est constituée d'un sélecteur et d'une action. Quand le noyau a besoin de prendre une décision sur le routage, la Routing Policy DataBase (RPDB) est scannée dans l'ordre des priorités croissantes. Pour chaque paquet, on compare le sélecteur de la règle et l'en-tête du paquet. Si il y a correspondance entre les deux, l'action est réalisée. En général, l'action consiste à se «brancher» sur une table de routage qui contient l'information utile. Si l'action ne parvient pas à déterminer une route, alors la règle suivante est examinée. La commande suivante permet de lister l'ensemble des règles définies dans la base RPDB :
$ ip rule ls
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
Ces lignes méritent quelques explications. Les chiffres de la colonne
de gauche indiquent la priorité de la règle. Ensuite, on a le sélecteur. Dans
ce cas, toutes les règles seront appliquées à tous les paquets
(from all). Enfin, on a l'action. Le mot-clé
lookup indique d'aller regarder la table de routage dont le
nom suit.
Une fois que le noyau a sélectionné la table à consulter, il recherche
dans celle-ci les informations de routage proprement dites. Ces informations
précisent le périphérique de sortie et éventuellement l'adresse de la
prochaine passerelle. Par défaut, il y a trois tables de routage :
local, main et
default.
local : cette table est une table un peu
spéciale ayant la plus grande priorité. Elle contient les routes pour les
adresses locales et les adresses de diffusion.
main : cette table est la table de routage
normale, et ce sont les informations contenues dans celle-ci qui seront
affichées par la commande ip route ls.
default : cette table est généralement vide et
n'est consultée que si les règles précédentes n'ont pas sélectionné le
paquet.
La syntaxe associée à l'objet route est la suivante :
Usage: ip route { list | flush } SELECTOR
ip route get ADDRESS [ from ADDRESS iif STRING ]
[ oif STRING ] [ tos TOS ]
ip route { add | del | change | append | replace | monitor } ROUTE
SELECTOR := [ root PREFIX ] [ match PREFIX ] [ exact PREFIX ]
[ table TABLE_ID ] [ proto RTPROTO ]
[ type TYPE ] [ scope SCOPE ]
ROUTE := NODE_SPEC [ INFO_SPEC ]
NODE_SPEC := [ TYPE ] PREFIX [ tos TOS ]
[ table TABLE_ID ] [ proto RTPROTO ]
[ scope SCOPE ] [ metric METRIC ]
INFO_SPEC := NH OPTIONS FLAGS [ nexthop NH ]...
NH := [ via ADDRESS ] [ dev STRING ] [ weight NUMBER ] NHFLAGS
OPTIONS := FLAGS [ mtu NUMBER ] [ advmss NUMBER ]
[ rtt NUMBER ] [ rttvar NUMBER ]
[ window NUMBER] [ cwnd NUMBER ] [ ssthresh REALM ]
[ realms REALM ]
TYPE := [ unicast | local | broadcast | multicast | throw |
unreachable | prohibit | blackhole | nat ]
TABLE_ID := [ local | main | default | all | NUMBER ]
SCOPE := [ host | link | global | NUMBER ]
FLAGS := [ equalize ]
NHFLAGS := [ onlink | pervasive ]
RTPROTO := [ kernel | boot | static | NUMBER ]
Vous êtes ici :