La livebox et son loopback … « Go fuck ! »
Je suis très content de mon FAI (Sosh), qui m’offre de très bons débits (78/16) pour un prix modique et en « paysannie » !
Mais ils ont une livebox Play comme modem/routeur
Elle est lente, moche, pleines de bugs, manque un tas d’options, et cale très mal les meubles.
donc elle est bonne à rien !
Mon plus gros reproche, est l’absence d’option pour gérer le loopback !
Comme vous le savez, je m’auto-héberge, ce qui veut dire que de chez moi, je suis susceptible d’accéder à des ressources via un nom de domaine qui pointe en local.
la plus part des box opérateurs gèrent ça très bien, sauf bien sur, la livebox !
de l’extérieur sheldon.fr pointe sur mon serveur, de chez moi ça redirige vers … l’interface d’administration de la livebox :/
Quelles alternatives s’offrent à moi ?
- la plus évidente : changer de modem, et prendre un vrai truc de bonhomme ! -> malheureusement il existe encore très peu de modem compatible VDSL2 (je ne parle même pas des routeurs), et encore moins qui sont compatible avec le protocole utilisé par l’agrume (VPC 8.35, G993_2)
- changer d’opérateur ? -> il n’y a que Orange qui me propose du VDSL
- modifier le fichier /etc/hosts sur chaque machine -> trop galère: j’ai trop de VMs, PC et pas pratique sur les smartphones & cie
- bidouiller les nom DNS dans l’interface de la livebox -> solution simple, mais incompatible quand on utilise plusieurs domaines et sous domaines sur une même machine (ce qui est mon cas)
- changer les DNS ? -> trop simple ça suffit pas
- Obiwan envoi direct ses requêtes à Chuck Noris
Il en reste une dernière, monter son propre DNS local avec les usines habituelles telles que Bind, Bind9 …
ou alors maître en place Dnsmasq !
http://www.thekelleys.org.uk/dnsmasq/doc.html
Dnsmasq, c’est quoi ?
c’est un petit outil tout mignon, tout léger, qui fait des tas de trucs et qui est très simple à administrer, pas mal non ?
On peut en faire :
- un serveur DNS local
- un cache DNS
- un serveur DHCP
- un relai DHCP
- il supporte le DHCPv4, DHCPv6, le BOOTP et le PXE
- …
On essai ?
J’ai décidé de monter un container pour gérer ce service, et bien évidemment j’utilise encore et toujours … OpenVZ (on va pas se refaire hein !)
mais une fois n’est pas coutume, il y a quelques modifs à faire sur le CT à savoir :
vzctl set CTID --capability setuid:on --save vzctl set CTID --capability net_admin:on --save vzctl set CTID --capability net_raw:on --save
Pour le reste des caractéristiques, j’ai mis : 1 core, 256 Mo ram, et 4 Go de disque
et je suis large, une fois ma VM configurée et Dnsmasq installé, elle consomme 9 Mo ram, et 8 taches (ça doit être ma plus petite VM ^^) !
l’installation n’est pas trop compliquée :
apt-get install dnsmasq
la partie configuration se situe dans /etc/dnsmasq.conf
voici un exemple de ma config et ses commentaires.
# utilisation du nom de domaine complet pour les requetes DNS domain-needed #simule les requetes reverses en local bogus-priv #interface d'écoute interface=eth0 #mon domaine domain=sheldon.fr #la taille du cache en nombres de requetes cache-size=1000 # Cette directive permet d'ajouter le domaine défini ci-dessous aux noms simples figurant dans /etc/hosts expand-hosts #gestion des logs, attention c'est verbeux ! log-facility=/var/log/dnsmasq.log log-queries # plage dynamique de 192.168.0.110 à 192.168.0.149 avec un bail de 24h dhcp-range=192.168.0.110,192.168.0.149,255.255.255.0,24h #les options se déclare avec type,valeur - ici la valeur 3 est la passerelle de ma livebox dhcp-option=3,192.168.0.1 # adresse IP fixe pour la machine FF:FF:FF:FF:FF:FF #dhcp-host=FF:FF:FF:FF:FF:FF,test,192.168.0.15 # Désactiver cette directive uniquement si votre serveur est le serveur DHCP officiel du réseau dhcp-authoritative #déclaration pour mon serveur xmpp address=/xmpp.sheldon.fr/192.168.0.241 srv-host=_xmpp-client._tcp.sheldon.fr,192.168.0.241,5222 srv-host=_xmpp-server._tcp.sheldon.fr,192.168.0.241,5269 txt-record=_xmppconnect.sheldon.fr,"_xmpp-client-xbosh=http://sheldon.fr:5280/http-bind"
Le fichier resolv.conf
#mon domaine domain sheldon.fr search sheldon.fr #la déclaration DNS #en premier il s’interroge lui même afin de vérifier si il a la requête en cache nameserver 127.0.0.1 #si il ne la connaît pas, il interroge un autre DNS nameserver 208.67.222.222
La déclaration des machines en local, dans /etc/hosts :
mon fichier avec quelques exemples :
fe00::0 ip6-localnet 00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 192.168.0.220 zimbra zimbra.sheldon.fr 192.168.0.239 munin munin.sheldon.fr 192.168.0.241 xmpp xmpp.sheldon.fr #... 127.0.0.1 localhost 192.168.0.10 ovz-dns.sheldon.fr ovz-dns ::1 localhost ip6-localhost ip6-loopback
n’oubliez pas un /etc/init.d/dnsmasq restart après les modifications !
Dnsmasq est très pratique, il permet également la déclaration pour le protocole XMPP
Autre limitation de la livebox (décidément …), je ne peux pas modifier les DNS transmis par son propre serveur DHCP, j’ai donc été obligé de le désactiver (mince alors) pour utiliser celui de dnsmasq, afin qu’il renseigne sa propre ip en tant que DNS au client DHCP.
La partie cache, fonctionne également très bien, exemple :
Première requête, elle n’est pas dans le cache, elle est donc transmise vers mon DNS qui fait autorité (temps : 26ms)
dig linux.org ; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> linux.org ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37505 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;linux.org. IN A ;; ANSWER SECTION: linux.org. 3104 IN A 107.170.40.56 ;; Query time: 26 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Thu Oct 2 11:34:54 2014 ;; MSG SIZE rcvd: 43
à la seconde requête, elle est cette fois dans le cache, le traitement est instantané :
dig linux.org ; <<>> DiG 9.8.4-rpz2+rl005.12-P1 <<>> linux.org ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24005 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;linux.org. IN A ;; ANSWER SECTION: linux.org. 3103 IN A 107.170.40.56 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Thu Oct 2 11:34:55 2014 ;; MSG SIZE rcvd: 43
Vous souhaitez vérifier le bon fonctionnement ?
allons faire un tour dans les logs :
Oct 2 11:34:54 dnsmasq[3027]: query[A] linux.org from 127.0.0.1 Oct 2 11:34:54 dnsmasq[3027]: forwarded linux.org to 208.67.222.222 Oct 2 11:34:54 dnsmasq[3027]: reply linux.org is 107.170.40.56 Oct 2 11:34:55 dnsmasq[3027]: query[A] linux.org from 127.0.0.1 Oct 2 11:34:55 dnsmasq[3027]: cached linux.org is 107.170.40.56 Oct 2 11:40:18 dnsmasq[3027]: query[A] linux.org from 127.0.0.1 Oct 2 11:40:18 dnsmasq[3027]: cached linux.org is 107.170.40.56
On voit donc la première requête est adressé à 208.67.222.222, qui la résous, puis la mets en cache, lors du second appel, c’est le cache de Dnsmasq qui répond.
Autre exemple, lorsque je veux utiliser ma webmail depuis chez moi, avant je tombais sur l’interface de la livebox, maintenant dnsmasq voit l’enregistrement présent dans /etc/hots et corrige ma requête DNS :
Oct 2 11:59:23 dnsmasq[3027]: query[A] zimbra.sheldon.fr from 192.168.0.211 Oct 2 11:59:23 dnsmasq[3027]: /etc/hosts zimbra.sheldon.fr is 192.168.0.220
Conclusion :
c’est simple à mettre en place (à peine 5/10 min), facile à maintenir, très souple (bon faut chercher un peu dans les options) et libre !
que demander de plus ?