Archives de la catégorie ‘Architecture’

1. Pourquoi mettre en place un cluster failover DHCP ?

Nous avons vu dans l’article consacré à l’implémentation d’un serveur DHCP que cet élément d’infrastructure fournit la configuration réseau des postes de travail (et serveurs si vous le souhaitez). AInsi, lorsqu’une station de travail démarre ou renouvelle son bail, elle s’adresse au serveur DHCP qui se charge de lui fournir sa configuration et son bail.

Que se passe-t-il si le serveur est down ? les stations de travail déjà configurée ne modifieront pas leur configuration. Par contre, les nouvelles machines se retrouveront avec une adresse IP en 169.1.1.1 et ne pourront pas se connecter au réseau.

2. Préparation des serveurs DHCP

Nous installerons 2 serveurs DHCP identiques (cf DHCP – Dynamic Host Configuration Protocol).

Les deux serveurs DHCP1 et DHCP2 doivent être synchronisées (cf NTP : Serveur de temps)

Rappel :

Pour ce faire, vous devez tout d’abord installer le service NTPD sur chacun des  serveurs à synchroniser, puis les configurer comme suit :

Dans le fichier /etc/ntp.conf, ajoutez :
server adresse IP de votre serveur de temps
puis redémarrez votre service NTPD.

A ce stade, vous disposez de deux serveurs DHCP, synchronisés sur la même horloge et qui fournissent tous deux la même plage d’IP.

Si une station de travail se connecte à cet instant, elle prendra sa configuration auprès du serveur DHCP qui répondra le plus rapidement. Nous verrons ensuite le mode de fonctionnement en cas de fourniture d’une adresse IP déjà occupée.

3. Configuration du cluster failover

DHCP1 et DHCP ont le fichier de configuration /etc/dhcp3/dhcpd.conf suivant :

On suppose que DHCP1 a l’adresse IP 192.168.1.21 et DHCP2 à l’adresse IP 192.168.1.22

Fichier de configuration de base :

option domain-name "mondomaine.priv";
option domain-name-servers 192.168.0.10, 194.168.0.11;
option routers 192.168.0.1;
default-lease-time 3600;
max-lease-time 3600;

authoritative; 

subnet 192.168.0.0 netmask 255.255.255.0 {
 range 192.168.0.200 192.168.0.254;
}

Configuration de DHCP1 :

option domain-name "mondomaine.priv";
 option domain-name-servers 192.168.0.10, 194.168.0.11;
 option routers 192.168.0.1;
 default-lease-time 3600;
 max-lease-time 3600;
 authoritative;
 
failover peer "dhcp-failover" {
 primary;
 address 192.168.0.21;
 port 647;
 peer address 192.168.0.22;
 peer port 847;
 max-response-delay 60;
 max-unacked-updates 10;
 load balance max seconds 3;
 mclt 3600;
 split 128;
 }
subnet 192.168.0.0 netmask 255.255.255.0 {
 range 192.168.0.200 192.168.0.254;
 }

Configuration de DHCP2 :

option domain-name "mondomaine.priv";
option domain-name-servers 192.168.0.10, 194.168.0.11;
option routers 192.168.0.1;
default-lease-time 3600;
max-lease-time 3600;
authoritative;
 
failover peer "dhcp-failover" {
 secondary;
 address 192.168.0.22;
 port 847;
 peer address 192.168.0.21;
 peer port 647;
 max-response-delay 60;
 max-unacked-updates 10;
 load balance max seconds 3;
 }
subnet 192.168.0.0 netmask 255.255.255.0 {
 range 192.168.0.200 192.168.0.254;
 }

puis :

DHCP1 # /etc/init.d/dhcp3server restart   
DHCP2 # /etc/init.d/dhcp3server restart 

Différence entre DHCP1 et DHCP2 : pour DHCP1, on indique en premier l’adresse IP du primaire et ensuite l’adresse IP du pair (secondaire).
On ajoute (uniquement pour le primaire) les paramètres mclt et split.
Pour DHCP2, on indique l’adresse IP du secondaire puis l’adresse IP du pair (primaire).

3. Mode de fonctionnement

En temps normal, le serveur DHCP1 est le seul serveur DHCP à répondre. Il détient l’autorité pour fournir les configurations réseaux et la « base de données » des adresses IP attribuées.

Le serveur DHCP1 s’arrête alors le serveur DHCP2 devient autoritée. Il détient l’autorité pour fournir les configurations réseaux et la « base de données » des adresses IP attribuées. Attention : cette « base de données » est alors VIDE.

Lorsqu’une station de travail se présente et demande sa configuration IP, le serveur lui attribue une adresse IP « disponible ». SI cette dernière est en cours d’utilisation, la station de travail renvoi un message DHCPDECLINE. Le serveur secondaire enregistre que l’adresse IP est utilisée et attribue une autre adresse IP « disponible ».

1. Pourquoi mettre en oeuvre un serveur DHCP ?

DHCP signifie Dynamic Host Configuration Protocol.

Il s’agit d’un protocole qui permet à un ordinateur qui se connecte sur un réseau IP d’obtenir dynamiquement et automatiquement sa configuration IP. Le but principal étant la simplification de l’administration d’un réseau.

Le serveur DHCP fournit des adresses IP au format IPv4 (ex : 192.168.0.1/24) mais peut tout à fait fournir au format IPv6. Tout est question de configuration et de taille de parc informatique.

Comme tout protocole, DHCP est régit par des RFCs qui sont :

– RFC951 : Bootp
– RFC1497 : Options vendor extensions
– RFC1541 : Définition du protocole Dhcp
– RFC1542 : Interaction entre Bootp et Dhcp
– RFC2131 : Complément à la Rfc 1541
– RFC2132 : Complément aux options vendor extensions

2. Elément de l’infrastructure de votre système d’information

Vous l’aurez compris, le serveur DHCP est un élément fondamental de votre infrastructure. Néanmoins, j’émets une réserve sur la suite du document.

En effet, ce tutoriel vous guidera sur l’installation, la configuration et le maintien en conditions opérationnelles d’un serveur DHCP sous Linux.

Or, si dans votre infrastructure vous disposez également de services à publier, comme Exchange par exemple, je vous conseille d’utiliser le serveur DHCP intégré à l’Active Directory. Ce dernier offre plusieurs interfaces entre votre AD, votre serveur de messagerie et vos stations de travail.

3. Mode de fonctionnement

Le protocole DHCP repose sur 8 types de requêtes :

DHCPDISCOVER : permet aux clients de localiser les serveurs DHCP (ils obtiennent l’adresse IP du serveur DHCP qui réponds le plus rapidement)
DHCPOFFER : réponse du serveur qui fournit les premiers paramètres
DHCPREQUEST : requête du client pour prolonger son bail
DHCPDECLINE : le client annonce au serveur que l’adresse IP fournie par le serveur est déjà utilisée
DHCPACK : réponse du serveur au client avec les paramètres IP
DHCPNACK : réponse du serveur pour annoncer au client que le bail est échu ou que le serveur acquite le message DHCPDECLINE : message envoyé par le client au serveur et l’informant que l’adresse IP fournie est déjà utilisée
DHCPRELEASE : le client relache son adresse IP
DHCPINFORM : message du client qui demande les paramètres locaux. Le client a déjà son adresse IP

La première requête émise par le client est un message DHCPDISCOVER. Le serveur répond par un DHCPOFFER, en particulier pour soumettre une adresse IP au client. Le client établit sa configuration, demande éventuellement d’autres paramètres, puis fait un DHCPREQUEST pour valider son adresse IP. Le serveur répond simplement par un DHCPACK avec l’adresse IP pour confirmation de l’attribution. Normalement, c’est suffisant pour qu’un client obtienne une configuration réseau efficace, mais cela peut être plus ou moins long selon que le client accepte ou non l’adresse IP ou demande des infos complémentaires…

4. Installation du serveur DHCP

Très simple à installer, ouvrez un shell en tant que ROOT, puis :

# apt-get install dhcp3-server

Par défaut, votre nouveau serveur DHCP écoutera sur la première interface réseau (c à d eth0). Pour corriger cette configuration :

# dpkg-reconfigure dhcp3-server

ou

Modifiez le fichier de configuration /etc/default/dhcp3-server

5. Configuration du serveur

Le fichier de configuration du serveur dhcp est « /etc/dhcp3/dhcpd.conf »

Je conseille pour commencer de faire une copie de sauvegarde de ce fichier. Ensuite, vous pouvez effacer ou commenter les lignes existantes et ajouter les lignes suivantes :

option domain-name "mondomaine.priv";
option domain-name-servers 192.168.0.10, 194.168.0.11;
option routers 192.168.0.1;
default-lease-time 3600;
max-lease-time 3600;
authoritative;

subnet 192.168.0.0 netmask 255.255.255.0 {
     range 192.168.0.200 192.168.0.254;
 }

La première ligne permet de fournir aux clients le nom du domaine.

La ligne suivante donne aux clients le ou les serveurs DNS.

La ligne suivante donne l’adresse de la passerelle par défaut

La ligne suivante donne le délai du bail en secondes. Il est préférable d’augmenter la valeur par défaut pour limiter le trafic sur le réseau.

Le max-lease-time est le temps maximum de votre bail. Si vous configurez un default-lease-time à 10000 secondes et un max-lease-time à 4000 secondes, vos clients auront un bail maximum de 4000 secondes.Les 4 dernières lignes permettent d’indiquer la plage d’adresses gérée par le serveur dhcp :

La ligne «  authoritative  » permet d’indiquer que le serveur DHCP sera responsable de la zone concernée

Une fois la configuration terminée, il faut démarrer ou redémarrer le démon pour prendre en compte les modifications :

# /etc/init.d/dhcp3-server restart

Si le démarrage retourne une erreur, il faut penser à consulter les logs :

# tail -f /var/log/syslog

Le fichier suivant donne la liste des adresses IP délivrées par le serveur.

Pour chaque adresse IP l’on retrouve : son adresse mac, le nom de l’ordinateur, la date de début et de fin du bail :

/var/lib/dhcp3/dhclient.leases 

6. Configuration avancée

  • Configuration des logs : ajouter dans /etc/dhcp3/dhcpd.conf l’instruction : log-facility local7

L’instruction log-facility local7 indique un fichier de log de niveau debug mais toujours dans le fichier /var/log/syslog.

On sépare ensuite les logs DHCP dans un fichier nommé dhcpd.log.

Dans le fichier /etc/syslog.conf :

local7.*     /var/log/dhcpd.log

Onrelance le daemon syslog :

# /etc/init.d/sysklogd restart
  • DNS dynamique
### DNS Dynamique
 ddns-updates on;
 ddns-update-style interim;
 ### Pour autoriser les adresses fixes à s'inscrire dans le DNS
 update-static-leases on;
 ddns-domainname "mondomaine.priv";
  • Plusieurs zones DNS

Vous pouvez ajouter les différentes zones DNS (ex : chezmoi.mondomaine.priv, monvoisin.mondomaine.priv, toto.mondomaine.priv). L’intérêt est de permettre une résolution plus rapide.

Ajouter dans le fichier /etc/dhcp3/dhcpd.conf :

# zone chezmoi.mondomaine.priv pour résolution rapide
 zone monvoisin.mondomaine.priv. {
 primary 100.11.0.10;                                                #serveur DNS primaire de la zone chezmoi.mondomaine.priv
 }
# zone monvoisin.mondomaine.priv pour résolution rapide
 zone monvoisin.mondomaine.priv. {
 primary 101.11.0.10;                                               #serveur DNS primaire de la zone monvoisin.mondomaine.priv
 }
# zone toto.mondomaine.priv pour résolution rapide
 zone monvoisin.mondomaine.priv. {
 primary 102.11.0.10;                                               #serveur DNS primaire de la zone toto.mondomaine.priv
 }
  • Auto-configuration du proxy
### Autodetection du proxy
 option wpad-url code 252 = text;
 option wpad-url "http://monserveurapache/proxy.pac";

### Autodetection du proxy
option local-pac-server code 252 = text;
option local-pac-server "http://proxy/wpad.dat";

7. Comment avoir des IP fixes avec un serveur DHCP

Le protocole DHCP offre la possibilité d’attribuer un adresse IP fixe à un ordinateur configuré en DHCP.

Cas d’utilisation : une station de travail avec un accès particulier, un serveur

Pour cela, il faut ajouter dans le fichier /etc/dhcp3/dhcpd.conf, de nouvelles lignes.

L’exemple suivant permet de fixer une adresse IP en fonction de son adresse MAC :

host MASTATION  {
 hardware ethernet 00:11:22:33:aa:bb;
 fixed-address 192.168.0.110;
 }

Redémarrer le démon pour prendre en compte les modifications :

/etc/init.d/dhcp3-server restart

8. Configuration des postes clients

  • OS Linux :
  • Fichier de configuration : /etc/network/interfaces
  • Contenu :

auto lo eth0
iface lo inet loopback
iface eth0 inet dhcp

  • Post-installation :
# /etc/init.d/networking restart
  • OS Windows :

Menu Démarrer >> Panneau de configuration >> Réseau

Cliquez sur « Obtenir une adresse IP dynamiquement

9. Comment vérifier que le client est correctement configuré

Sur un poste client linux, la commande suivante, permet de connaître la configuration IP et également de retrouver l’adresse MAC :

ifconfig

Sur un poste client Windows, la commande est la suivante :

ipconfig /all

La consultation des logs sur le serveur en temps réel (avec le paramètre -f), permet également de vérifier que tout fonctionne correctement :

tail -f /var/log/message

La virtualisation d’un système d’exploitation permet aujourd’hui d’exploiter au mieux les configurations matérielles disponibles de nos jours. Je pense principalement à la multiplication des coeurs au sein d’un même serveur et de la RAM qui les accompagne.

La virtualisation peut alors s’appuyer sur VMware, Microsoft ????, ou encore sur LXC.

D’ailleurs, on ne parle plus de VM ou de machine virtuelle mais plutôt de container 😉

1. Installation

# apt-get install lxc bridge-utils libvirt-bin debootstrap

2. Configuration

2.1 Cgroups

cgroups (control groups) est une fonctionnalité du noyau Linux pour limiter, compter et isoler l’utilisation des ressources (processeur, mémoire, utilisation disque, etc.). Pour plus de détails : wikipédia

Dans le fichier /etc/fstab : ajoutez la ligne suivante

## LXC
cgroup    /sys/fs/cgroup    cgroup    defaults    0    0

puis

# mount -a

2.2 Réseau

Commentez la configuration de votre carte réseau eth0

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
#allow-hotplug eth0
#iface eth0 inet static
#address x.x.x.x
#netmask y.y.y.y
#gateway    x.x.x.x
#network x.x.x.x

Ajoutez la configuration de votre nouvelle interface bridge ci-dessous :

auto br0
iface br0 inet static
       bridge_ports eth0
       bridge_fd 0
       address x.x.x.x
       netmask y.y.y.y
       network x.x.x.x
       broadcast x.x.x.x
       gateway x.x.x.x
       # dns-* options are implemented by the resolvconf package, if installed
       dns-nameservers x.x.x.x
       dns-search votre.domaine.dns

2.3 Réseau virtuel

# virsh -c lxc:/// net-define /etc/libvirt/qemu/networks/default.xml
# virsh -c lxc:/// net-start default
# virsh -c lxc:/// net-autostart default
# virsh -c lxc:/// net-edit default

exemple : ici un range d

<network>
  <name>default</name>
  <uuid>961c5bb4-6023-2485-dc64-140ee33d59f0</uuid>
  <forward mode='nat'/>
  <bridge name='virbr0' stp='on' delay='0' />
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254' />
    </dhcp>
  </ip>
</network>

2.4 Vérification

# lxc-checkconfig

qui donne :

Kernel config /proc/config.gz not found, looking in other places…
Found kernel config file /boot/config-3.2.0-4-686-pae
— Namespaces —
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
Network namespace: enabled
Multiple /dev/pts instances: enabled

— Control groups —
Cgroup: enabled
Cgroup clone_children flag: enabled
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: enabled
Cgroup cpuset: enabled

— Misc —
Veth pair device: enabled
Macvlan: enabled
Vlan: enabled
File capabilities: enabled

Note : Before booting a new kernel, you can check its configuration
usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig

Tout est au vert ?

Vous voici désormais avec une plate-forme de virtualisation opérationnelle.

Voyons comment l’administrer :

3. Création d’un container

# lxc-create -n <moncontainer> -t debian

Un container est créé et enregistré sous /var/lib/lxc/moncontainer.

Exemple :

# lxc-create -n proxy -t debian

puis :

Sélection_001

Sélection_002

Sélection_003

Sélection_004

Sélection_005

Sélection_006

Sélection_007

Sélection_008

Sélection_009

Mais attention, ce container n’est pas immédiatement opérationnel.

En effet, les accès consoles, réseaux, … ne sont pas configurés.

4. Correction/activation du container

4.1 Console

La gestion de la console LXC pose un problème.

Lors de son lancement #lxc-console -n <moncontainer>, le message suivant apparaît :

Type <Ctrl+a q> to exit the console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself

et vous ne pouvez plus vous loguer !!!

En effet, de prime à bord vous ne pouvez pas vous connecter à la console sans avoir au préalable effectué une petite opération.

# chroot /var/lib/lxc/moncontainer/rootfs
# mknod -m 666 /dev/tty1 c 4 1
# mknod -m 666 /dev/tty2 c 4 2
# mknod -m 666 /dev/tty3 c 4 3
# mknod -m 666 /dev/tty4 c 4 4
# mknod -m 666 /dev/tty5 c 4 5
# mknod -m 666 /dev/tty6 c 4 6

4.2 Languages – Locales

Par défaut, le container est créé sans configuration des locales, donc : Démarrez le container en console :

# lxc-start -n moncontainer -d
# lxc-console -n moncontainer

Loguez-vous sous ROOT, puis :

# locale-gen en_US en_US.UTF-8 fr_FR.UTF-8
# dpkg-reconfigure locales

4.3 Quelques outils manquants

# apt-get install dnsutils man locate rsyslog gcc

5. Démarrage automatique

ln -s /var/lib/lxc/<monnouveaucontainer>/config /etc/lxc/auto/<monnouveaucontainer>

et voilà …

6. Administration

6.1 Fichiers et dossiers

  • Dossier de stockage de vos containers : /var/lib/lxc/
  • Configuration de votre container : /var/lib/lxc/<votre container>/config
# /var/lib/lxc/moncontainer/config

## Container
lxc.utsname                             = moncontainer

lxc.rootfs                              = /var/lib/lxc/moncontainer/rootfs
#lxc.console                            = /var/log/lxc/moncontainer.console
lxc.tty                                 = 6
lxc.pts                                 = 1024

## Capabilities
lxc.cap.drop                            = mac_admin
lxc.cap.drop                            = mac_override
lxc.cap.drop                            = sys_admin
lxc.cap.drop                            = sys_module
## Devices
# Allow all devices
#lxc.cgroup.devices.allow               = a
# Deny all devices
lxc.cgroup.devices.deny                 = a
# Allow to mknod all devices (but not using them)
lxc.cgroup.devices.allow                = c *:* m
lxc.cgroup.devices.allow                = b *:* m

# RESEAU
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0
lxc.network.name = eth0
lxc.network.ipv4 = x.x.x.x/24
lxc.network.veth.pair = vethvm2
lxc.network.hwaddr = 00:FF:AA:00:00:02

# /dev/console
lxc.cgroup.devices.allow                = c 5:1 rwm
# /dev/fuse
lxc.cgroup.devices.allow                = c 10:229 rwm
# /dev/null
lxc.cgroup.devices.allow                = c 1:3 rwm
# /dev/ptmx
lxc.cgroup.devices.allow                = c 5:2 rwm
# /dev/pts/*
lxc.cgroup.devices.allow                = c 136:* rwm
# /dev/random
lxc.cgroup.devices.allow                = c 1:8 rwm
# /dev/rtc
lxc.cgroup.devices.allow                = c 254:0 rwm
# /dev/tty
lxc.cgroup.devices.allow                = c 5:0 rwm
# /dev/urandom
lxc.cgroup.devices.allow                = c 1:9 rwm
# /dev/zero
lxc.cgroup.devices.allow                = c 1:5 rwm

## Limits
#lxc.cgroup.cpu.shares                  = 1024
#lxc.cgroup.cpuset.cpus                 = 0
#lxc.cgroup.memory.limit_in_bytes       = 256M
#lxc.cgroup.memory.memsw.limit_in_bytes = 1G

## Filesystem
lxc.mount.entry                         = proc /var/lib/lxc/moncontainer/rootfs/proc proc nodev,noexec,nosuid 0 0
lxc.mount.entry                         = sysfs /var/lib/lxc/moncontainer/rootfs/sys sysfs defaults,ro 0 0
#lxc.mount.entry                        = /srv/moncontainer /var/lib/lxc/moncontainer/rootfs/srv/moncontainer none defaults,bind 0 0

5.2 Commandes

  • lxc-list : liste l’ensemble des containers et donne leur état (Running, Frozen, Stopped)
  • lxc-ls -Al : liste l’ensemble des fichiers et répertoires des containers. Mêmes options que la commande ls
  • lxc-start : démarre un container (ex: # lxc-start -d -n moncontainer). L’option -d permet l’exécution du container en démon
  • lxc-halt : arrête proprement un container (ex: # lxc-halt -n moncontainer)
  • lxc-stop : stoppe le container (ex: # lxc-stop -n moncontainer)
  • lxc-console : ouvre une console de connexion locale à un container (ex : # lxc-console -n moncontainer)Attention : si le prompt ne s’affiche pas, alors le paragraphe n° 4
  • lxc-info : affiche l’état d’un container et son PID (ex: # lxc-info -n moncontainer)
  • lxc-ps : affiche les processus de chaque container
  • lxc-create : crée un container (ex: # lxc-create -n monnouveaucontainer -t debian)
  • lxc-destroy : supprime un container

7. Problèmes rencontrés et solutions

71 SSH

Le serveur SSH est installé mais sa configuration est incomplète. En effet il manque les fichiers ssh_host_dsa_key et ssh_host_rsa_key.

# lxc-console -n serveur
# cd /etc/ssh
# ssh-keygen -t dsa -f ssh_host_dsa_key
# ssh-keygen -t rsa1 -f ssh_host_rsa_key
# /etc/init.d/ssh restart

7.2 Interface réseau

L’interface réseau et la route ne sont pas configurées.

Ajouter dans /etc/network/interface

iface eth0 inet static
address 192.168.1.201
mask 255.255.255.0
gatewau 192.168.1.1

et pour la route :

route add -net 0.0.0.0 gw 192.168.1.1 dev eth0

… et on redémarre : ctrl+a q      lxc-stop -n <moncontainer>

7.3 Paquets manquants

Bon nombre de paquets manquent à l’appel. On notera particulièrement : vi, nano

Depuis la version Etch de Debian, le module iscsi_tcp est intégré dans le noyau. Il ne vous reste plus qu’à installer un outil d’administration et à configurer

1. Installation

# apt-get install open-iscsi

configuration du fichier /etc/iscsi/iscsid.conf

discovery.sendtargets.auth.authmethod = CHAP
discovery.sendtargets.auth.username = <votre identifiant de connexion au SAN>
discovery.sendtargets.auth.password = <le mot de passe>
node.session.auth.authmethod = CHAP
node.session.auth.username = <votre identifiant de connexion au SAN>
node.session.auth.password = <le mot de passe>
node.startup = automatic

2. Configuration d’une connexion

#iscsiadm   --mode node  --targetname "iqn.2007-01.org.debian.foobar:CDs"  -p 192.168.0.1:3260 --op=update --name node.session.auth.authmethod --value=CHAP
#iscsiadm   --mode node  --targetname "iqn.2007-01.org.debian.foobar:CDs"  -p 192.168.0.1:3260 --op=update --name node.session.auth.username --value=$Id
#iscsiadm   --mode node  --targetname "iqn.2007-01.org.debian.foobar:CDs"  -p 192.168.0.1:3260 --op=update --name node.session.auth.password --value=$MDP
#iscsiadm   --mode node  --targetname "iqn.2007-01.org.debian.foobar:CDs"  -p 192.168.0.1:3260 --login

le fichier /etc/iscsi/nodes/iqn.2007-01.org.debian.foobar:CDs/192.168.0.1,3260 est automatiquement créé

3. Administration

3.1 Inventaire des Target iSCSI disponibles

#iscsiadm -m discovery -t st -p 192.168.0.20

192.168.0.1:3260,1 iqn.2007-01.org.debian.foobar:CDs
192.168.0.1:3260,1 iqn.2007-01.org.debian.foobar:USB

3.2 Ouvrir une connexion

#iscsiadm -m node –targetname « iqn.2007-01.org.debian.foobar:CDs » –portal « 192.168.0.1:3260 » –login

un nouveau périphérique iSCSI est alors créé dans /dev/sdx et automatiquement monté sur /dev/disk/by-path/ip-xxxxxxxx

3.3 Monter un disque iSCSI

Modifier le fichier /etc/fstab

#device         mount point     FS      Options Backup  fsck

LABEL=data1     /mnt/data1      ext3    _netdev 0       0

3.4 Déconnexion d’un disque iSCSI

#iscsiadm  -m node  --targetname "iqn.2007-01.org.debian.foobar:CDs" --portal "192.168.0.1:3260" --logout

3.5 Trouver l’initiateur iqn

L’initiateur iSCSI a aussi son propre iqn que vous trouverez dans le fichier /etc/iscsi/initiatorname.iscsi.

Attention : après installation du paquet open-iscsi, ce fichier ne contient que

GenerateName=yes"

C’est au premier démarrage du démon que l’iqn est créé

4. Erreurs fréquentes

ietd: CHAP initiator auth.: No valid user/pass combination for initiator iqn.1993-08.org.debian:01:123456789abcd found
=> Erreur de login/mot de passe

L’installation de serveurs et/ou postes de travail tous identiques nécessitent, soit une procédure longue et précise, soit un serveur central d’image Linux.

Nous opterons ensemble pour la seconde proposition.

A partir d’une installation Debian Standard :

1. Serveur CloneZilla

Un serveur CloneZilla permet de démarrer un ou plusieurs serveurs/postes de travail à distance (Wake OnLine WOL), choisir depuis quelle partition démarrer, créer une image système en ligne et restaurer une image en boot PXE.

2. Installation de CloneZilla

2.1 Mise à jour du sources.list

# vi /etc/apt

Ajouter

deb http://drbl.sourceforge.net/drbl-core drbl stable

Acquérir la clé GPG

# wget http://drbl.nchc.org.tw/GPG-KEY-DRBL
# apt (apt-key add GPG-KEY-DRBL

Mettre à jour la base de données des dépôts

# apt-get update

2.2 Interface réseau virtuelle

CloneZilla est configuré pour utiliser 2 interfaces ethernet. Si vous n’en disposez que d’une alors :

# ifconfig eth0:0 <ma nouvelle adresse IP> netmask <mon masque>

2.3 Pré-installation

CloneZilla n’existe pas encore dans les dépôt Debian. Nous allons donc télécharger les paquets et les installer.  Pour ce faire, on utilise le binaire LINKS

# apt-get install links2

Téléchargement :

# links http://sourceforge.net/projects/drbl/files/drbl_stable/

Télécharger le paquet drbl_1.12.15-1drbl_all.deb

2.4 Installation

# dpkg –i drbl_1.9.5-42_i386.deb
# /opt/drbl/sbin/drblsrv –i

– Installer une distribution ? N
– Console série ? N
– Architecture : i386                                                     ( uname -i)
– Mettre à jour le système d’exploitation : Y

Le script se poursuit et met à jour le système d’exploitation de votre serveur depuis le dépôt installé précédemment.

2.5 Configuration de drbl/clonezilla

# /opt/drbl/sbin/drblpush –i

– dns, NIS, prefixe client : <saisir les informations selon votre infrastructure>
– interface ethernet public : eth0:0
– No
– No
– Plage d’adresses IP : <info selon infrastruture réseau>
– ltsp : utile uniquement pour les clients légers

– Fournir clonezilla BOX (1), c’est ce que nous avons besoin pour le déploiement.

– nous allons utiliser /images comme dossier de destinations de celles-ci.

– Aucun mot de passe de démarrage

– On définit un prompt de démarrage ! tempo à choisir (délai avant l’action par défaut), arrière-plan graphique (y)

– On désactive NAT, l’utilisation de PXE ne se fera qu’en LAN…

Et l’on poursuit..

La configuration se fait maintenant.

Afin de faciliter la gestion du parc par filtrage MAC, il est préférable d’ajouter dans /etc/dhcp3/dhcpd.conf les postes clients un par un afin de les nommer et donc de réserver les IPs, voici la syntaxe :

Host nom hôte {

Hardware ethernet @MAC ; #de l’hôte

Fixed-address @IP ; #de l’hôte

}

Et redémarrer le service dhcpd : /etc/init.d/dhcp3-server restart

3. Création d’images de grub pour la selection de la partition à booter à distance

3.1 Création d’un disque de boot grub

Pour commencer, il faut créer une image disque du grub à envoyer en PXE. Pour ce faire, on utilisera VMware.

A partir d’une machine virtuelle, ouvrez le menu Paramètres

* Onglet périphériques : sélectionner floppy disk
* cliquer sur create disk
* saisir un nom

3.2 Installation de grub

# mke2fs /dev/fd0
# mount -t ext2 /dev/fd0 /mnt
# mkdir –p /mnt/boot/grub
# cp /boot/grub/stage1 /mnt/boot/grub
# cp /boot/grub/stage2 /mnt/boot/grub
# umount /dev/fd0
# grub

Configuration de grub

Grub est maintenant installé.

Cryptage du mot de passe

Afin de ne pas mettre le mot de passe de verrouillage grub en clair, nous allons le crypter en md5 via grub : (azerty pour les tests, ATTENTION : clavier grub est en qwerty)

Configuration menu.lst

<

Il va maintenant falloir configurer le menu pour les partitions (dans ce cas, par défaut : Ubuntu) qui se trouve dans le répertoire monté /mnt/boot/grub/menu.lst:

timeout 1 # attente d'1 seconde avant exécution
default 0 # par défaut on boot sur la première partition
password --md5 ???????????????????????????? # on prendra un mot de passe simple comme "azerty"
title Ubuntu
root (hd0,0)
kernel /boot/vmlinuz-2.6.24-17-genric root=/dev/sda1 ro quiet splash
initrd /boot/initrd.inmg-2.6.24-17-generic
title Windows XP
root (hd0,2)
makeactive
chainloader +1

Grub est maintenant configuré.

Création de l’image PXE

Nous pouvons maintenant procéder à la création de l’image de boot grub à partir de l’image disquette (ne pas oublier de démonter la disquette).

Pour cela, l’on va d’abord se rendre dans le répertoire root du serveur TFTP de clonezilla :

cd /tftpboot/nbi_img/

et enfin, créer l’image dans ce dernier :

# dd if=/dev/fd0 of=boot_ubuntu.img bs=1024 count=1440

L’image de boot PXE pour démarrer sur Ubuntu est maintenant prête. Pour Windows XP, il suffit de refaire la manipulation en modifiant simplement le default à 1 dans le menu.lst.

Configuration du menu de boot

Maintenant que les images de boot pour grub sont préparées, nous allons pouvoir les ajouter dans le menu de boot PXE. Pour se faire, il faut éditer le script situé dans /opt/drbl/sbin/generate-pxe-menu et se diriger vers la fin où l’on trouve les labels puis ajouter les 2 entrées pour ces menus. Il est conseillé de les entrer après le label local.

On a aussi la possibilité de désactiver l’édition des menus en mettant l’option « ALLOWOPTIONS » à 0.

Définition des lignes :

Label : nom du label (vu sur clonezilla)

MENU DEFAULT : IMPORTANT : utilisé pour la configuration du boot via clonezilla

MENU HIDE : pareil

Menu label : nom du label vu sur le menu de boot pxe

Memdisk : utilisation de la mémoire du client pour charger l’image

Boot_xp.img : image à chargée

TEXT HELP/ENDTEXT : compléments d’aide lors de la sélection du label dans le menu pxe.

Pour changer le timeout du menu, il faut modifier timeout (40 = 4 secondes). On peut aussi modifier l’image de boot soit en changeant la valeur dans MENU BACKGROUND, soit en remplaçant drblwp.png situé dans /tftpboot/nbi_img/.

Le menu est maintenant configuré, il suffit de lancer ce script après l’avoir enregistré pour prendre en compte les résultats : /opt/drbl/sbin/generate-pxe-menu

Nous pouvons maintenant démarrer une machine en PXE

Utilisation de clonezilla

Voici divers exemples pour utiliser clonezilla (depuis la commande /opt/drbl/sbin/dcs) :

Premier menu :

2 choix sont proposés :

le premier permet de paramétrer une action pour TOUS les clients (c’est-à-dire sur tout le pool dhcp en récupérant les correspondances dans dhcpd.conf)

le second permet de paramétrer une action pour UN ou PLUSIEURS clients

Création de groupe

Il est possible de créer des groupes de MAC/IP pour éviter de sélectionner un à un les postes cibles.

Pour se faire il suffit de créer dans /etc/drbl/ un fichier contenant les adresses MAC ou IPs cibles.

Groupes par adresses MAC

/etc/drbl/MAC-grp-« nom du groupe »

Contenu (une IP par ligne) :

00:25:XX:XX:XX:XX

00:1c:XX:XX:XX:XX

Groupes par adresses IP

/etc/drbl/IP-grp-« nom du groupe »

Contenu (une IP par ligne) :

192.168.1.1

192.168.1.2

Exemple 1 : sélectionner le démarrage par défaut

Maintenant, si l’on veut que TOUS les postes démarrent automatiquement sur XP, il suffit de sélectionner le mode « All », de se rendre dans l’option « more » => « switch-pxe-menu » => « setdefault »=> cocher « xp ».

Exemple 2 : utilisation du wol (wake-on-lan)

Maintenant soit on démarrer les postes un à un… soit on relance dcs en sélectionnant une fois de plus le mode « All » et en sélectionnant par la suite « Wake-on-Lan ».

Attention lorsque l’on choisit ce paramètre, il reste par défaut même après le redémarrage de la machine. Donc il faut penser à changer la valeur de setdefault après reboot.

Exemple 3 : Backup d’un poste via PXE

Nous allons cette fois ci utiliser le mode « part » avec par la suite, le mode par adresse MAC.

On choisit le poste client à sauvegarder via la touche espace et l’on accepte.

Ensuite, il faut choisir « clonezilla start », suivis de « save-parts » (dans mon cas « save-disk ») et entrer le nom de l’image.

Exemple 4 : Restauration de plusieurs postes en Multicast

Encore une fois, nous allons choisir le mode « Part » .

On choisit les postes à restaurer en cochant avec la touche espace. (les hôtes affichés sont récupérés à partir des réservations IPs faites dans le dhcpd.conf)

Une fois les clients sélectionnés, il faut choisir le mode « clonezilla-start », ensuite au choix entre débutant et expert. Expert permettant de configurer plus d’options tel que la méthode de compression, la priorité des utilitaires à utiliser pour la restauration, etc…

Une fois choisi, il faut sélectionner « restore parts », choisir l’action à faire à la fin du clonage.

A noter : on ne peut faire de restauration sur un disque dur cible qui est plus petit que le disque dur dont provient l’image. Par ailleurs, il est possible de faire une restauration sur un disque dur plus grand que le disque dur source (clonezilla va s’occuper de redimensionner le MBR source afin que la taille de la table des partition soit proportionnelle à la taille du disque dur cible).

ensuite choisir le déploiement en multicast et le mieux est de choisir l’option ci-dessous :

clients-time-to-wait

Elle permet de spécifier un nombre de client cibles ainsi qu’un délai max avant le début du déploiement.

Imaginons que l’on veuille déployer une image sur 20 postes et que l’on mette un délai d’attente de 30 secondes : Si au bout de 30 secondes à partir du moment où le premier poste se connecte, les 20 postes connectés ne sont pas atteint, la restauration commence.

Lorsque la restauration est terminée, une notification est envoyée sur le Shell afin de prévenir l’état de la restauration.

Future mises à jour Clonezilla/Debian

Attention, pour les futures mises à jour clonezilla ou lorsque l’on veut mettre en place un nouveau kernel (via /opt/drbl/sbin/drblsrv –i), il faut faire une sauvegarde du script de génération de menu, de l’image splashboot ainsi que des images grub.