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

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