« Fibre orange en DHCP avec routeur pfsense » : différence entre les versions
(120 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
[[category:networking]][[category:pfsense]] | |||
Vous voulez utiliser votre propre routeur pour gérer votre connexion internet ? Tout en conservant l'accès à la TV et au téléphone ? Et en plus vous êtes chez orange ?La livebox ne permet malheureusement pas de mettre la connexion internet en mode bridge. Vous trouverez quelques tuto sur internet vous expliquant comment vous passer complètement de la livebox tout en conservant internet et la télévision (mais vous perdrez le téléphone étant donné qu'orange ne fourni aucune information de connexion SIP). | Vous voulez utiliser votre propre routeur pour gérer votre connexion internet ? Tout en conservant l'accès à la TV et au téléphone ? Et en plus vous êtes chez orange ?La livebox ne permet malheureusement pas de mettre la connexion internet en mode bridge. Vous trouverez quelques tuto sur internet vous expliquant comment vous passer complètement de la livebox tout en conservant internet et la télévision (mais vous perdrez le téléphone étant donné qu'orange ne fourni aucune information de connexion SIP). | ||
Ligne 17 : | Ligne 18 : | ||
* Tous les autres paquets doivent être en priorité 0 (non obligatoire, mais nécessaire pour avoir le débit maximum de votre offre) | * Tous les autres paquets doivent être en priorité 0 (non obligatoire, mais nécessaire pour avoir le débit maximum de votre offre) | ||
Vis à vis de DHCP : | <br>Vis à vis de DHCP : | ||
* orange utilise l'option 90 (rfc3118-authentication) afin d'envoyer l' | * orange utilise l'option 90 (rfc3118-authentication) afin d'envoyer l'identifiant de votre connexion (fti/*****). Par chance, orange n'utilise ni les mécanismes RDM ni aucune fonctionnalité de hashage ce qui permet d'envoyer directement votre id de connexion sous forme de token. | ||
* D'autres options dhcp sont obligatoires : dhcp-class-identifier et user-class | * D'autres options dhcp sont obligatoires : dhcp-class-identifier et user-class | ||
* A noter que votre ip ne sera pas fixe. Elle restera la même tant que le bail dhcp restera valide (et renouvelé) par votre client. Si vous arrêtez de renouveler le bail, un autre client peut se voir attribuer "votre" ip. | * A noter que votre ip ne sera pas fixe. Elle restera la même tant que le bail dhcp restera valide (et renouvelé) par votre client. Si vous arrêtez de renouveler le bail, un autre client peut se voir attribuer "votre" ip. | ||
Vis à vis de DHCPv6 PD | <br>Vis à vis de DHCPv6 PD | ||
* pour l'authentification, même principe que pour dhcp mais avec l'option 11 | * pour l'authentification, même principe que pour dhcp mais avec l'option 11 | ||
* les autres options obligatoires sont l'user-class (option 15) et le vendor-class (option 16) | * les autres options obligatoires sont l'user-class (option 15) et le vendor-class (option 16) | ||
* Encore une fois, le bloc qui vous sera attribué ne restera pas fixe. Il restera le même tant que votre bail dhcp est valide, mais peut être attribué à un autre client dès lors que votre bail n'est plus valide. | * Encore une fois, le bloc qui vous sera attribué ne restera pas fixe. Il restera le même tant que votre bail dhcp est valide, mais peut être attribué à un autre client dès lors que votre bail n'est plus valide. | ||
=dump= | |||
==dump requête dhcp de la livebox (2017, non à jour)== | |||
<pre> | |||
802.1Q Virtual LAN, PRI: 6, CFI: 0, ID: 832 | |||
Bootstrap Protocol (Discover) | |||
Message type: Boot Request (1) | |||
Hardware type: Ethernet (0x01) | |||
Hardware address length: 6 | |||
Hops: 0 | |||
Transaction ID: 0x0f48395c | |||
Seconds elapsed: 1 | |||
Bootp flags: 0x8000, Broadcast flag (Broadcast) | |||
1... .... .... .... = Broadcast flag: Broadcast | |||
.000 0000 0000 0000 = Reserved flags: 0x0000 | |||
Client IP address: 0.0.0.0 | |||
Your (client) IP address: 0.0.0.0 | |||
Next server IP address: 0.0.0.0 | |||
Relay agent IP address: 0.0.0.0 | |||
Client MAC address: Sagemcom_xx:yy:zz (2c:39:96:xx:yy:zz) | |||
Client hardware address padding: 00000000000000000000 | |||
Server host name not given | |||
Boot file name not given | |||
Magic cookie: DHCP | |||
Option: (53) DHCP Message Type (Discover) | |||
Length: 1 | |||
DHCP: Discover (1) | |||
Option: (55) Parameter Request List | |||
Length: 11 | |||
Parameter Request List Item: (1) Subnet Mask | |||
Parameter Request List Item: (3) Router | |||
Parameter Request List Item: (6) Domain Name Server | |||
Parameter Request List Item: (15) Domain Name | |||
Parameter Request List Item: (28) Broadcast Address | |||
Parameter Request List Item: (51) IP Address Lease Time | |||
Parameter Request List Item: (58) Renewal Time Value | |||
Parameter Request List Item: (59) Rebinding Time Value | |||
Parameter Request List Item: (90) Authentication | |||
Parameter Request List Item: (119) Domain Search | |||
Parameter Request List Item: (120) SIP Servers | |||
Option: (60) Vendor class identifier | |||
Length: 5 | |||
Vendor class identifier: sagem | |||
Option: (77) User Class Information | |||
Length: 44 | |||
Instance of User Class: [0] | |||
User Class Length: 43 | |||
User Class Data: 46535644534c5f6c697665626f782e496e7465726e65742e736f66746174686f6d652e4c697665626f7833 | |||
Option: (90) Authentication | |||
Length: 22 | |||
Protocol: configuration token (0) | |||
Algorithm: 0 | |||
Replay Detection Method: Monotonically-increasing counter (0) | |||
RDM Replay Detection Value: 0x0000000000000000 | |||
Authentication Information: fti/******* | |||
Option: (255) End | |||
Option End: 255 | |||
</pre> | |||
==dump requête dhcpv6 de la livebox (2017, non à jour)== | |||
<pre> | |||
802.1Q Virtual LAN, PRI: 6, CFI: 0, ID: 832 | |||
DHCPv6 | |||
Message type: Solicit (1) | |||
Transaction ID: 0xaae9a2 | |||
Client Identifier | |||
Option: Client Identifier (1) | |||
Length: 10 | |||
Value: 000300012c3996xxyyzz | |||
DUID: 000300012c3996xxyyzz | |||
DUID Type: link-layer address (3) | |||
Hardware type: Ethernet (1) | |||
Link-layer address: 2c:39:96:xx:yy:zz | |||
Option Request | |||
Option: Option Request (6) | |||
Length: 4 | |||
Value: 000b0017 | |||
Requested Option code: Authentication (11) | |||
Requested Option code: DNS recursive name server (23) | |||
Elapsed time | |||
Option: Elapsed time (8) | |||
Length: 2 | |||
Value: 04bb | |||
Elapsed time: 12110 ms | |||
Authentication | |||
Option: Authentication (11) | |||
Length: 22 | |||
Value: 00000000000000000000006674692f61616161616161 | |||
Protocol: 0 | |||
Algorithm: 0 | |||
RDM: 0 | |||
Replay Detection: 0000000000000000 | |||
Authentication Information: 6674692f61616161616161 | |||
User Class | |||
Option: User Class (15) | |||
Length: 45 | |||
Value: 002b46535644534c5f6c697665626f782e496e7465726e65742e736f66746174686f6d652e6c697665626f7833 | |||
Vendor Class | |||
Option: Vendor Class (16) | |||
Length: 11 | |||
Value: 0000040e0005736167656d | |||
Enterprise ID: SAGEMCOM SAS (1038) | |||
vendor-class-data: sagem | |||
Identity Association for Prefix Delegation | |||
Option: Identity Association for Prefix Delegation (25) | |||
Length: 12 | |||
Value: 96395f2a00000e1000001518 | |||
IAID: 96395f2a | |||
T1: 3600 | |||
T2: 5400 | |||
</pre> | |||
=Problèmes de pfSense= | |||
* Le principal problème qui se pose vient du fait que le client dhcp de pfsense utilise les raw sockets. Par conséquents, les paquets du client dhcp ne traverse pas pf et ne pourront donc pas être tagués en priorité 6 avec le firewall de pfsense. | |||
* Le client dhcpv6 de pfsense (WIDE-DHCPv6) semble incapable d'envoyer des options personnalisées ce qui empêche de l'utiliser directement. | |||
<br/>'''UPDATE 31/03/18''' Ca bouge doucement chez pfSense pour les raw-sockets de dhcp : https://redmine.pfsense.org/issues/7425#note-9 ; Depuis pfsense 2.4.4, il n'y a plus besoin ni de patcher dhclient, ni de définir les priorités via un switch. Tout peut être fait depuis pfsense pour l'IPv4. <br>Néanmoins, comme on utilise la fonction <code>Advanced Configuration</code> pour configurer le client dhcp, il ne faudra pas "juste" cocher la case <code>Enable dhcpclient VLAN Priority tagging</code> mais également ajouter au champ <code>Option modifiers</code> l'argument <code>vlan-pcp 6</code> (sinon la configuration avancée override la configuration du vlan dans dhclient) | |||
<br/>'''UPDATE 31/03/18''' pfSense 2.4.3 permet de définir la priorité des paquets dhcp6 directement dans la GUI de configuration de dhcp6 https://redmine.pfsense.org/issues/8200 ; Il reste encore le patch du dhcpv6 pour les options personnalisées qui n'est pas intégré (https://github.com/hrs-allbsd/wide-dhcpv6/pull/8) (nb : il l'est chez opnsense). | |||
==Problème sous pfSense 2.3.2, réglé sous pfsense 2.4.2== | |||
* Un autre problème sous pfsense 2.3 était lié à un [https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=184117 bug du dhclient de freebsd] qui n'envoyait pas les options user-class. Ce bug est corrigé sous pfsense 2.4.2. | |||
A titre purement informatif, voici le patch trivial pour pfsense 2.3.2 : | |||
<pre> | |||
diff --git a/sbin/dhclient/tables.c b/sbin/dhclient/tables.c | |||
index c7bac57..bee776c 100644 | |||
--- a/sbin/dhclient/tables.c | |||
+++ b/sbin/dhclient/tables.c | |||
@@ -335,6 +335,7 @@ unsigned char dhcp_option_default_priority_list[] = { | |||
DHO_DHCP_REBINDING_TIME, | |||
DHO_DHCP_CLASS_IDENTIFIER, | |||
DHO_DHCP_CLIENT_IDENTIFIER, | |||
+ DHO_DHCP_USER_CLASS_ID, | |||
DHO_SUBNET_MASK, | |||
DHO_TIME_OFFSET, | |||
DHO_CLASSLESS_ROUTES, | |||
</pre> | |||
==Solution proposée== | |||
Pour palier à l'utilisation des raw sockets, j'ai simplement ajouté un switch gérant les vlans entre l'ONT orange et le routeur pfsense. Ce switch permettra de modifier la priorité des paquets dhcp et ARP, mais aussi de faire le tri entre le vlan internet destiné à pfsense et les vlans TV destinés à la livebox. J'utilise un switch [https://routerboard.com/RB260GS RB260GS de chez mikrotik] qui à l'avantage d'être peu onéreux tout en restant sympa à configurer. Seule tristesse concernant ce switch, il n'est pas capable de gérer des ACL ipv6. | |||
A côté de ça, afin de conserver l'accès à la téléphonie orange, on va créer un serveur dhcp émulant le comportement du serveur dhcp de orange et permettre ainsi à notre livebox d'accéder à internet et donc aux serveurs SIP de orange. Ce "faux" serveur dhcp tournera sur un vlan 832 qu'on rendra accessible uniquement à la livebox et restera complètement isolé et indépendant du réel VLAN 832 fournissant la connectivité internet de orange. | |||
Enfin, dans le cas ou vous ne pourriez pas brancher directement le port LAN de la livebox à votre décodeur, il est possible (à condition que le switch gérant votre lan soit manageable et supporte les VLANs) de brancher le port LAN de la livebox directement à votre switch de LAN et d'y taguer les paquets sur un VLAN (666 dans cet exemple). Cela impose d'avoir un second switch sur votre lan, qui sera, lui, directement connecté au décodeur et qui doit être lui aussi manageable afin de détaguer du VLAN 666 les paquets pour le décodeur. | |||
[[Fichier:Orange-pfsense.png|1100x600px|vignette|centré]] | |||
=Configuration de la connexion internet IPv4= | |||
==Configuration du switch (RB260GS SwOS 1.X)== | |||
Il faut bien évidemment suivre le [[Fibre_orange_en_DHCP_avec_routeur_pfsense#Solution_propos.C3.A9e|schéma de branchement]] au préalable. | |||
Nous allons utiliser les ports de cette manière : | |||
* port 1 branché sur l'ONT orange. Votre uplink. | |||
* port 2 branché sur le port WAN de la livebox. Ce port distribuera à la livebox les deux VLANs TV ainsi que notre clone du VLAN 832 de Orange. | |||
* port 3 branché sur le port WAN de pfsense. Ce port distribuera le (vrai) VLAN internet (832) de Orange à pfsense. | |||
* port 4 branché sur le port FAKE de pfsense. Ce port recevra depuis pfsense notre clone du VLAN 832 avec notre serveur DHCP factice. | |||
* port 5 branché sur votre lan afin de garder la main sur la configuration du switch (port de management). | |||
===Onglet system=== | |||
* Au champ <code>Allow from</code> entrez le bloc réseau que vous utilisez sur votre lan avec le netmask au format CIDR. | |||
* Au champ <code>Allow from Ports</code> cochez le port 5. '''attention, à partir de maintenant l'interface d'administration du switch ne sera accessible que depuis ce port avec une adresse IP correspondant au range que vous avez défini sur le champ précédent''' | |||
===Onglet Forwarding=== | |||
Cette page vous permet de configurer comment les ports communiquent les uns avec les autres. | |||
<br> | |||
Schéma de communication : | |||
* L'ONT ne doit communiquer qu'avec pfsense-wan (pour l'accès internet vlan 832) et avec la livebox (pour la télévision vlan 838 et 840) | |||
* La livebox ne doit communiquer qu'avec l'ONT (pour la télévision vlan 838 et 840) et pfsense-fake (pour avoir accès au faux serveur DHCP permettant un accès natté à internet) | |||
* Le port WAN de pfsense ne doit communiquer qu'avec l'ONT | |||
* Le port FAKE de pfsense ne doit communiquer qu'avec la livebox | |||
* Le port de management, qui relie le switch à votre lan, ne doit communiquer avec aucun autre port du switch | |||
<br> | |||
Ce qui donne au niveau de la configuration du switch : | |||
* Colonne port 1 (ONT) : cochez les ports 2 (livebox) et 3 (pfsense-wan) | |||
* Colonne port 2 (livebox) : cochez les ports 1 (ONT) et 4 (pfsense-fake) | |||
* Colonne port 3 (pfsense-wan) : cochez le port 1 (ONT) | |||
* Colonne port 4 (pfsense-fake) : cochez le port 2 (livebox) | |||
* Colonne port 5 (management) : ne cochez aucun port | |||
* Colonne SFP : ne cochez aucun port | |||
===Onglet VLAN=== | |||
* Pour les ports 1 (ONT), 2 (livebox), 3 (pfsense-wan), 4 (pfsense-fake) | |||
** VLAN mode : strict | |||
** VLAN receive : only tagged | |||
** Default VLAN ID : 1 | |||
** Force VLAN id : décoché | |||
** VLAN Header : leave as is | |||
* Pour le port 5 (management) | |||
** VLAN mode : optional | |||
** VLAN receive : only untagged | |||
** Default VLAN ID : 1 | |||
** Force VLAN id : décoché | |||
** VLAN Header : leave as is | |||
===Onglet VLANs=== | |||
* Créez 3 vlans : 832, 838 et 840 | |||
* Pour le vlan 832 : | |||
** définissez les ports 1 (ONT), 2 (livebox), 3 (pfsense-wan) et 4 (pfsense-fake) à <code>leave as is</code> | |||
** définissez les ports 5 (management) et SFP à <code>not a member</code> | |||
* Pour les vlans 838 et 840 : | |||
** définissez les ports 1 (ONT) et 2 (livebox) à <code>leave as is</code> | |||
** définissez les ports 3 (pfsense-wan), 4 (pfsense-fake), 5 (management) et SFP à <code>not a member</code> | |||
===Onglet ACL=== | |||
Il faut ici créer deux ACL afin de changer la priorité des paquets ARP et des requêtes dhcp. | |||
<br> | |||
ACL ARP : | |||
* From 3 | |||
* MAC Src : l'adresse mac de l'interface wan de votre pfsense | |||
* Ethertype : 806 | |||
* VLAN : present | |||
* VLAN ID : 832 | |||
* Cocher <code>Redirect to</code> et cocher le port 1 | |||
* Set VLAN ID : 832 | |||
* Set Priority : 6 | |||
<br> | |||
ACL DHCP : | |||
* From 3 | |||
* MAC Src : l'adresse mac de l'interface wan de votre pfsense | |||
* Ethertype : 800 | |||
* VLAN : present | |||
* VLAN ID : 832 | |||
* IP Src : <code>:68</code> | |||
* IP Dst : <code>255.255.255.255:67</code> | |||
* Protocol : 17 | |||
* Cocher <code>Redirect to</code> et cocher le port 1 | |||
* Set VLAN ID : 832 | |||
* Set Priority : 6 | |||
==configuration de pfsense== | |||
===UNIQUEMENT POUR pfSense 2.3 : Remplacement du binaire dhclient par celui patché=== | |||
Loguez vous en ssh sur votre pfsense et choisissez l'option 8 pour avoir un shell. | |||
<pre> | |||
fetch http://pfoo.csnu.org/pfsense-binaries/dhclient | |||
mv /sbin/dhclient /sbin/dhclient.ORIG | |||
mv dhclient /sbin/dhclient | |||
</pre> | |||
===Création du VLAN 832 sur l'interface WAN=== | |||
* Commencez par cliquer sur l'onglet <code>interfaces</code> de la barre de menu de pfsense puis cliquez sur <code>assign</code> | |||
** Cliquez sur l'onglet <code>VLANs</code>. Créez un nouveau vlan pour le port réseau qui vous sert de WAN (vmx1 dans mon cas). Entrez 832 en <code>VLAN Tag</code> et laissez la priorité vide. | |||
** Dans l'onglet <code>Interface Assignments</code>, pour l'interface WAN, sélectionnez le vlan que vous venez de créer (<code>VLAN 832 on vmx1</code> par exemple). | |||
===Configuration du DHCP=== | |||
Le client DHCP devra envoyer trois options spécifiques afin d'obtenir un lease du serveur orange: | |||
* dhcp-class-identifier qui contiendra "sagem" | |||
* user-class qui contiendra "+FSVDSL_livebox.Internet.softathome.Livebox3" | |||
* option-90 (ou rfc3118-auth, c'est la même chose) qui contiendra votre identifiant de connexion fti/ en hexadécimal | |||
====Génération de l'identifiant en hexadécimal==== | |||
Voici un petit script bash réalisé par zoc de lafibre.info afin de générer votre identifiant en hexadécimal. Lancez le simplement avec comme argument ce qui suit fti/ en respectant la casse. | |||
<pre> | |||
#!/bin/bash | |||
USERNAME=$1 | |||
AUTHSTRING=00:00:00:00:00:00:00:00:00:00:00:1a:09:00:00:05:58:01:03:41:01:0d:66:74:69:2f | |||
for (( i=0; i<${#USERNAME}; i++ )); do | |||
HEXCHAR=$(echo -n ${USERNAME:$i:1} | od -An -txC | xargs) | |||
AUTHSTRING=${AUTHSTRING}:${HEXCHAR} | |||
done | |||
echo ${AUTHSTRING} | |||
</pre> | |||
<pre> | |||
pfoo@laptop:~$ ./generator.sh 7kgtyop | |||
00:00:00:00:00:00:00:00:00:00:00:1a:09:00:00:05:58:01:03:41:01:0d:66:74:69:2f:37:6b:67:74:79:6f:70 | |||
</pre> | |||
<br/>'''UPDATE 28/09/18''' | |||
Orange a modifié la chaîne d'authentification.<br> | |||
A ce jour, la pattern minimal qui fonctionne est 00:00:00:00:00:00:00:00:00:00:00:'''1a:09:00:00:05:58:01:03:41:01:0d''':xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx</code> en remplaçant les xx par l'identifiant en hexadécimal. Dans l'exemple ci dessus, ça donnerait 00:00:00:00:00:00:00:00:00:00:00:'''1a:09:00:00:05:58:01:03:41:01:0d''':66:74:69:2f:37:6b:67:74:79:6f:70 <br> | |||
Dans les faits la chaîne est encore plus complexe : 00:00:00:00:00:00:00:00:00:00:00:1a:09:00:00:05:58:01:03:41:01:0d:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:3c:12:'''sa:lt:sa:lt:sa:lt:sa:lt:sa:lt:sa:lt:sa:lt:sa:lt:03:13:zz:ha:sh:ha:sh:ha:sh:ha:sh:ha:sh:ha:sh:ha:sh:ha:sh''' avec la partie en gras qui est dynamique, basé sur la somme md5 d'une chaîne aléatoire, un caractère aléatoire et du mot-de-passe (qui n'était jusqu'alors pas utilisé). La chaîne en gras n'a pas encore été complètement reverse-engineeré. | |||
Nouveau script (même source) essayant de mimer au mieux le comportement de salt (la fin de la chaine) : | |||
<pre> | |||
#!/bin/bash | |||
login='fti/abcdefg' | |||
pass='abcdefg' | |||
tohex() { | |||
for h in $(echo $1 | sed "s/\(.\)/\1 /g"); do printf %02x \'$h; done | |||
} | |||
addsep() { | |||
echo $(echo $1 | sed "s/\(.\)\(.\)/:\1\2/g") | |||
} | |||
r=$(dd if=/dev/urandom bs=1k count=1 2>&1 | md5sum | cut -c1-16) | |||
id=${r:0:1} | |||
h=3C12$(tohex ${r})0313$(tohex ${id})$(echo -n ${id}${pass}${r} | md5sum | cut -c1-32) | |||
echo 00:00:00:00:00:00:00:00:00:00:00:1A:09:00:00:05:58:01:03:41:01:0D$(addsep $(tohex ${login})${h}) | |||
</pre> | |||
====Configuration de l'interface==== | |||
* Dans la barre de menu de pfsense, cliquez sur <code>interfaces</code> puis sur <code>WAN</code> | |||
** Au champ <code>IPv4 Configuration Type</code> sélectionnez <code>DHCP</code> | |||
** Dans la section <code>DHCP Client Configuration</code> cochez la case <code>Advanced Configuration</code> et <code>pfSense default</code> en Presets. | |||
** Dans la section <code>Lease Requirements and Requests</code> il faut remplir <code>Send options</code> avec les 3 options dhcp que nous avons vu plus tôt, séparées par des virgules. <br/>Par exemple : <code>dhcp-class-identifier "sagem", user-class "+FSVDSL_livebox.Internet.softathome.Livebox3", option-90 00:00:00:00:00:00:00:00:00:00:00:1a:09:00:00:05:58:01:03:41:01:0d:66:74:69:2f:37:6b:67:74:79:6f:70</code> | |||
** Dans la section <code>Lease Requirements and Requests</code> il faut remplir <code>Request options</code> avec <code>subnet-mask, broadcast-address, dhcp-lease-time, dhcp-renewal-time, dhcp-rebinding-time, domain-search, routers, domain-name-servers, rfc3118-auth</code> | |||
=Configuration de la connexion internet IPv6 (Work in progress, beta)= | |||
Pour résumer à l'heure actuelle (Février 2019) : | |||
* Le client dhcp6 de pfsense a le même problème de raw-socket qui empêche de taguer la priorité directement via le firewall pfsense. | |||
* La priorité peut être définie au niveau de la configuration pfsense du client dhcp6 (section <code>Interfaces</code>), avec probablement le même problème que pour l'IPv4, à savoir que si derrière on utilise des options de <code>Advanced Configuration</code>, la priorité risque d'être override et non appliquée. -> a revoir car visiblement quand on coche une priorité, ça ajoute des règles (cachées) au firewall pour taguer en prio6 | |||
* La priorité pour ICMPv6-neighborsolicitation et ICMPv6-routersolicitation peut être définie via une floating rule dans le firewall de pfsense. | |||
* Les options personnalisées (11, 15 et 16) ne sont pas encore supportées par le client dhcp6 de pfsense, mais : | |||
** Il y a une PR en attente côté upstream https://github.com/hrs-allbsd/wide-dhcpv6/pull/8 et pfsense est au courant https://redmine.pfsense.org/issues/8173 | |||
** opnsense a intégré les modifications proposées pour permettre l'usage des options personnalisées (donc piquer le binaire de opnsense est une solution possible) | |||
Note : il semble également qu'il faille décocher <code>Block bogon networks</code> car la gateway IPv6 Orange est dans un range inutilisé (défini en bogon) | |||
A titre personnel, dans l'immédiat, je lance un client dibbler, et je défini l'ip (quasi fixe) en static-ip6 dans pfsense, je défini des floatings rules pour ICMPv6-neighborsolicitation et ICMPv6-routersolicitation et le dhcp6 + je force net.link.vlan.mtag_pcp=1 | |||
=Téléphonie et télévision= | |||
Pour le téléphone et la télévision, nous allons faire tourner sur le vlan 832 d'une interface de notre pfsense un serveur dhcp qui va imiter le comportement du serveur dhcp de orange afin que la livebox obtienne une adresse ip de ce serveur dhcp et ait ainsi accès à internet.<br> | |||
Pour la téléphonie, il est juste nécessaire que la livebox ait accès à internet. Pour la télévision, il faut en plus relayer les vlans 838 et 840 de orange jusqu'à la livebox. | |||
===Création du VLAN 832 sur l'interface FAKE=== | |||
* Commencez par cliquer sur l'onglet <code>interfaces</code> de la barre de menu de pfsense puis cliquez sur <code>assign</code> | |||
** Cliquez sur l'onglet <code>VLANs</code>. Créez un nouveau vlan pour le port réseau qui vous sert à relier pfsense à la livebox (vmx2 dans mon cas). Entrez 832 en <code>VLAN Tag</code> et laissez la priorité vide. | |||
** Dans l'onglet <code>Interface Assignments</code>, créez une nouvelle interface et sélectionnez comme <code>Network port</code> le vlan de l'interface que vous venez de créer (<code>VLAN 832 on vmx2</code> par exemple dans mon cas). Votre interface s'appellera <code>OPT1</code> par défaut. | |||
===Configuration de l'interface FAKE=== | |||
* Dans la barre de menu de pfsense, cliquez sur <code>interfaces</code> puis sur <code>OPT1</code> | |||
** Changez le champ <code>Description</code> de l'interface en <code>FAKE</code> pour plus de lisibilité. | |||
** Cochez la case <code>Enable interface</code> | |||
** Au champ <code>IPv4 Configuration Type</code> sélectionnez <code>Static IPv4</code> | |||
** Au champ <code>IPv4 Address</code> entrez l'adresse <code>172.16.33.1</code> avec <code>/24</code> comme préfixe à droite. | |||
** Laissez <code>IPv4 Upstream gateway</code> à <code>None</code> | |||
** Assurez vous qu'aucune case dans la section <code>Reserved Networks</code> ne soit coché. | |||
* Terminez en sauvegardant la configuration. | |||
===Configuration du firewall=== | |||
Par défaut, le firewall va bloquer la totalité du trafic sur cette interface. Nous allons créer deux règles, une afin d'autoriser le trafic à destination de l'ip notre interface (qui servira de gateway à la livebox), et une seconde qui autorise le trafic vers internet. Cette seconde règle mériterait d'être plus restrictive étant donné que la livebox n'a au final besoin que d'un accès restreint à internet (a vu de nez, les dns orange, les serveurs sip et les serveurs de mise à jour livebox), mais cela implique un gros boulot de tcpdump pour avoir la liste des ips à autoriser. | |||
* Dans la barre de menu de pfsense, cliquez sur <code>firewall</code> puis sur <code>Rules</code>. | |||
* Sélectionnez l'interface <code>FAKE</code> | |||
* Créez une première règle en cliquant sur <code>add</code> | |||
** Au champ <code>Action</code> sélectionnez <code>Pass</code> | |||
** Au champ <code>Address Family</code> sélectionnez <code>IPv4</code> | |||
** Au champ <code>Protocol</code> sélectionnez <code>any</code> | |||
** Au champ <code>Source</code> sélectionnez <code>Single host or alias</code> et entrez <code>172.16.33.2</code> | |||
** Au champ <code>Destination</code> sélectionnez <code>FAKE address</code> | |||
** Au champ <code>Description</code> entrez <code>Allow access to the gateway</code> | |||
** Validez la règle avec <code>save</code> | |||
* Créez une seconde règle en cliquant sur le bouton <code>add</code> (celui avec une flèche vers le bas) | |||
** Au champ <code>Action</code> sélectionnez <code>Pass</code> | |||
** Au champ <code>Address Family</code> sélectionnez <code>IPv4</code> | |||
** Au champ <code>Protocol</code> sélectionnez <code>TCP/UDP</code> | |||
** Au champ <code>Source</code> sélectionnez <code>Single host or alias</code> et entrez <code>172.16.33.2</code> | |||
** Au champ <code>Destination</code> sélectionnez <code>any</code> | |||
** Au champ <code>Description</code> entrez <code>livebox access to internet (orange dns, SIP, TV)</code> | |||
** Validez la règle avec <code>save</code> | |||
* Validez la configuration du firewall en cliquant sur le bouton <code>Apply changes</code> en haut. | |||
===Configuration du serveur DHCP=== | |||
* Dans la barre de menu de pfsense, cliquez sur <code>services</code> puis sur <code>DHCP server</code>. | |||
* Sélectionnez l'interface <code>FAKE</code> en haut. | |||
** Cochez la case <code>Enable</code> | |||
** Au champ <code>Range</code> entrez <code>172.16.33.50</code> et <code>172.16.33.254</code> | |||
** Au champ <code>gateway</code> entrez <code>172.16.33.1</code> | |||
** Au champ <code>Additional BOOTP/DHCP Options</code>, cliquez sur <code>Display Advanced</code> | |||
*** Dans la section <code>Additional BOOTP/DHCP Options</code>, ajoutez l'option <code>90</code> de type <code>string</code> avec comme valeur <code>00:00:00:00:00:00:00:00:00:00:00:64:68:63:70:6c:69:76:65:62:6f:78:66:72:32:35:30</code> (c'est l'hexadécimal de <code>dhcpliveboxfr250</code>) | |||
*** Dans la section <code>Additional BOOTP/DHCP Options</code>, ajoutez l'option <code>120</code> de type <code>string</code> avec comme valeur <code>00:06:73:62:63:74:33:67:03:53:54:52:06:61:63:63:65:73:73:11:6f:72:61:6e:67:65:2d:6d:75:6c:74:69:6d:65:64:69:61:03:6e:65:74:00</code> (c'est l'hexadécimal de <code>sbct3g.STR.access.orange-multimedia.net</code> qui est le serveur SIP pour Strasbourg) | |||
** Dans la section <code>DHCP Static Mappings for this Interface</code> cliquez sur <code>add</code> | |||
*** Au champ <code>MAC Address</code> entrez l'adresse mac de votre livebox | |||
*** Au champ <code>IP Address</code> entrez <code>172.16.33.2</code> | |||
*** Au champ <code>DNS Servers</code> entrez <code>81.253.149.13</code> et <code>80.10.246.5</code> | |||
*** Au champ <code>gateway</code> entrez <code>172.16.33.1</code> | |||
*** Sauvegardez cette configuration | |||
** et terminez par sauvegarder la configuration du serveur DHCP. | |||
<br/>'''UPDATE''' | |||
Notez que l'option 90 est la même quelque soit votre lieux de résidence, mais l'option 120 (SIP) varie selon votre ville. Cependant, il semble qu'on peut utiliser un mauvais serveur sip sans problème .. allez comprendre. | |||
<br/>'''UPDATE 24/12/17''' | |||
Il faut désormais que le serveur envoi une nouvelle option supplémentaire (Vendor-specific) à la livebox (en tout cas pour la livebox 4) : option <code>125</code> de type <code>string</code> avec comme valeur <code>00:00:05:58:0c:01:0a:00:00:00:00:00:ff:ff:ff:ff:ff</code> | |||
<br/>'''UPDATE 15/12/18''' | |||
Il faut que le serveur envoi l'option domain-search (119) à la livebox. Cette option contient la même chose que l'option 120 (SIP), mais amputée de <code>sbct3g.</code>. <br/> | |||
Ca donne dans le cas présenté ici : <code>00:06:53:54:52:06:61:63:63:65:73:73:11:6f:72:61:6e:67:65:2d:6d:75:6c:74:69:6d:65:64:69:61:03:6e:65:74:00</code> <br/> | |||
Pour plus de simplicité, vous pouvez ausis simplement les champs suivant dans la configuration par défaut du serveur dhcp : | |||
* Domain name : orange.fr | |||
* Domain search list : STR.access.orange-multimedia.net. (pour strasbourg) | |||
===Configuration du switch (RB260GS SwOS 1.x)=== | |||
Tout d'abord, nous allons créer une ACL afin de forcer les paquets du vlan 832 issu de la livebox vers l'interface fake de votre pfsense (et éviter que la livebox communique ainsi avec l'ONT et donc orange) : | |||
* From : 2 | |||
* VLAN : present | |||
* VLAN ID : 832 | |||
* Cocher <code>Redirect to</code> et le port <code>4</code> | |||
* Priority : 6 | |||
<br> | |||
Puis nous créons une ACL afin de forcer les paquets du vlan 832 issu de l'ONT vers l'interface WAN de pfsense : | |||
* From : 1 | |||
* VLAN : present | |||
* VLAN ID : 832 | |||
* Cocher <code>Redirect to</code> et le port <code>3</code> | |||
Nous noterez le point commun entre ces deux ACL : c'est le seul cas ou le port source (From) peut communiquer avec deux autres interfaces du switch tout en étant dans le vlan 832. C'est pour cela que ces ACLs sont nécessaires afin de réaliser une isolation entre le "vrai" vlan 832 de orange, et le "faux" vlan 832 que l'on créé au niveau de pfsense (interface FAKE). Dans tous les autres cas, l'isolation est déjà réalisé au niveau de l'onglet Forwarding du switch. |
Dernière version du 23 décembre 2020 à 00:03
Vous voulez utiliser votre propre routeur pour gérer votre connexion internet ? Tout en conservant l'accès à la TV et au téléphone ? Et en plus vous êtes chez orange ?La livebox ne permet malheureusement pas de mettre la connexion internet en mode bridge. Vous trouverez quelques tuto sur internet vous expliquant comment vous passer complètement de la livebox tout en conservant internet et la télévision (mais vous perdrez le téléphone étant donné qu'orange ne fourni aucune information de connexion SIP).
Modifications récentes de l'infrastructure orange
En 2016, orange a grandement modifié son infrastructure internet pour les particuliers. Voici les caractéristiques de la nouvelle infrastructure :
- Arrêt de l'encapsulation PPPoE au profit d'ethernet avec DHCP
- Support de l'ipv6 avec DHCPv6-PD
- Transport de plusieurs VLANs 802.1q jusqu'au client avec gestion de la QoS 802.1p
- le VLAN 832 transporte la connexion internet du client ainsi que la téléphonie SIP
- les VLANs 838 et 840 transportent la TV (respectivement la VoD et la TV)
Spécificités de l'infrastructure orange
Vis à vis des priorités 802.1p :
- Les paquets DHCP, DHCPv6, ARP, ICMPv6-neighborsolicitation et ICMPv6-routersolicitation doivent être tagués en priorité 6 (obligatoire pour avoir une réponse)
- Les paquets VOIP doivent être tagués en priorité 5 (non obligatoire à ce jour)
- Tous les autres paquets doivent être en priorité 0 (non obligatoire, mais nécessaire pour avoir le débit maximum de votre offre)
Vis à vis de DHCP :
- orange utilise l'option 90 (rfc3118-authentication) afin d'envoyer l'identifiant de votre connexion (fti/*****). Par chance, orange n'utilise ni les mécanismes RDM ni aucune fonctionnalité de hashage ce qui permet d'envoyer directement votre id de connexion sous forme de token.
- D'autres options dhcp sont obligatoires : dhcp-class-identifier et user-class
- A noter que votre ip ne sera pas fixe. Elle restera la même tant que le bail dhcp restera valide (et renouvelé) par votre client. Si vous arrêtez de renouveler le bail, un autre client peut se voir attribuer "votre" ip.
Vis à vis de DHCPv6 PD
- pour l'authentification, même principe que pour dhcp mais avec l'option 11
- les autres options obligatoires sont l'user-class (option 15) et le vendor-class (option 16)
- Encore une fois, le bloc qui vous sera attribué ne restera pas fixe. Il restera le même tant que votre bail dhcp est valide, mais peut être attribué à un autre client dès lors que votre bail n'est plus valide.
dump
dump requête dhcp de la livebox (2017, non à jour)
802.1Q Virtual LAN, PRI: 6, CFI: 0, ID: 832 Bootstrap Protocol (Discover) Message type: Boot Request (1) Hardware type: Ethernet (0x01) Hardware address length: 6 Hops: 0 Transaction ID: 0x0f48395c Seconds elapsed: 1 Bootp flags: 0x8000, Broadcast flag (Broadcast) 1... .... .... .... = Broadcast flag: Broadcast .000 0000 0000 0000 = Reserved flags: 0x0000 Client IP address: 0.0.0.0 Your (client) IP address: 0.0.0.0 Next server IP address: 0.0.0.0 Relay agent IP address: 0.0.0.0 Client MAC address: Sagemcom_xx:yy:zz (2c:39:96:xx:yy:zz) Client hardware address padding: 00000000000000000000 Server host name not given Boot file name not given Magic cookie: DHCP Option: (53) DHCP Message Type (Discover) Length: 1 DHCP: Discover (1) Option: (55) Parameter Request List Length: 11 Parameter Request List Item: (1) Subnet Mask Parameter Request List Item: (3) Router Parameter Request List Item: (6) Domain Name Server Parameter Request List Item: (15) Domain Name Parameter Request List Item: (28) Broadcast Address Parameter Request List Item: (51) IP Address Lease Time Parameter Request List Item: (58) Renewal Time Value Parameter Request List Item: (59) Rebinding Time Value Parameter Request List Item: (90) Authentication Parameter Request List Item: (119) Domain Search Parameter Request List Item: (120) SIP Servers Option: (60) Vendor class identifier Length: 5 Vendor class identifier: sagem Option: (77) User Class Information Length: 44 Instance of User Class: [0] User Class Length: 43 User Class Data: 46535644534c5f6c697665626f782e496e7465726e65742e736f66746174686f6d652e4c697665626f7833 Option: (90) Authentication Length: 22 Protocol: configuration token (0) Algorithm: 0 Replay Detection Method: Monotonically-increasing counter (0) RDM Replay Detection Value: 0x0000000000000000 Authentication Information: fti/******* Option: (255) End Option End: 255
dump requête dhcpv6 de la livebox (2017, non à jour)
802.1Q Virtual LAN, PRI: 6, CFI: 0, ID: 832 DHCPv6 Message type: Solicit (1) Transaction ID: 0xaae9a2 Client Identifier Option: Client Identifier (1) Length: 10 Value: 000300012c3996xxyyzz DUID: 000300012c3996xxyyzz DUID Type: link-layer address (3) Hardware type: Ethernet (1) Link-layer address: 2c:39:96:xx:yy:zz Option Request Option: Option Request (6) Length: 4 Value: 000b0017 Requested Option code: Authentication (11) Requested Option code: DNS recursive name server (23) Elapsed time Option: Elapsed time (8) Length: 2 Value: 04bb Elapsed time: 12110 ms Authentication Option: Authentication (11) Length: 22 Value: 00000000000000000000006674692f61616161616161 Protocol: 0 Algorithm: 0 RDM: 0 Replay Detection: 0000000000000000 Authentication Information: 6674692f61616161616161 User Class Option: User Class (15) Length: 45 Value: 002b46535644534c5f6c697665626f782e496e7465726e65742e736f66746174686f6d652e6c697665626f7833 Vendor Class Option: Vendor Class (16) Length: 11 Value: 0000040e0005736167656d Enterprise ID: SAGEMCOM SAS (1038) vendor-class-data: sagem Identity Association for Prefix Delegation Option: Identity Association for Prefix Delegation (25) Length: 12 Value: 96395f2a00000e1000001518 IAID: 96395f2a T1: 3600 T2: 5400
Problèmes de pfSense
- Le principal problème qui se pose vient du fait que le client dhcp de pfsense utilise les raw sockets. Par conséquents, les paquets du client dhcp ne traverse pas pf et ne pourront donc pas être tagués en priorité 6 avec le firewall de pfsense.
- Le client dhcpv6 de pfsense (WIDE-DHCPv6) semble incapable d'envoyer des options personnalisées ce qui empêche de l'utiliser directement.
UPDATE 31/03/18 Ca bouge doucement chez pfSense pour les raw-sockets de dhcp : https://redmine.pfsense.org/issues/7425#note-9 ; Depuis pfsense 2.4.4, il n'y a plus besoin ni de patcher dhclient, ni de définir les priorités via un switch. Tout peut être fait depuis pfsense pour l'IPv4.
Néanmoins, comme on utilise la fonction Advanced Configuration
pour configurer le client dhcp, il ne faudra pas "juste" cocher la case Enable dhcpclient VLAN Priority tagging
mais également ajouter au champ Option modifiers
l'argument vlan-pcp 6
(sinon la configuration avancée override la configuration du vlan dans dhclient)
UPDATE 31/03/18 pfSense 2.4.3 permet de définir la priorité des paquets dhcp6 directement dans la GUI de configuration de dhcp6 https://redmine.pfsense.org/issues/8200 ; Il reste encore le patch du dhcpv6 pour les options personnalisées qui n'est pas intégré (https://github.com/hrs-allbsd/wide-dhcpv6/pull/8) (nb : il l'est chez opnsense).
Problème sous pfSense 2.3.2, réglé sous pfsense 2.4.2
- Un autre problème sous pfsense 2.3 était lié à un bug du dhclient de freebsd qui n'envoyait pas les options user-class. Ce bug est corrigé sous pfsense 2.4.2.
A titre purement informatif, voici le patch trivial pour pfsense 2.3.2 :
diff --git a/sbin/dhclient/tables.c b/sbin/dhclient/tables.c index c7bac57..bee776c 100644 --- a/sbin/dhclient/tables.c +++ b/sbin/dhclient/tables.c @@ -335,6 +335,7 @@ unsigned char dhcp_option_default_priority_list[] = { DHO_DHCP_REBINDING_TIME, DHO_DHCP_CLASS_IDENTIFIER, DHO_DHCP_CLIENT_IDENTIFIER, + DHO_DHCP_USER_CLASS_ID, DHO_SUBNET_MASK, DHO_TIME_OFFSET, DHO_CLASSLESS_ROUTES,
Solution proposée
Pour palier à l'utilisation des raw sockets, j'ai simplement ajouté un switch gérant les vlans entre l'ONT orange et le routeur pfsense. Ce switch permettra de modifier la priorité des paquets dhcp et ARP, mais aussi de faire le tri entre le vlan internet destiné à pfsense et les vlans TV destinés à la livebox. J'utilise un switch RB260GS de chez mikrotik qui à l'avantage d'être peu onéreux tout en restant sympa à configurer. Seule tristesse concernant ce switch, il n'est pas capable de gérer des ACL ipv6.
A côté de ça, afin de conserver l'accès à la téléphonie orange, on va créer un serveur dhcp émulant le comportement du serveur dhcp de orange et permettre ainsi à notre livebox d'accéder à internet et donc aux serveurs SIP de orange. Ce "faux" serveur dhcp tournera sur un vlan 832 qu'on rendra accessible uniquement à la livebox et restera complètement isolé et indépendant du réel VLAN 832 fournissant la connectivité internet de orange.
Enfin, dans le cas ou vous ne pourriez pas brancher directement le port LAN de la livebox à votre décodeur, il est possible (à condition que le switch gérant votre lan soit manageable et supporte les VLANs) de brancher le port LAN de la livebox directement à votre switch de LAN et d'y taguer les paquets sur un VLAN (666 dans cet exemple). Cela impose d'avoir un second switch sur votre lan, qui sera, lui, directement connecté au décodeur et qui doit être lui aussi manageable afin de détaguer du VLAN 666 les paquets pour le décodeur.
Configuration de la connexion internet IPv4
Configuration du switch (RB260GS SwOS 1.X)
Il faut bien évidemment suivre le schéma de branchement au préalable. Nous allons utiliser les ports de cette manière :
- port 1 branché sur l'ONT orange. Votre uplink.
- port 2 branché sur le port WAN de la livebox. Ce port distribuera à la livebox les deux VLANs TV ainsi que notre clone du VLAN 832 de Orange.
- port 3 branché sur le port WAN de pfsense. Ce port distribuera le (vrai) VLAN internet (832) de Orange à pfsense.
- port 4 branché sur le port FAKE de pfsense. Ce port recevra depuis pfsense notre clone du VLAN 832 avec notre serveur DHCP factice.
- port 5 branché sur votre lan afin de garder la main sur la configuration du switch (port de management).
Onglet system
- Au champ
Allow from
entrez le bloc réseau que vous utilisez sur votre lan avec le netmask au format CIDR. - Au champ
Allow from Ports
cochez le port 5. attention, à partir de maintenant l'interface d'administration du switch ne sera accessible que depuis ce port avec une adresse IP correspondant au range que vous avez défini sur le champ précédent
Onglet Forwarding
Cette page vous permet de configurer comment les ports communiquent les uns avec les autres.
Schéma de communication :
- L'ONT ne doit communiquer qu'avec pfsense-wan (pour l'accès internet vlan 832) et avec la livebox (pour la télévision vlan 838 et 840)
- La livebox ne doit communiquer qu'avec l'ONT (pour la télévision vlan 838 et 840) et pfsense-fake (pour avoir accès au faux serveur DHCP permettant un accès natté à internet)
- Le port WAN de pfsense ne doit communiquer qu'avec l'ONT
- Le port FAKE de pfsense ne doit communiquer qu'avec la livebox
- Le port de management, qui relie le switch à votre lan, ne doit communiquer avec aucun autre port du switch
Ce qui donne au niveau de la configuration du switch :
- Colonne port 1 (ONT) : cochez les ports 2 (livebox) et 3 (pfsense-wan)
- Colonne port 2 (livebox) : cochez les ports 1 (ONT) et 4 (pfsense-fake)
- Colonne port 3 (pfsense-wan) : cochez le port 1 (ONT)
- Colonne port 4 (pfsense-fake) : cochez le port 2 (livebox)
- Colonne port 5 (management) : ne cochez aucun port
- Colonne SFP : ne cochez aucun port
Onglet VLAN
- Pour les ports 1 (ONT), 2 (livebox), 3 (pfsense-wan), 4 (pfsense-fake)
- VLAN mode : strict
- VLAN receive : only tagged
- Default VLAN ID : 1
- Force VLAN id : décoché
- VLAN Header : leave as is
- Pour le port 5 (management)
- VLAN mode : optional
- VLAN receive : only untagged
- Default VLAN ID : 1
- Force VLAN id : décoché
- VLAN Header : leave as is
Onglet VLANs
- Créez 3 vlans : 832, 838 et 840
- Pour le vlan 832 :
- définissez les ports 1 (ONT), 2 (livebox), 3 (pfsense-wan) et 4 (pfsense-fake) à
leave as is
- définissez les ports 5 (management) et SFP à
not a member
- définissez les ports 1 (ONT), 2 (livebox), 3 (pfsense-wan) et 4 (pfsense-fake) à
- Pour les vlans 838 et 840 :
- définissez les ports 1 (ONT) et 2 (livebox) à
leave as is
- définissez les ports 3 (pfsense-wan), 4 (pfsense-fake), 5 (management) et SFP à
not a member
- définissez les ports 1 (ONT) et 2 (livebox) à
Onglet ACL
Il faut ici créer deux ACL afin de changer la priorité des paquets ARP et des requêtes dhcp.
ACL ARP :
- From 3
- MAC Src : l'adresse mac de l'interface wan de votre pfsense
- Ethertype : 806
- VLAN : present
- VLAN ID : 832
- Cocher
Redirect to
et cocher le port 1 - Set VLAN ID : 832
- Set Priority : 6
ACL DHCP :
- From 3
- MAC Src : l'adresse mac de l'interface wan de votre pfsense
- Ethertype : 800
- VLAN : present
- VLAN ID : 832
- IP Src :
:68
- IP Dst :
255.255.255.255:67
- Protocol : 17
- Cocher
Redirect to
et cocher le port 1 - Set VLAN ID : 832
- Set Priority : 6
configuration de pfsense
UNIQUEMENT POUR pfSense 2.3 : Remplacement du binaire dhclient par celui patché
Loguez vous en ssh sur votre pfsense et choisissez l'option 8 pour avoir un shell.
fetch http://pfoo.csnu.org/pfsense-binaries/dhclient mv /sbin/dhclient /sbin/dhclient.ORIG mv dhclient /sbin/dhclient
Création du VLAN 832 sur l'interface WAN
- Commencez par cliquer sur l'onglet
interfaces
de la barre de menu de pfsense puis cliquez surassign
- Cliquez sur l'onglet
VLANs
. Créez un nouveau vlan pour le port réseau qui vous sert de WAN (vmx1 dans mon cas). Entrez 832 enVLAN Tag
et laissez la priorité vide. - Dans l'onglet
Interface Assignments
, pour l'interface WAN, sélectionnez le vlan que vous venez de créer (VLAN 832 on vmx1
par exemple).
- Cliquez sur l'onglet
Configuration du DHCP
Le client DHCP devra envoyer trois options spécifiques afin d'obtenir un lease du serveur orange:
- dhcp-class-identifier qui contiendra "sagem"
- user-class qui contiendra "+FSVDSL_livebox.Internet.softathome.Livebox3"
- option-90 (ou rfc3118-auth, c'est la même chose) qui contiendra votre identifiant de connexion fti/ en hexadécimal
Génération de l'identifiant en hexadécimal
Voici un petit script bash réalisé par zoc de lafibre.info afin de générer votre identifiant en hexadécimal. Lancez le simplement avec comme argument ce qui suit fti/ en respectant la casse.
#!/bin/bash USERNAME=$1 AUTHSTRING=00:00:00:00:00:00:00:00:00:00:00:1a:09:00:00:05:58:01:03:41:01:0d:66:74:69:2f for (( i=0; i<${#USERNAME}; i++ )); do HEXCHAR=$(echo -n ${USERNAME:$i:1} | od -An -txC | xargs) AUTHSTRING=${AUTHSTRING}:${HEXCHAR} done echo ${AUTHSTRING}
pfoo@laptop:~$ ./generator.sh 7kgtyop 00:00:00:00:00:00:00:00:00:00:00:1a:09:00:00:05:58:01:03:41:01:0d:66:74:69:2f:37:6b:67:74:79:6f:70
UPDATE 28/09/18
Orange a modifié la chaîne d'authentification.
A ce jour, la pattern minimal qui fonctionne est 00:00:00:00:00:00:00:00:00:00:00:1a:09:00:00:05:58:01:03:41:01:0d:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx en remplaçant les xx par l'identifiant en hexadécimal. Dans l'exemple ci dessus, ça donnerait 00:00:00:00:00:00:00:00:00:00:00:1a:09:00:00:05:58:01:03:41:01:0d:66:74:69:2f:37:6b:67:74:79:6f:70
Dans les faits la chaîne est encore plus complexe : 00:00:00:00:00:00:00:00:00:00:00:1a:09:00:00:05:58:01:03:41:01:0d:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:3c:12:sa:lt:sa:lt:sa:lt:sa:lt:sa:lt:sa:lt:sa:lt:sa:lt:03:13:zz:ha:sh:ha:sh:ha:sh:ha:sh:ha:sh:ha:sh:ha:sh:ha:sh avec la partie en gras qui est dynamique, basé sur la somme md5 d'une chaîne aléatoire, un caractère aléatoire et du mot-de-passe (qui n'était jusqu'alors pas utilisé). La chaîne en gras n'a pas encore été complètement reverse-engineeré.
Nouveau script (même source) essayant de mimer au mieux le comportement de salt (la fin de la chaine) :
#!/bin/bash login='fti/abcdefg' pass='abcdefg' tohex() { for h in $(echo $1 | sed "s/\(.\)/\1 /g"); do printf %02x \'$h; done } addsep() { echo $(echo $1 | sed "s/\(.\)\(.\)/:\1\2/g") } r=$(dd if=/dev/urandom bs=1k count=1 2>&1 | md5sum | cut -c1-16) id=${r:0:1} h=3C12$(tohex ${r})0313$(tohex ${id})$(echo -n ${id}${pass}${r} | md5sum | cut -c1-32) echo 00:00:00:00:00:00:00:00:00:00:00:1A:09:00:00:05:58:01:03:41:01:0D$(addsep $(tohex ${login})${h})
Configuration de l'interface
- Dans la barre de menu de pfsense, cliquez sur
interfaces
puis surWAN
- Au champ
IPv4 Configuration Type
sélectionnezDHCP
- Dans la section
DHCP Client Configuration
cochez la caseAdvanced Configuration
etpfSense default
en Presets. - Dans la section
Lease Requirements and Requests
il faut remplirSend options
avec les 3 options dhcp que nous avons vu plus tôt, séparées par des virgules.
Par exemple :dhcp-class-identifier "sagem", user-class "+FSVDSL_livebox.Internet.softathome.Livebox3", option-90 00:00:00:00:00:00:00:00:00:00:00:1a:09:00:00:05:58:01:03:41:01:0d:66:74:69:2f:37:6b:67:74:79:6f:70
- Dans la section
Lease Requirements and Requests
il faut remplirRequest options
avecsubnet-mask, broadcast-address, dhcp-lease-time, dhcp-renewal-time, dhcp-rebinding-time, domain-search, routers, domain-name-servers, rfc3118-auth
- Au champ
Configuration de la connexion internet IPv6 (Work in progress, beta)
Pour résumer à l'heure actuelle (Février 2019) :
- Le client dhcp6 de pfsense a le même problème de raw-socket qui empêche de taguer la priorité directement via le firewall pfsense.
- La priorité peut être définie au niveau de la configuration pfsense du client dhcp6 (section
Interfaces
), avec probablement le même problème que pour l'IPv4, à savoir que si derrière on utilise des options deAdvanced Configuration
, la priorité risque d'être override et non appliquée. -> a revoir car visiblement quand on coche une priorité, ça ajoute des règles (cachées) au firewall pour taguer en prio6 - La priorité pour ICMPv6-neighborsolicitation et ICMPv6-routersolicitation peut être définie via une floating rule dans le firewall de pfsense.
- Les options personnalisées (11, 15 et 16) ne sont pas encore supportées par le client dhcp6 de pfsense, mais :
- Il y a une PR en attente côté upstream https://github.com/hrs-allbsd/wide-dhcpv6/pull/8 et pfsense est au courant https://redmine.pfsense.org/issues/8173
- opnsense a intégré les modifications proposées pour permettre l'usage des options personnalisées (donc piquer le binaire de opnsense est une solution possible)
Note : il semble également qu'il faille décocher Block bogon networks
car la gateway IPv6 Orange est dans un range inutilisé (défini en bogon)
A titre personnel, dans l'immédiat, je lance un client dibbler, et je défini l'ip (quasi fixe) en static-ip6 dans pfsense, je défini des floatings rules pour ICMPv6-neighborsolicitation et ICMPv6-routersolicitation et le dhcp6 + je force net.link.vlan.mtag_pcp=1
Téléphonie et télévision
Pour le téléphone et la télévision, nous allons faire tourner sur le vlan 832 d'une interface de notre pfsense un serveur dhcp qui va imiter le comportement du serveur dhcp de orange afin que la livebox obtienne une adresse ip de ce serveur dhcp et ait ainsi accès à internet.
Pour la téléphonie, il est juste nécessaire que la livebox ait accès à internet. Pour la télévision, il faut en plus relayer les vlans 838 et 840 de orange jusqu'à la livebox.
Création du VLAN 832 sur l'interface FAKE
- Commencez par cliquer sur l'onglet
interfaces
de la barre de menu de pfsense puis cliquez surassign
- Cliquez sur l'onglet
VLANs
. Créez un nouveau vlan pour le port réseau qui vous sert à relier pfsense à la livebox (vmx2 dans mon cas). Entrez 832 enVLAN Tag
et laissez la priorité vide. - Dans l'onglet
Interface Assignments
, créez une nouvelle interface et sélectionnez commeNetwork port
le vlan de l'interface que vous venez de créer (VLAN 832 on vmx2
par exemple dans mon cas). Votre interface s'appelleraOPT1
par défaut.
- Cliquez sur l'onglet
Configuration de l'interface FAKE
- Dans la barre de menu de pfsense, cliquez sur
interfaces
puis surOPT1
- Changez le champ
Description
de l'interface enFAKE
pour plus de lisibilité. - Cochez la case
Enable interface
- Au champ
IPv4 Configuration Type
sélectionnezStatic IPv4
- Au champ
IPv4 Address
entrez l'adresse172.16.33.1
avec/24
comme préfixe à droite. - Laissez
IPv4 Upstream gateway
àNone
- Assurez vous qu'aucune case dans la section
Reserved Networks
ne soit coché.
- Changez le champ
- Terminez en sauvegardant la configuration.
Configuration du firewall
Par défaut, le firewall va bloquer la totalité du trafic sur cette interface. Nous allons créer deux règles, une afin d'autoriser le trafic à destination de l'ip notre interface (qui servira de gateway à la livebox), et une seconde qui autorise le trafic vers internet. Cette seconde règle mériterait d'être plus restrictive étant donné que la livebox n'a au final besoin que d'un accès restreint à internet (a vu de nez, les dns orange, les serveurs sip et les serveurs de mise à jour livebox), mais cela implique un gros boulot de tcpdump pour avoir la liste des ips à autoriser.
- Dans la barre de menu de pfsense, cliquez sur
firewall
puis surRules
. - Sélectionnez l'interface
FAKE
- Créez une première règle en cliquant sur
add
- Au champ
Action
sélectionnezPass
- Au champ
Address Family
sélectionnezIPv4
- Au champ
Protocol
sélectionnezany
- Au champ
Source
sélectionnezSingle host or alias
et entrez172.16.33.2
- Au champ
Destination
sélectionnezFAKE address
- Au champ
Description
entrezAllow access to the gateway
- Validez la règle avec
save
- Au champ
- Créez une seconde règle en cliquant sur le bouton
add
(celui avec une flèche vers le bas)- Au champ
Action
sélectionnezPass
- Au champ
Address Family
sélectionnezIPv4
- Au champ
Protocol
sélectionnezTCP/UDP
- Au champ
Source
sélectionnezSingle host or alias
et entrez172.16.33.2
- Au champ
Destination
sélectionnezany
- Au champ
Description
entrezlivebox access to internet (orange dns, SIP, TV)
- Validez la règle avec
save
- Au champ
- Validez la configuration du firewall en cliquant sur le bouton
Apply changes
en haut.
Configuration du serveur DHCP
- Dans la barre de menu de pfsense, cliquez sur
services
puis surDHCP server
. - Sélectionnez l'interface
FAKE
en haut.- Cochez la case
Enable
- Au champ
Range
entrez172.16.33.50
et172.16.33.254
- Au champ
gateway
entrez172.16.33.1
- Au champ
Additional BOOTP/DHCP Options
, cliquez surDisplay Advanced
- Dans la section
Additional BOOTP/DHCP Options
, ajoutez l'option90
de typestring
avec comme valeur00:00:00:00:00:00:00:00:00:00:00:64:68:63:70:6c:69:76:65:62:6f:78:66:72:32:35:30
(c'est l'hexadécimal dedhcpliveboxfr250
) - Dans la section
Additional BOOTP/DHCP Options
, ajoutez l'option120
de typestring
avec comme valeur00:06:73:62:63:74:33:67:03:53:54:52:06:61:63:63:65:73:73:11:6f:72:61:6e:67:65:2d:6d:75:6c:74:69:6d:65:64:69:61:03:6e:65:74:00
(c'est l'hexadécimal desbct3g.STR.access.orange-multimedia.net
qui est le serveur SIP pour Strasbourg)
- Dans la section
- Dans la section
DHCP Static Mappings for this Interface
cliquez suradd
- Au champ
MAC Address
entrez l'adresse mac de votre livebox - Au champ
IP Address
entrez172.16.33.2
- Au champ
DNS Servers
entrez81.253.149.13
et80.10.246.5
- Au champ
gateway
entrez172.16.33.1
- Sauvegardez cette configuration
- Au champ
- et terminez par sauvegarder la configuration du serveur DHCP.
- Cochez la case
UPDATE
Notez que l'option 90 est la même quelque soit votre lieux de résidence, mais l'option 120 (SIP) varie selon votre ville. Cependant, il semble qu'on peut utiliser un mauvais serveur sip sans problème .. allez comprendre.
UPDATE 24/12/17
Il faut désormais que le serveur envoi une nouvelle option supplémentaire (Vendor-specific) à la livebox (en tout cas pour la livebox 4) : option 125
de type string
avec comme valeur 00:00:05:58:0c:01:0a:00:00:00:00:00:ff:ff:ff:ff:ff
UPDATE 15/12/18
Il faut que le serveur envoi l'option domain-search (119) à la livebox. Cette option contient la même chose que l'option 120 (SIP), mais amputée de sbct3g.
.
Ca donne dans le cas présenté ici : 00:06:53:54:52:06:61:63:63:65:73:73:11:6f:72:61:6e:67:65:2d:6d:75:6c:74:69:6d:65:64:69:61:03:6e:65:74:00
Pour plus de simplicité, vous pouvez ausis simplement les champs suivant dans la configuration par défaut du serveur dhcp :
- Domain name : orange.fr
- Domain search list : STR.access.orange-multimedia.net. (pour strasbourg)
Configuration du switch (RB260GS SwOS 1.x)
Tout d'abord, nous allons créer une ACL afin de forcer les paquets du vlan 832 issu de la livebox vers l'interface fake de votre pfsense (et éviter que la livebox communique ainsi avec l'ONT et donc orange) :
- From : 2
- VLAN : present
- VLAN ID : 832
- Cocher
Redirect to
et le port4
- Priority : 6
Puis nous créons une ACL afin de forcer les paquets du vlan 832 issu de l'ONT vers l'interface WAN de pfsense :
- From : 1
- VLAN : present
- VLAN ID : 832
- Cocher
Redirect to
et le port3
Nous noterez le point commun entre ces deux ACL : c'est le seul cas ou le port source (From) peut communiquer avec deux autres interfaces du switch tout en étant dans le vlan 832. C'est pour cela que ces ACLs sont nécessaires afin de réaliser une isolation entre le "vrai" vlan 832 de orange, et le "faux" vlan 832 que l'on créé au niveau de pfsense (interface FAKE). Dans tous les autres cas, l'isolation est déjà réalisé au niveau de l'onglet Forwarding du switch.