L2TP (Layer 2 Tunneling Protocol) 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.
sudo tcpdump -w /var/tmp/dump%d-%H.pcap -G 3600
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 ) )
) )'
sudo tcpdump -v -n -i any 'udp and port 1701 and (len <= 40 or ( udp[8] & 0x80 != 0 ))'
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 ) )
'
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 ) )
'
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) )'
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 ) ) )
'
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 ) ) )
'