Tags

arm arpaname bin_sh blocage blosxom bsd bsdfrance cblog certification chroot cluster dg834 dhcp diffusion dns dnsmasq dom0 domU dovecot fail-over fail2ban firefox fossil freebsd ftp git guruplug install ipv6 jail kernel kimsufi lex libre linutop liste makefile mikrotik ml150 mohawk nanojail netbook netbsd nginx ntp ntp.org openbsd openntpd openrd opensmtpd openwrt orke pkgng poudriere privee proxy pxe python rc.conf rescue reverse rmll routage route rrdcgi sendmail serial sieve sjail sl2009 ssd sshd symon unbound update usb var_empty vimperator world xen yacc zfs

Powered by

blOg
maRkdown
awK
shEll

09/04/2016

[ netbsd dom0 dns dhcp ]

201604090915 netbsd dom0 dns dhcp

Dans un précédent billet, j'ai proposé une recette de domU OpenBSD à ma façon. Aujourd'hui, je passe la vitesse suprérieure.

La machine

Le réseau

$ cat /etc/ifconfig.re0
inet 31.216.24.225 netmask 255.255.255.192
inet6 2a02:27d0:0:dead:beef::225 prefixlen 80
$ cat /etc/ifconfig.bridge0
up
$ cat /etc/ifconfig.bridge1
up
$ cat /etc/ifconfig.tap0
up
inet 172.18.0.1 netmask 255.255.255.0
inet6 2a02:27d0:1337:f225::1 prefixlen 64
!brconfig bridge0 add $int
$ cat /etc/ifconfig.tap1
up
inet 172.18.1.1 netmask 255.255.255.0
!brconfig bridge1 add $int

Le stockage

Le système NetBSD 7.0 est installé simplement (/, swap et /home) sur le disque wd0. Les 2 autres disques sont sous le contrôle de LVM:

$ sudo lvm pvdisplay -s
  Device "/dev/rwd2d" has a capacity of 445.76 GiB
  Device "/dev/rwd1d" has a capacity of 425.76 GiB
$ sudo lvm vgdisplay -s
  "vg_ssd" 465.76 GiB [20.00 GiB used / 445.76 GiB free]
  "vg_sata" 465.76 GiB [40.00 GiB used / 425.76 GiB free]

L'objectif

Installer des domU de différents types le plus simplement possible: NetBSD, FreeBSD, OpenBSD, DragonflyBSD. Je n'ai pas l'intention d'avoir plus d'une dizaine de domUs par type, je peux donc préparer mon plan d'adressage:

DNS

Fervent partisant de toujours utiliser ce qui est disponible de base, un cas de conscience se pose: bind ou pas bind ? Comme seuls les domUs l'interrogent et qu'il ne répond pas sur l'interface externe, je peux l'utiliser sans risque (la mémoire ne peut pas en dire autant :)

Je ne sais pas si c'est une bonne idée mais j'ai décidé de créer une zone du même nom que l'hôte. Ici l'hôte vpro.bsdsx.fr gère la zone vpro.bsdsx.fr où il est référencé en tant que dom0 (plus quelques alias)

$ cat /etc/named.conf
options {
        directory "/etc/namedb";
        allow-recursion { localhost; localnets; };

        listen-on { 127.0.0.1; 172.18.0.1; 172.18.1.1; };
        listen-on-v6 { ::1; };

        forwarders {
                31.216.24.205;
                31.216.24.223;
        };
};

[ snip zones locales ]

zone "vpro.bsdsx.fr" {
    type master;
    file "vpro.bsdsx.fr";
};

zone "0.18.172.IN-ADDR.ARPA" {
    type master;
    file "172.18.0";
};

zone "1.18.172.IN-ADDR.ARPA" {
    type master;
    file "172.18.1";
};

zone "5.2.2.f.7.3.3.1.0.d.7.2.2.0.a.2.ip6.arpa" {
    type master;
    file "2a02_27d0_1337_f225__64";
};

$ cat /etc/namedb/vpro.bsdsx.fr
$TTL 3600
@           SOA vpro.bsdsx.fr. root.bsdsx.fr. (
                    2016031901 ; serial
                    8H         ; refresh
                    2H         ; retry
                    1W         ; expire
                    1D )       ; minimum seconds
                 NS     vpro.bsdsx.fr.
                 A      31.216.24.225
                 AAAA   2a02:27d0:0:dead:beef::225
dom0             A      172.18.0.1
dom0             AAAA   2a02:27d0:1337:f225::1
openbsd          CNAME  dom0
netbsd           CNAME  dom0
freebsd          CNAME  dom0
dflybsd          CNAME  dom0

$GENERATE 10-19 open-$   A 172.18.0.$
$GENERATE 20-29 net-$    A 172.18.0.$
$GENERATE 30-39 free-$   A 172.18.0.$
$GENERATE 40-49 dfly-$   A 172.18.0.$

$GENERATE 10-19 open-int-$   A 172.18.1.$
$GENERATE 20-29 net-int-$    A 172.18.1.$
$GENERATE 30-39 free-int-$   A 172.18.1.$
$GENERATE 40-49 dfly-int-$   A 172.18.1.$

$GENERATE 10-19 open-$   AAAA 2a02:27d0:1337:f225::$
$GENERATE 20-29 net-$    AAAA 2a02:27d0:1337:f225::$
$GENERATE 30-39 free-$   AAAA 2a02:27d0:1337:f225::$
$GENERATE 40-49 dfly-$   AAAA 2a02:27d0:1337:f225::$

$ cat /etc/namedb/172.18.0
$TTL 3600
@           IN SOA vpro.bsdsx.fr. root.bsdsx.fr. (
                    2016020402 ; serial
                    8H         ; refresh
                    2H         ; retry
                    1W         ; expire
                    1D )       ; minimum seconds
            IN NS   dom0.vpro.bsdsx.fr.
1           IN PTR  dom0.vpro.bsdsx.fr.

$GENERATE 10-19 $   IN PTR open-$.vpro.bsdsx.fr.
$GENERATE 20-29 $   IN PTR net-$.vpro.bsdsx.fr.
$GENERATE 30-39 $   IN PTR free-$.vpro.bsdsx.fr.
$GENERATE 40-49 $   IN PTR dfly-$.vpro.bsdsx.fr.

cat /etc/namedb/172.18.1 
$TTL 3600
@           IN SOA vpro.bsdsx.fr. root.bsdsx.fr. (
                    2016020402 ; serial
                    8H         ; refresh
                    2H         ; retry
                    1W         ; expire
                    1D )       ; minimum seconds
            IN NS   dom0.vpro.bsdsx.fr.
1           IN PTR  dom0.vpro.bsdsx.fr.

$GENERATE 10-19 $   IN PTR open-int-$.vpro.bsdsx.fr.
$GENERATE 20-29 $   IN PTR net-int-$.vpro.bsdsx.fr.
$GENERATE 30-39 $   IN PTR free-int-$.vpro.bsdsx.fr.
$GENERATE 40-49 $   IN PTR dfly-int-$.vpro.bsdsx.fr.

$ cat /etc/namedb/2a02_27d0_1337_f225__64
$TTL 3600
@           IN SOA vpro.bsdsx.fr. root.bsdsx.fr. (
                    2016031902 ; serial
                    8H         ; refresh
                    2H         ; retry
                    1W         ; expire
                    1D )       ; minimum seconds
            IN NS   dom0.vpro.bsdsx.fr.
1           IN PTR  dom0.vpro.bsdsx.fr.

$GENERATE 0-9 $.1.0.0.0.0.0.0.0.0.0.0.0.0.0.0   IN PTR open-1$.vpro.bsdsx.fr.
$GENERATE 0-9 $.2.0.0.0.0.0.0.0.0.0.0.0.0.0.0   IN PTR net-2$.vpro.bsdsx.fr.
$GENERATE 0-9 $.3.0.0.0.0.0.0.0.0.0.0.0.0.0.0   IN PTR free-3$.vpro.bsdsx.fr.
$GENERATE 0-9 $.4.0.0.0.0.0.0.0.0.0.0.0.0.0.0   IN PTR dfly-4$.vpro.bsdsx.fr.

Avec un plan d'adressage fixe et simple, je peux user (et abuser :) de GENERATE. Attention avec les reverse ipv6, il y a une petite astuce: le GENERATE ne s'occupe que des unités, je fixe les dizaines en dur.

DHCP

Il sera surtout utilisé pour les démarrages à travers le réseau (boot pxe). Extraits du /etc/dhcpd.conf:

default-lease-time 604800;
max-lease-time 604800;

class "bridge0_open" {
    match if (substring(hardware, 1, 5) = 00:16:3e:00:10);
    filename "auto_install";
    next-server 172.18.0.1;
}
class "bridge1_open" {
    match if (substring(hardware, 1, 5) = 00:16:3e:01:10);
}

class "bridge0_net" {
    match if (substring(hardware, 1, 5) = 00:16:3e:00:20);
}
class "bridge1_net" {
    match if (substring(hardware, 1, 5) = 00:16:3e:01:20);
}
...

subnet 172.18.0.0 netmask 255.255.255.0 {
    option routers 172.18.0.1;
    option domain-name-servers 172.18.0.1;
    option subnet-mask 255.255.255.0;
    option domain-name "vpro.bsdsx.fr";

    pool {
        range 172.18.0.10 172.18.0.19;
        allow members of "bridge0_open";
    }

    host open-10 { hardware ethernet 00:16:3e:00:10:00; }
    ...
    host open-19 { hardware ethernet 00:16:3e:00:10:09; }

    pool {
        range 172.18.0.20 172.18.0.29;
        allow members of "bridge0_net";
    }

    host net-20 { hardware ethernet 00:16:3e:00:20:00; }
    ...
    host net-29 { hardware ethernet 00:16:3e:00:20:09; }
    
    ...
}
subnet 172.18.1.0 netmask 255.255.255.0 {
...
}

Pour une MAC 00:16:3e:AA:BB:CC:

Avec ce découpage, je peux facilement définir des classes correspondant au couple type d'OS/interface afin de préciser certaines options et de les placer dans les bons pools.


Lien vers ce billet

10/05/2014

[ dns unbound ]

201405100800 dns unbound

unbound et FreeBSD 10

Entre autres nouveautés, FreeBSD 10 vient avec unbound. Voyons comment je l'ai configuré sur une machine de type "serveur dédié" où je ne souhaite pas utiliser les serveurs DNS de mon hébergeur, ni des serveurs DNS "ouvert", et encore moins les frères Bogdanov du DNS (8.8.8.8 et 8.8.4.4). Je n'ai donc pas de fichier /etc/resolv.conf.

Si local_unbound n'est pas activé, c'est bien parce qu'il n'est pas configuré:

root@itanium:~ # /etc/rc.d/local_unbound setup
Cannot 'setup' local_unbound. Set local_unbound_enable to YES in /etc/rc.conf or use 'onesetup' instead of 'setup'.

root@itanium:~ # /etc/rc.d/local_unbound onesetup
Performing initial setup.
Extracting forwarders from /etc/resolv.conf.
/usr/sbin/local-unbound-setup: cannot open /etc/resolv.conf: No such file or directory
No forwarders found in resolv.conf, unbound will recurse.
/var/unbound/unbound.conf created
/etc/resolvconf.conf created
/usr/sbin/local-unbound-setup: cannot open /etc/resolv.conf: No such file or directory

root@itanium:~ # cat /etc/resolvconf.conf 
# Generated by local-unbound-setup
resolv_conf="/dev/null" # prevent updating /etc/resolv.conf
unbound_conf="/var/unbound/forward.conf"
unbound_pid="/var/run/local_unbound.pid"
unbound_service="local_unbound"
unbound_restart="service local_unbound reload"

root@itanium:~ # cat /var/unbound/unbound.conf 
# Generated by local-unbound-setup
server:
        username: unbound
        directory: /var/unbound
        chroot: /var/unbound
        pidfile: /var/run/local_unbound.pid
        auto-trust-anchor-file: /var/unbound/root.key

Je peux à présent renseigner /etc/resolv.conf:

root@itanium:~ # cat /etc/resolv.conf 
domain bsdsx.fr
search bsdsx.fr
nameserver 127.0.0.1

Test de la configuration:

root@itanium:~ # /etc/rc.d/local_unbound oneconfigtest
/var/unbound/root.key: No such file or directory
[1399710593] unbound-checkconf[21747:0] fatal error: auto-trust-anchor-file: "/var/unbound/root.key" does not exist in chrootdir /var/unbound
root@itanium:~ # /etc/rc.d/local_unbound oneanchor
root@itanium:~ # /etc/rc.d/local_unbound oneconfigtest
unbound-checkconf: no errors in /var/unbound/unbound.conf

Premier essai:

root@itanium:~ # /etc/rc.d/local_unbound onestart
Starting local_unbound.
root@itanium:~ # netstat -an -f inet | grep '\.53 '
tcp4       0      0 127.0.0.1.53           *.*                    LISTEN
udp4       0      0 127.0.0.1.53           *.*                    
root@itanium:~ # netstat -an -f inet6 | grep '\.53 '
tcp6       0      0 ::1.53                 *.*                    LISTEN
udp6       0      0 ::1.53                 *.*                    
root@itanium:~ # drill unbound.net
;; ->>HEADER<<- opcode: QUERY, rcode: NOERROR, id: 29036
;; flags: qr rd ra ; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 0 
;; QUESTION SECTION:
;; unbound.net. IN      A

;; ANSWER SECTION:
unbound.net.    7074    IN      A       213.154.224.1

;; AUTHORITY SECTION:
unbound.net.    7074    IN      NS      ns.secret-wg.org.
unbound.net.    7074    IN      NS      open.nlnetlabs.nl.
unbound.net.    7074    IN      NS      mcvax.nlnet.nl.
unbound.net.    7074    IN      NS      nom-ns1.nominet.org.uk.

;; ADDITIONAL SECTION:

;; Query time: 0 msec
;; SERVER: 127.0.0.1
;; WHEN: Sat May 10 08:37:33 2014
;; MSG SIZE  rcvd: 168

Le démon n'écoute que sur l'interface locale et répond bien. Je peux l'activer:

root@itanium:~ # sysrc local_unbound_enable=YES

unbound vient avec unbound-control qui permet d'interagir avec le démon. Je le configure:

root@itanium:~ # /usr/sbin/unbound-control-setup
setup in directory /etc/unbound
generating unbound_server.key
Generating RSA private key, 1536 bit long modulus
........................++++
.....++++
e is 65537 (0x10001)
generating unbound_control.key
Generating RSA private key, 1536 bit long modulus
........++++
...........++++
e is 65537 (0x10001)
create unbound_server.pem (self signed certificate)
create unbound_control.pem (signed client certificate)
Signature ok
subject=/CN=unbound-control
Getting CA Private Key
Setup success. Certificates created. Enable in unbound.conf file to use
root@itanium:~ # ls /var/unbound/
root.key                unbound.conf            unbound_control.key     unbound_control.pem     unbound_server.key      unbound_server.pem

Et j'active son utilisation:

root@itanium:~ # cat >> /var/unbound/unbound.conf
remote-control:
        control-enable: yes
^D
root@itanium:~ # /etc/rc.d/local_unbound configtest
unbound-checkconf: no errors in /var/unbound/unbound.conf
root@itanium:~ # /etc/rc.d/local_unbound restart
Stopping local_unbound.
Waiting for PIDS: 21907.
Starting local_unbound.
root@itanium:~ # /usr/sbin/unbound-control status
version: 1.4.20
verbosity: 1
threads: 1
modules: 2 [ validator iterator ]
uptime: 183 seconds
unbound (pid 22074) is running...

C'est bien gentil, mais je n'utilise pas le compte root:

dsx@itanium:~ % /usr/sbin/unbound-control status
error: Error setting up SSL_CTX client key and cert
5379689436:error:0200100D:system library:fopen:Permission denied:/usr/src/secure/lib/libcrypto/../../../crypto/openssl/crypto/bio/bss_file.c:398:fopen('/var/unbound/unbound_control.pem','r')
5379689436:error:20074002:BIO routines:FILE_CTRL:system lib:/usr/src/secure/lib/libcrypto/../../../crypto/openssl/crypto/bio/bss_file.c:400:
5379689436:error:140AD002:SSL routines:SSL_CTX_use_certificate_file:system lib:/usr/src/secure/lib/libssl/../../../crypto/openssl/ssl/ssl_rsa.c:470:
dsx@itanium:~ % ls -l /var/unbound/
total 24
-rw-r--r--  1 unbound  unbound   759 May 10 08:35 root.key
-rw-r--r--  1 root     unbound   265 May 10 08:55 unbound.conf
-rw-r-----  1 root     unbound  1277 May 10 08:47 unbound_control.key
-rw-r-----  1 root     unbound   802 May 10 08:47 unbound_control.pem
-rw-r-----  1 root     unbound  1281 May 10 08:47 unbound_server.key
-rw-r-----  1 root     unbound   790 May 10 08:47 unbound_server.pem

Mon utilisateur fait partie du group wheel, je peux l'ajouter au groupe unbound ou adapter les permissions en conséquence:

root@itanium:~ # chown unbound:wheel /var/unbound/unbound_control.*
dsx@itanium:~ % /usr/sbin/unbound-control status
error: Error setting up SSL_CTX verify, server cert
5379689436:error:0200100D:system library:fopen:Permission denied:/usr/src/secure/lib/libcrypto/../../../crypto/openssl/crypto/bio/bss_file.c:169:fopen('/var/unbound/unbound_server.pem','r')
5379689436:error:2006D002:BIO routines:BIO_new_file:system lib:/usr/src/secure/lib/libcrypto/../../../crypto/openssl/crypto/bio/bss_file.c:174:
5379689436:error:0B084002:x509 certificate routines:X509_load_cert_crl_file:system lib:/usr/src/secure/lib/libcrypto/../../../crypto/openssl/crypto/x509/by_file.c:274:
root@itanium:~ # chown unbound:wheel /var/unbound/unbound_server.*
dsx@itanium:~ % /usr/sbin/unbound-control status
version: 1.4.20
verbosity: 1
threads: 1
modules: 2 [ validator iterator ]
uptime: 4 seconds
unbound (pid 22209) is running...

Après avoir lu la page de manuel, il apparait qu'utiliser un fichier root-hints est une bonne pratique. Il faut pour cela définir l'option éponyme:

[ snip ]
root-hints: root-hints

Je récupère le fichier depuis ftp://FTP.INTERNIC.NET/domain/named.cache:

root@itanium:~ # fetch -o /var/unbound/root-hints ftp://FTP.INTERNIC.NET/domain/named.cache

Pour la mise à jour, on peut faire le goret:

root# fetch url_ki_va_bien && unbound-control reload

ou essayer de faire les choses un peu plus "proprement":

#!/bin/sh

RH="root-hints"
FILENAME=$(unbound-control get_option $RH)
FILEPATH=$(unbound-control get_option directory)

if [ $? -ne 0 -o -z "$FILENAME" -o -z "$FILEPATH" ]; then
        echo "Can't retrieve unbound $RH or directory"
        exit 1
fi

TMPFILE=$(mktemp -q /tmp/$RH.XXXXXX)
if [ $? -ne 0 ]; then
        echo "Can't create temp file"
        exit 1
fi

URL=ftp://FTP.INTERNIC.NET/domain/named.cache
fetch --quiet --output=$TMPFILE $URL
if [ $? -ne 0 ]; then
        echo "Can't fetch '$URL'"
        exit 1
fi

MINIMAL_ROOT_SERVERS=13
if [ $(grep --count '^.\.ROOT\-SERVERS\.NET' $TMPFILE) -lt $MINIMAL_ROOT_SERVERS ]; then
        echo "Less than $MINIMAL_ROOT_SERVERS found"
        exit 1
fi

if [ -f $FILEPATH/$FILENAME ]; then
        cmp -s $FILEPATH/$FILENAME $TMPFILE
        if [ $? -ne 1 ]; then
                rm $TMPFILE
                exit
        fi
fi
install -g unbound -o root -m 440 $TMPFILE $FILEPATH/$FILENAME && unbound-control reload

Inutile de planifier l'exécution de ce script toutes les minutes, les serveurs DNS racine n'ayant pas vocation à évoluer tous les 4 matins (une fois par mois me semble largement suffisant).

Si d'autres machines doivent utiliser ce service, il faut écouter sur autre chose que l'interface locale:

dsx@itanium:~ % egrep '(interface|access-control)' /var/unbound/unbound.conf
    interface: 127.0.0.1
    interface: 31.216.24.123
    access-control: 127.0.0.0/8 allow
    access-control: 31.216.24.205/32 allow

Et un redémarrage plus tard:

dsx@itanium:~ % netstat -an -f inet | grep \.53
tcp4       0      0 127.0.0.1.8953         *.*                    LISTEN
tcp4       0      0 31.216.24.123.53       *.*                    LISTEN
tcp4       0      0 127.0.0.1.53           *.*                    LISTEN
udp4       0      0 31.216.24.123.53       *.*                    
udp4       0      0 127.0.0.1.53           *.*                    

Depuis 31.216.24.205:

dsx@blade>drill unbound.net @31.216.24.123
;; ->>HEADER<<- opcode: QUERY, rcode: NOERROR, id: 50348
;; flags: qr rd ra ; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 0 
;; QUESTION SECTION:
;; unbound.net. IN      A

;; ANSWER SECTION:
unbound.net.    7200    IN      A       213.154.224.1

;; AUTHORITY SECTION:
unbound.net.    7200    IN      NS      ns.secret-wg.org.
unbound.net.    7200    IN      NS      mcvax.nlnet.nl.
unbound.net.    7200    IN      NS      nom-ns1.nominet.org.uk.
unbound.net.    7200    IN      NS      open.nlnetlabs.nl.

;; ADDITIONAL SECTION:

;; Query time: 406 msec
;; SERVER: 31.216.24.123
;; WHEN: Sun May 18 11:34:33 2014
;; MSG SIZE  rcvd: 168

Depuis une autre machine:

dsx@linutop>dig unbound.net @31.216.24.123

; <<>> DiG 9.4.2-P2 <<>> unbound.net @31.216.24.123
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 33127
;; flags: qr rd; QUERY: 0, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; Query time: 51 msec
;; SERVER: 31.216.24.123#53(31.216.24.123)
;; WHEN: Sun May 18 11:38:56 2014
;; MSG SIZE  rcvd: 12

Reste à définir l'accès aux serveurs de nom de mon domaine:

root@itanium:~ # tail -n 5 /var/unbound/unbound.conf 
stub-zone:
        name: bsdsx.fr
        stub-host: ns.bsdsx.fr
        stub-host: lucifer.example.com
        stub-host: ns6.bsdsx.fr

Un unbound-control reload plus tard, c'est prêt !


Lien vers ce billet

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