Auteur Sujet: [TUTO] Tunnel L2TP sur OPNsense avec IPv4 et IPv6  (Lu 1924 fois)

0 Membres et 1 Invité sur ce sujet

skool

  • Abonné OVH
  • *
  • Messages: 14
  • Gometz 91
[TUTO] Tunnel L2TP sur OPNsense avec IPv4 et IPv6
« le: 13 juillet 2023 à 14:54:16 »
Hello,

Ne pouvant pour le moment pas m'engager sur une offre FTTH MilkyWan, et souhaitant tout de même profiter de ce réseau, j'ai entrepris de monter un tunnel sur mon routeur OPNsense.
Comme j'ai eu quelques petites galères, je vais essayer de détailler ce que j'ai fait, et peut-être aussi vous aurez des remarques pour optimiser ça !

Premièrement, j'ai une ligne principale FTTH 300Mbps symétrique chez Sosh. Il faut d'abord que celle-ci soit fonctionnelle, avec les renews DHCP conformes aux nouvelles specs d'Orange (il y a un sujet dédié sur ce forum). Si vous avez une ligne chez quelqu'un d'autre, il pourra y avoir des petites modifications dans ce tuto (des choses pas utiles notamment), on pourra en discuter.
Et j'ai souscris à un tunnel L2TP avec option IPv4 publique.

Dans mon cas, avant la configuration du tunnel, j'avais donc :
- 1 interface physique que j'appellerai MWAN (main wan)
- 1 interface de type VLAN que j'appelle WAN, sur laquelle il y a le client DHCP qui bosse, en IPv4 et IPv6
- plusieurs règles custom sur les flux entrants, mais rien de très spécifique.


Les prérequis à faire avant de créer le tunnel :
- ajouter 1 route statique vers le serveur DHCP d'Orange passant par la gateway de WAN (l'ip est identifiée par l'option « next-server » dans le fichier /var/db/dhcp.leases.vlan.832)
- (edit) voir les posts suivants, pour ajouter un script qui va générer une route statique automatiquement pour le serveur DHCP d'Orange, car celui-ci peut changer d'IP lors d'un reboot. En attendant d'avoir une solution plus propre
- ajouter 1 route statique vers l'endpoint L2TP de MilkyWan (celui qu'on vous a envoyé à la souscription)

- désactiver la partie IPv6 de l'interface WAN (l'endpoint L2TP étant en IPv4, ça ne sert à rien d'avoir 2 IPv6 et ça peut entrainer des galères de config du LAN)
- désactiver les règles de « force gateway » dans le menu Firewall > Settings > Advanced > disable force gateway, cela rentre en conflit avec la règle qui définit la priorité des paquets DHCP, nécessaire au bon renew coté Orange (cette option est p-e optionnelle si vous n'êtes pas chez Orange)


À ce niveau, vous devez toujours avoir un internet fonctionnel, en IPv4 only.

Dans le menu Interfaces > Point-to-Point, créer une nouvelle interface de type L2TP avec les options suivantes :
- Link interface : vlan.832 (ou le nom physique de votre interface Orange ou autre)
- Description : MilkyWan (ou ce que vous voulez)
- Username / Password : ce qu'on vous a envoyé
- Local IP : laisser vide
- Gateway : l'ip de l'endpoint qu'on vous a envoyé


Ensuite, dans Interface > Assignements, il faut créer une vraie interface basée sur ce lien Point-to-Point
Dans les paramètres de cette interface, il faut indiquer :
- Enable interface : cocher oui
- Prevent removal : cocher oui (c'est toujours mieux)
- Block private/bogon network : cocher oui (c'est bien aussi)
- IPv4 configuration type : L2TP
- IPv6 configuration type : SLAAC
- MAC address : laisser vide
- MTU : 1460 (sans ça, la connexion va monter, ça va ping mais toutes les connexions vont galérer/échouer)
- MSS : 1420
Dans la partie config L2TP, vous retrouvez les paramètres entrés précédemment
Dans la partie config SLAAC, cocher la case « Use IPv4 connectivity »


Normalement, vous devriez avoir un internet en IPv4 qui fonctionne via le tunnel !

Pour l'IPv6, il faut aller sur l'interface qui gère votre LAN, et configurer les options suivantes :
- IPv4 configuration type : ça vous gardez, c'est probablement du static
- IPv6 configuration type : Static IPv6  (c'était en track interface dans la config Orange)

Et dans la config IPv6 de cette interface, il vous faudra choisir une adresse IP statique dans un /64 (MilkyWan fournit un /48, donc à vous de choisir un /64 dedans pour votre LAN, ou sinon vous savez ce que vous faites :) )
IPv6 gateway à laisser en auto-detect.


Maintenant, votre routeur a de l'IPv6, mais il reste encore à la partager sur votre LAN

Dans Services > DHCPv6 > LAN (le nom de votre interface qui gère le LAN), il faut activer le DHCPv6, et mettre en range ce qui est proposé, qui correspond au /64 affecté à votre interface.
Vous pouvez ajouter une IPv6 pour le DNS (celle de votre interface LAN si vous avez un resolveur DNS qui tourne)
Et comme tous les équipements ne font pas de DHCPv6, on va aussi activer du router advertisement.
Dans Services > Router Advertisements > LAN, il faut définir :
- Router Advertisements : Assisted
- Router Priority : Normal
- Source Address : Automatic
- Advertise default gateway : cocher oui
- DNS options : Use the DNS configuration of the DHCPv6 server - si vous avez mis une IP dans la conf DNS du DHCPv6

Et voilà, un reboot pour valider, mais normalement vous devriez avoir de l'IPv4 et IPv6 comme sur une box « grand marché »

Il faudra penser à copier vos règles de pare feu entrantes pour qu'elles s'appliquent à votre interface L2TP, et autres customisations que vous auriez pu faire

Il y a une discussion en cours sur le forum de OPNsense pour peut-être patcher certaines choses qui simplifieraient cette config, cela vient du fait que Orange veut absolument des requêtes DHCP avec une priorité de 6, et il y a un conflit entre certaines règles automatiques. Donc je mettrai à jour si à l'avenir, la configuration se simplifie.
Et n'hésitez pas à me dire si vous auriez fait des choses différemment !

Coté performances, j'approche toujours les 300Mbps symétriques de la ligne, et le ping a pris ~1,5ms, mais tout fonctionne bien.
« Modifié: 12 août 2023 à 12:11:44 par skool »

skool

  • Abonné OVH
  • *
  • Messages: 14
  • Gometz 91
[TUTO] Tunnel L2TP sur OPNsense avec IPv4 et IPv6
« Réponse #1 le: 18 juillet 2023 à 15:05:04 »
Bon, j'ai temporairement redésactivé mon tunnel L2TP car il y a 2 soucis :
- ça a marché un temps mais j'ai à nouveau une déconnexion de la ligne principale Sosh à chaque renouvellement du bail
- et depuis 2 jours, l'IPv6 marche de manière très étrange mais très mal

Je repars d'une conf clean Sosh only pour fixer le premier souci, et je remonterai le tunnel (en mettant à jour mon premier post) petit à petit.

halesk2k

  • Abonné Sosh fibre
  • *
  • Messages: 57
  • Brétigny-sur-Orge (91)
[TUTO] Tunnel L2TP sur OPNsense avec IPv4 et IPv6
« Réponse #2 le: 27 juillet 2023 à 22:47:56 »
Bon, j'ai temporairement redésactivé mon tunnel L2TP car il y a 2 soucis :
- ça a marché un temps mais j'ai à nouveau une déconnexion de la ligne principale Sosh à chaque renouvellement du bail
- et depuis 2 jours, l'IPv6 marche de manière très étrange mais très mal

Je repars d'une conf clean Sosh only pour fixer le premier souci, et je remonterai le tunnel (en mettant à jour mon premier post) petit à petit.

Je suis dans le même cas que toi, Sosh 300/300 + tunnel MW (je ne me sers que de l'IPv6 par contre). Je te conseil de passer sur un routeur Mikrotik (rb4011 pour ma part), ca juste marche...

Pour ton problème de déco Sosh, le DHCP te filerais pas une IP en RFC1918 par hasard? Ca arrive si tu ne respectes pas scrupuleusement ce que le DHCP attend, ce que j'avais salement workaround sur mon Mikrotik via un script qui tournait (et qui tourne toujours d'ailleurs, au cas où) toutes les 30s:
/system script
add dont-require-permissions=no name=fix-sosh-dhcp policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="{\r\
    \n  :local currentIP [/ip address get [find interface=\"ether1\"] address];\r\
    \n  :if (((\$currentIP in 10.0.0.0/8) or (\$currentIP in 172.16.0.0/12)) or (\$currentIP in 192.168.0.0/16)) do={\r\
    \n    /ip dhcp-client release [/ip dhcp-client find where interface=ether1]\r\
    \n    :log info \"rfc1918 IP detected on ether1, releasing dhcp lease...\"\r\
    \n  }\r\
    \n}"

Bon, depuis le temps, j'ai pris le temps de corriger la root cause, et je n'ai plus d'IP en RFC1918.

skool

  • Abonné OVH
  • *
  • Messages: 14
  • Gometz 91
[TUTO] Tunnel L2TP sur OPNsense avec IPv4 et IPv6
« Réponse #3 le: 29 juillet 2023 à 10:28:04 »
Je suis dans le même cas que toi, Sosh 300/300 + tunnel MW (je ne me sers que de l'IPv6 par contre). Je te conseil de passer sur un routeur Mikrotik (rb4011 pour ma part), ca juste marche...
J'avoue que j'aime beaucoup OPNsense, j'ai pas mal de services qui tournent dessus.

Dans mon cas, j'ai bien une IP correcte, et non pas une RFC1918. Le souci est que OPNsense, comme possiblement beaucoup de systèmes à base de BSD, utilise packetfilter pour définir les propriétés de certains paquets, et ici notamment la priorité VLAN du paquet DHCP (bug corrigé récemment via packetfilter car le client DHCP de FreeBSD ne définit (volontariement ?) pas la priorité lors des envois unicast pendant le renew.

A priori, la politique DHCP actuelle d'Orange est : au moment de l'attribution, si la requête est pas bonne, tu chopes une IP privée. Si elle est bonne, tu as ta vraie IP publique. Et au moment du renew, si la requête n'est pas bonne (avec atuhent, vlan priority, etc...), il coupent la connexion (ce qui est mon cas).

Le fait est que, avec 2 gateways, dont celle par défaut qui est encapsulée dans l'autre, les règles packetfilter qui sont définies automatiquement se marchent dessus.
Là j'ai une conf Sosh qui marche bien, et dès mon retour, je retente le lien L2TP en vérifiant toutes les règles générées. Il y aura p-e un petit patch à faire coté OPNsense.
Mais comme il faut attendre plusieurs jours por être sûr que ça marche bien, c'est pas facile quand on est à distance :)

skool

  • Abonné OVH
  • *
  • Messages: 14
  • Gometz 91
[TUTO] Tunnel L2TP sur OPNsense avec IPv4 et IPv6
« Réponse #4 le: 08 août 2023 à 22:56:09 »
Bon, j'ai refait ma conf hier, et aujourd'hui, je n'ai pas eu de coupure.
Entre mon premier post et actuellement, la seule chose qui semble changer est l'IP du serveur DHCP d'Orange. Donc ils en ont sans doute plusieurs.

Du coup, en solution à l'arrache pour vérifier, je me suis fait un script qui vérifie si l'ip définie dans le fichier de lease dhcp est bien dans la table de routage, et si non, ça l'ajoute. en Cron toutes les heures histoire d'être tranquille.
Si cela se confirme (connexion stable et plusieurs IP ajoutées dans la table), j'essaierai de voir avec les devs d'OPNsense si y'a moyen de faire un truc plus propre, intégré au script qui gère le renew du bail DHCP.

skool

  • Abonné OVH
  • *
  • Messages: 14
  • Gometz 91
[TUTO] Tunnel L2TP sur OPNsense avec IPv4 et IPv6
« Réponse #5 le: 12 août 2023 à 12:06:11 »
Après quelques jours et aussi une maj sur OPNsense 23.7.1, je peux confirmer que ma config fonctionne bien !
L'erreur que j'avais précédemment venait donc du fait que le serveur DHCP d'Orange avait changé d'IP, et donc ma route statique n'était plus bonne.

Pour le moment, j'ai donc ce script qui tourne en cron toutes les heures, mais qui serait bien de remplacer par une logique intégrée à OPNsense (je vais remonter le souci sur leur forum, les gars sont assez ouverts là dessus)

#!/usr/bin/env bash

# check routes to DHCP server
LEASE_PREFIX="/var/db/dhclient.leases."
LEASE_PREFLEN=${#LEASE_PREFIX}

for leasefile in $(ls ${LEASE_PREFIX}*)
do
  echo "Parsing $leasefile"
  iface=${leasefile:$LEASE_PREFLEN}
  gateway=$(netstat -r -n -W | grep $iface | grep -v link | awk '{print $2}' |sort -u |head -n 1)
  echo "Interface $iface"
  for server in $(grep next-server $leasefile |sort -u |awk '{print $2}' |tr -d \;)
  do
    echo "DHCP Server $server"
    route=$(netstat -r -n -W |grep $iface |grep $server)
    if [ "x$route" != "x" ]
    then
        echo "Route already found"
    else
        echo "Route is missing. adding"
        route add -host $server $gateway
        echo "Route to $server added via $iface through $gateway"
    fi
  done
done

C'est mis dans /usr/local/sbin/add_dhcp_route.sh, et pour que la cron soit configurable depuis l'interface web, faut ajouter cette conf dans /usr/local/opnsense/service/conf/actions.d/actions_dhcproute.conf
root@opnsense:~ # cat /usr/local/opnsense/service/conf/actions.d/actions_dhcproute.conf
[update]
command:/usr/local/sbin/add_dhcp_route.sh
parameter:
type:script
message:Update DHCP route
description:Update DHCP route

C'est un peu crado comme méthode, mais ça fait le job en attendant d'intégrer ça au code qui gère le renouvellement du bail DHCP coté OPNsense