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

L2TP

L2TP (Layer Two Tunneling Protocol), défini dans la RFC 2661, se comprend plus facilement après avoir étudié PPPoE. Aussi, je recommande fortement de prendre connaissance de l'article précédent. Dans ce dernier, nous avons vu que le serveur PPPoE termine à la fois la session PPPoE et le lien PPP. Une terminaison PPPoE est plus généralement appelée L2 termination point et une terminaison PPP est appelée PPP session endpoint. L2TP permet aux terminaisons d'être situées sur des équipements différents interconnectés via un réseau à commutation de paquets :


      PPP [RFC1661] defines an encapsulation mechanism for transporting
      multiprotocol packets across layer 2 (L2) point-to-point links.
      Typically, a user obtains a L2 connection to a Network Access Server
      (NAS) using one of a number of techniques (e.g., dialup POTS, ISDN,
      ADSL, etc.)  and then runs PPP over that connection. In such a
      configuration, the L2 termination point and PPP session endpoint
      reside on the same physical device (i.e., the NAS).

      L2TP extends the PPP model by allowing the L2 and PPP endpoints to
      reside on different devices interconnected by a packet-switched
      network.  With L2TP, a user has an L2 connection to an access
      concentrator (e.g., modem bank, ADSL DSLAM, etc.), and the
      concentrator then tunnels individual PPP frames to the NAS. This
      allows the actual processing of PPP packets to be divorced from the
      termination of the L2 circuit.
    

Dans la pratique, L2TP est utilisé sur un réseau IP d'interconnexion entre deux opérateurs : l'un fournit le réseau d'accès (Ethernet ou ATM) et les L2 termination points (via PPPoE ou PPPoA, respectivement) et l'autre fournit le service aux clients via les PPP session endpoints établis sur son BAS (Broadband Access Server) aussi appelé NAS (Network Access Server). Une coordination (BGP, RADIUS, etc.) est nécessaire entre les deux opérateurs. Schématiquement :


           <----------------------------------------- PPP ------------------------------------------->
           <-------------- PPPoX/PPPinX ------------>     <------------------ L2TP ------------------>

                +------------------------------+               +--------------------------------+
      [CPE]-----| RFC 1549 PPP in HDLC Framing |               |                                |
      [CPE]-----| RFC 1618 PPP over ISDN       |               | RFC 2661 L2TP over UDP/IP      |
      [CPE]-----| RFC 1619 PPP over SONET/SDH  |-----[LAC]-----| RFC 3070 L2TP over Frame Relay |-----[LNS]
      [CPE]-----| RFC 1973 PPP in Frame Relay  |               | RFC 3355 L2TP over AAL5 (ATM)  |
      [CPE]-----| RFC 2364 PPPoA               |               |                                |
      [CPE]-----| RFC 2516 PPPoE               |               |                                |
                +------------------------------+               +--------------------------------+
                       Access Network (*)                        Regional Broadband Network (*)

                            (*) Termes de la spécification TR-025 du Broadband Forum
    

La maquette utilisée est la suivante :

lab-l2tp
Deux CPE sont raccordés en Ethernet au LAC qui concentre les accès—d'où son nom. Il termine les sessions PPPoE et établit avec le LNS un tunnel L2TP over UDP/IP dans lequel passeront les liens PPP (ou « sessions L2TP »). Noter donc qu'un même tunnel L2TP peut transporter plusieurs liens PPP.
CPE1/CPE2 (clients PPPoE) LAC (serveur PPPoE) LNS (NAS)

  !
  hostname CPE1/CPE2
  !
  username LNS password P
  !
  interface FastEthernet0/0
   pppoe enable
   pppoe-client dial-pool-number 2
  !
  interface Dialer1
   encapsulation ppp
   ppp authentication chap
   ppp chap hostname CPE1/CPE2@THE_DOMAIN
   ppp chap password P
   ip address 10.0.0.1/.2 255.255.255.252
   dialer pool 2
   mtu 1460 # voir plus bas
   ip tcp adjust-mss 1420 # voir plus bas
  !
              

  !
  hostname LAC
  !
  bba-group pppoe global
   virtual-template 1
  !
  interface FastEthernet0/0
   pppoe enable group global
  !
  interface Virtual-Template1
   encapsulation ppp
   ppp authentication chap
   no ip address
   mtu 1460 # voir plus bas
  !
  vpdn enable
  !
  vpdn-group THE_LAC_GROUP
   request-dialin
    protocol l2tp
    domain THE_DOMAIN
   initiate-to ip 20.0.0.2
   local name LAC
   l2tp tunnel password THE_PASSWORD
  !
  interface FastEthernet0/1
   ip address 20.0.0.1 255.255.255.252
  !
              

  !
  hostname LNS
  !
  username CPE1@THE_DOMAIN password P
  username CPE2@THE_DOMAIN password P
  !
  interface FastEthernet0/0
   ip address 20.0.0.2 255.255.255.252
  !
  vpdn enable
  !
  vpdn-group THE_LNS_GROUP
   accept-dialin
    protocol l2tp
    virtual-template 1
   terminate-from hostname LAC
   l2tp tunnel password THE_PASSWORD
  !
  interface Virtual-Template1
   encapsulation ppp
   ppp authentication chap
   ip address 10.0.0.3 255.255.255.252
   mtu 1460 # voir plus bas
  !
              

Pour la IP MTU et la TCP MSS, même raisonnement que pour PPPoE :


        6 octets   6 octets   2 octets   20 octets   8 octets   8 octets   4 octets   20 octets   20  octets   1420 octets   4 octets
      +----------+----------+----------+-----------+----------+----------+----------+-----------+------------+-------------+----------+
      |    DA    |    SA    | Len/Type |    IP     |   UDP    |   L2TP   |   PPP    | IP Header | TCP Header |  TCP  Data  |   FCS    |
      +----------+----------+----------+-----------+----------+----------+----------+-----------+------------+-------------+----------+
                                                                                    <------------ 1460  octets ------------>
                                       <---------------------------------- 1500  octets ----------------------------------->
    

Dans la pratique néanmoins, pour un accès PPPoE, la IP MTU entre le CPE et le LAC reste fixée à 1492 octets et la TCP MSS à 1452 octets. C'est la IP MTU entre le LAC et LNS qui est augmentée (2000 octets en général). L'analyse des captures est ici complexifiée du fait qu'il y ait trois liens à considérer.