2012
05.31

Je me suis vu confronté à un soucis avec OpenVz. Mon but est de créer un serveur LDAP sur une machine virtuelle X, et d’avoir une authentification LDAP sur une machine virtuelle client Y. Le problème est que par défaut, les réseaux créés via la commande de base --ipadd sont créés sur des VENET, dont les protocoles ne sont pas tous ouverts. Je ne pouvais donc pas communiquer entre mes 2 machines sur le protocole LDAP ( le ping passait, mai un nmap -p 389 me mettait en erreur ).
La solution a donc été de créé des ip via VETH, les machines étant alors autonomes niveau réseau.
Voici la configuration de base :
—————————————————————–
|                                  MACHINE HOTE
|                                   debianServer
|                                    192.168.1.1
|                                   192.168.1.254
|
|*************——–SERVER——-***********——-CLIENT———-
|*************|……….VZ104……..|***********|……….VZ105…….|
|*************|…192.168.1.204…|***********|…192.168.1.205…|
|*************|…..ServerLDAP…..|***********|…..ClientLDAP…..|
|*************|……….BIND9………|***********|……………………….|
|*************|…..debian.intra…..|***********|….debian.intra…..|
| _______________________________ __________________
—————————————————————–
L’installation des template debian et l’installation d’openvz se trouve sur cette fiche
Je pars donc de 2 VZ 105 et 104, qui sont fraichement installées avec le template debian. Le compte root est accessible, les IP ne sont pas définies, le hostname des machines sera ServerLDAP et ClientLDAP.

1. Installation du serveur LDAP : Vz 104

   1.1 Configuration du réseau Venet

Nous allons créé tout d’abord un réseau de base, afin de récupérer les dernières mise à jour, et d’installer bind et ldap.
Sur la machine HOTE, j’ajoute l’ip 192.168.1.204 à ma VZ , ainsi que le nameserver 192.168.1.254 pour accéder à internet.
-debianServeur@root-/root $vzctl set 104 --ipadd 192.168.1.204 --nameserver 192.168.1.254 --save
Saved parameters for CT 104

La première fois que vous la démarrez , vous aurez ce message
-debianServeur@root-/root $vzctl start 104
Starting container ...
Container is mounted
Adding IP address(es): 192.168.1.204
Setting CPU units: 1000
Set hostname: ServerLDAP
File resolv.conf was modified
Container start in progress...

On peut maintenant tester que la machine peut bien récupérer les paquets sur internet :
-debianServeur@root-/root $vzctl exec 104 aptitude update
Get:1 http://ftp.debian.org squeeze Release.gpg [1672 B]
Ign http://ftp.debian.org/debian/ squeeze/contrib Translation-en
Ign http://ftp.debian.org/debian/ squeeze/main Translation-en
Ign http://ftp.debian.org/debian/ squeeze/non-free Translation-en
Get:2 http://ftp.debian.org squeeze Release [111 kB]
Get:3 http://security.debian.org squeeze/updates Release.gpg [836 B]
Ign http://security.debian.org/ squeeze/updates/contrib Translation-en
Ign http://security.debian.org/ squeeze/updates/main Translation-en
Ign http://security.debian.org/ squeeze/updates/non-free Translation-en
Get:4 http://security.debian.org squeeze/updates Release [86.9 kB]
Get:5 http://ftp.debian.org squeeze/main i386 Packages [6568 kB]
Get:6 http://security.debian.org squeeze/updates/main i386 Packages [224 kB]
Get:7 http://security.debian.org squeeze/updates/contrib i386 Packages [674 B]
Get:8 http://security.debian.org squeeze/updates/non-free i386 Packages [14 B]
Get:9 http://ftp.debian.org squeeze/contrib i386 Packages [54.1 kB]
Get:10 http://ftp.debian.org squeeze/non-free i386 Packages [108 kB]
Fetched 7155 kB in 20s (347 kB/s)
Reading package lists...
C’est tout bon ! On peut passer à l’installation de BIND .

   1.2Configuration du serveur DNS Bind9

Avant d’installater openldap, et pouvoir communiquer avec les machines clientes, il faut installer bind et le configurer.
Pour l’installer et le configurer , vous pouvez suivre cette fiche.
Les paquets installés sont bind9 et dnsutils
La configuration créée sous bind est la suivante :
ip du serveur 192.168.1.204, nom ServerLDAP
ip de la machine cliente 192.168.1.205, nom ClientLDAP
Domaine : debian.intra

La configuration fait la résolution directe et inversée sur ces 2 machines
Voici la configuration bind :
Fichier /etc/bind/db.192.168.1

$TTL 604800
@ IN SOA ServerLDAP.debian.intra. root.ServerLDAP.debian.intra. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ServerLDAP.debian.intra.
204 IN PTR ServerLDAP.debian.intra.
205 IN PTR ClientLDAP.debian.intra.

Fichier /etc/bind/Fichier db.debian.intra
$TTL 604800
@ IN SOA ServerLDAP.debian.intra. root.ServerLDAP.debian.intra. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ServerLDAP.debian.intra.
@ IN A 127.0.0.1
ServerLDAP IN A 192.168.1.204
ClientLDAP IN A 192.168.1.205
@ IN AAAA ::1

Fichier /etc/bind/named.conf.local
zone "debian.intra" {
type master;
file "/etc/bind/db.debian.intra";
};
zone "1.168.192.in-addr.arpa" {
type master;
file "/etc/bind/db.192.168.1";
};

Le fichier /etc/resolv.conf contient les éléments suivants :
root@ServerLDAP:/# cat /etc/resolv.conf
domain debian.intra
search debian.intra
nameserver 192.168.1.204

Après un /etc/init.d/bind9 restart, le nslookup devrait marcher sur le serveur, dans un sens ….

root@ServerLDAP nslookup ServerLDAP
Server: 192.168.1.204
Address: 192.168.1.204#53
Name: ServerLDAP.debian.intra
Address: 192.168.1.204

et dans l’autre …

root@ServerLDAP nslookup 192.168.1.205
Server: 192.168.1.204
Address: 192.168.1.204#53
205.1.168.192.in-addr.arpa name = ClientLDAP.debian.intra.

   1.3Configuration du serveur LDAP

Afin d’installer ce serveur LDAP , j’ai suivi plusieurs tutoriaux.
Celui qui me semble le plus simple est celui-ci.
Installation LDAP :
root@ServerLDAP:/# install slapd ldap-utils
Mot de passe admin : password
Afin de s’assurer d’avoir une bonne prise en compte du mot de passe , on relance la configuration
root@ServerLDAP:~/ldapForm# dpkg-reconfigure slapd
Image1Non , on ne saute pas l’étape de configuration
Image2On rentre le nom du domaine debian.intra
Image3Idem
Image4
password
Image5password
Image6On choisit HDB, c’est historique
Image7
Non pas de suppression de la base en cas de purge
Image8Pas de suppression de l’ancienne bdd ( cette option apparait si une base est déjà configurée )
Image9
On n’accepte pas la V2

Une fois installé, la configuration se situe dans le fichier /etc/ldap/ldap.conf :
root@ServerLDAP:/# cat /etc/ldap/ldap.conf
BASE dc=debian,dc=intra
URI ldap://ServerLDAP.debian.intra ldap://ServerLDAP.debian.intra:666

Si le fichier n’est pas bon, modifiez le , et redémarrez le démon slapd
root@ServerLDAP:/# /etc/init.d/slapd restart

voici la première commande pour tester LDAP
root@ServerLDAP:/# ldapsearch -x
# extended LDIF
#
# LDAPv3
# base <dc=debian,dc=intra> (default) with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# search result
search: 2
result: 32 No such object

# numResponses: 1

Modifions la configuratio de notre server LDAP abec le fichier olc-mod1.ldif

root@ServerLDAP:~# cat olc-mod1.ldif
# 1. Modification du level de log
dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: stats


# 2.1.
dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: uid eq
-
# 2.2.
add: olcDbIndex
olcDbIndex: cn eq
-
# 2.3.
add: olcDbIndex
olcDbIndex: ou eq
-
# 2.4.
add: olcDbIndex
olcDbIndex: dc eq

Integrons cette configuration sur notre serveur :

root@ServerLDAP:~# ldapmodify -QY EXTERNAL -H ldapi:/// -f ~/olc-mod1.ldif
modifying entry "cn=config"
modifying entry "olcDatabase={1}hdb,cn=config"

Nous allons maintenant ajouter 2 unités d’organisation au server LDAP : ou=people et ou=groups.
Je crée un fichier tree.ldif qui contient mes 2 groupes :
root@ServerLDAP:~# cat tree.ldif
dn: ou=people,dc=debian,dc=intra
ou: people
objectClass: organizationalUnit
dn: ou=groups,dc=debian,dc=intra
ou: groups
objectClass: organizationalUnit

Et on l’injecte dans notre LDAP :
root@ServerLDAP:~# ldapadd -cxWD cn=admin,dc=debian,dc=intra -f ~/tree.ldif
Enter LDAP Password: password
adding new entry "ou=people,dc=debian,dc=intra"
adding new entry "ou=groups,dc=debian,dc=intra"

Normalement, la commande ldapsearch doit retrouver nos groupes :
root@ServerLDAP:~# ldapsearch -x
# extended LDIF
#
# LDAPv3
# base (default) with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# debian.intra
dn: dc=debian,dc=intra
objectClass: top
objectClass: dcObject
objectClass: organization
o: debian.intra
dc: debian
# admin, debian.intra
dn: cn=admin,dc=debian,dc=intra
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
# people, debian.intra
dn: ou=people,dc=debian,dc=intra
ou: people
objectClass: organizationalUnit
# groups, debian.intra
dn: ou=groups,dc=debian,dc=intra
ou: groups
objectClass: organizationalUnit
# search result
search: 2
result: 0 Success
# numResponses: 5
# numEntries: 4

Voilà notre Server configuré et opérationnel. Il nous manque juste un utilisateur 🙂
On va ajouter notre utilisateur user dans notre groupe groups, via le fichier user.ldif
root@ServerLDAP:~#cat user.ldif
dn: cn=user,ou=groups,dc=debian,dc=intra
cn: user
gidNumber: 20000
objectClass: top
objectClass: posixGroup
dn: uid=user,ou=people,dc=debian,dc=intra
uid: user
uidNumber: 20000
gidNumber: 20000
cn: Baptiste
sn: Malet
objectClass: top
objectClass: person
objectClass: posixAccount
objectClass: shadowAccount
loginShell: /bin/bash
homeDirectory: /home/user
userPassword: user

Dans cette configuration , l’utilisateur sera associé à un utilisateur UNIX.
root@ServerLDAP:~#ldapadd -cxWD cn=admin,dc=debian,dc=intra -f ~/user.ldif
Enter LDAP Password:
adding new entry "cn=user,ou=groups,dc=debian,dc=intra"
adding new entry "uid=user,ou=people,dc=debian,dc=intra"

Pour vérifier la connexion avec l’utilisateur user , on passer la commande ldapwhoami :
root@ServerLDAP:~# ldapwhoami -xD uid=user,ou=people,dc=debian,dc=intra -W
Enter LDAP Password:user
dn:uid=user,ou=people,dc=debian,dc=intra

Notre utilisateur est créé et estr opérationel. Si vous n’arrivez pas à vous connecter, vous pouvez redéfinir le mot de passe de l’utilisateur user via la commande ldappasswd
root@ServerLDAP:~# ldappasswd -x -D cn=admin,dc=debian,dc=intra -W -S uid=user,ou=people,dc=debian,dc=intra
New password:user
Re-enter new password:user
Enter LDAP Password:password

Et voilà, notre serveur est opérationel !
Passons maintenant à la configuration du client.

2. Installation du client LDAP : Vz 105

2.1 Configuration du réseau Venet

Nous allons créé tout d’abord un réseau de base, afin de récupérer les dernières mise à jour, et d’installer bind et ldap.
Sur la machine HOTE, j’ajoute l’ip 192.168.1.205 à ma VZ , ainsi que le nameserver 192.168.1.254 pour accéder à internet.
-debianServeur@root-/root $vzctl set 105 --ipadd 192.168.1.205 --nameserver 192.168.1.254 --save
Saved parameters for CT 105

La première fois que vous la démarrez , vous aurez ce message
-debianServeur@root-/root $vzctl start 105
Starting container ...
Container is mounted
Adding IP address(es): 192.168.1.205
Setting CPU units: 1000
Set hostname: ServerLDAP
File resolv.conf was modified
Container start in progress...

On peut maintenant tester que la machine peut bien récupérer les paquets sur internet :
-debianServeur@root-/root $vzctl exec 105 aptitude update
Get:1 http://ftp.debian.org squeeze Release.gpg [1672 B]
Ign http://ftp.debian.org/debian/ squeeze/contrib Translation-en
Ign http://ftp.debian.org/debian/ squeeze/main Translation-en
Ign http://ftp.debian.org/debian/ squeeze/non-free Translation-en
Get:2 http://ftp.debian.org squeeze Release [111 kB]
Get:3 http://security.debian.org squeeze/updates Release.gpg [836 B]
Ign http://security.debian.org/ squeeze/updates/contrib Translation-en
Ign http://security.debian.org/ squeeze/updates/main Translation-en
Ign http://security.debian.org/ squeeze/updates/non-free Translation-en
Get:4 http://security.debian.org squeeze/updates Release [86.9 kB]
Get:5 http://ftp.debian.org squeeze/main i386 Packages [6568 kB]
Get:6 http://security.debian.org squeeze/updates/main i386 Packages [224 kB]
Get:7 http://security.debian.org squeeze/updates/contrib i386 Packages [674 B]
Get:8 http://security.debian.org squeeze/updates/non-free i386 Packages [14 B]
Get:9 http://ftp.debian.org squeeze/contrib i386 Packages [54.1 kB]
Get:10 http://ftp.debian.org squeeze/non-free i386 Packages [108 kB]
Fetched 7155 kB in 20s (347 kB/s)
Reading package lists...
C’est tout bon ! Enfin presque … car c’est là qu’intervient mon problème :
Sur la VZ 105, la commande ping 192.168.1.204 doit marcher, par contre un nmap -p 389 ou un telnet sur le port ne marche pas …
Donc il va falloir supprimer les VENET et les remplacer par les VETH.
Si vous n’êtes pas dans ce cas, vous pouvez passer directement au §4Configuration LDAP Client sur la VZ 104.

3. Configuration des reseaux VETH OpenVz

Pour pouvoir configurer les réseaux VETH, je me suis base sur la doc officielle d’OpenVZ qui se trouve ici.
La création du’un VETH revient à définir une route sur la machine hote, à créer une carte ethernet sur la VZ.
Attention donc à bien vérifier ce qui se fait sur la machine HOTE DEBIAN et la VZ !!

3.1 Ajout du VETH sur la VZ 105 : action machine HOTE

-debianServeur@root-/root $ vzctl start 105
-debianServeur@root-/root $ vzctl set 105 --netif_add eth0 --save

-debianServeur@root-/root $ ifconfig veth105.0 0
-debianServeur@root-/root $ echo 1 > /proc/sys/net/ipv4/conf/veth105.0/forwarding
-debianServeur@root-/root $ echo 1 > /proc/sys/net/ipv4/conf/veth105.0/proxy_arp
-debianServeur@root-/root $ echo 1 > /proc/sys/net/ipv4/conf/eth0/forwarding
-debianServeur@root-/root $ echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp

Vous pouvez mettre cette configuration dans /etc/sysctl.conf.

3.2 Ajout du VETH sur la VZ 105 : action machine VZ 105


-debianServeur@root-/root $ vzctl enter 105
[ve-101]# /sbin/ifconfig eth0 0
[ve-101]# /sbin/ip addr add 192.168.1.205 dev eth0
[ve-101]# /sbin/ip route add default dev eth0
-debianServeur@root-/root $ ifconfig veth105.0 0
-debianServeur@root-/root $ ip route add 192.168.1.205 dev veth105.0


-debianServeur@root-/root $cat /etc/vz/conf/105.mount
#!/bin/bash
# This script source VPS configuration files in the same order as vzctl does
# if one of these files does not exist then something is really broken
[ -f /etc/vz/vz.conf ] || exit 1
[ -f $VE_CONFFILE ] || exit 1
# source both files. Note the order, it is important
. /etc/vz/vz.conf
. $VE_CONFFILE
# Configure veth with IP after VPS has started
{
IP=192.168.1.205
DEV=veth105.0
while sleep 1; do
/sbin/ifconfig $DEV 0 >/dev/null 2>&1
if [ $? -eq 0 ]; then
/sbin/ip route add $IP dev $DEV
break
fi
done
} &

Voici le configuration du réseau sur la VZ 105.

-debianServeur@root-/root $cat /etc/network/interfaces
auto eth0
iface eth0 inet static
address 192.168.1.205
netmask 255.255.255.255
up /sbin/ip route add 192.168.1.1 dev eth0
up /sbin/ip route add default via 192.168.1.1

3.3 Ajout du VETH sur la VZ 104 : action machine HOTE

-debianServeur@root-/root $ vzctl start 105
-debianServeur@root-/root $ vzctl set 104 --netif_add eth0 --save

-debianServeur@root-/root $ ifconfig veth104.0 0
-debianServeur@root-/root $ echo 1 > /proc/sys/net/ipv4/conf/veth104.0/forwarding
-debianServeur@root-/root $ echo 1 > /proc/sys/net/ipv4/conf/veth104.0/proxy_arp
-debianServeur@root-/root $ echo 1 > /proc/sys/net/ipv4/conf/eth0/forwarding
-debianServeur@root-/root $ echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp

Vous pouvez mettre cette configuration dans /etc/sysctl.conf.

3.4 Ajout du VETH sur la VZ 104 : action machine VZ 104

-debianServeur@root-/root $ vzctl enter 104
root@ServerLDAP:~# /sbin/ifconfig eth0 0
root@ServerLDAP:~# /sbin/ip addr add 192.168.1.204 dev eth0
root@ServerLDAP:~# /sbin/ip route add default dev eth0
root@ServerLDAP:~# ifconfig veth104.0 0
root@ServerLDAP:~# ip route add 192.168.1.204 dev veth104.0


-debianServeur@root-/root $cat /etc/vz/conf/104.mount
#!/bin/bash
# This script source VPS configuration files in the same order as vzctl does
# if one of these files does not exist then something is really broken
[ -f /etc/vz/vz.conf ] || exit 1
[ -f $VE_CONFFILE ] || exit 1
# source both files. Note the order, it is important
. /etc/vz/vz.conf
. $VE_CONFFILE
# Configure veth with IP after VPS has started
{
IP=192.168.1.204
DEV=veth104.0
while sleep 1; do
/sbin/ifconfig $DEV 0 >/dev/null 2>&1
if [ $? -eq 0 ]; then
/sbin/ip route add $IP dev $DEV
break
fi
done
} &

Voici le configuration du réseau sur la VZ 104.

root@ServerLDAP:~#cat /etc/network/interfaces
auto eth0
iface eth0 inet static
address 192.168.1.204
netmask 255.255.255.255
up /sbin/ip route add 192.168.1.1 dev eth0
up /sbin/ip route add default via 192.168.1.1

4. Configuration LDAP Client sur la VZ 105

aptitude install libnss-ldap libpam-ldap
dpkg-reconfigure libnss-ldap
vi /etc/nsswitch.conf
vi /etc/ldap/ldap.conf
cat /etc/resolv.conf
vi /etc/nsswitch.conf
/etc/init.d/nscd restart

Aucun commentaire.

Ajoutez votre commentaire

%d blogueurs aiment cette page :