Tags

bin_sh blosxom bsdfrance cluster dg834 dhcp dns fail-over fail2ban freebsd ftp install ipv6 jail kernel kimsufi libre linutop makefile nginx ntp ntp.org openntpd openwrt python rmll rrdcgi sl2009 ssd symon update usb var_empty world

Powered by

blOg
maRkdown
awK
shEll

29/07/2009

[ openwrt cluster dhcp dns ntp makefile ]

200907292215 openwrt cluster dhcp dns ntp makefile

Openwrt et haute dispo

Le nombre d'openwrt dans mon bureau ne cesse d'augmenter (et les promos sur http://shop.fon.com n'arrange rien :) je me suis demandé comment mettre en oeuvre un peu de haute-dispo (histoire de faire hype).

Principaux services concernés:

J'ai pour ce faire un Netgear DG834, une Fonera et une Fonera+, tous sous Kamikaze (8.09 et 8.09.1).

Le dhcp

Ayant désactivé le dhcp de ma box, c'est donc une de mes fonera qui a pris le relai. A force de google et de wiki openwrt, je suis arrivé à la configuration suivante:

[ extrait /etc/config/dhcp ]
config dhcp lan
    option interface        lan
    option start    100
    option limit    150
    option leasetime        60h
    list dhcp_option '3,192.168.0.254'   # gateway
    list dhcp_option '6,192.168.0.251,192.168.0.230,192.168.0.250' # dns
    list dhcp_option '42,ntp.localdomain.tld'  # ntp-server
    option force 1 # pas de test si un autre serveur dhcp est sur le reseau

J'ai recopié cette config sur les deux autres openwrt. J'ai donc 3 serveurs dhcp et au niveau client, c'est le serveur qui répond le plus vite qui gagne.

ntp

Un round-robin dns fait l'affaire. Chaque openwrt a un alias "ntp".

dns

Le sujet de ce billet. Afin que mes 3 dnsmasq me répondent tous la même chose, il me faut synchroniser 2 fichiers: /etc/config/luci_ethers et /etc/config/luci_hosts. /etc/config/luci_ethers pour faire du dhcp à baux permanents (une adresse mac aura toujours la même adresse ip) et /etc/config/luci_host qui s'occupe de la conversion ip / host.

dnsmasq n'a pas de notion maitre/esclave et je ne vais pas installer rsync pour 2 fichiers. De plus, l'ordre d'arrêt/démarrage des 3 services (luci_ethers, luci_host, dnsmasq) a son importance. Un petit script perl, un Makefile et le tour est joué:

dsx> vim dns.pl (ajout d'une adresse {mac, ipv4, ipv6} ou un alias)
dsx> make
./dns.pl luci_hosts > luci_hosts
./dns.pl luci_ethers > luci_ethers
dsx> make update
scp -q luci_hosts luci_ethers openwrt1:/etc/config/
scp -q luci_hosts luci_ethers openwrt2:/etc/config/
scp -q luci_hosts luci_ethers openwrt3:/etc/config/
dsx> make restart
ssh openwrt1 ' /etc/init.d/dnsmasq stop; /etc/init.d/luci_hosts stop; /etc/init.d/luci_ethers stop; /etc/init.d/luci_ethers start; /etc/init.d/luci_hosts start; /etc/init.d/dnsmasq start; '
Terminated
ssh openwrt2 ' /etc/init.d/dnsmasq stop; /etc/init.d/luci_hosts stop; /etc/init.d/luci_ethers stop; /etc/init.d/luci_ethers start; /etc/init.d/luci_hosts start; /etc/init.d/dnsmasq start; '
Terminated
ssh openwrt3 ' /etc/init.d/dnsmasq stop; /etc/init.d/luci_hosts stop; /etc/init.d/luci_ethers stop; /etc/init.d/luci_ethers start; /etc/init.d/luci_hosts start; /etc/init.d/dnsmasq start; '
Terminated

Le tout est disponible ici. Toute remarque est la bienvenue :)


Lien vers ce billet