Tuxbihan

Events Calendar

L M M J V S D
28 29 30 31 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

Latest Events

Pas d'événements

Projets

Refonte du site Web
18.04, 08 - 31.05, 08
Accueil arrow Technique arrow Un réseau TCP/IP sur une liaison série.
Un réseau TCP/IP sur une liaison série. Convertir en PDF Version imprimable Suggérer par mail
Écrit par Patrick Percot   
20-04-2003
Cette utilisation d’une liaison série est particulièrement intéressante pour un système embarqué léger qui ne dispose pas de carte réseau. On peut grâce à cette configuration bénéficier d’un réseau TCP/IP entre deux machines simplement connectées par un câble série de type null modem.

La même chose est possible avec l’utilisation d’un modem. Je n’ai pas encore réalisé cet essai, mais dès que cela sera fait, les fichiers qui permettent la connexion par modem seront mis à disposition.

On peut même configurer la machine qui se connecte au système embarqué pour qu’elle joue le rôle d’une passerelle, offrant ainsi à l’ensemble du réseau auquel elle est connectée la possibilité d’accéder au système embarqué.

Avantages et inconvénients

Avantages de la méthode :

-  On n’est pas obligé d’écrire des protocoles de niveau réseau et transport (ce qui peut être long à écrire et débugger) pour transférer des données sur une liaison série,

-  On peut utiliser des applications toutes faites (serveurs ftp, http, ssh, ...),

-  On peut faire "circuler" plusieurs connexions et plusieurs protocoles simultanément,

-  Les protocoles sur lesquels on s’appuie sont des protocoles éprouvés, fiables, avec une interface de programmation connue, qui permettent aussi de développer des protocoles "maison".

-  La machine qui se connecte doit s’authentifier (à noter l’authentification peut être parallèle, c’est-à-dire que chacune des machines demande à l’autre de s’authentifier). Dans le cas où la machine qui se connecte est une passerelle, il faudra envisager une authentification par protocole si cela est nécessaire.

Inconvénients de la méthode :

-  Consommation de bande passante, les protocoles PPP, IP et TCP ou UDP ont des entêtes qui bien que peu encombrants utilisent de la bande passante. C’est seulement deux octets pour un MRU (Maximum Receive Unit) de 1500 octets. Sur des trames courtes (inférieures au MRU), des octets de comblement sont ajoutés à concurrence du MRU. Les protocoles IP et TCP consomment chacun 20 octets (parfois plus s’il y a des options). Il faut noter que le MRU peut être négocié à l’initialisation de la connexion PPP, il faut pour cela ajouter une ligne "mru MRU-VALUE" dans le fichier de configuration de PPP.

Pour une utilisation privée, cette technique permet aussi de mettre en réseau une machine que l’on ne souhaite pas équiper d’une carte réseau.

Description de la situation :

Considérons un réseau 192.168.0.0, dans lequel la machine "client" d’adresse IP 192.168.0.73 joue le rôle de poste "client", la machine "gateway" d’adresse IP 192.168.0.72 joue le rôle de passerelle vers la machine "embedded" d’adresse IP 192.168.10.71. La passerelle "gateway" aura donc une seconde adresse IP correspondant au réseau sur la liaison série, cette adresse sera 192.168.10.72.

Schéma réseau PPP - 11.1 ko

Schéma réseau PPP
Schéma du réseau PPP sur liaison série avec passerelle.

La connexion TCP/IP par la liaison série est réalisée par le démon pppd. Pour ceux qui connaissent déjà GNU/Linux, c’est le démon qui est utilisé pour initier une connexion vers le fournisseur d’accès Internet. Ici, au lieu d’utiliser pppd en tmps que client uniquement, nous allons également paramétrer un démon serveur.

Le démon pppd aura les tâches suivantes à réaliser :

-  Paramétrer la liaison série,

-  Authentifier la machine qui se connecte pour éviter les connexions illicites,

-  Négocier les paramètres de la connexion,

-  Transporter les protocoles TCP/IP.

Description des paramétrages à effectuer pour mettre en oeuvre la connexion.

-  Configuration de la machine "client" :

Cette machine a la configuration la plus simple. Il s’agit en fait uniquement d’indiquer la route vers le réseau constitué par les machines "embedded" et "gateway".

Ajouter (sur une distribution Debian GNU/Linux) un fichier nommé /etc/network/if-up/99route :

 


#!/bin/sh

/sbin/route add -net 192.168.10.0 gw 192.168.0.72 netmask 255.255.255.0

exit 0

 

Recharger la configuration réseau en exécutant :


# /etc/init.d/networking restart

 

Cette machine devra indiquer deux routes vers les deux sous-réseaux 192.168.0.0 et 192.168.10.0. L’ajout de la route vers le réseau principal se fait automatiquement lors de la configuration du réseau. Par contre, lors de l’établissement du réseau PPP, seule l’adresse de la machine connectée à la liaison série est ajoutée dans la tables de routage. Il faut donc créer une route vers ce sous-réseau. Ce qui sera fait en créant un fichier /etc/ppp/ip-up.d/99route qui contiendra les lignes suivantes :

 


#!/bin/sh

IPNET=$(echo $PPP_IPPARAM | cut -d / -f 1)
IPMASK=$(echo $PPP_IPPARAM | cut -d / -f 2)

logger "Adding route add -net $IPNET netmask $IPMASK $PPP_IFACE"
/sbin/route add -net $IPNET netmask $IPMASK $PPP_IFACE

exit 0

 

À noter que sur une distribution Mandrake, il faudra mettre dans le fichier /etc/ppp/ip-up.local les lignes suivantes :

 



#!/bin/sh

IPNET=$(echo $6 | cut -d / -f 1)
IPMASK=$(echo $6 | cut -d / -f 2)
logger route add -net $IPNET netmask $IPMASK gw $5
route add -net $IPNET netmask $IPMASK gw $5

 

Ce fichier doit être rendu exécutable :

 


# chmod a+x 99route
Ou :

# chmod a+x ip-up.local

 

Il faudra aussi lancer un démon pppd qui aura pour charge d’établir un lien avec la machine "embedded".

Sur cette machine, nous allons créer un démon pppd actif, c’est-à-dire qu’il va initier la connexion avec la machine connectée par la liaison série.

Le fichier de configuration de pppd est /etc/ppp/peers/seriallink :

 


# The three following options are for debugging
#debug
#dump
#record pppfile

asyncmap 0
nodetach
local
lock
crtscts
lcp-max-configure 30
ipcp-max-configure 30
hide-password
noauth

/dev/ttyS0
115200
ipparam 192.168.0.0/255.255.255.0
user useroflink

 

La dernière ligne "user useroflink" indique que l’authentification doit être faite en utilisant le mot de passe de l’utilisateur useroflink. Le mot de passe est stocké dans le fichier /etc/ppp/chap-secrets :

 



# Secrets for authentication using CHAP
# client        server        secret                        IP addresses
useroflink        seriallink        secret-for-useroflink

 

Le démon peut être lancé, soit :

-  à la demande, dans ce cas, on utilisera un lancement manuel en exécutant la commande (à noter qu’il existe des techniques pour lancer le démon automatiquement lors d’une tentative d’accès au sous-réseau que nous ne développerons pas ici) :

 


$ pppd call seriallink

 

-  dès le démarrage de la machine, dans ce cas, on écrira donc deux petits scripts (run-serial-connect et serial-connect) que l’on copiera dans "/etc/init.d",

Contenu du fichier run-serial-connect :

 


#!/bin/sh

/etc/init.d/serial-connect &

 

Contenu du fichier serial-connect :

 


#!/bin/sh

# Run forever, init will send SIGTERM when changing runlevel
for (( ; ; )) ; do
        pon seriallink > /dev/null
        sleep 1
done

 

Ne pas oublier de rendre ce fichier exécutable :

 


# chmod a+x /etc/init.d/run-serial-connect /etc/init.d/serial-connect

 

Ne pas oublier également de créer des liens vers ce fichier dans chacun des répertoires "/etc/rcX.d", avec X variant de 2 à 5.

 


# for i in 2 3 4 5 ; do
> ln -sf /etc/init.d/run-serial-connect etc/rc${i}.d/S15run-serial-connect
> done

 

Enfin, il faut autoriser la passerelle à forwarder les trames IP, dans le fichier /etc/network/options (pour une Debian GNU/Linux) :

 



ip_forward=yes
spoofprotect=yes
syncookies=no

 

Si le noyau n’a pas été compilé pour permettre l’IP Masquerading, vous pourrez être obligé de le recompiler.

-  Configuration de la machine "embedded" :

Le démon pppd aura pour principales tâches de se mettre en attente d’une tentative de connexion, de valider l’authentification de la machine qui se connecte, et d’attribuer une adresse IP à la machine qui initie la connexion.

Lors de l’établissement du réseau PPP, seule l’adresse de la machine connectée à la liaison série est ajoutée dans la tables de routage. Il faut donc créer une route vers ce sous-réseau. Ce qui sera fait en créant un fichier /etc/ppp/ip-up.d/99route qui contiendra les lignes suivantes :

 


#!/bin/sh

IPNET=$(echo $PPP_IPPARAM | cut -d / -f 1)
IPMASK=$(echo $PPP_IPPARAM | cut -d / -f 2)

logger "Adding route add -net $IPNET netmask $IPMASK $PPP_IFACE"
/sbin/route add -net $IPNET netmask $IPMASK $PPP_IFACE

exit 0

 

À noter que sur une distribution Mandrake, il faudra mettre dans le fichier /etc/ppp/ip-up.local les lignes suivantes :

 



#!/bin/sh

IPNET=$(echo $6 | cut -d / -f 1)
IPMASK=$(echo $6 | cut -d / -f 2)
logger route add -net $IPNET netmask $IPMASK gw $5
route add -net $IPNET netmask $IPMASK gw $5

 

Ce fichier doit être rendu exécutable :

 


# chmod a+x 99route

 

Ou :

 


# chmod a+x ip-up.local

 

Contenu du fichier /etc/ppp/peers/seriallink :

 



# These options are for debugging
#debug
#dump
#record pppfile

asyncmap 0
silent
passive
nodetach
local
lock
crtscts
lcp-max-configure 30
ipcp-max-configure 30
hide-password
auth
/dev/ttyS0
115200
noipdefault
ipparam 192.168.10.0/255.255.255.0
192.168.10.72:192.168.10.71

 

Le fichier /etc/ppp/chap-secrets devra contenir les noms et mots de passe des utilisateurs autorisés à se connecter :

 



# Secrets for authentication using CHAP
# client        server        secret                        IP addresses
useroflink        *         secret-for-useroflink        192.168.10.71

 

Lancement et réactivation du démon pppd :

Certaines méthodes de connexion peuvent mettre fin au démon pppd, aussi, il faut s’assurer que ce démon est réactivé dès qu’il s’arrête.

On écrira donc deux petits scripts (run-serial-connect et serial-connect) que l’on copiera dans "/etc/init.d",

Contenu du fichier run-serial-connect :

 


#!/bin/sh

/etc/init.d/serial-connect &

 

Contenu du fichier serial-connect :

 


#!/bin/sh

# Run forever, init will send SIGTERM when changing runlevel
for (( ; ; )) ; do
        pon seriallink > /dev/null
        sleep 1
done

 

Ne pas oublier de rendre ce fichier exécutable :

 


# chmod a+x /etc/init.d/run-serial-connect /etc/init.d/serial-connect

 

Ne pas oublier de rendre ce fichier exécutable :

 


# chmod a+x /etc/init.d/run-serial-connect

 

On créera également un lien vers ce script sera créé dans chacun des répertoires "/etc/rcX.d", avec X variant de 2 à 5.


# for i in 2 3 4 5 ; do
> ln -sf /etc/init.d/run-serial-connect etc/rc${i}.d/S15run-serial-connect
> done
Commentaires
Ajouter un nouveau Rechercher
Ecrire un commentaire
Nom:
Email:
 
Titre:
BBCode:
[b] [i] [u] [url] [quote] [code] [img] 
 
:angry::0:confused::cheer:B):evil::silly::dry::lol::kiss::D:pinch:
:(:shock::X:side::):P:unsure::woohoo::huh::whistle:;):s
:!::?::idea::arrow:
Saisissez le code que vous voyez.

3.21 Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."

 
< Précédent   Suivant >