Chapitre 32. Administration réseau avancée

This translation may be out of date. To help with the translations please access the FreeBSD translations instance.

32.1. Synopsis

Ce chapitre abordera certains nombre de sujets réseau avancés.

Après la lecture de ce chapitre, vous connaîtrez:

  • Les bases sur les passerelles et les routes.

  • Comment configurer les périphériques IEEE 802.11 et Bluetooth®.

  • Comment utiliser FreeBSD en tant que pont ("bridge").

  • Comment configurer le démarrage via le réseau pour une machine sans disque dur.

  • Comment configurer la translation d’adresse réseau.

  • Comment connecter deux ordinateurs via PLIP.

  • Comment configurer l’IPv6 sur une machine FreeBSD.

  • Comment configurer ATM.

Avant de lire ce chapitre, vous devrez:

32.2. Passerelles et routes

Pour qu’une machine soit en mesure d’en contacter une autre, il faut que soit mis en place un mécanisme qui décrive comment aller de l’une à l’autre. C’est ce que l’on appelle le routage. Une "route" est définie par une paire d’adresses: une "destination" et une "passerelle". Cette paire signifie que pour atteindre cette destination, vous devez passer par cette passerelle. Il y a trois sortes de destination: les machines individuelles, les sous-réseaux, et "default"-la destination par défaut. La route par défaut ("default route") est utilisée lorsqu’aucune autre route n’est applicable. Nous parlerons un peu plus des routes par défaut par la suite. Il existe également trois sortes de passerelles: les machines individuelles, les interfaces (aussi appelées "liens"), et les adresses Ethernet matérielles (adresses MAC).

32.2.1. Un exemple

Pour illustrer différents aspects du routage, nous utiliserons l’exemple suivant, qui est produit par la commande netstat:

% netstat -r
Routing tables

Destination      Gateway            Flags     Refs     Use     Netif Expire

default          outside-gw         UGSc       37      418      ppp0
localhost        localhost          UH          0      181       lo0
test0            0:e0:b5:36:cf:4f   UHLW        5    63288       ed0     77
10.20.30.255     link#1             UHLW        1     2421
example.com      link#1             UC          0        0
host1            0:e0:a8:37:8:1e    UHLW        3     4601       lo0
host2            0:e0:a8:37:8:1e    UHLW        0        5       lo0 =>
host2.example.com link#1             UC          0        0
224              link#1             UC          0        0

Les deux premières lignes définissent la route par défaut (dont nous parlerons dans la section suivante) et la route localhost.

L’interface (colonne Netif) qu’il est indiqué d’utiliser pour localhost est lo0, aussi appelée interface "loopback"-en boucle. Ce qui veut dire que tout le trafic vers cette destination doit rester interne, au lieu d’être envoyé sur le réseau local, puisqu’il reviendra de toute façon à son point de départ.

Ce qui se remarque ensuite, ce sont les adresses commençant par 0:e0:. Ce sont les adresses Ethernet matérielles, qui sont également connues sous le nom d’adresses MAC. FreeBSD reconnaîtra automatiquement toute machine (test0 dans l’exemple) sur le réseau local Ethernet et ajoutera une route vers cette machine, directement via l’interface Ethernet ed0. Il y a aussi un délai (colonne Expire) associé à ce type de route, qui est utilisé si l’on entend plus parler de cette machine pendant un laps de temps précis. Quand cela arrive, la route vers cette machine est automatiquement supprimée. Ces machines sont identifiées par un mécanisme appelé RIP ("Routing Information Protocol"-protocole d’information de routage), qui met en place des routes vers les machines locales en déterminant le chemin le plus court.

FreeBSD ajoutera également des routes de sous-réseau pour le sous-réseau local (10.20.30.255 est l’adresse de diffusion pour le sous-réseau 10.20.30, et example.com est le nom de domaine associé à ce sous-réseau). La dénomination link#1 fait référence à la première carte Ethernet de la machine. Vous constaterez qu’il n’y a pas d’autre interface associée à ces routes.

Ces deux types de routes (vers les machines du réseau local et les sous-réseaux locaux) sont automatiquement configurés par un "daemon" appelé routed. S’il ne tourne pas, alors seules les routes définies comme statiques (i.e. explicitement définies) existeront.

La ligne host1 fait référence à votre machine, qui est identifiée par l’adresse Ethernet. Puisque nous sommes l’émetteur, FreeBSD sait qu’il faut utiliser l’interface en "boucle" (lo0) plutôt que d’envoyer les données sur l’interface Ethernet.

Les deux lignes host2 montrent ce qui se passe quand on utilise un alias avec ifconfig(8) (lisez la section sur l’Ethernet pour savoir pour quelles raisons on peut vouloir cela). Le symbole = qui suit l’interface lo0 indique que non seulement nous utilisons l’interface en "boucle" (puisque cette adresse correspond également à la machine locale), mais que c’est plus spécifiquement un alias. Ce type de route n’apparaît que sur la machine pour laquelle est défini l’alias; sur toutes les autres machines du réseau local il n’y aura q’une ligne link#1 pour cette machine.

La dernière ligne (le sous-réseau destinataire 224) concerne le multicasting (diffusion pour plusieurs destinataires), qui sera abordé dans une autre section.

Et enfin, diverses caractéristiques de chaque route sont indiquées dans la colonne Flags (indicateurs). Ci-dessous, une courte table présente certains de ces indicateurs et leur signification:

U

Active ("Up"): la route est active.

H

Machine ("Host"): la destination de la route est une machine.

G

Passerelle ("Gateway"): envoyer tout ce qui concerne cette destination sur la machine distante indiquée, qui déterminera à qui transmettre ensuite.

S

Statique ("Static"): cette route a été configurée manuellement et non pas générée automatiquement par le système.

C

Clone: génère une nouvelle route sur la base de celle-ci pour les machines auxquelles nous nous connectons. Ce type de route est normalement utilisé pour les réseaux locaux.

W

Clonée ("WasCloned"): cette route a été auto-configurée (Clone) à partir d’une route pour le réseau local.

L

Lien ("Link"): la route fait référence à une adresse matérielle Ethernet.

32.2.2. Routes par défaut

Quand le système local doit établir une connexion avec une machine distante, il consulte la table de routage pour voir s’il existe déjà une route connue. Si la machine distante appartient à un sous-réseau auquel le système sait se connecter (routes clonées), alors le système vérifie s’il peut se connecter via cette interface.

Si toutes les routes connues échouent, il reste alors au système une dernière option: la route par "défaut". Cette route est un type particulier de route passerelle (c’est généralement la seule du système), et est toujours marquée avec un c dans le champ des indicateurs. Pour les machines du réseau local, cette passerelle est définie avec la machine qui est directement connectée au monde extérieur (que ce soit par une liaison PPP, DSL, cable, T1, ou toute autre interface réseau).

Si vous configurez la route par défaut sur une machine qui fonctionne comme passerelle vers le monde extérieur, alors la route par défaut sera la passerelle de votre Fournisseur d’Accès à Internet (FAI).

Examinons un exemple de route par défaut. Voici une configuration classique:

net routing

Les machines Local1 et Local2 sont sur votre site. Local1 est connectée au serveur du FAI via une liaison PPP par modem. Ce serveur PPP est connecté par l’intermédiaire d’un réseau local à un autre ordinateur passerelle relié au point d’entrée Internet du FAI.

Les routes par défaut sur chacune de vos machines seront:

MachinePasserelle par défautInterface

Local2

Local1

Ethernet

Local1

T1-GW

PPP

Une question qui revient souvent est "Pourquoi (ou comment) définir T1-GW comme passerelle par défaut pour Local1, plutôt que le serveur du FAI auquel elle est connectée?".

Rappelez-vous, puisque l’interface PPP utilise, de votre côté de la connexion, une adresse IP du réseau local du FAI, les routes vers toute autre machine du réseau local du FAI seront automatiquement générées. Par conséquent vous savez déjà comment atteindre la machine T1-GW, il n’y a donc pas besoin d’étape intermédiaire qui passe par le serveur du FAI.

Il est habituel d’attribuer l’adresse X.X.X.1 à la passerelle sur votre réseau local. Donc (dans notre exemple), si votre espace d’adresse de classe C local était 10.20.30 et que votre FAI utilisait l’espace 10.9.9, alors les routes par défaut seraient:

MachineRoute par défaut

Local2 (10.20.30.2)

Local1 (10.20.30.1)

Local1 (10.20.30.1, 10.9.9.30)

T1-GW (10.9.9.1)

Vous pouvez aisément définir la route par défaut via le fichier /etc/rc.conf. Dans notre exemple, sur la machine Local2, nous avons ajouté la ligne suivante dans /etc/rc.conf:

defaultrouter="10.20.30.1"

Il est également possible de faire directement cela à partir de la ligne de commande avec la commande route(8):

# route add default 10.20.30.1

Pour plus d’informations sur la manipulation à la main des tables de routage réseau, consultez la page de manuel route(8).

32.2.3. Machines sur deux réseaux

Il y a un autre type de configuration dont il faut parler, c’est celle d’une machine qui est connectée à deux réseaux différents. Techniquement, toute machine servant de passerelle (comme dans l’exemple ci-dessus, en utilisant une connexion PPP) est une machine sur deux réseaux. Mais ce terme n’est normalement utilisé que pour faire référence à une machine qui est sur deux réseaux locaux différents.

Selon le cas, la machine dispose de deux cartes Ethernet, ayant chacune une adresse sur des sous-réseaux séparés. Alternativement, la machine peut ne disposer que d’une seule carte Ethernet, et utiliser des alias avec ifconfig(8). Le premier cas correspond à l’utilisation de deux réseaux Ethernet physiquement séparés, le deuxième cas est employé s’il n’y a qu’un seul réseau physique mais deux sous-réseaux logiquement distincts.

Dans les deux cas, les tables de routage sont définies de telle sorte que chaque sous-réseau sache que cette machine est la passerelle (route entrante) vers l’autre sous-réseau. Cette configuration, où la machine sert de routeur entre les deux sous-réseaux, est souvent utilisée quand il faut mettre en place un dispositif de sécurité: filtrage de paquets ou coupe-feu, dans l’une ou dans les deux directions.

Si vous voulez que cette machine transmette réellement les paquets entre les deux interfaces, vous devez demander à FreeBSD d’activer cette fonctionnalité. Lisez la section suivante pour plus de détails sur comment faire cela.

32.2.4. Mettre en place un routeur

Un routeur est un système qui transmet les paquets d’une interface à une autre. Les standards de l’Internet et de bons principes d’ingénierie empêchent le projet FreeBSD d’activer cette fonction par défaut sous FreeBSD. Vous pouvez l’activer en positionnant à YES la variable suivante du fichier rc.conf(5):

gateway_enable=YES          # Set to YES if this host will be a gateway

Cette option fixera la variable sysctl(8) net.inet.ip.forwarding à la valeur 1. Si vous devez arrêter temporairement le routage, vous pouvez positionner la variable momentanément à 0.

Votre nouveau routeur aura besoin de route pour savoir où envoyer le trafic. Si votre réseau est suffisamment simple vous pouvez utiliser des routes statiques. FreeBSD est également fourni avec le "daemon" de routage BSD standard routed(8), qui comprend et utilise les protocoles RIP (version 1 est 2) et IRDP. Le support de BGP v4, OSPF v2, et d’autres protocoles de routage sophistiqué est disponible avec le logiciel net/zebra. Des produits commerciaux comme GateD® sont également disponibles comme solutions avancées de routage.

32.2.5. Configurarion des routes statiques

32.2.5.1. Configuration manuelle

Supposons que nous avons un réseau comme celui-ci:

static routes

Dans ce scénario, RouteurA est notre machine FreeBSD qui joue le rôle de routeur pour l’Internet. Elle a une route par défaut vers 10.0.0.1 qui permet de se connecter au reste du monde extérieur. Nous supposerons que la machine RouteurB est correctement configurée et sait comment transmettre vers n’importe quelle destination (D’après notre schéma c’est relativement simple. Ajoutez juste une route par défaut sur RouteurB en utilisant 192.168.1.1 comme passerelle).

Si nous regardons la table de routage de RouteurA nous verrions quelque chose comme:

% netstat -nr
Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif  Expire
default            10.0.0.1           UGS         0    49378    xl0
127.0.0.1          127.0.0.1          UH          0        6    lo0
10.0.0/24          link#1             UC          0        0    xl0
192.168.1/24       link#2             UC          0        0    xl1

Avec la table de routage actuelle, RouteurA ne sera pas en mesure d’atteindre notre réseau interne 2. Elle ne dispose pas de route pour 192.168.2.0/24. Une manière de résoudre cela est d’ajouter manuellement la route. La commande suivante ajouterait le réseau interne 2 à la table de routage de RouteurA en utilisant 192.168.1.2 comme point intermédiaire:

# route add -net 192.168.2.0/24 192.168.1.2

Maintenant RouteurA peut joindre n’importe quelle machine du réseau 192.168.2.0/24.

32.2.5.2. Configuration persistante

L’exemple précédent est parfait pour configurer une route statique sur un système en fonctionnement. Cependant, le problème est que l’information de routage ne sera pas conservée si vous redémarrez votre machine FreeBSD. L’addition d’une route statique doit se faire dans votre fichier /etc/rc.conf:

# Add Internal Net 2 as a static route
static_routes="internalnet2"
route_internalnet2="-net 192.168.2.0/24 192.168.1.2"

La variable static_routes est une liste de chaîne de caractères séparées par une espace. Chaque chaîne fait référence à un nom de route. Dans notre exemple nous avons qu’une seule chaîne dans static_routes. Cette chaîne est internalnet2. Nous ajoutons ensuite une variable de configuration appelée route_internalnet2 dans laquelle nous mettons tous les paramètres de configuration que nous passerions à la commande route(8). Pour nous exemple précédent nous aurions utilisé la commande:

# route add -net 192.168.2.0/24 192.168.1.2

nous avons donc besoin de "-net 192.168.2.0/24 192.168.1.2".

Comme cela a été précisé, nous pouvons avoir plus d’une chaîne dans la variable static_routes. Cela nous permet de créer plusieurs routes statiques. Les lignes suivantes donnent un exemple d’ajout de routes statiques pour les réseaux 192.168.0.0/24 et 192.168.1.0/24 sur un routeur imaginaire:

static_routes="net1 net2"
route_net1="-net 192.168.0.0/24 192.168.0.1"
route_net2="-net 192.168.1.0/24 192.168.1.1"

32.2.6. Propagation de route

Nous avons déjà expliqué comment définir nos routes vers le monde extérieur, mais pas comment le monde extérieur apprend à nous localiser.

Nous savons déjà que les tables de routages peuvent être renseignées pour que tout le trafic pour un espace d’adresses donné (dans nos exemples, un sous-réseau de classe C) soit envoyé à une machine précise de ce réseau, qui transmettra les paquets entrants.

Lorsqu’il attribue un espace d’adresses à votre site, votre fournisseur d’accès définira ses tables de routage de sorte que tout le trafic destiné à votre sous-réseau vous soit envoyé sur votre liaison PPP. Mais comment les sites à l’autre bout du pays savent-ils qu’ils doivent passer par votre fournisseur d’accès?

Il existe un mécanisme (assez semblable au système d’information distribué du DNS) qui conserve un enregistrement de tous les espaces d’adresses affectés, et définit leur point de connexion à la dorsale Internet ("backbone"). La "dorsale" comprend les liaisons principales qui véhiculent le trafic Internet à travers le pays et le monde entier. Chaque machine de la dorsale dispose d’une copie de l’ensemble des tables maîtresses qui aiguillent le trafic pour un réseau donné vers le transporteur correspondant de la dorsale, et de là par l’intermédiaire de fournisseurs d’accès successifs, jusqu’à atteindre votre réseau.

C’est le rôle de votre fournisseur d’accès d’annoncer aux sites de la dorsale qu’il est le point de connexion (et par conséquent la route entrante) pour votre site. C’est ce que l’on appelle la propagation de route.

32.2.7. En cas de problème

Il se peut qu’il y ait parfois un problème avec la propagation de route et que certains sites ne puissent vous atteindre. La commande probablement la plus utile pour déterminer où une route est défaillante est la commande traceroute(8). Elle est également utile si vous n’arrivez pas à vous connecter à une machine distante (i.e. lorsque ping(8) échoue).

La commande traceroute(8) prend comme paramètre le nom de la machine distante avec laquelle vous essayez d’établir une connexion. Elle vous donnera la liste de passerelles intermédiaires jusqu’à la machine cible, ou jusqu’à ce qu’il n’y ait plus de connexion.

Pour plus d’informations, consultez la page de manuel de traceroute(8).

32.2.8. Routage multicast

FreeBSD supporte nativement les applications et le routage multicast (diffusion pour plusieurs destinataires). Les applications multicast ne nécessitent pas de configuration spécifique de FreeBSD, généralement, elles fonctionneront directement. Le routage multicast demande à ce que le support soit compilé dans le noyau:

options MROUTING

De plus, le "daemon" de routage multicast, mrouted(8) doit être configuré par l’intermédiaire du fichier /etc/mrouted.conf pour mettre en place des tunnels et le protocole DVMRP. Plus de détails sur la configuration du routage multicast peuvent être trouvés dans la page de manuel de mrouted(8).

32.3. Réseau sans fil

32.3.1. Introduction

Il peut être très utile de pouvoir utiliser un micro-ordinateur sans le désagrément d’être constamment relié à un câble réseau. FreeBSD peut être utilisé comme client sans fil, et même comme "point d’accès" sans fil.

32.3.2. Modes de fonctionnement des systèmes sans fils

Il existe deux manières différentes de configurer les périphériques sans fil 802.11: les modes BSS et IBSS.

32.3.2.1. Mode BSS

Le mode BSS est le mode généralement utilisé. Le mode BSS est également appelé mode infrastructure. Dans ce mode, plusieurs points d’accès sans fils sont connectés à un réseau câblé. Chaque réseau sans fil possède son propre nom. Ce nom est ce que l’on appelle le "SSID" du réseau.

Les clients sans fils se connectent à ces points d’accès sans fils. La norme IEEE 802.11 définie le protocole que les réseaux sans fils utilisent pour les connexions. Un client sans fil peut être attaché à un réseau particulier quand un SSID est fixé. Un client peut s’attacher à n’importe quel réseau en ne définissant pas explicitement de SSID.

32.3.2.2. Mode IBSS

Le mode IBSS, également appelé mode "ad-hoc", est conçu pour les connexions point à point. Il existe en fait deux types de mode ad-hoc. Le premier est le mode IBSS, également appelé mode ad-hoc ou IEEE ad-hoc. Ce mode est défini par les normes IEEE 802.11. Le deuxième mode est appelé ad-hoc démo ou encore mode ad-hoc Lucent (et parfois, ce qui prête à confusion, mode ad-hoc). C’est l’ancien mode ad-hoc pré-standard 802.11 et ne devrait être utilisé qu’avec d’anciennes installations. Nous ne parlerons pas des modes ad-hoc dans ce qui suit.

32.3.3. Mode infrastructure

32.3.3.1. Points d’accès

Un point d’accès est un périphérique sans fil qui permet à un ou plusieurs clients sans fils d’utiliser ce périphérique comme un hub. Quand ils utilisent un point d’accès, tous les clients communiquent par l’intermédiaire de ce point d’accès. Plusieurs points d’accès sont souvent utilisés pour couvrir l’intégralité d’une zone géographique comme une maison, une entreprise, ou un parc avec un réseau sans fil.

Les points d’accès ont généralement plusieurs connexions réseaux: la carte réseaux sans fil, et une ou plusieurs cartes réseaux Ethernet pour les connexions avec le reste du réseau.

Les points d’accès peuvent être achetés tout fait, ou vous pouvez construire le votre avec FreeBSD et une carte réseau sans fil supportée. De nombreux constructeurs proposent des points d’accès et des cartes réseaux sans fils avec diverses fonctionnalités.

32.3.3.2. Construire un point d’accès avec FreeBSD

32.3.3.2.1. Pré-requis

En vue de mettre en place un point d’accès sans fil sous FreeBSD, vous avez besoin d’une carte réseau sans fil compatible. Actuellement seule les cartes basées sur le circuit Prism sont supportées. Vous aurez également besoin d’une carte réseau câblée supportée par FreeBSD (cela ne devrait pas être difficile à trouver, FreeBSD supporte de nombreuses cartes). Dans le cadre de cette section, nous supposerons que le trafic passera par un pont entre la carte sans fil et le réseau relié à la carte réseau classique.

Le mode point d’accès implémenté par FreeBSD fonctionne mieux avec certaines versions de firmware. Les cartes utilisant un circuit Prism 2 devraient utiliser un firmware 1.3.4 ou plus récent. Les cartes Prism 2.5 et Prism 3 devraient utiliser la version 1.4.9. Des versions de firmware plus anciennes pourront ne pas fonctionner correctement. Actuellement, la seule manière de mettre à jour vos cartes est d’utiliser les outils de mise à jour du firmware pour Windows® disponibles auprès du constructeur de votre carte.

32.3.3.2.2. Configuration

Assurez-vous tout d’abord que votre système voit la carte réseau sans fil:

# ifconfig -a
wi0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	inet6 fe80::202:2dff:fe2d:c938%wi0 prefixlen 64 scopeid 0x7
	inet 0.0.0.0 netmask 0xff000000 broadcast 255.255.255.255
	ether 00:09:2d:2d:c9:50
	media: IEEE 802.11 Wireless Ethernet autoselect (DS/2Mbps)
	status: no carrier
	ssid ""
	stationname "FreeBSD Wireless node"
	channel 10 authmode OPEN powersavemode OFF powersavesleep 100
	wepmode OFF weptxkey 1

Ne vous préoccupez pas des détails, verifiez juste que s’affiche quelque chose qui vous indique qu’une carte réseau sans fil est installée. Si vous avez des problèmes à voir l’interface réseau sans fil correspondante, et que vous utilisez une carte de type PC Card, vous devriez consultez les pages de manuel pccardc(8) et pccardd(8) pour plus d’information.

Ensuite, vous devrez charger un module afin de mettre en place la partie de FreeBSD faisant office de pont pour le point d’accès. Pour charger le module bridge(4), exécutez la commande suivante:

# kldload bridge

Vous ne devriez pas voir apparaître de message d’erreur lors du chargement du module. Si ce n’est pas le cas, vous devrez peut-être compiler le support bridge(4) dans votre noyau. La section sur le Bridging de ce manuel devrait pouvoir vous aider dans cette tâche.

Maintenant que cette partie est assurée, nous devons dire à FreeBSD entre quelles interface le pont doit être installé. Nous effectuons cette configuration en utilisant sysctl(8):

# sysctl net.link.ether.bridge.enable=1
# sysctl net.link.ether.bridge.config="wi0 xl0"
# sysctl net.inet.ip.forwarding=1

Sous les versions antérieures à la 5.2, vous devez utiliser à la place les options suivantes:

# sysctl net.link.ether.bridge=1
# sysctl net.link.ether.bridge_cfg="wi0,xl0"
# sysctl net.inet.ip.forwarding=1

Il est maintenant possible de configurer la carte. La commande suivante positionnera la carte en mode point d’accès:

# ifconfig wi0 ssid my_net channel 11 media DS/11Mbps mediaopt hostap up stationname "FreeBSD AP"

La ligne ifconfig(8) active l’interface wi0, fixe son paramètre SSID à la valeur my_net, et fixe le nom de station à FreeBSD AP. L’option media DS/11Mbps positionne la carte dans le mode 11Mbps et est nécessaire pour que le paramètre mediaopt soit pris en compte. L’option mediaopt hostap place l’interface dans le mode point d’accès. L’option channel 11 fixe le canal 802.11b à employer. La page de manuel wicontrol(8) donne les options de canaux valides en fonction de votre zone géographique.

Vous devez maintenant disposer d’un point d’accès opérationnel et en fonctionnement. Vous êtes encouragés à lire les pages de manuel wicontrol(8), ifconfig(8), et wi(4) pour plus d’amples informations.

Il est également conseillé de lire la section qui suit sur le chiffrage.

32.3.3.2.3. Information d’état

Une fois que le point d’accès est configuré et opérationnel, les opérateurs voudront voir quels clients sont associés avec le point d’accès. A n’importe quel instant, l’opérateur pourra taper:

# wicontrol -l
1 station:
00:09:b7:7b:9d:16  asid=04c0, flags=3<ASSOC,AUTH>, caps=1<ESS>, rates=f<1M,2M,5.5M,11M>, sig=38/15

Ceci nous montre qu’une station est associée, ainsi que son paramétrage. Les informations indiquées concernant le signal devraient être utilisées uniquement comme une indication relative sur sa puissance. Sa conversion en dBm ou tout autre unité varie en fonction des différentes versions de firmware.

32.3.3.3. Clients

Un client sans fil est un système qui se connecte à un point d’accès ou un autre client directement.

Typiquement, les clients sans fils disposent d’une seule interface réseau, la carte réseau sans fil.

Il existe quelques manières différentes de configurer un client sans fil. Elles sont basées sur les différents modes sans fils, généralement les modes BSS (mode infrastructure, qui nécessite un point d’accès), et IBSS (mode ad-hoc, ou mode point à point). Dans notre exemple, nous utiliserons le plus populaire des deux, le mode BSS, pour discuter avec un point d’accès.

32.3.3.3.1. Pré-requis

Il n’y a qu’un seul pré-requis pour configurer FreeBSD comme client sans fil. Vous aurez besoin d’une carte sans fil supportée par FreeBSD.

32.3.3.3.2. Configurer un client sans fil FreeBSD

Avant de commencer, vous aurez besoin de connaître certaines choses concernant le réseau sans fil auquel vous désirez vous connecter. Dans cet exemple, nous rejoignons un réseau ayant pour nom my_net, et avec le chiffrage des liaisons désactivé.

Dans cet exemple, nous n’utilisons pas le chiffrage des liaisons, ce qui est une situation dangereuse. Dans la section suivante, nous verrons comment activer le chiffrage, pourquoi il est important de le faire, et pourquoi certaines technologies de chiffrage ne vous protégerons pas complètement.

Assurez-vous que votre carte est reconnue par FreeBSD:

# ifconfig -a
wi0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	inet6 fe80::202:2dff:fe2d:c938%wi0 prefixlen 64 scopeid 0x7
	inet 0.0.0.0 netmask 0xff000000 broadcast 255.255.255.255
	ether 00:09:2d:2d:c9:50
	media: IEEE 802.11 Wireless Ethernet autoselect (DS/2Mbps)
	status: no carrier
	ssid ""
	stationname "FreeBSD Wireless node"
	channel 10 authmode OPEN powersavemode OFF powersavesleep 100
	wepmode OFF weptxkey 1

Maintenant, nous pouvons configurer la carte suivant les paramètres de notre réseau:

# ifconfig wi0 inet 192.168.0.20 netmask 255.255.255.0 ssid my_net

Remplacez 192.168.0.20 et 255.255.255.0 avec une adresse IP ainsi qu’un masque de sous-réseau valides de votre réseau câblé. Rappelez-vous, notre point d’accès joue le rôle de pont entre le réseau sans fil et le réseau câblé, il apparaîtra aux autres cartes sur votre réseau que vous êtes sur le même réseau câblé.

Une fois cela effectué, vous devriez être en mesure d’utiliser ping(8) pour atteindre les machines sur le réseau câblé de la même façon que si vous étiez connecté en utilisant un câble réseau standard.

Si vous rencontrez des problèmes avec votre connexion sans fil, vérifiez que vous êtes associé-"associated" (connecté) avec le point d’accès:

# ifconfig wi0

devrait retourner un certain nombre d’information; et vous devriez voir s’afficher:

status: associated

Si associated n’est pas affiché, alors il se peut que vous soyez hors de portée du point d’accès, que vous ayez le chiffrage activé, ou peut-être que vous ayez un problème de configuration.

32.3.3.4. Chiffrement

L’utilisation du chiffrement sur un réseau sans fil est important parce que vous n’avez plus la possibilité de conserver le réseau dans une zone protégée. Vos données sans fil seront diffusées dans tout le voisinage, et toute personne désirant y accéder pourra le faire. C’est ici que le chiffrement entre en jeu. En chiffrant les données qui sont envoyées par les ondes, vous rendez plus difficile l’interception de celles-ci par quiconque d’intéressé.

Les deux méthodes les plus courantes de chiffrage des données entre un client et un point d’accès sont le protocol WEP et ipsec(4).

32.3.3.4.1. WEP

WEP est l’abbrévation de "Wired Equivalency Protocol". Le protocole de chiffrage WEP est une tentative de rendre les réseaux sans fils aussi sûrs et sécurisés qu’un réseau filaire. Malheureusement, il a été craqué, et est relativement simple à déjouer. Cela signifie que l’on ne doit pas lui faire confiance quand il est nécessaire de chiffrer des données sensibles.

Cela reste mieux que rien du tout, utilisez ce qui suit pour activer WEP sur votre nouveau point d’accès FreeBSD:

# ifconfig wi0 inet up ssid my_net wepmode on wepkey 0x1234567890 media DS/11Mbps mediaopt hostap

Et vous pouvez activer WEP sur un client avec la commande:

# ifconfig wi0 inet 192.168.0.20 netmask 255.255.255.0 ssid my_net wepmode on wepkey 0x1234567890

Notez que vous devriez remplacer 0x1234567890 par une clé plus personnelle.

32.3.3.4.2. IPsec

ipsec(4) est un outil bien plus puissant et robuste pour chiffrer des données sur un réseau. C’est la méthode à préférer pour chiffrer les données sur un réseau sans fil. Vous pouvez obtenir plus de détails concernant ipsec(4) et comment l’implémenter dans la section IPsec de ce manuel.

32.3.3.5. Outils

Il existe un petit nombre d’outils disponibles pour le débogage et la configuration d’un réseau sans fil, et nous tenterons ici d’en décrire certains ainsi que leurs fonctionnalités.

32.3.3.5.1. La suite bsd-airtools

La suite bsd-airtools est une trousse à outils complète qui comprend des outils d’audit sans fil pour le craquage du système WEP, la détection de points d’accès, etc.

Les utilitaires bsd-airtools peuvent être installés à partir du logiciel porté net-mgmt/bsd-airtools. Des instructions sur l’installation des logiciels portés peuvent être trouvées dans le Installer des applications. les logiciels pré-compilés et les logiciels portés de ce manuel.

Le programme dstumbler est l’outil qui permet la recherche de points d’accès et la mesure du rapport signal sur bruit. Si vous avez des difficultés à mettre en place et à faire fonctionner votre point d’accès, dstumbler pourra vous aider dans ce sens.

Pour tester la sécurité de votre réseau sans fil, vous pouvez choisir d’employer les outils "dweputils" (dwepcrack, dwepdump et dwepkeygen) pour vous aider à déterminer si WEP répond à vos besoins en matière de sécurité au niveau de votre réseau sans fil.

32.3.3.5.2. Les utilitaires wicontrol, ancontrol et raycontrol

Il existe des outils que vous pouvez utiliser pour contrôler le comportement de votre carte réseau sans fil sur le réseau sans fil. Dans les exemples précédents, nous avons choisi d’employer wicontrol(8) puisque notre carte sans fil utilise l’interface wi0. Si vous avez une carte sans fil Cisco, elle apparaîtrait comme an0, et vous utiliseriez alors le programme ancontrol(8).

32.3.3.5.3. La commande ifconfig

La commande ifconfig(8) propose plusieurs options identiques à celles de wicontrol(8), cependant il manque quelques options. Consultez la page de manuel d’ifconfig(8) pour les différents paramètres et options en ligne de commande.

32.3.3.6. Cartes supportées

32.3.3.6.1. Points d’accès

Les seules cartes actuellement supportées pour le mode BSS (points d’accès) sont celles basées sur les circuits Prism 2, 2.5, ou 3. Pour une liste complète, consultez la page de manuel de wi(4).

32.3.3.6.2. Clients 802.11b

Presque toutes les cartes réseaux sans fil 802.11b sont supportées sous FreeBSD. La plupart des cartes basées sur les circuits Prism, Spectrum24, Hermes, Aironet, et Raylink fonctionneront dans le mode IBSS (ad-hoc, point à point, et BSS).

32.3.3.6.3. Clients 802.11a 802.11g

Le pilote de périphérique ath(4) supporte les normes 802.11a et 802.11g. Si votre carte est basée sur un circuit Atheros, vous devriez être en mesure d’utiliser ce pilote.

Malheureusement il y a toujours de nombreux fabricants qui ne fournissent pas à la communauté des logiciels libres les informations concernant les pilotes pour leurs cartes considérant de telles informations comme des secrets industriels. Par conséquent, il ne reste aux développeurs de FreeBSD et d’autres systèmes d’exploitation libres que deux choix: développer les pilotes en passant par un long et pénible processus de "reverse engineering" ou utiliser les pilotes binaires existants disponibles pour la plateforme Microsoft® Windows®. La plupart des développeurs, y compris ceux impliqués dans FreeBSD, ont choisi cette dernière approche.

Grâce aux contributions de Bill Paul (wpaul), depuis FreeBSD 5.3-RELEASE, il existe un support "natif" pour la spécification d’interface des pilotes de périphérique réseau (Network Driver Interface Specification-NDIS). Le NDISulator FreeBSD (connu également sous le nom de Project Evil) prend un pilote binaire réseau Windows® et lui fait penser qu’il est en train de tourner sous Windows®. Cette fonctionnalité est relativement nouvelle, mais semble fonctionner correctement dans la plupart des tests.

Pour utiliser le NDISulator, vous avez besoin de trois choses:

  1. les sources du noyau;

  2. le pilote binaire Windows® XP (extension .SYS);

  3. le fichier de configuration du pilote Windows® XP (extension .INF).

Vous aurez besoin de compiler le module d’interface du mini-pilote ndis(4). En tant que root:

# cd /usr/src/sys/modules/ndis
# make  make install

Recherchez les fichiers spécifiques à votre carte. Généralement, ils peuvent être trouvés sur les CDs livrés avec la carte ou sur le site du fabricant. Dans les exemples qui suivent nous utiliseront les fichiers W32DRIVER.SYS et W32DRIVER.INF.

L’étape suivante est de compiler le pilote binaire dans un module chargeable du noyau. Pour effectuer cela, en tant que root, rendez vous dans le répertoire du module if_ndis et copiez-y les fichiers du pilote Windows®:

# cd /usr/src/sys/modules/if_ndis
# cp /path/to/driver/W32DRIVER.SYS ./
# cp /path/to/driver/W32DRIVER.INF ./

Nous utiliserons maintenant l’utilitaire ndiscvt pour générer le fichier d’entête ndis_driver_data.h du pilote pour la compilation du module:

# ndiscvt -i W32DRIVER.INF -s W32DRIVER.SYS -o ndis_driver_data.h

Les options -i et -s précisent respectivement le fichier de configuration et le fichier binaire. Nous utilisons l’option -o ndis_driver_data.h car le Makefile recherchera ce fichier lors de la compilation du module.

Certains pilotes Windows® nécessitent des fichiers supplémentaires pour fonctionner. Vous pouvez les ajouter avec ndiscvt en utilisant l’option -f. Consultez la page de manuel ndiscvt(8) pour plus d’information.

Nous pouvons enfin compiler et installer le module du pilote:

# make  make install

Pour utiliser le pilote, vous devez charger les modules appropriés:

# kldload ndis
# kldload if_ndis

La première commande charge le pilote d’interface NDIS, la seconde charge l’interface réseau. Contrôlez la sortie de dmesg(8) à la recherche d’une quelconque erreur au chargement. Si tout s’est bien passé, vous devriez obtenir une sortie ressemblant à ce qui suit:

ndis0: <Wireless-G PCI Adapter> mem 0xf4100000-0xf4101fff irq 3 at device 8.0 on pci1
      ndis0: NDIS API version: 5.0
      ndis0: Ethernet address: 0a:b1:2c:d3:4e:f5
      ndis0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
      ndis0: 11g rates: 6Mbps 9Mbps 12Mbps 18Mbps 36Mbps 48Mbps 54Mbps

A partir de là, vous pouvez traiter le périphérique ndis0 comme n’importe quel périphérique sans fil (e.g. wi0) et consulter les premières sections de ce chapitre.

32.4. Bluetooth

32.4.1. Introduction

Bluetooth® est une technologie sans fil pour créer des réseaux personnels sans fils fonctionnant dans la bande 2.4 GHz ne nécessitant pas d’autorisation, avec une portée de 10 mètres. Les réseaux étant généralement composés de périphériques nomades comme les téléphones portables, les assistants personnels et les ordinateurs portables. Contrairement à l’autre technologie sans fil, Wi-Fi, Bluetooth® offre un niveau plus élevé de profils de service, par exemple des serveurs de fichiers semblables à FTP, "file pushing", transport de la voix, émulation de lignes séries, et bien plus.

La pile Bluetooth® sous FreeBSD utilise le système Netgraph (voir netgraph(4)). Une large gamme d’adaptateurs USB Bluetooth® sont supportés par le pilote ng_ubt(4). Les périphériques Bluetooth® basés sur le circuit Broadcom BCM2033 sont supportés par les pilotes ubtbcmfw(4) et ng_ubt(4). La carte 3Com Bluetooth® PC Card 3CRWB60-A demande le pilote ng_bt3c(4). Les périphériques Bluetooth® de type série et UART sont supportés via les pilotes sio(4), ng_h4(4) et hcseriald(8). Cette section décrit l’utilisation d’un adaptateur USB Bluetooth®. Le support Bluetooth® est disponible sur les systèmes 5.0 et suivants.

32.4.2. Branchement du périphérique

Par défaut les pilotes de périphériques Bluetooth® sont disponibles sous la forme de modules du noyau. Avant de brancher le périphérique, vous devrez charger le pilote dans le noyau:

# kldload ng_ubt

Si le périphérique Bluetooth® est présent au démarrage du système, chargez le module à partir de /boot/loader.conf:

ng_ubt_load="YES"

Branchez votre clé USB. Une sortie semblable à celle-ci devrait s’afficher sur la console (ou dans les journaux du système):

ubt0: vendor 0x0a12 product 0x0001, rev 1.10/5.25, addr 2
ubt0: Interface 0 endpoints: interrupt=0x81, bulk-in=0x82, bulk-out=0x2
ubt0: Interface 1 (alt.config 5) endpoints: isoc-in=0x83, isoc-out=0x3,
      wMaxPacketSize=49, nframes=6, buffer size=294

La pile Bluetooth doit être lancée manuellement sous FreeBSD 6.0, et sous les versions 5.0 antérieures à la 5.5. Ce lancement est automatique à partir de devd(8) sous FreeBSD 5.5, 6.1 et versions suivantes.

Copiez /usr/shared/examples/netgraph/bluetooth/rc.bluetooth à un emplacement adapté, comme /etc/rc.bluetooth. Cette procédure est utilisée pour démarrer et arrêter la pile Bluetooth®. C’est une bonne idée d’arrêter la pile avant de débrancher le périphérique, mais ce n’est pas (généralement) fatal. Quand la pile démarre, vous devriez avoir des messages similaires aux suivants:

# /etc/rc.bluetooth start ubt0
BD_ADDR: 00:02:72:00:d4:1a
Features: 0xff 0xff 0xf 00 00 00 00 00
<3-Slot> <5-Slot> <Encryption> <Slot offset>
<Timing accuracy> <Switch> <Hold mode> <Sniff mode>
<Park mode> <RSSI> <Channel quality> <SCO link>
<HV2 packets> <HV3 packets> <u-law log> <A-law log> <CVSD>
<Paging scheme> <Power control> <Transparent SCO data>
Max. ACL packet size: 192 bytes
Number of ACL packets: 8
Max. SCO packet size: 64 bytes
Number of SCO packets: 8

32.4.3. Interface de contrôle de l’hôte (HCI)

L’interface de contrôle de l’hôte (HCI) fournit une interface de commande pour le contrôleur de la bande de base et le gestionnaire de liaisons, et l’accès à l’état du matériel et aux registres de contrôle. Cette interface offre une méthode uniforme d’accès aux fonctions de la bande de base Bluetooth®. La couche HCI de l’hôte échange des données et des commandes avec le firmware HCI du matériel Bluetooth®. Le pilote de la couche de transport du contrôleur d’hôte (i.e. le bus physique) fournit aux deux couches HCI la possibilité d’échanger des informations entre elles.

Un seul noeud Netgraph de type hci est créé pour un périphérique Bluetooth®. Le noeud HCI est normalement connecté au noeud du pilote Bluetooth® (flux descendant) et au noeud L2CAP (flux montant). Toutes les opérations HCI doivent être effectuées sur le noeud HCI et non pas sur le noeud du pilote de périphérique. Le nom par défaut pour le noeud HCI est "devicehci". Pour plus de détails consultez la page de manuel ng_hci(4).

Une des tâches les plus courantes est la recherche de périphériques Bluetooth® dans le voisinage hertzien. Cette opération est appelée inquiry (enquête, recherche). Cette recherche et les autres opérations relatives à HCI sont effectuées par l’utilitaire hccontrol(8). L’exemple ci-dessous montre comment déterminer quels périphériques Bluetooth® sont dans le voisinage. Vous devriez obtenir une listes de périphériques au bout de quelques secondes. Notez qu’un périphérique distant ne répondra à la recherche que s’il est placé dans le mode discoverable.

% hccontrol -n ubt0hci inquiry
Inquiry result, num_responses=1
Inquiry result #0
       BD_ADDR: 00:80:37:29:19:a4
       Page Scan Rep. Mode: 0x1
       Page Scan Period Mode: 00
       Page Scan Mode: 00
       Class: 52:02:04
       Clock offset: 0x78ef
Inquiry complete. Status: No error [00]

BD_ADDR est l’adresse unique d’un périphérique Bluetooth®, similaire à l’adresse MAC d’une carte réseau. Cette adresse est nécessaire pour communiquer avec un périphérique. Il est possible d’assigner un nom humainement compréhensible à l’adresse BD_ADDR. Le fichier /etc/bluetooth/hosts contient des informations concernant les hôtes Bluetooth® connus. L’exemple suivant montre comment obtenir le nom qui a été assigné au périphérique distant:

% hccontrol -n ubt0hci remote_name_request 00:80:37:29:19:a4
BD_ADDR: 00:80:37:29:19:a4
Name: Pav's T39

Si vous effectuez une recherche sur un périphérique Bluetooth® distant, vous devriez trouver votre ordinateur en tant que "votre.machine.nom (ubt0)". Le nom affecté au périphérique local peut être modifié à tout moment.

Le système Bluetooth® fournit une connexion point à point (seules deux matériels Bluetooth® sont concernés), ou une connexion point à multipoints. Dans le cas d’une connexion point à multipoints, la connexion est partagés entre plusieurs périphériques Bluetooth®. L’exemple suivant montre comment obtenir la liste des connexions en bande de base actives pour le périphérique local:

% hccontrol -n ubt0hci read_connection_list
Remote BD_ADDR    Handle Type Mode Role Encrypt Pending Queue State
00:80:37:29:19:a4     41  ACL    0 MAST    NONE       0     0 OPEN

Une manipulation de la connexion est utile quand la fin d’une connexion en bande de base est nécessaire. Notez qu’il n’est normalement pas nécessaire de le faire à la main. La pile mettra fin automatiquement aux connexions en bande de base inactives.

# hccontrol -n ubt0hci disconnect 41
Connection handle: 41
Reason: Connection terminated by local host [0x16]

Référez-vous à la commande hccontrol help pour une liste complète des commandes HCI disponibles. La plupart des commandes HCI ne nécessitent pas les privilèges du super-utilisateur.

32.4.4. Protocole d’adaptation et de contrôle de lien logique (L2CAP)

Le protocole d’adaptation et de contrôle de lien logique (L2CAP) fournit des services orientés connexion ou non aux protocoles de niveaux supérieurs, et cela avec des possibilités de multiplexage de protocoles, de segmentation et de réassemblage. L2CAP permet aux applications et aux protocoles de niveaux supérieurs de transmettre et recevoir des paquets L2CAP d’une taille allant jusqu’à 64 Ko.

L2CAP est basé sur le concept de canaux. Un canal est une connexion logique au sommet de la connexion en bande de base. Chaque canal est attaché à un protocole suivant le schéma plusieurs-vers-un. Plusieurs canaux peuvent être attachés au même protocole, mais un canal ne peut être attachés à plusieurs protocoles. Chaque paquet L2CAP reçu sur un canal est dirigé vers le protocole de niveau supérieur approprié. Plusieurs canaux peuvent partager la même connexion en bande de base.

Un seul noeud Netgraph de type l2cap est créé pour un périphérique Bluetooth®. Le noeud L2CAP est normalement connecté au noeud HCI Bluetooth® (flux descendant) et aux noeuds des "sockets" Bluetooth® (flux montant). Le nom par défaut pour le noeud L2CAP est "device2cap". Pour plus de détails consultez la page de manuel ng_l2cap(4).

Une commande utile est l2ping(8), qui peut être utilisée pour "pinguer" les autres périphériques. Certaines implémentations de Bluetooth® peuvent ne pas renvoyer toutes les données qui leur sont envoyées, aussi 0 bytes dans ce qui suit est normal.

# l2ping -a 00:80:37:29:19:a4
0 bytes from 0:80:37:29:19:a4 seq_no=0 time=48.633 ms result=0
0 bytes from 0:80:37:29:19:a4 seq_no=1 time=37.551 ms result=0
0 bytes from 0:80:37:29:19:a4 seq_no=2 time=28.324 ms result=0
0 bytes from 0:80:37:29:19:a4 seq_no=3 time=46.150 ms result=0

L’utilitaire l2control(8) est employé pour effectuer diverses opérations sur les noeuds L2CAP. Cet exemple montre comment obtenir la liste des connexions logiques (canaux) et la liste des connexions en bande de base pour le périphérique local:

% l2control -a 00:02:72:00:d4:1a read_channel_list
L2CAP channels:
Remote BD_ADDR     SCID/ DCID   PSM  IMTU/ OMTU State
00:07:e0:00:0b:ca    66/   64     3   132/  672 OPEN
% l2control -a 00:02:72:00:d4:1a read_connection_list
L2CAP connections:
Remote BD_ADDR    Handle Flags Pending State
00:07:e0:00:0b:ca     41 O           0 OPEN

Un autre outil de diagnostic est btsockstat(1). Il effectue un travail similaire à celui de netstat(1), mais relatif aux structures de données réseau Bluetooth®. L’exemple ci-dessous montre la même connexion logique que l2control(8) ci-dessus.

% btsockstat
Active L2CAP sockets
PCB      Recv-Q Send-Q Local address/PSM       Foreign address   CID   State
c2afe900      0      0 00:02:72:00:d4:1a/3     00:07:e0:00:0b:ca 66    OPEN
Active RFCOMM sessions
L2PCB    PCB      Flag MTU   Out-Q DLCs State
c2afe900 c2b53380 1    127   0     Yes  OPEN
Active RFCOMM sockets
PCB      Recv-Q Send-Q Local address     Foreign address   Chan DLCI State
c2e8bc80      0    250 00:02:72:00:d4:1a 00:07:e0:00:0b:ca 3    6    OPEN

32.4.5. Protocole RFCOMM

Le protocole RFCOMM permet l’émulation du port série au-dessus du protocole L2CAP. Le protocole est basé sur la norme ETSI TS 07.10. RFCOMM est un protocole de transport simple, avec les dispositions supplémentaires pour émuler les 9 circuits (signaux) d’un port série RS232 (EIATIA-232-E). Le protocole RFCOMM supporte jusqu’à 60 connexions simultanées (canaux RFCOMM) entre deux périphériques Bluetooth®.

Dans le cas de RFCOMM, l’établissement d’une communication implique deux applications tournant sur des périphériques différents (les extrémités de la communication) avec un segment de communication entre eux. RFCOMM est prévu pour couvrir les applications faisant usage des ports séries des périphériques sur lesquels elles résident. Le segment de communication est une liaison Bluetooth® d’un périphérique vers un autre (connexion directe).

RFCOMM est seulement concerné par la connexion entre périphériques dans le cas d’un raccordement direct, ou entre le périphérique et un modem dans le cas d’un réseau. RFCOMM peut supporter d’autres configurations, comme les modules qui communiquent par l’intermédiaire de la technologie sans fil Bluetooth® d’un côté et utilise une interface câblée de l’autre côté.

Sous FreeBSD, le protocole RFCOMM est implémenté au niveau de la couche des "sockets" Bluetooth®.

32.4.6. Couplage des périphériques

Par défaut, une communication Bluetooth® n’est pas authentifiée, et n’importe quel périphérique peut parler avec n’importe quel autre périphérique. Un périphérique Bluetooth® (par exemple un téléphone portable) peut choisir de demander une authentification pour fournir un service particulier (par exemple un service de connexion téléphonique). L’authentification Bluetooth® est généralement effectuée avec des codes PIN. Un code PIN est une chaîne ASCII d’une longueur de 16 caractères. L’utilisateur doit entrer le même code PIN sur les deux périphériques. Une fois que l’utilisateur a entré le code PIN, les deux périphériques génèrent une clé de liaison (link key). Ensuite la clé peut être enregistrée soit dans les périphériques eux-mêmes ou sur un moyen de stockage non-volatile. La fois suivante les deux périphériques utiliseront la clé précédemment générée. La procédure décrite est appelée couplage. Si la clé de liaison est perdue par un des périphériques alors l’opération de couplage doit être répétée.

Le "daemon" hcsecd(8) est responsable de la gestion de toutes les requêtes d’authentification Bluetooth®. Le fichier de configuration par défaut est /etc/bluetooth/hcsecd.conf. Un exemple de section pour un téléphone portable avec un code PIN arbitraire de "1234" est donné ci-dessous:

device {
        bdaddr  00:80:37:29:19:a4;
        name    "Pav's T39";
        key     nokey;
        pin     "1234";
      }

Il n’y pas de limitation sur les codes PIN (en dehors de la longueur). Certains périphériques (comme les casques-micro Bluetooth®) peuvent avoir un code PIN définitivement fixé. Le paramètre -d force le "daemon" hcsecd(8) à rester en tâche de fond, il est donc aisé de voir ce qu’il se passe. Configurez le périphérique distant pour recevoir le couplage et initier la connexion Bluetooth® vers le périphérique distant. Le périphérique distant devrait annoncer que le couplage a été accepté, et demander le code PIN. Entrez le même code PIN que celui que vous avez dans le fichier hcsecd.conf. Maintenant votre PC et le périphérique distant sont couplés. Alternativement, vous pouvez initier le couplage sur le périphérique distant.

Sous FreeBSD 5.5, 6.1 et versions suivantes, la ligne suivante peut être ajoutée au fichier /etc/rc.conf pour obtenir un lancement automatique de hcsecd au démarrage du système:

hcsecd_enable="YES"

Ce qui suit est une partie de la sortie du "daemon" hcsecd:

hcsecd[16484]: Got Link_Key_Request event from 'ubt0hci', remote bdaddr 0:80:37:29:19:a4
hcsecd[16484]: Found matching entry, remote bdaddr 0:80:37:29:19:a4, name 'Pav's T39', link key doesn't exist
hcsecd[16484]: Sending Link_Key_Negative_Reply to 'ubt0hci' for remote bdaddr 0:80:37:29:19:a4
hcsecd[16484]: Got PIN_Code_Request event from 'ubt0hci', remote bdaddr 0:80:37:29:19:a4
hcsecd[16484]: Found matching entry, remote bdaddr 0:80:37:29:19:a4, name 'Pav's T39', PIN code exists
hcsecd[16484]: Sending PIN_Code_Reply to 'ubt0hci' for remote bdaddr 0:80:37:29:19:a4

32.4.7. Le protocole de découverte de service (SDP)

Le protocole de découverte de service (SDP) offre aux applications clientes les moyens de découvrir l’existence des services fournis par les applications serveurs ainsi que les propriétés (attributs) de ces services. Les attributs d’un service comprennent le type ou la classe du service offert et le mécanisme ou l’information sur le protocole nécessaire pour utiliser le service.

Le SDP implique la communication entre un serveur SDP et un client SDP. Le serveur maintient une liste d’enregistrements de services qui décrit les caractéristiques des services associés avec le serveur. Chaque enregistrement de service contient l’information sur un seul serveur. Un client peut récupérer l’information à partir d’un enregistrement de service maintenu par le serveur SDP en émettant une requête SDP. Si le client, ou une application associée avec le client, décide d’utiliser un service, il doit ouvrir une connexion séparée avec le fournisseur du service afin d’utiliser ce service. Le SDP fournit un mécanisme pour découvrir les services et leur attributs, mais n’offre pas de mécanisme pour utiliser ces services.

Généralement, un client SDP recherche les services sur la base de caractéristiques de services désirées. Cependant, il est parfois désirable de découvrir quel type de services sont décrits par les enregistrements de services d’un serveur SDP sans aucune information préalable sur les services. Ce processus de recherche des services offerts est appelé navigation ("browsing").

Le serveur SDP Bluetooth® sdpd(8) et le client en ligne de commande sdpcontrol(8) font partie de l’installation FreeBSD standard. L’exemple suivant montre comment effectuer un requête de navigation ("browse") SDP:

% sdpcontrol -a 00:01:03:fc:6e:ec browse
Record Handle: 00000000
Service Class ID List:
        Service Discovery Server (0x1000)
Protocol Descriptor List:
        L2CAP (0x0100)
                Protocol specific parameter #1: u/int/uuid16 1
                Protocol specific parameter #2: u/int/uuid16 1

Record Handle: 0x00000001
Service Class ID List:
        Browse Group Descriptor (0x1001)

Record Handle: 0x00000002
Service Class ID List:
        LAN Access Using PPP (0x1102)
Protocol Descriptor List:
        L2CAP (0x0100)
        RFCOMM (0x0003)
                Protocol specific parameter #1: u/int8/bool 1
Bluetooth Profile Descriptor List:
        LAN Access Using PPP (0x1102) ver. 1.0
  1. et ainsi de suite. Remarquez que chaque service a une liste d’attributs (canal RFCOMM par exemple). En fonction du service vous pourrez avoir besoin de prendre note de certains de ces attributs. Certaines implémentations Bluetooth® ne supportent pas les requêtes de navigation et peuvent renvoyer une liste vide. Dans ce cas il est possible de chercher un service spécifique. L’exemple ci-dessous montre comment chercher le service OBEX Object Push (OPUSH):

% sdpcontrol -a 00:01:03:fc:6e:ec search OPUSH

Offrir des services sous FreeBSD aux clients Bluetooth® se fait à l’aide du serveur sdpd(8). Sous les versions de FreeBSD 5.5, 6.1 et plus récentes, la ligne suivante peut être ajoutée au fichier /etc/rc.conf:

sdpd_enable="YES"

Ensuite, le "démon"sdpd peut être démarré avec:

# /etc/rc.d/sdpd start

Sous FreeBSD 6.0, et sous les versions FreeBSD 5.X antérieures à 5.5, sdpd n’est pas intégré aux procédures de démarrage du système. Il doit être lancé manuellement:

# sdpd

L’application serveur locale qui désire offrir un service Bluetooth® à des clients distants enregistrera le service auprès du "daemon" SDP local. Un exemple d’une telle application est rfcomm_pppd(8). Une fois démarré, il enregistrera un service de réseau local Bluetooth® auprès du serveur SDP local.

La liste des services enregistrés auprès du serveur SDP local peut être obtenue en émettant une requête de navigation ("browse") SDP par l’intermédiaire du canal de contrôle:

# sdpcontrol -l browse

32.4.8. Les profils Dial-Up Networking (DUN) et accès au réseau local avec PPP (LAN)

Le profil Dial-Up Networking (DUN) est principalement utilisé avec les modems et les téléphones portables. Les cas de figure couverts par ce profil sont les suivants:

  • Utilisation d’un téléphone portable ou d’un modem par un ordinateur comme modem sans fil pour se connecter à un serveur d’accès Internet, ou pour l’utilisation de services accessibles par téléphone;

  • Utilisation d’un téléphone portable ou d’un modem par un ordinateur pour recevoir des appels avec transmission de données.

Le profil d’accès au réseau local avec PPP (LAN) peut être utilisé dans les situations suivantes:

  • Accès au réseau local pour un périphérique Bluetooth®;

  • Accès au réseau local pour plusieurs périphériques Bluetooth®;

  • Liaison PC à PC (en utilisant le protocole PPP sur une émulation de câble série).

Sous FreeBSD les deux profils sont implémentés par ppp(8) et rfcomm_pppd(8)-un "wrapper" convertit la connexion Bluetooth® RFCOMM en quelque chose d’utilisable par PPP. Avant qu’un profil ne soit utilisable, un nouveau label doit être créé dans le fichier /etc/ppp/ppp.conf. Consultez la page de manuel rfcomm_pppd(8) pour des exemples.

Dans l’exemple suivant rfcomm_pppd(8) sera employé pour ouvrir un connexion RFCOMM avec le périphérique distant avec une adresse BD_ADDR 00:80:37:29:19:a4 sur un canal DUN RFCOMM. Le numéro de canal RFCOMM réel sera obtenu du périphérique distant par l’intermédiaire de SDP. Il est possible de préciser le canal RFCOMM à la main, dans ce cas rfcomm_pppd(8) n’émettra pas de requête SDP. Utilisez sdpcontrol(8) pour trouver le canal RFCOMM sur le périphérique distant.

# rfcomm_pppd -a 00:80:37:29:19:a4 -c -C dun -l rfcomm-dialup

Afin de fournir un service d’accès au réseau local avec PPP, le serveur sdpd(8) doit être en fonctionnement. Une nouvelle entrée pour les clients du réseau local doit être créée dans le fichier /etc/ppp/ppp.conf. Consultez la page de manuel rfcomm_pppd(8) pour des exemples. Enfin, lancez le serveur RFCOMM PPP sur un numéro de canal RFCOMM valide. Le serveur RFCOMM PPP enregistrera automatiquement un service Bluetooth® LAN auprès du "daemon" SDP local. L’exemple ci-dessous montre comment démarrer le serveur RFCOMM PPP:

# rfcomm_pppd -s -C 7 -l rfcomm-server

32.4.9. Le profil OBEX Object Push (OPUSH)

OBEX (échange d’objets) est un protocole très largement utilisé pour les transferts de fichiers entre périphériques mobiles. Son utilisation principale se trouve dans les communications par infrarouge, où il est utilisé pour le transfert des fichiers entre ordinateurs portables ou PDAs, et pour envoyer des cartes de visite électronique ou des éléments d’agenda entre téléphones portables et d’autres périphériques disposant d’applications de gestion d’informations personnelles (PIM).

Le serveur et le client OBEX sont implémentés dans le logiciel tierce-partie obexapp, qui est disponible sous la forme du logiciel porté comms/obexapp.

Le client OBEX est employé pour "pousser" et/ou "tirer" des objets du serveur OBEX. Un objet peut être, par exemple, une carte de visite ou un rendez-vous. Le client OBEX peut obtenir un numéro de canal RFCOMM d’un périphérique distant par l’intermédiaire de SDP. Cela peut être fait en spécifiant le nom du service plutôt que le numéro du canal RFCOMM. Les noms de service supportés sont: IrMC, FTRN et OPUSH. Il est possible de préciser le canal RFCOMM par un nombre. Un exemple de session OBEX est présenté ci-dessous, où l’objet information du périphérique d’un téléphone portable est récupéré, et un nouvel objet (carte de visite) est envoyé dans le répertoire du téléphone.

% obexapp -a 00:80:37:29:19:a4 -C IrMC
obex> get telecom/devinfo.txt devinfo-t39.txt
Success, response: OK, Success (0x20)
obex> put new.vcf
Success, response: OK, Success (0x20)
obex> di
Success, response: OK, Success (0x20)

Afin de fournir le service OBEX Object Push, le serveur sdpd(8) doit tourner. Un dossier racine où tous les objets entrant seront stockés doit être créé. Le chemin d’accès par défaut du répertoire racine est /var/spool/obex. Le serveur OBEX enregistrera automatiquement le service OBEX Object Push auprès du "daemon" SDP local. L’exemple ci-dessous montre comment démarrer le serveur OBEX:

# obexapp -s -C 10

32.4.10. Le profil port série (SPP)

Le profil port série (SPP) permet aux périphériques Bluetooth® d’émuler un câble série RS232 (ou similaire). Ce profil traite avec les applications classiques en utilisant Bluetooth® comme un câble de remplacement, à travers une abstraction de port série virtuel.

L’utilitaire rfcomm_sppd(1) implémente le profil port série. Un pseudo terminal est utilisé comme abstraction de port série virtuel. L’exemple ci-dessous montre comment se connecter à un service port série d’un périphérique distant. Notez que vous n’avez pas besoin d’indiquer un canal RFCOMM - rfcomm_sppd(1) peut l’obtenir auprès du périphérique distant via SDP. Si vous désirez forcer cela, spécifiez un canal RFCOMM sur la ligne de commande.

# rfcomm_sppd -a 00:07:E0:00:0B:CA -t /dev/ttyp6
rfcomm_sppd[94692]: Starting on /dev/ttyp6...

Une fois connecté, le pseudo-terminal peut être utilisé comme un port série:

# cu -l ttyp6

32.4.11. Dépannage

32.4.11.1. Un périphérique distant ne peut pas se connecter

Certains anciens périphériques Bluetooth® ne supportent pas de changement de rôle. Par défaut, quand FreeBSD accepte une nouvelle connexion, il tente d’effectuer un changement de rôle et de devenir maître. Les périphériques qui ne supportent pas cela ne seront pas en mesure de se connecter. Notez qu’un changement de rôle est effectué quand une nouvelle connexion est établie, il n’est donc pas possible de demander au périphérique distant s’il supporte le changement de rôle. Il existe une option HCI pour désactiver le changement de rôle au niveau local:

# hccontrol -n ubt0hci write_node_role_switch 0

32.4.11.2. Quelque chose ne va pas, puis-je voir ce qui se passe exactement?

Bien sûr. Utilisez le logiciel tierce-partie hcidump qui est disponible sous comms/hcidump dans le catalogue des logiciels portés. L’utilitaire hcidump est similaire à tcpdump(1). Il peut être utilisé pour afficher le contenu des paquets Bluetooth® à l’écran et les sauvegarder dans un fichier.

32.5. Bridging

32.5.1. Introduction

Il est parfois utile de diviser un réseau physique (comme un réseau Ethernet) en deux réseaux séparés sans avoir à créer de sous-réseaux IPs et à utiliser un routeur pour connecter ces réseaux entre eux. Le périphérique qui connecte ensemble deux réseaux de cette manière est appelé "bridge"-pont. Un système FreeBSD avec deux cartes réseaux peut faire fonction de pont.

Le pont apprend les adresses MAC (adresses Ethernet) des périphériques branchés sur chacune de ses interfaces réseaux. Il transmet le trafic entre deux réseaux uniquement quand la source et la destination sont sur des réseaux différents.

Sous de nombreux aspects, un pont ressemble à un switch (commutateur) Ethernet avec très peu de ports.

32.5.2. Situations où l’utilisation d’un pont est appropriée

Il existe deux situations dans lesquelles un pont est de nos jours utilisé.

32.5.2.1. Trafic important sur un segment

La première situation apparaît quand un segment physique d’un réseau est submergé par le trafic, mais vous ne voulez pas, pour différentes raisons, subdiviser le réseau et interconnecter les sous-réseaux à l’aide d’un routeur.

Prenons comme exemple un journal où les bureaux de la rédaction et de la production sont sur le même sous-réseau. Les utilisateurs de la rédaction utilisent tous le serveur de fichiers A, et les utilisateurs de la production le serveur B. Un réseau Ethernet est utilisé pour connecter ensemble les utilisateurs, et des surcharges du réseau ralentissent les échanges.

Si les utilisateurs de la rédaction peuvent être cantonné sur un segment, et les utilisateurs de la production sur un autre, les deux réseaux pourront être connectés par un pont. Seul le trafic réseau destiné aux interfaces réseaux situées de l'"autre" côté du pont sera transmis à l’autre réseau, réduisant ainsi les congestions sur chaque segment.

32.5.2.2. Coupe-feu filtrant/régulant le trafic

La deuxième situation est quand un coupe-feu est nécessaire mais sans translation d’adresses (NAT).

Un exemple est une compagnie qui est connectée à son fournisseur d’accès internet par l’intermédiaire d’une connexion ISDN ou DSL. Elle dispose de 13 adresses IP routables fournies par le fournisseur d’accès et dispose de 10 PCs sur son réseau. Dans cette situation, utiliser un coupe-feu/routeur est complexe en raison des problèmes de sous-réseaux.

Un coupe-feu basé sur un pont peut être configuré et positionné dans le flux juste en aval de leur routeur DSL/ISDN sans aucun problème d’adressage IP.

32.5.3. Configuration d’un pont

32.5.3.1. Choix des cartes réseaux

Un pont nécessite au moins deux cartes réseaux pour fonctionner. Malheureusement toutes les cartes réseaux ne supportent pas le mode bridging. Lisez la page de manuel bridge(4) pour des détails sur les cartes supportées.

Installez et testez les deux cartes réseaux avant de poursuivre.

32.5.3.2. Modification de la configuration du noyau

Pour activer le support nécessaire pour mettre en place un pont ajouter la ligne suivante:

options BRIDGE

à votre fichier de configuration du noyau, et recompilez votre noyau.

32.5.3.3. Support du coupe-feu

Si vous projetez d’utiliser un pont en tant que coupe-feu, vous devrez également ajouter l’option IPFIREWALL. Lisez la Firewalls pour des informations générales sur la configuration d’un pont en tant que coupe-feu.

Si vous avez besoin de permettre le passage à travers le pont des paquets non-IP (comme ARP), il existe une option du coupe-feu qui doit être activée. Cette option est IPFIREWALL_DEFAULT_TO_ACCEPT. Prennez note que cela modifie le fonctionnement par défaut du coupe-feu, ce dernier acceptera alors tous les paquets. Assurez-vous de savoir ce que ce changement signifie pour votre ensemble de règles de filtrage avant de l’effectuer.

32.5.3.4. Support de la régulation du trafic

Si vous désirez utiliser le pont comme régulateur de trafic, vous devrez ajouter l’option DUMMYNET à votre fichier de configuration du noyau. Consultez la page de manuel dummynet(4) pour plus d’information.

32.5.4. Activer le pont

Ajoutez la ligne:

net.link.ether.bridge.enable=1

au fichier /etc/sysctl.conf pour activer le pont au démarrage, et la ligne:

net.link.ether.bridge.config=if1,if2

pour activer le mode bridging sur les interfaces spécifiées (remplacez if1 et if2 par les noms de vos interfaces réseaux). Si vous désirez que les paquets traversant le pont soient filtrés par ipfw(8), vous devrez ajouter également la ligne:

net.link.ether.bridge.ipfw=1

Pour les versions antérieures à FreeBSD 5.2-RELEASE, utilisez les lignes suivantes:

net.link.ether.bridge=1
net.link.ether.bridge_cfg=if1,if2
net.link.ether.bridge_ipfw=1

32.5.5. Informations supplémentaires

Si vous désirez être en mesure de vous connecter au pont par l’intermédiaire de ssh(1), il est correct d’ajouter à l’une des cartes réseaux une adresse IP. Il existe un consensus sur le fait qu’assigner une adresse aux deux cartes est une mauvaise idée.

Si vous avez plusieurs ponts sur votre réseau, il ne peut y en avoir plus d’un sur le chemin qui sera emprunté par le trafic entre deux stations de travail. Techniquement, cela signifie qu’il n’y a pas de support pour la gestion du "spanning tree".

Un pont peut ajouter des temps de latence lors de l’utilisation de ping(8), et tout particulièrement dans le cas du trafic d’un segment vers un autre.

32.6. Système sans disque dur

Une machine FreeBSD peut démarrer via le réseau et fonctionner sans disque dur local, en utilisant des systèmes de fichiers montés à partir d’un serveur NFS. Aucune modification du système n’est nécessaire en dehors des fichiers de configuration standards. Un tel système est facile à mettre en oeuvre comme tous les éléments sont directement disponibles:

  • Il y a au moins deux méthodes possibles pour charger un noyau via le réseau:

    • PXE: l’environnement d’exécution préalable au démarrage d’Intel® (Preboot eXecution Environment) est une sorte de ROM intelligente présente sur certaines cartes réseau ou cartes mère. Consultez la page de manuel pxeboot(8) pour plus de détails.

    • Le logiciel porté Etherboot (net/etherboot) produit un code stockable dans une ROM pour démarrer des noyaux via le réseau. Le code peut être soit implanté dans une PROM de démarrage sur une carte réseau, soit chargé à partir d’une disquette (ou d’un disque dur local), ou à partir d’un système MS-DOS® en fonctionnement. De nombreuses cartes réseau sont supportées.

  • Une procédure d’exemple (/usr/shared/examples/diskless/clone_root) facilite la création et la maintenance du système de fichiers racine de la station de travail sur le serveur. La procédure demandera sûrement quelques modifications mais vous permettra de démarrer rapidement.

  • Des fichiers de démarrage du système existent dans le répertoire /etc pour détecter et supporter le démarrage d’un système sans disque dur.

  • La pagination, si nécessaire, peut être faite par l’intermédiaire d’un fichier NFS ou sur un disque local.

Il existe plusieurs façons de configurer des stations de travail sans disque dur. Plusieurs éléments entrent en oeuvre, et la plupart peuvent être ajustés en fonction des besoins locaux. Ce qui suit décrit des variations sur la configuration d’un système complet, mettant en avant le simplicité et la compatibilité avec les procédures standards de démarrage de FreeBSD. Le système décrit présente les caractéristiques suivantes:

  • Les stations de travail sans disque dur utilisent des systèmes de fichiers / et /usr partagés et en lecture seule.

    Le système de fichiers racine est une copie d’une racine FreeBSD standard (généralement celle du serveur), avec certains fichiers de configuration remplacés par des versions spécifiques à un fonctionnement sans disque dur, et parfois à la station de travail auxquels ils appartiennent.

    Les parties de la racine qui doivent être inscriptibles sont remplacées par des systèmes de fichiers mfs(8) (FreeBSD 4.X) ou md(4) (FreeBSD 5.X). Toute modification sera perdue au redémarrage du système.

  • Le noyau est transféré et chargé soit à l’aide d’Etherboot soit de PXE comme certaines situations peuvent exiger l’utilisation de l’une ou l’autre méthode.

Ainsi décrit, le système n’est pas sécurisé. Il devrait se trouver dans une partie protégée du réseau, et les autres machines ne devraient pas lui faire confiance aveuglément.

Toutes les instructions de cette section ont été testées sous FreeBSD 4.9-RELEASE et 5.2.1-RELEASE. Le texte est destiné à l’origine pour une utilisation sous 4.X. Des notes on été insérées aux endroits nécessaires pour indiquer les modifications concernant la branche 5.X.

32.6.1. Information de fond

Mettre en place des stations de travail sans disque dur est à la fois relativement simple et enclin aux erreurs. Ces dernières sont parfois difficiles à diagnostiquer pour de nombreuses raisons. Par exemple:

  • Des options de compilation peuvent donner lieu à des comportements différents à l’exécution.

  • Les messages d’erreurs sont souvent cachés ou totalement absents.

Dans ce contexte, avoir quelques connaissances des mécanismes sous-jacents impliqués est très utile pour résoudre les problèmes qui peuvent surgir.

Plusieurs opérations doivent être effectuées pour un amorçage réussi:

  • La machine doit obtenir des paramètres de base comme son adresse IP, le nom du fichier exécutable, le nom du serveur, l’emplacement de la racine. Ceci est fait en utilisant le protocole DHCP ou le protocole BOOTP. DHCP est une extension compatible de BOOTP, et utilise les mêmes numéros de ports et son format de paquets basic.

    Il est possible de configurer un système pour n’utiliser que BOOTP. Le programme serveur bootpd(8) fait partie du système de base de FreeBSD.

    Cependant, DHCP présente plusieurs avantage sur BOOTP (des fichiers de configuration plus lisibles, la possibilité d’utiliser PXE, plus de nombreux autres avantages n’ayant pas de relation directe avec les systèmes sans disque dur), et nous décrirons principalement une configuration DHCP, avec des exemples équivalent utilisant bootpd(8) quand cela est possible. L’exemple de configuration utilisera le logiciel ISC DHCP (la version 3.0.1.r12 était installée sur le serveur de test).

  • La machine a besoin de transférer un ou plusieurs programmes en mémoire locale. TFTP ou NFS sont utilisés. Le choix entre TFTP et NFS est à de nombreux endroits une option sélectionnée lors de la compilation. Une source d’erreur courante est d’indiquer des noms de fichiers pour le mauvais protocole: TFTP transfère généralement tous les fichiers à partir d’un seul répertoire sur le serveur, et attendra des noms de fichiers relatifs à ce répertoire. NFS a besoin de chemins d’accès absolus.

  • Les éventuels programmes d’amorce intermédiaires et le noyau doivent être initialisés et exécutés. Il existe plusieurs variations à ce niveau:

    • PXE chargera pxeboot(8), qui est une version modifiée du chargeur. Le chargeur (loader(8)) récupérera la plupart des paramètres nécessaires au démarrage du système, et les transmettra au noyau avant de lui abandonner le contrôle du système. Dans ce cas il est possible d’utiliser un noyau GENERIC.

    • Etherboot, chargera directement le noyau avec moins de préparation. Vous devrez compiler un noyau avec des options particulières.

      PXE et Etherboot fonctionnent aussi bien l’un que l’autre avec des systèmes 4.X. Comme le noyau des systèmes 5.X laisse au chargeur (loader(8)) un peu plus de travail à effectuer, PXE est préféré pour les systèmes 5.X.

      Si votre BIOS et vos cartes réseau supportent PXE, vous devriez probablement l’utiliser. Cependant, il est toujours possible de démarrer un système 5.X à l’aide d’Etherboot.

  • Et enfin, la machine a besoin d’accéder à ses systèmes de fichiers. NFS est utilisé dans tous les cas.

Consultez également la page de manuel diskless(8).

32.6.2. Configuration

32.6.2.1. Configuration utilisant ISC DHCP

Le serveur ISC DHCP peut répondre aux requêtes BOOTP et DHCP.

Avec la version 4.9, ISC DHCP 3.0 ne fait pas partie du système de base. Vous devrez installer le logiciel porté net/isc-dhcp3-server ou la version pré-compilée correspondante.

Une fois ISC DHCP installé, il nécessite un fichier de configuration pour fonctionner (normalement appelé /usr/local/etc/dhcpd.conf). Voici un exemple commenté, où la machine margaux utilise Etherboot et où la machine corbieres emploie PXE:

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

option domain-name "example.com";
option domain-name-servers 192.168.4.1;
option routers 192.168.4.1;

subnet 192.168.4.0 netmask 255.255.255.0 {
  use-host-decl-names on; (1)
  option subnet-mask 255.255.255.0;
  option broadcast-address 192.168.4.255;

  host margaux {
    hardware ethernet 01:23:45:67:89:ab;
    fixed-address margaux.example.com;
    next-server 192.168.4.4; (2)
    filename "/data/misc/kernel.diskless"; (3)
    option root-path "192.168.4.4:/data/misc/diskless"; (4)
  }
  host corbieres {
    hardware ethernet 00:02:b3:27:62:df;
    fixed-address corbieres.example.com;
    next-server 192.168.4.4;
    filename "pxeboot";
    option root-path "192.168.4.4:/data/misc/diskless";
  }
}
1Cette option dit à dhcpd d’envoyer le paramètre des déclarations host comme nom de machine pour la machine sans disque dur. Une autre méthode aurait été d’ajouter option host-name margaux à l’intérieur des déclarations host.
2La directive next-server désigne le serveur TFTP ou NFS à utiliser pour télécharger le chargeur ou le noyau (le comportement par défaut étant d’utiliser la même machine que le serveur DHCP).
3La directive filename précise le fichier que chargera Etherboot ou PXE à la prochaine étape. Il doit être défini en fonction de la méthode de transfert utilisée. Etherboot peut être compilé pour utiliser NFS ou TFTP. Le logiciel porté pour FreeBSD utilisera NFS par défaut. PXE emploie TFTP, c’est pourquoi un chemin d’accès relatif est utilisé ici (cela peut dépendre de la configuration du serveur TFTP, mais devrait être plutôt classique). De plus, PXE charge pxeboot, et non pas le noyau. Il existe d’autres possibilités intéressantes, comme le chargement de pxeboot à partir du répertoire /boot d’un CD-ROM FreeBSD (comme pxeboot(8) peut charger un noyau GENERIC cela rend possible l’utilisation de PXE pour démarrer à partir d’un lecteur de CD-ROM distant).
4L’option root-path définie le chemin d’accès au système de fichiers racine, suivant la notation classique de NFS. En utilisant PXE, il est possible de ne pas préciser l’adresse IP de la machine dès lors que vous n’activez pas l’option BOOTP du noyau. Le serveur NFS sera alors le même que le serveur TFTP.

32.6.2.2. Configuration utilisant BOOTP

Ce qui suit présente une configuration bootpd équivalente (réduite à un seul client). Elle se trouverait sous /etc/bootptab.

Veuillez noter qu’Etherboot doit être compilé avec l’option NO_DHCP_SUPPORT (qui n’est pas activée par défaut) afin d’utiliser BOOTP et que PXE nécessite DHCP. The seul avantage évident de bootpd est qu’il est disponible dans le système de base.

.def100:\
  :hn:ht=1:sa=192.168.4.4:vm=rfc1048:\
  :sm=255.255.255.0:\
  :ds=192.168.4.1:\
  :gw=192.168.4.1:\
  :hd="/tftpboot":\
  :bf="/kernel.diskless":\
  :rp="192.168.4.4:/data/misc/diskless":

margaux:ha=0123456789ab:tc=.def100

32.6.2.3. Préparation d’un programme de démarrage avec Etherboot

Le site Web d’Etherboot propose une documentation importante principalement destinée aux systèmes Linux, mais contenant néamoins des informations utiles. Ce qui suit présente comment vous utiliseriez Etherboot sur un système FreeBSD.

Vous devez tout d’abord installer le logiciel porté net/etherboot ou sa version pré-compilée.

Vous pouvez modifier la configuration d’Etherboot (i.e. pour utiliser TFTP au lieu de NFS) en éditant le fichier Config dans le répertoire des sources d’Etherboot.

Pour notre configuration nous utiliserons une disquette de démarrage. Pour d’autres méthodes (PROM, ou un programme MS-DOS®), consultez la documentation d’Etherboot.

Pour créer une disquette de démarrage, insérez une disquette dans le lecteur de la machine où vous avez installé Etherboot, puis rendez-vous dans le répertoire src de l’arborescence Etherboot et tapez:

# gmake bin32/devicetype.fd0

devicetype dépend du type de carte Ethernet se trouvant dans la station de travail sans disque dur. Référez-vous au fichier NIC dans le même répertoire pour déterminer la valeur devicetype correcte.

32.6.2.4. Démarrer avec PXE

Par défaut le chargeur pxeboot(8) charge le noyau via NFS. Il peut être compilé pour utiliser TFTP à la place en spécifiant l’option LOADER_TFTP_SUPPORT dans le fichier /etc/make.conf. Lisez les commentaires dans le fichier /etc/defaults/make.conf (ou /usr/shared/examples/etc/make.conf pour les systèmes 5.X) pour plus de détails.

Il existe deux autres options de make.conf non-documentées qui peuvent être utiles pour la configuration d’une machine faisant fonction de console série sans disque dur: BOOT_PXELDR_PROBE_KEYBOARD, et BOOT_PXELDR_ALWAYS_SERIAL (cette dernière n’existe que sous FreeBSD 5.X).

Pour utiliser PXE quand la machine démarre, vous aurez normalement besoin de sélectionner l’option Boot from network dans votre BIOS, ou d’appuyer sur une touche de fonction lors de l’initialisation du PC.

32.6.2.5. Configuration des serveurs TFTP et NFS

Si vous utilisez PXE ou Etherboot configurés pour employer TFTP, vous devez activer tftpd sur le serveur de fichier:

  1. Créez un répertoire à partir duquel tftpd proposera les fichiers, e.g. /tftpboot.

  2. Ajoutez la ligne suivante à votre fichier /etc/inetd.conf:

    tftp	dgram	udp	wait	root	/usr/libexec/tftpd	tftpd -l -s /tftpboot

    Il apparaît que certaines versions de PXE veulent la version TCP de TFTP. Dans ce cas, ajoutez une seconde ligne, en remplaçant dgram udp par stream tcp.

  3. Demandez à inetd de relire son fichier de configuration:

    # kill -HUP `cat /var/run/inetd.pid`

Le répertoire tftpboot peut être placé n’importe où sur le serveur. Assurez-vous que son emplacement est défini dans les fichiers inetd.conf et dhcpd.conf.

Dans tous les cas, vous devez également activer NFS et exporter le système de fichiers approprié sur le serveur NFS.

  1. Ajoutez ce qui suit au fichier /etc/rc.conf:

    nfs_server_enable="YES"
  2. Exportez le système de fichiers contenant le répertoire racine du système sans disque dur en ajoutant ce qui suit au fichier /etc/exports (ajustez le point de montage et remplacez margaux corbieres avec les noms des stations de travail sans disque dur):

    /data/misc -alldirs -ro margaux corbieres
  3. Demandez à mountd de relire son fichier de configuration. Si vous avez eu besoin d’activer NFS dans /etc/rc.conf lors du premier point, vous voudrez probablement plutot redémarrer la machine.

    # kill -HUP `cat /var/run/mountd.pid`

32.6.2.6. Compilation d’un noyau pour système sans disque dur

Si vous utilisez Etherboot, vous devez créer un fichier de configuration du noyau pour le client sans disque dur avec les options suivantes (en plus des options habituelles):

options     BOOTP          # Use BOOTP to obtain IP address/hostname
options     BOOTP_NFSROOT  # NFS mount root filesystem using BOOTP info

Vous pouvez vouloir également employer les options BOOTP_NFSV3, BOOT_COMPAT et BOOTP_WIRED_TO (référez-vous au fichier LINT sous 4.X ou NOTES sous 5.X).

Les noms de ces options sont historiques et légèrement trompeur comme elles activent indifférement l’utilisation de DHCP et BOOTP dans le noyau (il est également possible de forcer une utilisation stricte de BOOTP ou DHCP).

Compilez le noyau (voir Configurer le noyau de FreeBSD), et copiez-le à l’emplacement indiqué dans dhcpd.conf.

Quand on utilise PXE, la compilation d’un noyau avec les options précédentes n’est pas strictement nécessaire (bien que conseillé). Les activer causera un plus grand nombre de requêtes DHCP générées lors du démarrage du noyau, avec un petit risque d’inconsistance entre les nouvelles valeurs et celles récupérées par pxeboot(8) dans certains cas particuliers. L’avantage de leur utilisation est que le nom de la machine sera forcément défini. Sinon vous devrez définir le nom de la machine par une autre méthode, par exemple dans un fichier rc.conf particulier au client.

Afin d’être chargeable par Etherboot, un noyau 5.X doit être compilé avec les "device hints". Vous définirez normalement l’option suivante dans le fichier de configuration (voir le fichier de commentaires sur la configuration: NOTES):

hints		"GENERIC.hints"

32.6.2.7. Préparer le système de fichiers racine

Vous devez créer un système de fichiers racine pour les stations de travail sans disque dur, à l’emplacement défini par root-path dans le fichier dhcpd.conf. Les sections suivantes décrivent deux manières de le faire.

32.6.2.7.1. Utilisation de la procédure clone_root

C’est la méthode la plus rapide pour créer un système de fichiers racine, mais elle est, pour le moment, uniquement supportée sous FreeBSD 4.X.. Cette procédure est située à l’emplacement /usr/shared/examples/diskless/clone_root et demande quelques modifications, pour au moins ajuster l’emplacement du système de fichiers à créer (la variable DEST).

Référez-vous aux commentaires situés en début de la procédure pour information. Ils expliquent comment le système de fichiers de base est construit, et comment les fichiers peuvent être remplacés de façon sélective par des versions spécifiques à un fonctionnement sans disque dur, ou à un sous-réseau, ou encore à une station de travail particulière. Ils donnent également des exemples de fichiers /etc/fstab et /etc/rc.conf pour un fonctionnement sans disque dur.

Les fichiers README dans le répertoire /usr/shared/examples/diskless contiennent beaucoup d’information de fond, mais, avec les autres exemples du répertoire diskless, ils documentent une méthode de configuration qui est distincte de celle utilisée par clone_root et les procédures de démarrage du système de /etc, ce qui est un peu à l’origine de confusions. Utilisez-les comme référence uniquement, à moins que vous préfériez la méthode qu’ils décrivent, dans quel cas vous devrez modifier les procédures rc.

32.6.2.7.2. Utilisation de la procédure make world standard

Cette méthode s’applique aussi bien à FreeBSD 4.X qu’à FreeBSD 5.X et installera un système complet (et non pas uniquement le système de fichiers racine) dans le répertoire défini par DESTDIR. Tout ce dont vous avez besoin de faire est d’exécuter la procédure suivante:

#!/bin/sh
export DESTDIR=/data/misc/diskless
mkdir -p ${DESTDIR}
cd /usr/src; make world  make kernel
cd /usr/src/etc; make distribution

Une fois cela terminé, vous devrez personaliser vos fichiers /etc/rc.conf et /etc/fstab situés dans DESTDIR en fonction de vos besoins.

32.6.2.8. Configuration de l’espace de pagination

Si nécessaire, un fichier de pagination situé sur le serveur peut être utilisé via NFS. Une des méthodes couramment utilisées pour cela n’est plus supportée sous 5.X.

32.6.2.8.1. Pagination via NFS sous FreeBSD 4.X

L’emplacement et la taille du fichier de pagination peuvent être spécifiés avec les options BOOTP/DHCP 128 et 129 spécifiques à FreeBSD. Des exemples de fichiers de configuration pour ISC DHCP 3.0 ou bootpd suivent:

  1. Ajoutez les lignes suivantes au fichier dhcpd.conf:

    # Global section
    option swap-path code 128 = string;
    option swap-size code 129 = integer 32;
    
    host margaux {
      ... # Standard lines, see above
      option swap-path "192.168.4.4:/netswapvolume/netswap";
      option swap-size 64000;
    }

    swap-path est le chemin d’accès vers un répertoire où les fichiers de pagination sont situés. Chaque fichier sera nommé swap.ip-client.

    Les anciennes version de dhcpd utilisaient une syntaxe du type option option-128 "…​, qui n’est plus supportée.

    /etc/bootptab utiliserait la syntaxe suivante à la place:

    T128="192.168.4.4:/netswapvolume/netswap":T129=0000fa00

    Dans le fichier /etc/bootptab, la taille de l’espace de pagination doit être exprimée en hexadécimal.

  2. Sur le serveur du fichier de pagination par NFS, créez le(s) fichier(s) de pagination:

    # mkdir /netswapvolume/netswap
    # cd /netswapvolume/netswap
    # dd if=/dev/zero bs=1024 count=64000 of=swap.192.168.4.6
    # chmod 0600 swap.192.168.4.6

    192.168.4.6 est l’adresse IP du client sans disque dur.

  3. Sur le serveur du fichier de pagination par NFS, ajoutez la ligne suivante au fichier /etc/exports:

    /netswapvolume  -maproot=0:10 -alldirs margaux corbieres

    Ensuite demandez à mountd à relire le fichier exports, comme plus haut.

32.6.2.8.2. Pagination via NFS sous FreeBSD 5.X

Le noyau ne supporte pas l’activation de la pagination par NFS au démarrage. L’espace de pagination doit être activé par les procédures de démarrage, en montant un système de fichiers accessible en écriture et en créant et en activant un fichier de pagination. Pour créer un fichier de pagination de la taille appropriée, vous pouvez effectuer ce qui suit:

# dd if=/dev/zero of=/path/to/swapfile bs=1k count=1 oseek=100000

Pour ensuite l’activer, vous devez ajouter la ligne suivante à votre fichier rc.conf:

swapfile=/path/to/swapfile

32.6.2.9. Problèmes divers

32.6.2.9.1. Utilisation d’un /usr en lecture seule

Si la station de travail sans disque dur est configurée pour exécuter X, you devrez ajuster le fichier de configuration de XDM, qui envoie le journal d’erreurs sur /usr par défaut.

32.6.2.9.2. Utilisation d’un serveur non-FreeBSD

Quand le serveur pour le système de fichiers racine ne fait pas tourner FreeBSD, vous devrez créer le système de fichiers racine sur une machine FreeBSD, puis le copier vers sa destination en utilisant tar ou cpio.

Dans cette situation, il y a parfois des problèmes avec les fichiers spéciaux de périphériques dans /dev, en raison de différences de taille sur les entiers. Une solution à ce problème est d’exporter un répertoire à partir du serveur non-FreeBSD, de monter ce répertoire sur une machine FreeBSD, et exécuter MAKEDEV sur la machine FreeBSD pour créer les entrées de périphériques correctes (FreeBSD 5.X et les versions suivantes utilisent devfs(5) pour l’allocation des fichiers spéciaux de périphériques de manière transparente pour l’utilisateur, exécuter MAKEDEV sur ces versions est inutile).

32.7. ISDN

Une bonne source d’information sur la technologie et le matériel ISDN (RNIS) est la page ISDN de Dan Kegel.

Voici un rapide aperçu à propos de l’ISDN:

  • Si vous résidez en Europe, vous devriez étudier la section sur les cartes ISDN.

  • Si vous envisagez d’utiliser l’ISDN avant tout pour vous connecter à l’Internet par l’intermédiaire d’un fournisseur d’accès Internet et d’une ligne téléphonique non dédiée, vous devriez vous intéresser aux Adaptateurs Terminaux. C’est la solution la plus souple, qui vous posera le moins de problèmes si vous changez de fournisseur d’accès.

  • Si vous interconnectez deux réseaux locaux, ou si vous vous connectez à l’Internet avec une liaison ISDN dédiée, vous devriez envisager un pont/routeur autonome.

Le coût est un facteur déterminant de la solution que vous choisirez. Les options suivantes sont listées de la moins chère à la plus chère.

32.7.1. Cartes ISDN

L’implémentation ISDN de FreeBSD ne supporte que la norme DSS1/Q.931 (ou Euro-ISDN) utilisant des cartes passives. Depuis FreeBSD 4.4, quelques cartes actives sont supportées où le firmware supporte également d’autres protocoles au niveau des signaux, cela inclut les premières cartes supportées du type "Primary Rate ISDN" (PRI).

Le logiciel isdn4bsd vous permet de vous connecter à d’autres routeurs ISDN soit en utilisant l’IP sur de l’HDLC de base, soit en utilisant PPP synchrone: en employant PPP intégré au noyau avec isppp, une version modifiée du pilote de périphérique sppp(4), ou en employant ppp(8) en mode utilisateur. L’utilisation de ppp(8) en mode utilisateur rend possible l’agrégation de deux ou plus canaux ISDN de type B. Une application capable de répondre aux appels téléphoniques est également disponible, tout comme de nombreux utilitaires comme un modem logiciel 300 bauds.

Un nombre croissant de cartes ISDN pour PC sont supportées sous FreeBSD et les retours montrent qu’elles sont utilisées avec succès dans toute l’Europe et dans de nombreuses autres parties du monde.

Les cartes ISDN passives supportées sont principalement celles avec le circuit ISDN ISAC/HSCX/IPAC d’Infineon (précédemment Siemens), mais également les cartes avec des circuits en provenance de Cologne Chip (cartes ISA uniquement), les cartes PCI avec les circuits Winbond W6692, quelques cartes avec les circuits Tiger300/320/ISAC et quelques cartes avec des circuits spécifiques comme l’AVM Fritz!Card PCI V.1.0 de l’AVM Fritz!Card PnP.

Actuellement les cartes ISDN actives supportées sont les cartes AVM B1 (ISA et PCI) BRI et les cartes PCI AVM T1 PRI.

Pour de la documentation sur isdn4bsd, consultez le répertoire /usr/shared/examples/isdn/ sur votre système FreeBSD ou sur la page web d’isdn4bsd qui propose également des astuces, des erratas et bien plus de documentation que le manuel d’isdn4bsd.

Au cas où vous seriez intéressé par l’ajout du support pour un protocole ISDN différent, d’une carte ISDN pour PC non encore supportée ou par l’amélioration d’isdn4bsd, veuillez contacter Hellmuth Michaelis <hm@FreeBSD.org>.

Pour les questions concernant l’installation, la configuration et le dépannage d’isdn4bsd, une liste de diffusion freebsd-isdn est disponible.

32.7.2. Adaptateurs terminaux ISDN

Les adaptateurs terminaux-"Terminal adapters (TA)"; sont l’équivalent ISDN des modems pour les lignes téléphoniques ordinaires.

La plupart des TA utilisent le jeu de commandes standard des modems Hayes, et peuvent être utilisés en remplacement d’un modem.

Un TA fonctionne essentiellement de la même manière qu’un modem à la différence que la vitesse de la connexion sera plus élevée qu’avec votre vieux modem. Vous devrez configurer PPP de façon exactement identique que pour un modem classique. Assurez-vous de fixer la vitesse de votre port série la plus haute possible.

Le principal avantage d’utiliser un TA pour vous connecter à votre fournisseur d’accès Internet est de pouvoir utiliser PPP en mode dynamic. Comme l’espace d’adressage IP disponible devient de plus en plus restreint, la plupart des fournisseurs d’accès ne désirent plus vous fournir d’adresse IP statique. La plupart des routeurs autonomes ne peuvent pas fonctionner avec une allocation dynamique d’adresse IP.

Les fonctionnalités et la stabilité de la connexion des adaptateurs terminaux reposent complètement sur le "daemon" PPP. Cela vous permet de passer facilement d’un modem classique à l’ISDN sur une machine FreeBSD, si vous avez déjà configuré PPP. Cependant, les problèmes que vous avez éventuellement rencontrés avec PPP persisteront.

Si vous désirez un maximum de stabilité, utilisez PPP intégré au noyau, à la place du PPP en mode utilisateur.

Les adaptateurs suivants sont connus pour fonctionner avec FreeBSD:

  • Motorola BitSurfer et Bitsurfer Pro

  • Adtran

La plupart des adaptateurs terminaux fonctionneront probablement également, les fabricants de TA font en sorte que leurs produits acceptent la plupart du jeu de commandes AT des modems.

Le vrai problème avec les adaptateurs terminaux est que comme pour les modems, il vous faudra une bonne interface série dans votre ordinateur.

Vous devriez lire le document sur les ports série sous FreeBSD pour comprendre en détail le fonctionnement des périphériques série et les différences entre les ports séries asynchrones et synchrones.

Un adaptateur terminal sur un port série PC standard (asynchrone) vous limite à 115.2 Kbs, même si vous disposez d’une connexion à 128 Kbs. Pour utiliser complètement les 128 Kbs offert par l’ISDN, vous devez brancher l’adaptateur sur une carte série synchrone.

Ne vous imaginez pas qu’il suffit d’acheter un adaptateur terminal interne pour s’affranchir du problème synchrone/asynchrone. Les adaptateurs internes disposent simplement d’un port série PC standard. Tout ce que vous y gagnerez sera d’économiser un câble série et de libérer une prise électrique.

Une carte synchrone avec un adaptateur terminal est au moins aussi rapide qu’un routeur autonome, piloté par une simple machine FreeBSD, et probablement plus souple.

Le choix entre carte synchrone/adaptateur ou routeur autonome est une question de goût. Ce sujet a été abordé dans les listes de diffusion. Nous vous suggérons de chercher dans les archives pour obtenir l’intégralité de la discussion.

32.7.3. Ponts/Routeurs ISDN autonomes

Les ponts ou routeurs ISDN ne sont pas spécifiques à FreeBSD ou à tout autre système d’exploitation. Pour une description complète de la technologie du routage et des ponts, veuillez vous reportez à un ouvrage de référence sur les réseaux.

Dans le contexte de cette section, les termes de routeur et de pont seront utilisés indifféremment.

Comme le prix des routeurs/ponts ISDN d’entrée de gamme baissent, il est probable qu’ils deviennent un choix de plus en plus populaire. Un routeur ISDN est une petite boîte qui se branche directement sur votre réseau Ethernet, et gère sa propre connexion aux autres ponts/routeurs. Il intègre le logiciel nécessaire au support du protocole PPP et d’autres protocoles.

Un routeur vous offrira un débit plus élevé qu’un adaptateur terminal standard, puisqu’il utilisera une connexion ISDN synchrone.

Le principal problème avec les routeurs et ponts ISDN est que l’intéropérabilité entre les matériels des différents constructeurs n’est pas toujours garantie. Si vous projetez de vous connecter à un fournisseur d’accès Internet, vous devriez discuter de vos besoins avec ce dernier.

Si vous envisagez de connecter ensemble deux réseaux locaux, comme le réseau de votre domicile et celui de votre bureau, c’est la solution la plus simple et celle qui demande le moins de maintenance. Etant donné que vous êtes la personne qui achète les équipements pour les deux extrémités, vous êtes sûr que cela fonctionnera.

Par exemple pour connecter un ordinateur personnel situé à son domicile ou le réseau d’une agence à celui du siège social, la configuration suivante pourra être utilisée:

Exemple 1. Réseau d’agence ou à domicile

Le réseau utilise une topologie en bus avec une connectique Ethernet 10 base 2 ("thinnet"). Connectez le routeur au réseau à l’aide d’un émetteur/récepteur AUI/10BT si nécessaire.

Ethernet 10 Base 2

Si votre réseau de domicile/d’agence n’est constitué que d’un seul ordinateur, vous pouvez utiliser une paire torsadée croisée pour le connecter directement au routeur autonome.

Exemple 2. Siège social ou autre réseau

Le réseau utilise une topologie en étoile avec une connectique Ethernet 10 base T ("paire torsadée").

Architecture du Réseau ISDN

Un des principaux avantages de la plupart des routeurs/ponts est le fait qu’ils permettent d’avoir deux connexions PPP séparées et indépendantes vers deux sites différents et cela en même temps. Ceci n’est pas supporté par la plupart des adaptateurs terminaux, en dehors de modèles spécifiques (en général coûteux) qui disposent de deux ports série. Ne confondez pas cette possibilité avec l’agrégation de canaux, MPP, etc.

Ceci peut être une fonctionnalité très utile si, par exemple, vous disposez d’une connexion ISDN dédiée au bureau et vous voudriez en profiter mais vous ne voulez pas acquérir une nouvelle ligne ISDN. Un routeur au bureau peut gérer un canal B dédié (64 Kbps) vers l’Internet et utiliser l’autre canal B pour une autre connexion. Le deuxième canal B peut être utilisé pour les connexions entrantes, sortantes ou pour l’agrégation de canaux (MPP, etc.) avec le premier canal B pour augmenter la bande passante.

Un pont Ethernet vous permettra de transmettre autre chose que juste du trafic IP. Vous pouvez également faire passer de l’IPX/SPX ou tout autre protocole que vous utilisez.

32.8. Translation d’adresses

32.8.1. Généralités

Le "daemon" de translation d’adresses ("Network Address Translation"-NAT) de FreeBSD, généralement connu sous le nom de natd(8) est un "daemon" qui accepte les paquets IP entrants, change l’adresse de la source par celle de la machine locale et ré-injecte les paquets dans le flux sortant des paquets IP. Le programme natd(8) effectue cela en changeant l’adresse IP et le port source de sorte quand les données réponse arrivent il soit en mesure de déterminer la provenance des données d’origine et les transférer à l’émetteur original.

L’utilisation classique de NAT est le partage de connexion Internet.

32.8.2. Architecture du réseau

En raison de la diminution du nombre d’adresses IP libres sous IPv4, et de l’augmentation du nombre d’utilisateurs de lignes haut-débit comme le câble ou l’ADSL, le besoin d’utiliser une solution de partage de connexion est donc en constante augmentation. La possibilité de connecter plusieurs ordinateurs par l’intermédiaire d’une connexion et d’une adresse IP fait de natd(8) une solution de choix.

Plus généralement, un utilisateur dispose d’une machine connecté sur la câble ou une ligne ADSL avec une adresse IP et désire utiliser cet ordinateur connecté pour fournir un accès Internet à d’autres machines du réseau local.

Pour cela, la machine FreeBSD sur Internet doit jouer le rôle de passerelle. Cette machine passerelle doit avoir deux cartes réseaux-l’une pour se connecter au routeur Internet, l’autre est connectée au réseau local. Toutes les machines du réseau local sont connectées par l’intermédiaire d’un hub ou d’un switch.

Il existe plusieurs manières pour connecter un réseau local à l’Internet à travers une passerelle FreeBSD. Cet exemple n’abordera que le cas d’une passerelle avec au moins deux cartes réseaux.

Organisation du réseau

Une telle configuration est communément utilisée pour partager une connexion Internet. Une des machines du réseau local est connectée à Internet. Le reste des machines accède à Internet par l’intermédiaire de cette machine "passerelle".

32.8.3. Configuration

Les options suivantes doivent être présentes dans le fichier de configuration du noyau:

options IPFIREWALL
options IPDIVERT

De plus, les options suivantes peuvent également être utiles:

options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPFIREWALL_VERBOSE

Ce qui suit doit figurer dans le fichier /etc/rc.conf:

gateway_enable="YES" (1)
firewall_enable="YES" (2)
firewall_type="OPEN" (3)
natd_enable="YES"
natd_interface="fxp0" (4)
natd_flags="" (5)
1Configure la machine comme passerelle. Exécuter sysctl net.inet.ip.forwarding=1 aurait le même effet.
2Active au démarrage les règles du coupe-feu se trouvant dans le fichier /etc/rc.firewall.
3Cela spécifie un ensemble de règles prédéfinies pour le coupe-feu qui autorise tous les paquets entrant. Consultez le fichier /etc/rc.firewall pour d’autres ensembles de régles.
4Indique à travers quelle interface transférer les paquets (l’interface connectée à l’Internet).
5Toutes options de configuration supplémentaires passées à natd(8) au démarrage.

Le fait d’avoir les options précédentes définies dans le fichier /etc/rc.conf lancera la commande /etc/rc.conf au démarrage. Cette commande peut être également exécutée à la main.

Il est également possible d’utiliser un fichier de configuration pour natd(8) quand il y a trop d’options à passer. Dans ce cas, le fichier de configuration doit être défini en ajoutant la ligne suivante au fichier /etc/rc.conf:

natd_flags="-f /etc/natd.conf"

Le fichier /etc/natd.conf contiendra une liste d’options de configuration, une par ligne. Par exemple le cas de figure de la section suivante utiliserait le fichier suivant:

redirect_port tcp 192.168.0.2:6667 6667
redirect_port tcp 192.168.0.3:80 80

Pour plus d’information concernant le fichier de configuration, consultez la page de manuel de natd(8) au sujet de l’option -f.

A chaque machine et interface derrière le réseau local doit être assigné une adresse IP de l’espace d’adresses privées comme défini par la RFC 1918 et doit disposer d’une passerelle par défaut qui est l’adresse IP interne de la machine natd(8).

Par exemple, les clients A et B du réseau local ont les adresses IP 192.168.0.2 et 192.168.0.3, tandis que l’interface sur le réseau local de la machine natd a pour adresse IP 192.168.0.1. La passerelle par défaut des clients A et B doit être l’adresse 192.168.0.1 de la machine natd. L’interface externe ou Internet de cette dernière ne demande aucune modification spécifique pour que natd(8) puisse fonctionner.

32.8.4. Redirection de ports

L’inconvénient avec natd(8) est que les clients du réseau local ne sont pas accessibles depuis l’Internet. Les clients sur le réseau local peuvent établir des connexions sortantes vers le monde extérieur mais ne peuvent recevoir de connexions entrantes. Cela présente un problème si l’on tente de faire tourner des services Internet sur une des machines du réseau local. Une solution simple à ce problème est de rediriger les ports Internet sélectionnés de la machine natd vers le client sur le réseau local.

Par exemple, un serveur IRC tourne sur le client A, et un serveur web sur le client B. Pour que cela fonctionne correctement, les connections reçues sur les ports 6667 (IRC) et 80 (web) doivent être redirigées vers les machines correspondantes.

L’option -redirect_port doit être passée à natd(8) avec les autres options adéquates. La syntaxe est la suivante:

-redirect_port proto targetIP:targetPORT[-targetPORT]
                 [aliasIP:]aliasPORT[-aliasPORT]
                 [remoteIP[:remotePORT[-remotePORT]]]

Dans l’exemple précédent, l’argument passé à la commande devrait être:

-redirect_port tcp 192.168.0.2:6667 6667
-redirect_port tcp 192.168.0.3:80 80

Cela va rediriger les ports tcp voulus vers les machines du réseau local.

L’option -redirect_port peut être utilisée pour indiquer une plage de ports plutôt que des ports individuels. Par exemple tcp 192.168.0.2:2000-3000 2000-3000 redirigerait toutes les connexions reçues sur les ports 2000 à 3000 vers les ports 2000 à 3000 du client A.

Ces options peuvent être utilisées quand on exécute directement natd(8), placées dans l’option natd_flags="" du fichier /etc/rc.conf, ou passées par l’intermédiaire d’un fichier de configuration.

Pour plus d’éléments et d’options de configuration consultez la page de manuel natd(8)

32.8.5. Redirection d’adresses

La redirection d’adresses est utile si plusieurs adresses IP sont disponibles mais doivent se trouver sur une seule machine. Avec cela, natd(8) peut assigner à chaque client du réseau local sa propre adresse IP externe. Le programme natd(8) récrit alors les paquets sortant des clients du réseau local avec l’adresse IP externe correcte et redirige tout le trafic entrant sur une adresse IP particulière vers la machine du réseau local correspondante. Ce principe est également connu sous le nom de translation d’adresses statique. Par exemple, les adresses IP 128.1.1.1, 128.1.1.2, et 128.1.1.3 appartiennent à la passerelle natd. L’adresse 128.1.1.1 peut être utilisée comme adresse IP externe de la passerelle natd, tandis que 128.1.1.2 et 128.1.1.3 sont redirigées vers les machines A et B du réseau local.

La syntaxe de l’option -redirect_address est la suivante:

-redirect_address localIP publicIP

localIP

L’adresse IP interne du client sur le réseau local.

publicIP

L’adresse IP externe correspondant au client sur le réseau local.

Dans l’exemple, les arguments passés à la commande seraient:

-redirect_address 192.168.0.2 128.1.1.2
-redirect_address 192.168.0.3 128.1.1.3

Comme pour l’option -redirect_port, ces options peuvent être placées dans l’option natd_flags="" du fichier /etc/rc.conf, ou passées par l’intermédiaire d’un fichier de configuration. Avec la redirection d’adresse, il n’y a pas besoin de redirection de ports puisque toutes les données reçues sur une IP particulière sont redirigées.

Les adresses IP sur la machine natd doivent être active et pointer sur l’interface externe. Consultez la page de manuel rc.conf(5) pour cela.

32.9. IP sur liaison parallèle (PLIP)

PLIP nous permet d’utiliser le protocole TCP/IP entre ports parallèles. C’est utile sur des machines sans cartes réseaux, ou pour effectuer une installation sur ordinateur portable. Dans cette section nous aborderons:

  • La fabrication d’un câble parallèle ("laplink").

  • La connexion de deux ordinateurs via PLIP.

32.9.1. Fabriquer un câble parallèle

Vous pouvez acheter un câble parallèle auprès de la plupart des vendeurs de matériel informatique. Si ce n’est pas le cas, ou désirez savoir comment est fait un tel câble, le tableau suivant montre comment en faire un à partir d’un câble parallèle d’imprimante.

Tableau 1. Câblage d’un câble parallèle pour réseau
A-nameA-EndB-EndDescr.Post/Bit
....
DATA0
-ERROR
....
....
2
15
....
....
15
2
....

Data

....
0/0x01
1/0x08
....
....
DATA1
+SLCT
....
....
3
13
....
....
13
3
....

Data

....
0/0x02
1/0x10
....
....
DATA2
+PE
....
....
4
12
....
....
12
4
....

Data

....
0/0x04
1/0x20
....
....
DATA3
-ACK
....
....
5
10
....
....
10
5
....

Strobe

....
0/0x08
1/0x40
....
....
DATA4
BUSY
....
....
6
11
....
....
11
6
....

Data

....
0/0x10
1/0x80
....
GND
18-25
18-25

GND

-

32.9.2. Configurer PLIP

Tout d’abord procurez-vous un câble "laplink". Vérifiez ensuite que les deux ordinateurs disposent d’un noyau avec le support pour le pilote de périphérique lpt(4).

# grep lp /var/run/dmesg.boot
lpt0: <Printer> on ppbus0
lpt0: Interrupt-driven port

Le port parallèle doit fonctionner sous interruption, sous FreeBSD 4.X vous devriez avoir une ligne semblable à la ligne suivante dans le fichier de configuration du noyau:

device ppc0 at isa? irq 7

Sous FreeBSD 5.X, le fichier /boot/device.hints devrait contenir les lignes suivantes:

hint.ppc.0.at="isa"
hint.ppc.0.irq="7"

Ensuite vérifiez si le fichier de configuration du noyau contient une ligne device plip ou si le module plip.ko est chargé. Dans les deux cas l’interface réseau parallèle devrait apparaître quand vous utilisez la commande ifconfig(8):

# ifconfig plip0
plip0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500

Branchez le câble "laplink" sur les interfaces parallèles des deux ordinateurs.

Configurez les paramètres de l’interface réseau des deux côtés en tant que root. Par exemple, si vous voulez connecter la machine host1 avec la machine host2:

                 host1 ----- host2
IP Address    10.0.0.1      10.0.0.2

Configurez l’interface sur host1 en tapant:

# ifconfig plip0 10.0.0.1 10.0.0.2

Configurez l’interface sur host2 en tapant:

# ifconfig plip0 10.0.0.2 10.0.0.1

Vous devriez avoir maintenant une connexion qui fonctionne. Veuillez consulter les pages de manuel lp(4) et lpt(4) pour plus de détails.

Vous devriez également ajouter les deux noms de machines dans le fichier /etc/hosts:

127.0.0.1               localhost.my.domain localhost
10.0.0.1                host1.my.domain host1
10.0.0.2                host2.my.domain

Pour vérifier le bon fonctionnement de la connexion, aller sur les deux machines et effectuez un "ping" vers l’autre machine. Par exemple, sur host1:

# ifconfig plip0
plip0: flags=8851<UP,POINTOPOINT,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        inet 10.0.0.1 --> 10.0.0.2 netmask 0xff000000
# netstat -r
Routing tables

Internet:
Destination        Gateway          Flags     Refs     Use      Netif Expire
host2              host1              UH          0       0       plip0
# ping -c 4 host2
PING host2 (10.0.0.2): 56 data bytes
64 bytes from 10.0.0.2: icmp_seq=0 ttl=255 time=2.774 ms
64 bytes from 10.0.0.2: icmp_seq=1 ttl=255 time=2.530 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=255 time=2.556 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=255 time=2.714 ms

--- host2 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/stddev = 2.530/2.643/2.774/0.103 ms

32.10. IPv6

L’IPv6 (également connu sous le nom de IPng "IP nouvelle génération") est la nouvelle version du très célèbre protocole IP (aussi connu sous le nom d’IPv4). Comme les autres systèmes BSD, FreeBSD utilise l’implémentation IPv6 KAME. Votre système FreeBSD est donc fourni avec tout ce dont vous aurez besoin pour tester l’IPv6. Cette section se concentre sur la configuration et l’utilisation d’IPv6.

Au début des années 90, on a pris conscience de la diminution rapide de l’espace d’adresses IPv4. Etant donné le taux d’expansion de l’Internet, deux problèmes majeurs apparaissaient:

  • Le manque d’adresses. Aujourd’hui ce n’est plus vraiment un problème puisque les espaces d’adresses privées RFC1918 (10.0.0.0/8, 172.16.0.0/12, et 192.168.0.0/16) et la translation d’adresses (NAT) sont utilisés.

  • Les tables des routeurs devenaient trop importantes. C’est toujours un problème actuellement.

L’IPv6 remédie à ces problèmes et à de nombreux autres:

  • Espace d’adressage sur 128 bits. Ou plus précisément, il y a 340 282 366 920 938 463 463 374 607 431 768 211 456 adresses disponibles. Cela équivaut à approximativement 6.67 * 10^27 adresses IPv6 par kilomètre-carré de surface de notre planète.

  • Les routeurs ne stockeront que des regroupements d’adresses dans leurs tables de routage réduisant donc l’espace moyen d’une table de routage à 8192 entrées.

IPv6 présente également de nombreuses autres intéressantes fonctionnalités telles que:

  • L’autoconfiguration des adresses (RFC2462)

  • Adresses unicast ("une parmi plusieurs")

  • Adresses multicast (multidestinataires) obligatoires

  • IPsec (protocole de sécurité IP)

  • Struture d’entête simplifiée

  • IP mobile

  • Mécanismes de transition IPv6-vers-IPv4

Pour plus d’informations consultez les références suivantes:

32.10.1. Les adresses IPv6

Il existe différent types d’adresses IPv6: unicast, anycast et multicast.

Les adresses unicast (mono-destinataire) sont les adresses classiques. Un paquet envoyé à une adresse unicast arrive à l’interface correspondant à l’adresse.

Les adresses anycast ne sont normalement pas distinguables des adresses unicast mais correspondent à un groupe d’interfaces. Un paquet destiné à une adresse anycast arrivera à l’interface la plus proche (en terme d’unité de distance du protocole de routage). Les adresses anycast devraient n’être utilisées que par les routeurs.

Les adresses multicast identifient un groupe d’interfaces. Un paquet destiné à une adresse multicast arrivera sur toutes les interfaces appartenant au groupe multicast.

L’adresse de diffusion IPv4 (généralement xxx.xxx.xxx.255) est exprimée par des adresses multicast en IPv6.

Tableau 2. Adresses IPv6 réservées
Adresse IPv6Longueur du préfixe (bits)DescriptionNotes

::

128 bits

non-spécifiée

similaire à 0.0.0.0 sous IPv4

::1

128 bits

adresse de boucle

similaire à 127.0.0.1 sous IPv4

::00:xx:xx:xx:xx

96 bits

IPv4 encapsulé

Les 32 bits de poids faible sont l’adresse IPv4. Egalement appelée "adresse IPv6 compatible IPv4".

::ff:xx:xx:xx:xx

96 bits

adresse IPv6 mappée IPv4

Les 32 bits de poids faible sont l’adresse IPv4. Destinées aux machines ne supportant pas l’IPv6.

fe80:: - feb::

10 bits

lien-local

similaire à l’interface de boucle sous IPv4

fec0:: - fef::

10 bits

site-local

ff::

8 bits

multicast

001 (base 2)

3 bits

unicast globale

Toutes les adresses unicast globales sont assignées à partir de ce pool. Les trois premiers bits de l’adresse sont "001".

32.10.2. Lecture des adresses IPv6

La forme canonique est représentée suivant le schéma: x:x:x:x:x:x:x:x, où chaque "x" est une valeur héxadécimale sur 16 bits. Par exemple FEBC:A574:382B:23C1:AA49:4592:4EFE:9982

Souvent dans une adresse on aura de longues sous-parties constituées de zéros, une telle sous-partie peut être abrégée par "::". Les trois "0"s de poids fort de chaque quartet hexadécimal peuvent également être omis. Par exemple fe80::1 correspond à la forme canonique fe80:0000:0000:0000:0000:0000:0000:0001.

Une troisième forme est d’écrire les derniers 32 bits dans le style IPv4 bien connu (décimal) avec des points "." comme séparateurs. Par exemple 2002::10.0.0.1 correspond à la représentation canonique (hexadécimale) 2002:0000:0000:0000:0000:0000:0a00:0001 qui est à son tour équivalente à l’écriture 2002::a00:1.

Maintenant le lecteur devrait être en mesure de comprendre ce qui suit:

# ifconfig
rl0: flags=8943UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST mtu 1500
         inet 10.0.0.10 netmask 0xffffff00 broadcast 10.0.0.255
         inet6 fe80::200:21ff:fe03:8e1%rl0 prefixlen 64 scopeid 0x1
         ether 00:00:21:03:08:e1
         media: Ethernet autoselect (100baseTX )
         status: active

fe80::200:21ff:fe03:8e1%rl0 est une adresse de lien local configurée automatiquement. Elle est générée à partir de l’adresse MAC dans le cas de l’autoconfiguration.

Pour plus d’informations sur la structure des adresses IPv6 consultez la RFC3513.

32.10.3. Se connecter

Actuellement, il y a quatre façons de se connecter à des machines et des réseaux utilisant l’IPv6:

  • Rejoindre le réseau expérimental 6bone

  • Obtenir un réseau IPv6 auprès de votre fournisseur d’accès. Contactez votre fournisseur d’accès Internet pour plus d’informations.

  • Utilisation d’un tunnel 6-vers-4 (RFC3068)

  • Utilisation du logiciel porté net/freenet6 si vous utilisez une connexion par modem.

Ici nous ne parlerons que de la manière de se connecter au réseau 6bone puisque cela semble être aujourd’hui la méthode de connexion la plus populaire.

Consultez tout d’abord le site 6bone et recherchez une connexion 6bone proche de vous. Contactez le responsable et avec un peu de chance on vous donnera les instructions à suivre pour configurer votre connexion. Généralement cela implique la mise en place d’un tunnel GRE (gif).

Voici un exemple typique de configuration d’un tunnel gif(4):

# ifconfig gif0 create
# ifconfig gif0
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
# ifconfig gif0 tunnel MON_ADR_IPv4 MON_ADR_IPv4_ASSIGNEE_A_LAUTRE_BOUT_DU_TUNNEL
# ifconfig gif0 inet6 alias MON_ADR_IPv6_ASSIGNEE_A_LEXTREMITE_DU_TUNNEL MON_ADR_IPv6_ASSIGNEE_A_LAUTRE_BOUT_DU_TUNNEL

Remplacez les mots en majuscules par les informations que vous avez reçues du point d’accès 6bone.

Ceci établit le tunnel. Vérifiez si le tunnel fonctionne en utilisant ping6(8) sur l’adresse ff02::1%gif0. Vous devriez récevoir les réponses aux requêtes ping.

Au cas où vous seriez intrigué par l’adresse ff02:1%gif0, sachez que c’est une adresse multicast. %gif0 précise que l’adresse multicast de l’interface gif0 doit être utilisée. Puisque nous utilisons ping sur une adresse multicast, l’autre bout du tunnel devrait également répondre.

Désormais, la mise en place d’une route vers votre lien 6bone devrait être relativement directe:

# route add -inet6 default -interface gif0
# ping6 -n MON_LIEN_MONTANT
# traceroute6 www.jp.FreeBSD.org
(3ffe:505:2008:1:2a0:24ff:fe57:e561) from 3ffe:8060:100::40:2, 30 hops max, 12 byte packets
     1  atnet-meta6  14.147 ms  15.499 ms  24.319 ms
     2  6bone-gw2-ATNET-NT.ipv6.tilab.com  103.408 ms  95.072 ms *
     3  3ffe:1831:0:ffff::4  138.645 ms  134.437 ms  144.257 ms
     4  3ffe:1810:0:6:290:27ff:fe79:7677  282.975 ms  278.666 ms  292.811 ms
     5  3ffe:1800:0:ff00::4  400.131 ms  396.324 ms  394.769 ms
     6  3ffe:1800:0:3:290:27ff:fe14:cdee  394.712 ms  397.19 ms  394.102 ms

La sortie pourra être différente d’une machine à une autre. Maintenant vous devriez être en mesure d’atteindre le site IPv6 www.kame.net et de voir la tortue dansante - et cela si vous disposez d’un navigateur supportant l’IPv6 comme www/mozilla, Konqueror qui fait partie du logiciel x11/kdebase3, ou www/epiphany.

32.10.4. DNS dans le monde IPv6

A l’origine, il existait deux types d’enregistrement DNS pour l’IPv6. L’organisme IETF a déclaré obsolète l’enregistrement A6. Les enregistrements AAAA sont aujourd’hui le standard.

L’utilisation des enregistrements AAAA est assez direct. Assignez votre nom de machine à la nouvelle adresse IPv6 que vous venez d’obtenir en ajoutant:

MYHOSTNAME           AAAA    MYIPv6ADDR

à votre fichier de zone DNS primaire. Dans le cas où vous ne gérez pas vos propres zones DNS contactez le responsable de votre DNS. Les versions actuelles de bind (version 8.3 et 9) et dns/djbdns (avec le correctif IPv6) supportent les enregistrements AAAA.

32.10.5. Effectuer les changements nécessaires dans le fichier /etc/rc.conf

32.10.5.1. Paramétrage du client IPv6

Ces paramètres vous permettront de configurer une machine qui sera sur votre réseau local et sera un client, non pas un routeur. Pour que rtsol(8) configure automatiquement votre interface réseau au démarrage tout ce dont vous avez besoin d’ajouter est:

ipv6_enable="YES"

Pour assigner une adresse IP statique telle que 2001:471:1f11:251:290:27ff:fee0:2093, à votre interface fxp0, ajoutez:

ipv6_ifconfig_fxp0="2001:471:1f11:251:290:27ff:fee0:2093"

Pour assigner le routeur par défaut 2001:471:1f11:251::1, ajoutez ce qui suit au fichier /etc/rc.conf:

ipv6_defaultrouter="2001:471:1f11:251::1"

32.10.5.2. Paramétrage d’un routeur/passerelle IPv6

Ceci vous aidera à mettre en oeuvre les instructions que votre fournisseur de tunnel, tel que 6bone, vous a donné et à les convertir en paramètres qui seront conservés à chaque démarrage. Pour rétablir votre tunnel au démarrage, utilisez quelque chose comme ce qui suit dans le fichier /etc/rc.conf:

Listez les interfaces génériques de tunnel qui seront configurées, par exemple gif0:

gif_interfaces="gif0"

Pour configurer l’interface avec une adresse (extrémité) locale MY_IPv4_ADDR vers une adresse (extrémité) distante REMOTE_IPv4_ADDR:

gifconfig_gif0="MY_IPv4_ADDR REMOTE_IPv4_ADDR"

Pour utiliser l’adresse IPv6 que l’on vous a assigné en vue d’être utilisée pour votre extrémité du tunnel IPv6, ajoutez:

ipv6_ifconfig_gif0="MY_ASSIGNED_IPv6_TUNNEL_ENDPOINT_ADDR"

Ensuite tout ce qu’il reste à faire est de définir la route par défaut pour l’IPv6. C’est l’autre extrémité du tunnel IPv6:

ipv6_defaultrouter="MY_IPv6_REMOTE_TUNNEL_ENDPOINT_ADDR"

32.10.5.3. Paramétrage d’un tunnel IPv6

Si le serveur doit router de l’IPv6 entre votre réseau et le reste du monde, le paramètre suivant sera également nécessaire dans votre fichier /etc/rc.conf:

ipv6_gateway_enable="YES"

32.10.6. Annonce du routeur et auto-configuration

Cette section vous aidera à configurer rtadvd(8) pour l’annonce de la route IPv6 par défaut.

Pour activer rtadvd(8), vous devrez ajouter ce qui suit à votre fichier /etc/rc.conf:

rtadvd_enable="YES"

Il est important que vous indiquiez l’interface sur laquelle le routeur IPv6 sera sollicité. Par exemple pour que rtadvd(8) utilise fxp0:

rtadvd_interfaces="fxp0"

Nous devons maintenant créer le fichier de configuration /etc/rtadvd.conf. Voici un exemple:

fxp0:\
	:addrs#1:addr="2001:471:1f11:246::":prefixlen#64:tc=ether:

Remplacez fxp0 avec l’interface que vous allez utiliser.

Ensuite remplacez 2001:471:1f11:246:: avec votre préfixe.

Si vous êtes un sous-réseau /64 dédié, il ne sera pas nécessaire de modifier quelque chose d’autre. Sinon, vous devrez modifier prefixlen# avec la valeur correcte.

32.11. ATM ("Asynchronous Transfer Mode")

32.11.1. Configuration IP conventionnelle sur ATM (PVCs)

L’IP conventionnelle sur ATM ("Classical IP over ATM"-CLIP) est la méthode la plus simple pour utiliser ATM (Asynchronous Transfer Mode) avec l’IP. Elle peut être utilisée en mode non connecté ("Switched Virtual Connections"-SVCs) et en mode connecté ("Permanent Virtual Connections"-PVCs). Cette section décrit comment configurer un réseau basé sur les PVCs.

32.11.1.1. Configurations en réseau maillé

La première méthode de configuration CLIP avec des PVCs est de connecter entre elles chaque machine du réseau par l’intermédiaire d’une PVC dédiée. Bien que cela soit simple à configurer, cela tend à devenir impraticable avec un nombre important de machines. Notre exemple suppose que nous avons quatre machines sur le réseau, chacune connectée au réseau ATM à l’aide d’une carte réseau ATM. La première étape est d’établir le plan des adresses IP et des connexions ATM entre machines. Nous utilisons le plan suivant:

MachineAdresse IP

hostA

192.168.173.1

hostB

192.168.173.2

hostC

192.168.173.3

hostD

192.168.173.4

Pour réaliser un réseau maillé, nous avons besoin d’une connexion ATM entre chaque paire de machines:

MachinesCouple VPI.VCI

hostA - hostB

0.100

hostA - hostC

0.101

hostA - hostD

0.102

hostB - hostC

0.103

hostB - hostD

0.104

hostC - hostD

0.105

Les valeurs VPI et VCI à chaque extrémité de la connexion peuvent bien évidemment être différentes, mais par souci de simplicité nous supposerons quelles sont identiques. Ensuite nous devons configurer les interfaces ATM sur chaque machine:

hostA# ifconfig hatm0 192.168.173.1 up
hostB# ifconfig hatm0 192.168.173.2 up
hostC# ifconfig hatm0 192.168.173.3 up
hostD# ifconfig hatm0 192.168.173.4 up

en supposant que l’interface ATM est hatm0 sur toutes les machines. Maintenant les PVCs doivent être configurées sur hostA (nous supposons qu’elles sont déjà configurées sur les switches ATM, vous devez consulter le manuel du switch sur comment réaliser cette configuration).

hostA# atmconfig natm add 192.168.173.2 hatm0 0 100 llc/snap ubr
hostA# atmconfig natm add 192.168.173.3 hatm0 0 101 llc/snap ubr
hostA# atmconfig natm add 192.168.173.4 hatm0 0 102 llc/snap ubr

hostB# atmconfig natm add 192.168.173.1 hatm0 0 100 llc/snap ubr
hostB# atmconfig natm add 192.168.173.3 hatm0 0 103 llc/snap ubr
hostB# atmconfig natm add 192.168.173.4 hatm0 0 104 llc/snap ubr

hostC# atmconfig natm add 192.168.173.1 hatm0 0 101 llc/snap ubr
hostC# atmconfig natm add 192.168.173.2 hatm0 0 103 llc/snap ubr
hostC# atmconfig natm add 192.168.173.4 hatm0 0 105 llc/snap ubr

hostD# atmconfig natm add 192.168.173.1 hatm0 0 102 llc/snap ubr
hostD# atmconfig natm add 192.168.173.2 hatm0 0 104 llc/snap ubr
hostD# atmconfig natm add 192.168.173.3 hatm0 0 105 llc/snap ubr

Bien évidemment des contrats de trafic autres qu’UBR ("Unspecified Bit Rate") peuvent être utilisés dès que la carte ATM les supportent. Dans ce cas le nom du contrat de trafic est suivi par les paramètres du trafic. De l’aide concernant l’outil atmconfig(8) peut être obtenue avec:

# atmconfig help natm add

ou dans la page de manuel de atmconfig(8).

La même configuration peut être faite par l’intermédiaire de /etc/rc.conf. Pour la machine hostA cela ressemblerait à:

network_interfaces="lo0 hatm0"
ifconfig_hatm0="inet 192.168.173.1 up"
natm_static_routes="hostB hostC hostD"
route_hostB="192.168.173.2 hatm0 0 100 llc/snap ubr"
route_hostC="192.168.173.3 hatm0 0 101 llc/snap ubr"
route_hostD="192.168.173.4 hatm0 0 102 llc/snap ubr"

L’état de toutes les routes CLIP peut être obtenu avec:

hostA# atmconfig natm show

Last modified on: 11 décembre 2021 by Sergio Carlavilla Delgado