Un brin de réseau


Tel un cahier de notes, ce blog propose des articles sur les technologies réseaux et leur utilisation pratique, le tout illustré avec des maquettes et des captures.

Python freeradius-api Python diffplus

PPP Partie 2

Cisco HDLC

L'équipementier Cisco a l'honneur d'ouvrir cette série sur les captures réseaux PPP, ce dernier ayant prémédité la première version de PPP avec sa version propriétaire de HDLC—comme rappelé dans l'ouvrage CCENT/CCNA ICND1 640-822 Official Cert Guide, 3rd Edition :


      The original HDLC standards did not include a Protocol Type field, so Cisco added one to
      support the first serial links on Cisco routers, back in the early days of Cisco in the latter
      1980s. By adding something to the HDLC header, Cisco made its version of HDLC proprietary.
      Comparing the basics, PPP behaves much like HDLC. The framing looks identical to the
      Cisco proprietary HDLC framing.
    

Autrement dit, HDLC, ne comportant pas de champ indiquant le type de protocole encapsulé, n'est pas multi-protocoles. C'est l'une des raisons pour lesquelles il n'a pas pu être choisi tel quel pour être le prochain PPP, comme l'explique la RFC 1547 :


      By itself, the HDLC frame structure does not meet most of the
      requirements.  HDLC does not provide protocol multiplexing, standard
      MTUs, fault detection or option negotiation.  There is no mechanism
      for future extensibility.

      Given the HDLC frame structure's wide acceptance and simplicity, it
      may be an ideal building block for the ISPPP.
    

Néanmoins, HDLC étant répandu en ce temps-là, le tout premier PPP (RFC 1134) a été basé dessus et nous reconnaissons là le format de trame Cisco HDLC :


      +----------+---------+---------+----------+------------
      |   Flag   | Address | Control | Protocol | Information
      | 01111110 | 1111111 | 0000011 | 16 bits  |      *
      +----------+---------+---------+----------+------------
              ---+---------+----------+
                 |   FCS   |   Flag   |
                 | 16 bits | 01111110 |
              ---+---------+----------+
    

Voici une capture de Cisco HDLC entre deux pairs :

R1 R2

            !
            hostname R1
            !
            interface Serial1/0
             encapsulation hdlc
             ip address 10.0.0.1 255.255.255.252
            !
              

            !
            hostname R2
            !
            interface Serial1/0
             encapsulation hdlc
             ip address 10.0.0.2 255.255.255.252
            !
              
cap-chdlc
Cette capture fait apparaître l'usage de Cisco HDLC, lequel est bien multi-protocoles via le champ Protocol. Dans l'exemple, SLARP (Serial Line ARP) est utilisé comme mécanisme de keepalive (si un pair ne répond pas après plusieurs keepalive envoyés par l'autre, le lien deviendra down) ainsi que ICMP pour tester la connectivité IP entre les pairs.

PPP in HDLC Framing RFC 1549

Même configuration que précédemment mais en changeant l'encapsulation de Cisco HDLC à PPP :

R1 R2

            !
            hostname R1
            !
            interface Serial1/0
             encapsulation ppp
             ip address 10.0.0.1 255.255.255.252
            !
              

            !
            hostname R2
            !
            interface Serial1/0
             encapsulation ppp
             ip address 10.0.0.2 255.255.255.252
            !
              
cap-pppinhdlc
Nous retrouvons le schéma d'étapes de PPP introduit à la fin de l'article précédent avec, ici, les étapes Establish (PPP LCP) et Network (PPP IPCP—utilisé par les pairs pour échanger leur adresse IP respective). De plus, ICMP a été utilisé pour tester la connectivité IP entre les pairs. Cette capture montre bien que PPP est multi-protocoles (trois protocoles différents sont encapsulés : PPP LCP, PPP IPCP et ICMP).

Authentification PPP PAP RFC 1334

Si l'authentification PPP PAP est maintenant ajoutée :

R1 R2

            !
            hostname R1
            !
            username R2 password P2
            !
            interface Serial1/0
             encapsulation ppp
             ppp authentication pap
             ppp pap sent-username R1 password P1
             ip address 10.0.0.1 255.255.255.252
            !
              

            !
            hostname R2
            !
            username R1 password P1
            !
            interface Serial1/0
             encapsulation ppp
             ppp authentication pap
             ppp pap sent-username R2 password P2
             ip address 10.0.0.2 255.255.255.252
            !
              
cap-pppinhdlc-pap
Nous retrouvons cette fois le schéma d'étapes complet de PPP avec en plus, ici, l'étape Authentication (PPP PAP). L'authentification avec PPP PAP se fait en deux étapes (2-way handshake) : ceci est visible via les messages Authenticate-Request et Authenticate-Ack que chaque pair envoie à l'autre.

Authentification PPP CHAP RFC 1994

Comme vous l'aurez deviné, le protocole PPP PAP n'est pas sécurisé car les identifiants sont envoyés en clair :


      PAP is not a strong authentication method.  Passwords are sent over
      the circuit "in the clear", and there is no protection from playback
      or repeated trial and error attacks.  The peer is in control of the
      frequency and timing of the attempts.
    

Le protocole PPP CHAP lui est donc préféré :

R1 R2

            !
            hostname R1
            !
            username R2 password P
            !
            interface Serial1/0
             encapsulation ppp
             ppp authentication chap
             ip address 10.0.0.1 255.255.255.252
            !
              

            !
            hostname R2
            !
            username R1 password P
            !
            interface Serial1/0
             encapsulation ppp
             ppp authentication chap
             ip address 10.0.0.2 255.255.255.252
            !
              
cap-pppinhdlc-chap
Les pairs partagent ici un mot de passe (un « secret ») commun. L'authentification avec PPP CHAP se fait en trois étapes (3-way handshake) : ceci est visible via les messages Challenge, Response et Success que chaque pair envoie à l'autre.

PPP in Frame Relay RFC 1973

Depuis la RFC 1548, où PPP a été redéfini de façon indépendante du protocole L2 sous-jacent, il peut être utilisé sur Frame Relay :


      When Frame Relay is configured as a point-to-point circuit, PPP can
      use Frame Relay as a framing mechanism, ignoring its other features.
    

Voici une capture de PPP sur Frame Relay entre deux pairs :

R1 R2

            !
            hostname R1
            !
            username R2 password P
            !
            interface Serial1/0
             encapsulation frame-relay
             frame-relay interface-dlci 16 ppp Virtual-Template1
             no keepalive # désactiver le keepalive FR (source)
                          # c'est différent du keepalive PPP
            !
            interface Virtual-Template1
             encapsulation ppp
             ppp authentication chap
             ip address 10.0.0.1 255.255.255.252
            !
              

            !
            hostname R2
            !
            username R1 password P
            !
            interface Serial1/0
             encapsulation frame-relay
             frame-relay interface-dlci 16 ppp Virtual-Template1
             no keepalive # désactiver le keepalive FR (source)
                          # c'est différent du keepalive PPP
            !
            interface Virtual-Template1
             encapsulation ppp
             ppp authentication chap
             ip address 10.0.0.2 255.255.255.252
            !
              
cap-pppinfr
Nous retrouvons le même PPP que précédemment mais encapsulé dans un autre protocole L2 que HDLC. C'est tout l'intérêt d'avoir défini un PPP indépendant du protocole L2 sous-jacent : Frame Relay ici, mais aussi ISDN, ATM, Ethernet, etc.

Remarquons qu'IP peut être encapsulé dans Frame Relay sans passer par PPP :

R1 R2

            !
            interface Serial1/0
             encapsulation frame-relay
             frame-relay interface-dlci 16
             no keepalive
             ip address 10.0.0.1 255.255.255.252
            !
              

            !
            interface Serial1/0
             encapsulation frame-relay
             frame-relay interface-dlci 16
             no keepalive
             ip address 10.0.0.2 255.255.255.252
            !
              
cap-ipofr
IP est encapsulé directement dans Frame Relay. Pour faire l'association entre le DLCI (connu) et l'adresse IP (non connue), le protocole Inverse ARP est utilisé. C'est le pendant de l'ARP (où IP est encapsulé dans Ethernet) qui, lui, fait l'association entre une adresse IP (connue) et une adresse MAC (non connue).

PPP over ISDN RFC 1618

Comme sur Frame Relay, depuis la RFC 1548, où PPP a été redéfini de façon indépendante du protocole L2 sous-jacent, il peut être utilisé sur ISDN :


      This specification is primarily concerned with the use of the PPP
      encapsulation over ISDN links.  Since the ISDN B-channel is by
      definition a point-to-point circuit, PPP is well suited to use over
      these links.

      The ISDN D-channel can also be used for sending PPP packets when
      suitably framed, but is limited in bandwidth and often restricts
      communication links to a local switch.
    

Je ne suis pas parvenu à réaliser une capture mais les sample captures de Wireshark en propose une (rechercher « Toshiba ISDN router ») :

cap-pppoisdn
PPP est utilisé sur ISDN B-channel. Plusieurs couches de PPP sont visibles en raison de l'utilisation de la fonctionnalité Multilink qui permet l'agrégation de liens PPP (RFC 1717) et qui est hors du périmètre de cet article.

PPP over SONET/SDH RFC 1619

SONET/SDH est un protocole L1 (couche physique). Aussi, d'un point de vue L2, il n'y a aucune différence par rapport au cas PPP in HDLC Framing :


      This specification is primarily concerned with the use of the PPP
      encapsulation over SONET/SDH links.  Since SONET/SDH is by definition
      a point-to-point circuit, PPP is well suited to use over these links.

      The framing for octet-synchronous links is described in "PPP in HDLC
      Framing" [2].
    

Autrement dit, la même capture réseau sera obtenue. Noter qu'il est aussi possible de faire du Cisco HDLC ou du Frame Relay sur un lien SONET/SDH, comme introduit précédemment sur un lien série classique. Voici une capture de PPP over SONET/SDH (aussi appelé Packet over SONET/SDH ou PoS) :

R1 R2

            !
            hostname R1
            !
            username R2 password P
            !
            interface POS1/0 # seule différence
             encapsulation ppp
             ppp authentication chap
             ip address 10.0.0.1 255.255.255.252
            !
              

            !
            hostname R2
            !
            username R1 password P
            !
            interface POS1/0 # seule différence
             encapsulation ppp
             ppp authentication chap
             ip address 10.0.0.2 255.255.255.252
            !
              
cap-pos
Nous retrouvons le même résultat que le cas PPP in HDLC Framing avec authentification PPP CHAP, et ce, car nous nous situons du point de vue L2.