La livebox et son loopback … « Go fuck ! »

Illustration issue de Degroupnews.com

Illustration issue de Degroupnews.com

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 !

dnsmasqhttp://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 ?

Vus : 2065
Publié par Sheldon.fr : 17