« Fibre orange en DHCP avec routeur pfsense » : différence entre les versions
| Ligne 274 : | Ligne 274 : | ||
===Configuration du serveur DHCP=== | ===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:41:55:42: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) | |||
Version du 11 novembre 2016 à 18:52
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
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
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.
- Le second problème est lié à un bug du dhclient de freebsd qui n'envoi pas les options user-class. Ce bug est corrigé chez freebsd, mais pas encore répercuté dans pfsense 2.3.2.
Le patch pour régler ce problème d'options est assez simple :
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,
- Enfin, le client dhcpv6 de pfsense (WIDE-DHCPv6) semble incapable d'envoyer des options personnalisées ce qui empêche de l'utiliser directement.
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. A titre perso, 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 ne semble 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 de permettre à notre livebox d'accéder à internet et donc aux serveurs SIP de orange. Ce "faux" serveur dhcp tournera évidemment sur le vlan 832.

Configuration de la connexion internet IPv4
Configuration du switch
configuration de pfsense
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
interfacesde 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 Taget 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 vmx1par 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 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: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:66:74:69:2f:37:6b:67:74:79:6f:70
Configuration de l'interface
- Dans la barre de menu de pfsense, cliquez sur
interfacespuis surWAN- Au champ
IPv4 Configuration Typesélectionnez DHCP - Dans la section
DHCP Client Configurationcochez la caseAdvanced ConfigurationetpfSense defaulten Presets. - Dans la section
Lease Requirements and Requestsil faut remplirSend optionsavec les 3 options dhcp que nous avons vu plus tôt, séparées par des virgules. Par exemple :
- Au champ
dhcp-class-identifier "sagem", user-class "+FSVDSL_livebox.Internet.softathome.Livebox3", option-90 00:00:00:00:00:00:00:00:00:00:00:66:74:69:2f:37:6b:67:74:79:6f:70
Configuration de la connexion internet IPv6
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
interfacesde 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 Taget laissez la priorité vide. - Dans l'onglet
Interface Assignments, créez une nouvelle interface et sélectionnez commeNetwork portle vlan de l'interface que vous venez de créer (VLAN 832 on vmx2par exemple dans mon cas). Votre interface s'appelleraOPT1par défaut.
- Cliquez sur l'onglet
Configuration de l'interface FAKE
- Dans la barre de menu de pfsense, cliquez sur
interfacespuis surOPT1- Changez le champ
Descriptionde l'interface enFAKEpour plus de lisibilité. - Cochez la case
Enable interface - Au champ
IPv4 Configuration TypesélectionnezStatic IPv4 - Au champ
IPv4 Addressentrez l'adresse172.16.33.1avec/24comme préfixe à droite. - Laissez
IPv4 Upstream gatewayàNone - Assurez vous qu'aucune case dans la section
Reserved Networksne 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
firewallpuis surRules. - Sélectionnez l'interface
FAKE - Créez une première règle en cliquant sur
add- Au champ
ActionsélectionnezPass - Au champ
Address FamilysélectionnezIPv4 - Au champ
Protocolsélectionnezany - Au champ
SourcesélectionnezSingle host or aliaset entrez172.16.33.2 - Au champ
DestinationsélectionnezFAKE address - Au champ
DescriptionentrezAllow 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
ActionsélectionnezPass - Au champ
Address FamilysélectionnezIPv4 - Au champ
ProtocolsélectionnezTCP/UDP - Au champ
SourcesélectionnezSingle host or aliaset entrez172.16.33.2 - Au champ
Destinationsélectionnezany - Au champ
Descriptionentrezlivebox 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 changesen haut.
Configuration du serveur DHCP
- Dans la barre de menu de pfsense, cliquez sur
servicespuis surDHCP server. - Sélectionnez l'interface
FAKEen haut.- Cochez la case
Enable - Au champ
Rangeentrez172.16.33.50et172.16.33.254 - Au champ
gatewayentrez172.16.33.1 - Au champ
Additional BOOTP/DHCP Options, cliquez surDisplay Advanced- Dans la section
Additional BOOTP/DHCP Options, ajoutez l'option90de typestringavec 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'option120de typestringavec comme valeur00:06:73:62:63:74:33:67:03:41:55:42: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.netqui est le serveur SIP)
- Dans la section
- Cochez la case