Sommaire
Préambule
NDLR : La procédure peut-être simplifiée en se passant de DNSChef et en utilisant uniquement PiHole depuis qu'ils ont fait la mise à jours (voir /etc/dnsmasq.d/own_domain.conf ). Tuto a corriger !
Ce tutoriel va vous permettre de remettre en place un semblant de HairPinning, ce qui pourra s'avérer salvateur pour les services auto-hébergés derrière des routeurs bridés.
La méthode qu'on va mettre en place ici vous apportera même une belle feature : le blocage d'une partie de la publicité sur tout votre réseau.
Par contre en déplacement, les machines peuvent parfois mettre un peu de temps (généralement 1-5 min max) pour renouveller leur cache DNS. En attendant ce renouvellement, les services ne sont de facto pas joignable.
La consommation machine est très faible et doit pouvoir tenir sur un RPI1 sans problème. Il n'y a que l'interface WEB qui a tendance a surconsommer le pauvre navigateur du client (testé sur firefox-ubuntu).
/!\ L'interface web de PiHole n'est accessible qu'en http. Vous devrez configurez vous même la sécurisation du canal entre le client et le serveur. Par exemple via votre VPN, en configurant lighttp/Haproxy pour utiliser https ou encore via un tunnel SSH.
NDLR : J'ai proposé l'ajout de la feature Rogue DNS directement à PiHole afin de ne plus avoir besoin de DNSChef. Peut-être que DNSChef ne sera donc plus nécessaire dans le futur.
Introduction
Le serveur DNS est un serveur qui permet aux clients d'un réseau informatique de transformer un nom de domaine du type www.helloworld.com en adresse IP, permettant ainsi aux machines de communiquer.
Comme les logiciels de serveur DNS (comme PiHole ou encore Bind9) ne permettent pas de modifier l'adresse IP attribuée à un nom de domaine, nous allons donc ici utiliser deux logiciels :
DNSChef (rogue DNS) qui ira récupérer les vrais adresses IP liées aux noms de domaine. Ce logiciel écoutera sur 127.0.2.1:5353 (boucle locale).
PiHole (serveur DNS) qui recevra les requêtes des clients et les redirigera, ou non, vers le serveur DNS, ou utilisera son propre cache. Ce logiciel écoutera sur l'adresse IP LAN du serveur.
Une fois ce serveur mis en place, vous pouvez au choix :
- configurer votre routeur pour qu'il utilise ce serveur DNS (le routeur pouvant servir de cache DNS)
- configurer votre routeur pour que les clients utilisent ce serveur DNS en lieu et place de celui du routeur.
Nous allons ici choisir la deuxième méthode : le DNS primaire (principale) utilisé par les clients sera notre propre serveur, tandis que le DNS secondaire (de secours) sera le routeur lui-même (ou un second serveur DNS maison).
Dans le tutoriel nous considérerons que notre serveur imaginaire a comme adresse IP LAN 192.168.1.42 et tourne sous ubuntu 16+.
Mise en place de DNSChef.
Passez en admin
- sur Raspbian / Ubuntu
sudo -i
- sur Debian / Ubuntu Minimal
su
Installez les pré-requis.
apt-get install python-pip screen
pip install --upgrade pip
python -m pip install dnslib IPy
Rendez-vous dans le dossier où enregistrer le script de dnschef, ici on choisit /opt/scripts
cd /opt/scripts
Téléchargez dnschef et rendez le exécutable.
wget https://raw.githubusercontent.com/iphelix/dnschef/master/dnschef.py
chmod +x /opt/scripts/dnschef.py
Maintenant, on va préparer un fichier de configuration externe, qui permettra de rediriger des noms de domaines vers des adresses IP spécifiques.
nano /opt/scripts/config/dnschef.ini
Ajoutez dedans les noms de domaines que vous souhaitez filtrer et vers quelle IP il faut rediriger les clients.
Voici un exemple ([A] concerne la section IPv4 tandis que [AAAA] concerne la section IPv6, plus d'infos ici : External definitions file):
[A]
*.google.com=192.0.2.1
thesprawl.org=192.0.2.2
*.google-analytics.*=192.168.42.42
[AAAA]
*.google.com=2001:4860:4860:0:0:0:0:8888
thesprawl.org=2001:4860:4860:0:0:0:0:8844
*.wordpress.*=2001:4860:4860:0:0:0:0:8888
- Une fois terminé, tapez CTRL+X pour sauver et quitter.
Créez et éditez notre fichier de lancement.
touch /opt/scripts/start_DNS_Rogue.bash
chmod +x /opt/scripts/start_DNS_Rogue.bash
nano /opt/scripts/start_DNS_Rogue.bash
Et ajoutez le script script
#!/bin/bash
/usr/bin/screen -S dnschef -X quit
sleep 1
/usr/bin/screen -d -m -S dnschef /opt/scripts/dnschef.py --file /opt/scripts/config/dnschef.ini --interface 127.0.2.1#5353 --nameservers 80.67.169.12,195.238.2.21,80.67.169.40,195.238.2.22,1.1.1.1,185.233.100.100,89.234.141.66,89.234.186.18,85.214.20.141,1.0.0.1,8.8.8.8,8.8.4.4,9.9.9.9 --nameservers 2a0c:e300::100,2a0c:e300::101,2001:4860:4860:0:0:0:0:8888,2001:4860:4860:0:0:0:0:8844 -q
# --file /opt/scripts/config/dnschef.ini
# --logfile=/var/log/dnschef.log
- Note : si vous devez lancer deux fois l'instance de DNSChef (par exemple pour avoir un DNS pour votre LAN et un pour votre VPN), pensez à donner des noms différents aux fenêtres screen.
Éditez le planificateur de tâche (cron) de root.
ndlr : trouver comment le lancer sans root.
crontab -e
Ajoutez la commande suivante au démarrage via cron.
# DNS
@reboot ( sleep 10 ; /opt/scripts/start_DNS_Rogue.bash )
Quelques paramètres de dnschef
--interface
--interface 0.0.0.0
--interface 192.168.1.42
--interface ::
- Permet de spécifier l'adresse sur laquelle écouter. Par défaut uniquement 127.0.0.1, pour écouter sur toutes les adresses IPv4 utilisez --interface 0.0.0.0 ou pour écouter sur toutes les adresses IPv6 utilisez --interface ::
--nameservers
--nameservers 8.8.8.8
--nameservers 2001:4860:4860:0:0:0:0:8888,2001:4860:4860::8844
--nameservers 80.67.169.40,195.238.2.21,195.238.2.22,8.8.8.8,8.8.4.4
- Permet de spécifier une liste de nom de domaines. (une liste fournie ici) Par défaut dnschef utilise 8.8.8.8 (google).
Mise en place de PiHole.
- Note : vous avez intérêt à avoir déjà fixé votre IP LAN ;)
Rendez-vous dans /tmp/ et téléchargez l'installeur de PiHole.
cd /tmp
wget -O basic-install.sh https://install.pi-hole.net
Passez en admin
- sur Raspbian / Ubuntu
sudo -i
- sur Debian / Ubuntu Minimal
su
Installez PiHole.
bash /tmp/basic-install.sh
- Si vous faites une erreur, la commande suivante vous permettre de relancer l'installation ou la reconfiguration :
pihole -r
Comme serveur DNS, choisissez Custom puis indiquez 127.0.2.1:5353. Vous pouvez, mais n'êtes pas obligé, installer la WEBUI ou encore choisir ou non d'enregistrer les logs sans impacte sur votre installation finale.
Si vous avez installez l'interface graphique web (WEBUI)
- Éditez le fichier /etc/lighttpd/lighttpd.conf
nano /etc/lighttpd/lighttpd.conf
- Cherchez (CTRL+W) "port" et définissez le port HTTP que vous souhaitez utiliser. Par exemple
server.port = 88
Attention : il faudra répéter l'opération lorsqu'il y a une mise à jours de lighttpd qui peut reprendre sa valeur par défaut.
- Adaptez et ajoutez la ligne suivante afin de fixer l'adresse IP que le serveur web peut écouter (afin d'éviter certaines attaques).
server.bind = "192.168.1.42"
- Générez votre mot de passe administrateur pour l'interface web.
pihole -a -g
À ce stade, vous devez redémarrer la machine.
Finalisation
Sur votre serveur DNS, activez Pihole
ndlr : s'active seul normalement, sauf s'il y a eu un problème, pas forcément bloquant, lors de l'installation (par exemple port 80 ou 53 déjà utilisé par un autre logiciel)
pihole enable
Vous pouvez utiliser la commande suivante pour checker quel logiciel écoute sur quelle IP/port. :
netstat -ntlp | grep LISTEN
Sur une machine cliente, testez la commande suivante en spécifiant un des noms de domaines que vous avez indiquez a DNSChef. Remplacez 192.168.1.42 par l'adresse IP Lan de votre nouveau serveur DNS.
host -t A www.helloworld.com 192.168.1.42
- La commande doit vous retourner quelque chose du type :
└─ $ ▶ host -t A www.helloworld.com 192.168.1.42
Using domain server:
Name: 192.168.1.42
Address: 192.168.1.42#53
Aliases:
www.helloworld.com has address 192.168.1.42
Configurez ensuite votre routeur pour que les clients utilisent le serveur DNS que nous venons d'installer. Voici un tuto pour la BBOX2.
Farm Link
- 🇪🇺 [Tuto/HowTo] Mettre en place un serveur DNS aux noms de domaines parametrable (Rogue DNS) (article d'origine)
- ubuntu-fr - DNS - Système des noms de domaine
- Youtube - Monsieur Bidouille - Le laisser passer A38 d'Internet (DNS) - système de nom de domaines - part 1
- [Tuto/HowTo] configurer la BBOX2 (proximus) - Changer les DNS utilisés par les clients du LAN
# Post Scriptum
Posté par voxdemonix . Évalué à 1 (+0/-0). Dernière modification le 02 septembre 2018 à 17:38.
Attention : si vous utilisez ce tuto pour bloquer l'accès à des noms de domaines (par exemple googleanalytic) en renvoyant vers une IP inexistante :
Certains Fournisseurs d'accès Internet, entre autre Proximus/Belgacom, font quand même sortir du LAN des données qui sont censées ne pas être routées, provoquant ainsi une fuite de données potentiellement grave pour la vie privée.
Par exemple si votre réseau se situe sur 192.168.0.1 et que vous tentez de joindre l'ip 192.168.42.42, voici ce que cela donne
Pensez donc à vérifier, via l'outil tracert / traceroute , le chemin qui se situe entre vos utilisateurs et l'adresse IP sensée être "morte" (down).
# amélioration sécurité
Posté par voxdemonix . Évalué à 1 (+0/-0). Dernière modification le 13 septembre 2018 à 15:57.
Il y aurait moyen d'améliorer la sécurité en créant un utilisateur dédié et en lui attribuant la permission d'ouvrir le port DNS officiel (53).
# sudo su
Posté par Tonton Th (Mastodon) . Évalué à 3 (+0/-0).
sudo su
Gni ?
[^] # Re: sudo su
Posté par voxdemonix . Évalué à 0 (+0/-0).
C'est ainsi que l'on passe en root sur les ubuntu-like (pas les versions minimales) et Raspbian 😉
[^] # Re: sudo su
Posté par Anonyme . Évalué à 3 (+0/-0).
Ce qui doit faire tiquer Tonton c'est que sudo su est déprécié en faveur de sudo -i
Même la doc de Ubuntu n'évoque plus sudo su.
Sur Raspbian ou toute Debian configurée sans mot de passe root, sudo -i est aussi une meilleure pratique.
[^] # Re: sudo su
Posté par voxdemonix . Évalué à 0 (+0/-0). Dernière modification le 28 avril 2019 à 15:36.
"dépréciée, "meilleure pratique" ? why ?
[^] # Re: sudo su
Posté par Anonyme . Évalué à 4 (+0/-0).
Comme utiliser sudo à la place de gksudo kdesudo (cité sur la page que j'ai lié précédemment), la configuration des variables d'environnement peut dangereusement merder avec sudo su et tu peux te retrouver avec un /home/utilisateur/ qui se corrompt insidieusement par une (ré)écriture de fichiers avec des droits de lecture/écriture exclusifs à root.
À contrario, l'option -i de sudo a un comportement prédictible et est prévue pour cet usage spécifique.
[^] # Re: sudo su
Posté par voxdemonix . Évalué à 0 (+0/-0).
D'ac merci pour l'infos.
Envoyer un commentaire
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.