transmission:l2tp

L2TP

L2TP est un protocole qui permet de livrer une collecte (par exemple ADSL). On fait tourner un serveur L2TP (appelé LNS, L2TP Network Server), et il reçoit depuis l'opérateur de collecte (appelé LAC, L2TP access concentrator) les sessions des abonnés.

Le principe est que le routeur de l'abonné utilise PPP sur sa connexion internet (sur l'ONT ou sur le modem xDSL) avec le login et mot de passe renseigné par nous ; l'équipement qui est de l'autre côté du fil, appelé BAS (Broadband Access Server) voit la forme du login (ce qui est tout à la fin après le @) et fait remonter via le protocole L2TP l'ouverture de session au bon premier fournisseur. Celui-ci (un LAC) regarde un peu avant dans le login, pour faire remonter au bon deuxième fournisseur (un autre LAC), etc. de proche en proche jusqu'au fournisseur final (le LNS) qui correspond exactement à la partie après @ dans le login, qui décapsule le protocole L2TP, et traite le PPP qui est dedans. Ainsi, l'abonné n'y voit que du feu, il a l'impression de parler “directement” PPP avec le LNS, alors que c'est transporté par L2TP.

  • Éventuellement des liens vers des articles grand public
  • Éventuellement une vidéo grand public
  • Éventuellement des liens ou vidéos vers des tutoriels
  • Éventuellement une vidéo geek (pas grand public, quoi)
sudo tcpdump -w /var/tmp/dump%d-%H.pcap -G 3600
  • Observer les négociations en tous genre (pas de trafic ipv4, ipv6, echo, ccp, mlppp):
sudo tcpdump -v -n -i any 'udp and port 1701 and (len <= 40 or (
       ( not (( udp[8] & 0x40 == 0 ) and udp[16] == 0x00 and udp[17] == 0x21) )
   and ( not (( udp[8] & 0x40 == 0 ) and udp[16] == 0xFF and udp[17] == 0x03 and udp[18] == 0x00 and udp[19] == 0x21) )
   and ( not (( udp[8] & 0x40 != 0 ) and udp[18] == 0x00 and udp[19] == 0x21) )
   and ( not (( udp[8] & 0x40 != 0 ) and udp[18] == 0xFF and udp[19] == 0x03 and udp[20] == 0x00 and udp[21] == 0x21) )

   and ( not (( udp[8] & 0x40 == 0 ) and udp[16] == 0x00 and udp[17] == 0x57) )
   and ( not (( udp[8] & 0x40 == 0 ) and udp[16] == 0xFF and udp[17] == 0x03 and udp[18] == 0x00 and udp[19] == 0x57) )
   and ( not (( udp[8] & 0x40 != 0 ) and udp[18] == 0x00 and udp[19] == 0x57) )
   and ( not (( udp[8] & 0x40 != 0 ) and udp[18] == 0xFF and udp[19] == 0x03 and udp[20] == 0x00 and udp[21] == 0x57) )

   and ( not (( udp[8] & 0x40 == 0 ) and udp[16] == 0x00 and udp[17] == 0x3d) )
   and ( not (( udp[8] & 0x40 == 0 ) and udp[16] == 0xFF and udp[17] == 0x03 and udp[18] == 0x00 and udp[19] == 0x3d) )
   and ( not (( udp[8] & 0x40 != 0 ) and udp[18] == 0x00 and udp[19] == 0x3d) )
   and ( not (( udp[8] & 0x40 != 0 ) and udp[18] == 0xFF and udp[19] == 0x03 and udp[20] == 0x00 and udp[21] == 0x3d) )

   and ( not (( udp[8] & 0x40 == 0 ) and udp[16] == 0x80 and udp[17] == 0xfd) )
   and ( not (( udp[8] & 0x40 == 0 ) and udp[16] == 0xFF and udp[17] == 0x03 and udp[18] == 0x80 and udp[19] == 0xfd) )
   and ( not (( udp[8] & 0x40 != 0 ) and udp[18] == 0x80 and udp[19] == 0xfd) )
   and ( not (( udp[8] & 0x40 != 0 ) and udp[18] == 0xFF and udp[19] == 0x03 and udp[20] == 0x80 and udp[21] == 0xfd) )

   and ( not (( udp[8] & 0x40 == 0 ) and udp[18] == 0x9 ) )
   and ( not (( udp[8] & 0x40 == 0 ) and udp[16] == 0xFF and udp[17] == 0x03 and udp[20] == 0x9 ) )
   and ( not (( udp[8] & 0x40 != 0 ) and udp[20] == 0x9 ) )
   and ( not (( udp[8] & 0x40 != 0 ) and udp[18] == 0xFF and udp[19] == 0x03 and udp[22] == 0x9 ) )

   and ( not (( udp[8] & 0x40 == 0 ) and udp[18] == 0xa ) )
   and ( not (( udp[8] & 0x40 == 0 ) and udp[16] == 0xFF and udp[17] == 0x03 and udp[20] == 0xa ) )
   and ( not (( udp[8] & 0x40 != 0 ) and udp[20] == 0xa ) )
   and ( not (( udp[8] & 0x40 != 0 ) and udp[18] == 0xFF and udp[19] == 0x03 and udp[22] == 0xa ) )
) )'
  • Observer les messages de contrôle L2TP (établissement de tunnel/sessoin)
sudo tcpdump -v -n -i any 'udp and port 1701 and (len <= 40 or ( udp[8] & 0x80 != 0 ))'
  • Observer un tunnel en particulier:
sudo tcpdump -v -n -i any 'udp and port 1701
    and ( ( ( udp[8] & 0x40 == 0 ) and udp[10] = 0 and udp[11] = 10 ) or
          ( ( udp[8] & 0x40 != 0 ) and udp[12] = 0 and udp[13] = 10 ) )
          '
  • Observer une session en particulier:
sudo tcpdump -v -n -i any 'udp and port 1701
    and ( ( ( udp[8] & 0x40 == 0 ) and udp[12] = 0 and udp[13] = 123 ) or
          ( ( udp[8] & 0x40 != 0 ) and udp[14] = 0 and udp[15] = 123 ) )
          '
  • Observer les logins pap/chap:
tcpdump -n -vvv   -i any 'udp and port 1701 and
   (udp[8] & 0x80) == 0 and
   (     ((udp[16] == 0xc0 or udp[16] == 0xc2) and udp[17] == 0x23)  
     or  ((udp[18] == 0xc0 or udp[18] == 0xc2) and udp[19] == 0x23) )'
  • Observer le dhcpv6:
sudo tcpdump -v -n -i any 'udp and port 1701
    and (    ( ( udp[8] & 0x40 != 0 ) and udp[18] == 0x00 and udp[19] == 0x57 and udp[26] == 0x11 and udp[60] == 0x2 and ( udp[61] == 0x22 or udp[61] == 0x23 ) )
          or ( ( udp[8] & 0x40 == 0 ) and udp[16] == 0x00 and udp[17] == 0x57 and udp[24] == 0x11 and udp[58] == 0x2 and ( udp[59] == 0x22 or udp[59] == 0x23 ) ) )
          '
  • Observer les RS/RA:
sudo tcpdump -v -n -i any 'udp and port 1701
    and (    ( ( udp[8] & 0x40 != 0 ) and udp[18] == 0x00 and udp[19] == 0x57 and udp[26] == 58 and ( udp[60] == 134 or udp[60] == 133 ) )
          or ( ( udp[8] & 0x40 == 0 ) and udp[16] == 0x00 and udp[17] == 0x57 and udp[24] == 58 and ( udp[58] == 134 or udp[58] == 133 ) ) )
          '
  • transmission/l2tp.1780437112.txt.gz
  • Dernière modification : 2026/06/02 21:51
  • de sthibaul