https://forum.yunohost.org/t/tuto-resoudre-le-probleme-de-hairpinning-orange-avec-le-dhcp-dns-de-yunohost/4125/37
Dans un premier je voudrais préciser que cette méthode fonctionne avant tout pour moi ! Je n’ai aucune idée du respect des “bonnes pratiques” avec ces propositions là.
Cependant, je serais ravi d’échanger avec vous tous (utilisateurs de YunoHost ou bien dev YunoHost) par rapport à cette méthode là ; est-ce une bonne pratique ? ; est-ce que je me prends la tete ? ; est ce qu’il y a moyen de faire ça plus facilement ? Enfin bref j’attend avec impatience vos retours
Étant client Orange fibre j’ai comme beaucoup le problème de hairpinning avec ma Livebox.
En épluchant un peu le forum ici et d’autres sur internet voici la solution que je propose pour contourner ce problème.
Pour résumer je n’utilise la Livebox que comme bridge internet, c’est mon serveur YunoHost qui fait office de serveur DHCP et résolveur DNS. Tout ça grace à DNSmasq qui est normalement installé est activé par défaut sur votre serveur YunoHost.
Pour résumé voici les avantages de cette méthode :
Personnellement je n’utilise pas le décodeur TV d’orange (en plus j’ai le décodeur blanc qui est complètement buggé …

. Cependant, je le précise plus tard, mais il est important que le décodeur reçoive son IP du serveur DHCP de la box et non pas par YunoHost. Je crois que c’est dû au fait que la TV d’Orange a besoin d’utiliser les DNS hardcodés dans la LiveBox.
Finalement : Si vous voulez garder la TV d’Orange il faut laisser activer le DHCP de la LiveBox, pour les autres aucun problème à le désactiver.
Je précise les deux cas dans le tuto.
Avant de commencer je propose de faire un petit tour d’horizon afin d’être sûr que la base soit bonne. De mon coté, voici le contenu des différents fichiers de configuration qui nous intéresse dans leurs états juste après une installation fraiche de YunoHost.
Si ce n’est pas déjà fait, je pense que c’est une bonne chose de fixer l’adresse IP du serveur YunoHost étant donné que nous allons désactiver le serveur DHCP de la LiveBox.
Pour ça, il suffit d’éditer le fichier
/etc/network/interfaces
et de modifier la ligne correspondant à l’interface réseau utilisée. Mais avant, on fait une petite sauvegarde du fichier avec
sudo cp /etc/network/interfaces /etc/network/interfaces.bak
et enfin on édite le fichier avec
sudo nano /etc/network/interfaces
et on le modifie comme ceci :
Un petit redémarrage et normalement vous pouvez vous connecter à votre serveur avec sa nouvelle IP.
Maintenant on va activer le serveur DHCP de YunoHost. Le rôle du serveur DHCP est de fournir une adresse IP valide aux machines qui se connectent à votre réseau local ainsi que les différentes informations utiles comme la passerelle ou encore le resolveur DNS.
Jusqu’à présent c’était votre LiveBox qui était chargée de faire ça. Maintenant c’est votre serveur YunoHost qui va s’en charger. L’avantage en utilisant celui-ci, c’est qu’il va communiquer comme résolveur DNS sa propre IP et faire travailler DNSmasq, contrairement à LiveBox qui fourni les DNS d’Orange.
Pour activer le serveur DHCP de YunoHost il faut éditer le fichier
/etc/dnsmasq.conf
mais avant on fait une sauvegarde avec
sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf.bak
et enfin
sudo nano /etc/dnsmasq.conf
afin de modifier le fichier comme ceci :
Il ne faut pas oublier d’ouvrir le port 67 UDP sur votre serveur pour que le serveur DHCP soit visible sur votre réseau. Nous faisons ça avec la commande
sudo yunohost firewall allow UDP 67
.
Enfin, on relance DNSmasq pour prendre en compte la configuration avec
sudo service dnsmasq restart
et on regarde que tout se passe bien avec
sudo service dnsmasq status
.
À partir de maintenant votre serveur DHCP doit être fonctionnel, vous pouvez peut être essayer sur une autre machine dans vos paramètres réseau en demandant de renouveler le bail DHCP et en spécifiant l’adresse IP de votre serveur afin de ne pas utiliser le DHCP de la LiveBox.
Si vous récupérez bien une adresse IP dans la tranche que vous avez spécifié et que votre connexion internet fonctionne alors on peut passer à la suite et désactiver le serveur DHCP de la LiveBox
Rien de bien compliquer, connectez vous sur l’interface admin de votre Box depuis un navigateur en entrant l’URL 192.168.1.1. Connectez vous en tant qu’admin et rendez vous dans l’onglet “Configuration avancée” et l’onglet “DHCP”.
Maintenant votre serveur DHCP et resolveur DNS perso de YunoHost devrait fonctionner correctement. Pour tester tout ça il vous suffit sur une de vos machines de la déconnecter du réseau et de la reconnecter pour qu’elle interroge le serveur DHCP de YunoHost. Si tout va bien elle devrait récupérer une adresse IP de l’intervalle que vous avez défini dans
/etc/dnsmasq.conf
et votre connexion internet devrait fonctionner.
Pour vous assurer que le résolveur DNS utilisé est bien celui de YunoHost faites un petit
dig www.google.fr
dans votre shell ; le serveur indiqué devrait être l’adresse IP de votre serveur YunoHost.
Mais pour l’instant, si dans votre navigateur vous essayez d’accéder à votre interface YunoHost via votre domaine principal cela ne fonctionne pas. Tout simplement parce que DNSmasq retourne à votre machine votre adresse IP publique. Il va falloir modifier la config de DNSmasq pour qu’il vous retourne l’adresse IP locale de votre serveur et non pas l’adresse IP publique.
5. Ajouter vos domaines à la config de DNSmasq
Pour chacun de vos domaines il va falloir modifier le fichier qui correspond dans le dossier
/etc/dnsmasq.d
comme par exemple le fichier
/etc/dnsmasq.d/toto.fr
indiqué ici :
Après un
sudo service dnsmasq restart
vous devriez pouvoir accéder sur chacune de vos machines à votre interface Yunohost en utilisant votre nom de domaine comme URL.
Cependant il reste encore un problème. Lorsque vous mettez en place un certificat pour vos noms de domaine vous obtenez le message suivant :
En effet, le NAT loopback de la Livebox ne fonctionne pas, donc quand YunoHost interroge votre IP publique sur le port 80 celle-ci n’est pas capable de renvoyer l’IP locale de votre serveur.
Le seul moyen que j’ai trouvé pour le moment est d’utiliser iptables afin de transférer tout le trafic de votre IP publique vers l’IP locale de votre serveur YunoHost.
Dans un premier temps il faut activer l’ip forwarding en éditant le fichier
/etc/sysctl.conf
avec un
sudo nano /etc/sysctl.conf
et dé-commenter la ligne
net.ipv4.ip_forward
afin d’avoir
net.ipv4.ip_forward=1
.
Maintenant il faut ajouter une règle Iptables afin de maintenir la redirection d’IP même si l’IP publique change.
Pour cela j’utilise Cron afin de vérifier toutes les 15 minutes si mon IP a changé et modifier la redirection si besoin.
Dans un premier temps je créé un dossier dans mon home afin d’accueillir mon script :
mkdir ~/ynh_hairpinning_fix
.
Enfin je créé mon script avec
nano ~/ynh_hairpinning_fix/ynh_hairpinning_fix.sh
et voici son contenu :
N’oubliez pas d’adapter la variable
local_ip
en mettant l’IP locale de votre YunoHost. Et enfin, rendez votre script exécutable avec
chmod +x ~/ynh_hairpinning_fix/ynh_hairpinning_fix.sh
.
Vous pouvez maintenant le lancer une première fois avec la commande
sudo ~/ynh_hairpinning_fix/ynh_hairpinning_fix.sh
(important de se placer root car on utilise ici Iptables).
Maintenant vous pouvez vérifier que la règle a bien été ajouté dans Iptables avec
sudo iptables -L --line-numbers -t nat
.
Il ne reste plus qu’à ajouter ce script à Cron pour vérifier régulièrement que si votre IP publique change.
Faite un
sudo crontab -e
afin d’éditer vos entrée Cron root et ajoutez la ligne suivante :
*/15 * * * * /home/admin/ynh_hairpinning_fix/ynh_hairpinning_fix.sh
.
Redémarrez votre YunoHost et essayez de renouveler votre certificat ; normalement le warning a disparu !
Voilà tout !
J’espère que les explications sont assez claires et aussi que ce tuto peut servir à d’autre personnes (je ne sais pas pour les autres box comme Bbox ou encore SFR, peut être que ça peut servir, ou même chez nos amis Belges avec Proximus?).
Si d’autres clients Orange sont dans le même cas que je moi je veux bien vos trucs et astuces pour résoudre ce problème là, peut être qu’il y a plus simple et plus efficace ?
Et surtout merci à la communauté YunoHost
1)
voilà, j’ai fais comme suggéré un script qui récupère l’ip publique, et la stock dans une varible. J’ai donc:
(fait à l’aide de ce post :
https://askubuntu.com/questions/95910/command-for-determining-my-public-ip 3
et ce post
https://www.commentcamarche.net/forum/affich-4755454-shell-stocker-le-resultat-d-une-commande 1 )
Merci beaucoup pour cette solution en tout cas, j’aurais été bien embêté sans ce tuto
2)
De mon coté je viens (enfin) d’intégrer ta méthode à mon YunoHost, voici mon script
fake_loopback.sh
au cas ou :
et mon entrée crontab (bien faire
sudo crontab -e
et pas
crontab -e
pour être sûr d’étirer le crontab de root et pas de l’user)
3)
Bonjour,
D’abord merci pour ce tuto qui fonctionne encore aujourd’hui .
Moi aussi j’avais ce problème d’accès au serveur depuis mon réseau local.
Mon modem-routeur est un D-link DSL-2640B, car je suis chez FDN qui ne fourni pas de box.
Information sur la version de YNH :
Ce que j’ai fait pour résoudre :
1. Attribution d’une IP fixe au serveur YunoHost
J’avais déjà assigné une IPv4 fixe à mon YNH.
2. Activer le serveur DHCP de DNSmasq
3. Désactiver le serveur DHCP du D-link DSL-2640B
A partir de l’interface web en 192.168.1.1.
4. Vérification du fonctionnement de DNSmasq
En effet, une machine faisant appel au service DHCP reçoit bien une IP dans la plage spécifier dans
/etc/dnsmasq.conf
et comme Primary DNS l’IP statique du YNH.
Par contre, pour les machines configurées en IP fixe j’ai du renseigner le serveur DNS avec l’IP du YNH.
J’ai maintenant accès au YNH depuis toutes les machines du réseau local par son domain.tld.
5. Ajouter vos domaines à la config de DNSmasq
Un fichier
domain.tld
était déjà présent dans
/etc/dnsmasq.d
, la ligne
address=
n’y figure pas mais par contre 4 lignes
interface-name=
.
Ça fonctionne ainsi je n’ai donc rien modifié.
6. Mise en place et renouvellement des certificats Let’s Encrypt
J’ai d’abord tenté un “renouveler manuellement maintenant” et la validité du certificat est bien passée à 89 jours.
Ça fonctionne ainsi je n’ai donc rien modifié.
Conclusion
Merci à toute l’équipe.
