Collecte L2TP FTTH

💡
Toutes les configurations sont commit sur mon github : https://github.com/Nathan0510/Blog

Les collectes L2, c'est bien beau mais tous les opérateurs d'infrastructures ne proposent pas ce service pour les FTTH (je ne connais que celles d'Orange optimum collecte). Un opérateur qui ne propose pas de FTTH verra son nombre potentiel de client diminuer ! On s'y attaque donc dans cette épisode.

Pour réaliser tout ca, je vais utiliser cette architecture (plutôt sommaire, je ne parlerai pas de proxy-radius pour la collecte L2TP).

Collecte L2TP

Mais pourquoi d'abord ?

Chez les opérateurs, on va diviser en deux les collectes : d'un côté les collectes L2 (donc une interco L2 avec un OI où chaque liaison cliente arrive avec un CVLAN différent) et les collectes L2TP (où l'interco avec l'OI se fait en IP).

Se pose alors la question de comment faire passer les requêtes PPP (protocole de niveau 2) à travers le réseau IP de l'OI. Pour y répondre, on utilise L2TP (Layer 2 Transport Protocol). Comme son nom l'indique, il va permettre de créer un tunnel qui va encapsuler du niveau 2 dans du niveau 3. On peut le voir un peu comme du VXLAN bien que le L2TP a été pensé, tah l'époque, pour le PPP 😄

Un peu de vocabulaire : LAC (L2TP Access Concentrator) va initier le tunnel L2TP vers le LNS (L2TP Network Server). J'utilisais le terme LNS pour mes collectes L2 PPP mais c'était un abus de langage !

Bon comme d'hab, on configure le bordel et on regarde wireshark. J'utilise un Cisco pour le LAC (Mikrotik ne font pas cette fonctionnalité) et mon LNS un Mikrotik.

Routeur Interco
LAC Cisco OI 9.9.9.1/24
LNS Mikrotik OC 9.9.9.2/24
LAC#sh run | s vpdn
vpdn enable
vpdn aaa attribute nas-ip-address vpdn-nas
vpdn search-order domain dnis
vpdn-group LAC
 request-dialin
  protocol l2tp
  domain naruto.bytel.dop
 initiate-to ip 9.9.9.2
 source-ip 9.9.9.1
 local name LAC
 l2tp tunnel password 0 naruto


LAC#sh run | s bba-group
bba-group pppoe NARUTO
 virtual-template 1

LAC#sh run int virtual-template 1
interface Virtual-Template1
 description pppoe NARUTO
 no ip address
 no peer default ip address
 ppp mtu adaptive
 ppp authentication chap
end

Sur Cisco, on appelle ça un VPDN. On y précise l'IP source et l'IP destination du tunnel, ainsi qu'un mot de passe et le domain ! C'est le realm dans un utilisateur PPP (après le @, en l'occurence ici, le tunnel L2TP va permettre de faire transiter des requêtes avec XXXX@naruto.bytel.dop). Et après comme un LNS sur Cisco.

[admin@LNS] /interface/l2tp-server> export
/interface l2tp-server server
set enabled=yes max-mru=9000 max-mtu=9000 use-ipsec=yes

[admin@LNS] > /ppp/l2tp-secret/export show-sensitive
/ppp l2tp-secret
add address=9.9.9.1/32 secret=naruto

C'est tout ! Et encore, la MTU c'était pour un test et le use-ipsec pour ma collecte 4G/Starlink ! La vie est quand même beaucoup plus simple sur Mikrotik.

LAC#sh vpdn
L2TP Tunnel and Session Information Total tunnels 1 sessions 1
LocTunID   RemTunID   Remote Name   State  Remote Address  Sessn L2TP Class/                                                         Count VPDN Group
29078      4          LNS           est    9.9.9.2         1     LAC

Notre tunnel est bien monté !

Ensuite côté client, il faut savoir que sur TOUTES les collectes L2TP, le WAN du CPE doit être taggé dot1q. Pour SFR, c'est 2900, Bytel 4001, etc.

On crée donc une interface sur le LAC avec le VLAN 4001 :

LAC#sh run int gi2.4001
interface GigabitEthernet2.4001
 encapsulation dot1Q 4001
 pppoe enable group NARUTO
end
[admin@CPE1] /interface/vlan> export
/interface vlan
add interface=ether1 name=WAN-BYTEL vlan-id=4001

[admin@CPE1] /interface/pppoe-client> export show-sensitive
/interface pppoe-client
add add-default-route=yes disabled=no interface=WAN-BYTEL name=Dialer1 \
    password=naruto user=nathan@naruto.bytel.dop

Ok donc cela devrait être pas trop mal. Plus qu'à relier un radius au LNS :

[admin@LNS] /radius> export
/radius
add address=100.99.0.100 service=ppp src-address=100.99.0.10
/radius incoming
set accept=yes
/ppp aaa
set interim-update=10m use-radius=yes

Et le résultat ????

[admin@CPE1] /ip/address> print
Flags: D - DYNAMIC
Columns: ADDRESS, NETWORK, INTERFACE
#   ADDRESS        NETWORK      INTERFACE
0 D 100.64.0.1/32  100.101.1.1  Dialer1

EZ, notre première collecte L2TP.

Disclaimer : J'ai simplifié le truc, normalement on monte un peer BGP entre les deux opérateurs dans une VRF sur le LNS, pour que le proxy radius de l'OI puisse communiquer avec notre radius.

Petit point

Je souhaite monter mes clients dans une VRF Internet, cela me permettrait de faire de la VRF leaking et de laisser le GRT pour un autre besoin. Ainsi, mêmes si les clients ne veulent pas de MPLS, ils seront quand même dans une VRF avec une default route sans filtrage.

Côté mikrotik :

/interface bridge
add name=Lo_INTERNET
/interface list
add name=VRF-INTERNET
/interface list member
add interface=Lo_INTERNET list=VRF-INTERNET
/ip vrf
add interfaces=VRF-INTERNET name=INTERNET
/ip address
add address=100.101.1.1 interface=Lo_INTERNET network=100.101.1.1
/ppp profile
add change-tcp-mss=yes interface-list=VRF-INTERNET local-address=100.101.1.1 \
    name=Profile-Internet use-compression=no use-encryption=no use-mpls=no

Et dans le fichier users du freeradius :

nathan@naruto.bytel.dop Cleartext-Password := "naruto"
        Service-Type := Framed-User,
        Framed-Protocol := PPP,
        Framed-IP-Address := 100.64.0.1,
        Framed-IP-Netmask := 255.255.255.255,
        Mikrotik-Group := "Profile-Internet"
[admin@LNS] > /ip route/print where routing-table=INTERNET dst-address=100.64.0.
1/32
Flags: D - DYNAMIC; A - ACTIVE; c - CONNECT
Columns: DST-ADDRESS, GATEWAY, ROUTING-TABLE, DISTANCE
    DST-ADDRESS    GATEWAY                                  ROUTING-TABLE  D
DAc 100.64.0.1/32  @INTERNET  INTERNET       0

Mon login monte bien dans la vrf INTERNET;

Côté Wireshark :

On peut voir que L2TP est transporté par UDP et bien présent au dessus d'IP.

Une fois que le tunnel est monté, les échanges IPCP entre le CPE et le LNS se font notamment avec la fourniture de l'utilisateur et du mot de passe.

Attention ! Un tunnel L2TP ne peut monter que si y'a au moins une demande d'un CPE.

La dernière collecte ?

Jusqu'a maintenant, on avait vu la collecte L2 et la collecte 4G/Starlink. Une nouvelle s'ajoute la L2TP.

Ce sont les trois manières de collecter un lien que je développerai. On pourrait parler du DHCP et de l'option 82, de l'IP unnumbered ou autre mais je préfère le PPP. Vive le PPP !

Je ne sais pas si vous vous en souvenez mais ma collecte 4G/Starlink était en DMVPN quand mes LNS étaient des Cisco. Maintenant que ce sont des Mikrotiks, il faut bien changer la manière de collecter ces liaisons car DMVPN est un protocole propriétaire Cisco 😦 Et quoi de mieux que du PPP ? La suite au prochain épisode

Je termine sur un mot de fin : RDV le 10 septembre