Mise en place d’un serveur OpenVPN

Avant de commercer la configuration, procédons par la mise à jour de la liste des paquets avant de passer à l’installation du paquet « openvpn » sur le serveur.
aptitude update && aptitude install openvpn openssl

Il faut à présent récupérer le dossier de scripts permettant de générer facilement des certificats OpenSSL. OpenVPN conseille de ne pas travailler sur les fichiers sources, car en cas de mise à jour d’OpenVPN, les modifications réalisées dans ce dossier sont écrasées.
Ici, je décide de placer le dossier avec les fichiers de configurations d’OpenVPN.
mkdir /etc/openvpn/easy-rsa && cp -R /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/

Dans le répertoire de documentation, d’OpenVPN, il est possible de trouver un large panel d’exemples de fichiers de configuration. Rendez-vous dans « /usr/share/doc/openvpn/examples/sample-config-files/ » pour les découvrir.

Plaçons nous dans le répertoire que nous avons précédemment créé.
cd /etc/openvpn/easy-rsa/

Avant d’utiliser les scripts de génération de certificats, il faut éditer le fichier « vars » présent dans le dossier « easy-rsa ». Nous changeons tout d’abord la taille des clés générées, puis les informations personnelles placées dans les certificats.
[generic]# Increase this to 2048 if you
# are paranoid. This will slow
# down TLS negotiation performance
# as well as the one-time DH parms
# generation process.
export KEY_SIZE=2048

[…]

# These are the default values for fields
# which will be placed in the certificate.
# Don’t leave any of these fields blank.
export KEY_COUNTRY="FR"
export KEY_PROVINCE="Région"
export KEY_CITY="Ville"
export KEY_ORG="MaCompagnie"
export KEY_EMAIL="moi@macompagnie.fr"
export KEY_EMAIL=moi@macompagnie.fr
export KEY_CN=openvpn
export KEY_NAME=OpenVPN
export KEY_OU=VPN
export PKCS11_MODULE_PATH=""
export PKCS11_PIN=1234[/generic]

Nous exportons les valeurs précédemment saisies en exécutant le fichier « vars ».
source ./vars

Pour effacer les anciens certificats générés, il faut faire appel au script « clean-all ». Attention, c’est une opération destructrice et donc irréversible !
./clean-all

Nous générons en premier lieu le certificat d’autorité (CA). Valider par Entrée, jusqu’à temps de revenir au prompt.
./build-ca

Puis nous passons à la génération du certificat pour notre serveur. Valider par Entrée, jusqu’à temps de revenir au prompt.
./build-key-server mon-serveur.macompagnie.fr

Ensuite à la génération d’un certificat pour un client Valider par Entrée, jusqu’à temps de revenir au prompt.
./build-key pc-portable.macompagnie.fr

Et enfin, il ne nous reste plus qu’à générer le certificat Diffie-Hellman.
./build-dh

Le répertoire « keys » présent dans « easy-rsa » devrait contenir les fichiers suivants.

Il faut déplacer (ici, je vais faire un lien symbolique) les quatre certificats suivant à la racine du répertoire « /etc/openvpn » : ca.crt, mon-serveur.macompagnie.fr.key, mon-serveur.macompagnie.fr.crt et dh2048.pem
ln -s /etc/openvpn/easy-rsa/keys/{ca.crt,mon-serveur.macompagnie.fr.key,mon-serveur.macompagnie.fr.crt,dh2048.pem} /etc/openvpn/

Les certificats suivants seront à récupérer pour les placer avec le fichier de configuration de notre client ; un client SCP comme WinSCP pour Windows fera très bien l’affaire.

  • ca.crt
  • pc-portable.macompagnie.fr.key
  • pc-portable.macompagnie.fr.crt

Voici le contenu du fichier de configuration du serveur à placer dans « /etc/openvpn ». Nous l’appelerons « server.conf » mais le nom du fichier n’a aucune importante (l’extention devra cependant être .conf).
##################################################
# /etc/openvpn/server.conf
# Date : 10/03/2012
# Version : 0.2
##################################################

# Pour utiliser ce fichier pour un client Windows,
# renommer simplement l'extension en .ovpn
# Il faudra modifier si besoin la section Windows
# de ce fichier
# Sur Windows, pour définir des chemins penser à
# utiliser des trouves anti-slash comme ci-dessous.
# "C:Program FilesOpenVPNconfigfoo.key"

#---
# Authentification et sécurisation
#

# Clé et certificats SSL/TLS.
# Il est conseillé d'avoir des certificats séparés
# pour chaque client.
# Par contre, on peut avoir qu'un seul
# Certificat Autoritaire.
# La clé serveur ne doit jamais être distribuée, si
# cela arrive, il faudra en générer une nouvelle.
ca ca.crt
cert mon-serveur.macompagnie.fr.crt
key mon-serveur.macompagnie.fr.key

# Certificat Diffie-Hellman.
dh dh2048.pem

# Déclaration de la clé tls-auth
# Le second paramètre doit être 0 sur le serveur
# et 1 sur le(s) client(s).
;tls-auth ta.key 0

# Utilisation de la cryptographie Cipher.
;cipher BF-CBC # Blowfish (default)
;cipher AES-128-CBC # AES
;cipher DES-EDE3-CBC # Triple-DES

#---
# Configuration de la connexion
#

# Adresse IP sur laquelle OpenVPN doit écouter.
;local a.b.c.d

# Port TCP/UDP sur lequel OpenVPN doit écouter.
# Pour plusieurs intances serveur, il faudra un port pour
# chacune d'elles.
# Bien penser aussi à ouvrir les ports concernés pour laisser
# passer le trafic réseau.
port 1194

# Protocole de transport des données.
;proto tcp
proto udp

# Type d'interface à utiliser pour la connexion.
# tap permet de créer un tunnel Ethernet alors que tun
# permet de faire un tunnel IP routé.
# En cas d'utilisation d'une interface tap, il faudra au
# préalable créer cette interface.
;dev tap
dev tun

#---
# Configuration générale
#

# Nombre maximum de clients autorisés à se connecter.
;max-clients 100

# Activation de la compression du trafic circulant
# dans le tunnel VPN.
comp-lzo

# Toutes les 10 secondes un test de connectivité est effectué.
# Passée une période de 120 secondes sans réponse, l'hôte distant
# est déclaré arrêté.
keepalive 10 120

# Options persistantes malgré un redémarrage.
# On ne relit pas les clés de cryptographie,
# On ne réinitialise pas l'interface virtuelle.
persist-key
persist-tun

# Attribution d'un pool d'adresses au serveur qu'il
# pourra fournir aux clients se connectant.
# Ici, le serveur prendra l'adresse IP 10.8.0.1 pour lui
# et laissera le reste pour les clients.
# Commenter cette directive en cas d'utilisation d'un pont
# Ethernet.
server 10.8.0.0 255.255.255.0

# Configure OpenVPN pour faire du pont Ethernet et utiliser
# un DHCP-proxy. Ainsi les clients VPN pourront accéder aux
# serveurs DHCP et DNS.
# Il faut d'abord utiliser les fonctions de pontage de
# l'OS pour rassembler la carte physique et la carte virtuelle
# TAP.
# Note : Ce mode ne fonctionne qu'avec des clients comme Windows,
# où l'interface virtuelle TAP est liée à un client DHCP.
;server-bridge

# Configure OpenVPN pour faire du pont Ethernet.
# Il faut d'abord utiliser les fonctions de pontage de
# l'OS pour rassembler la carte physique et la carte virtuelle
# TAP. Ensuite, il ne reste plus à définir manuellement les
# paramètres réseau du pont ainsi que la plage d'adresses
# IP utilisable pour les clients VPN, ici de 10.8.0.50
# à 10.8.0.100.
# Commenter cette directive en cas d'utilisation d'un pont
# Ethernet.
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100

# En plus de fournir un tunnel VPN, OpenVPN est capable
# d'envoyer des paramètres aux clients comme des routes.
# Les clients peuvent ainsi joindre des sous-réseaux
# accessibles à partir du serveur.
# Ne pas oublier que ces sous-réseaux devront connaître
# le réseau virtuel pour pouvoir répondre aux clients VPN.
;push "route 192.168.10.0 255.255.255.0"
;push "route 192.168.20.0 255.255.255.0"

# Il est aussi possible d'envoyer aux clients des paramètres
# spécifiques à Windows comme l'adresse d'un serveur DNS ou un
# serveur WINS.
# CAVEAT: http://openvpn.net/faq.html#dhcpcaveats
;push "dhcp-option DNS 208.67.222.222"
;push "dhcp-option DNS 208.67.220.220"

# Si activée, cette directive va forcer les clients à rediriger
# tout leur trafic Internet vers le VPN, comme par exemple
# la navigation Web, les requêtes DNS, ...
# Il faudra par ailleurs que la machine hébergeant le serveur VPN
# utilise NAT ou un pont Ethernet pour que ceci fonctionne correctement.
;push "redirect-gateway def1 bypass-dhcp"

# Répertoire contenant les configurations personnalisées des clients.
# Le répertoire "/etc/openvpn/ccd" n'existe pas de base, il faudra le créer.
# Les fichiers doivent porter le Common Name du certificat associé.
;client-config-dir /etc/openvpn/ccd

# Activée, cette directive permet aux clients VPN de pouvoir
# communiquer les uns avec les autres.
# Par défaut, un client ne peut voir que le serveur.
# Pour forcer les clients à ne voit que le servuer, il faudra
# aussi configurer en conséquence le pare-feu.
;client-to-client

# Il est possible de générer un certificat client commun
# à différent client.
# Cependant ce type d'utilisation n'est pas conseillé pour
# raison de sécurité ; à ne faire qu'à des fins de tests.
# Ceci est dans le cas où le "Common name" du certificat est commun
# pour tous les clients VPN.
;duplicate-cn

#---
# Journalisation
#

# Garde une trace client <-> adresse IP virtuelle ainsi
# en cas de redémarrage d'OpenVPN, le serveur est capable d'assigner
# à nouveau la même adresse IP aux clients se reconnectant.
ifconfig-pool-persist ipp.txt

# Fichier de journalisation permettant d'avoir une trace
# des connexions courantes.
# Il est actualisé toutes les minutes.
status openvpn-status.log

# Par défaut, les fichiers de journalisation iront se placer
# dans syslog pour Linux et dans C:Program FilesOpenVPNlog pour
# Windows, si OpenVPN est lancé comme démon/service.
# Les directives suivantes permettent de changer cela. Cependant, il
# ne faut jamais les utiliser en même temps.
# log va vider le fichier de journalisation au démarrage d'OpenVPN
# alors que log-append va ajouter les nouvelles entrées à la suite de
# l'existant.
;log openvpn.log
;log-append openvpn.log

# Niveau de verbosité utilisé pour les fichiers de
# journalisation.
verb 3

# Ne journalise pas plus de n messages consécutifs similaires.
;mute 20

#---
# Spécifique à Linux
#

# Après initialisation, on réduit les droits du
# démon par mesure de sécurité.
;user nobody
;group nogroup

#---
# Spécifique à Windows
#

# Windows demande à ce que le nom de l'interface virtuelle soit
# nommée TAP-Win32.
# Il peut arriver que vous en ayez plus qu'une. Dans ce cas, donnez
# son nom ici.
;dev-node MyTap

Pour notre client, voici à quoi va ressembler son fichier de configuration. Il est préparé pour être utilisé sur une client Linux, mais sera facilement adaptable pour Windows.
##################################################
# /etc/openvpn/client.conf
# Date : 18/05/2011
# Version : 0.1
##################################################

# Pour utiliser ce fichier pour un client Windows,
# renommer simplement l'extension en .ovpn
# Il faudra modifier si besoin la section Windows
# de ce fichier
# Sur Windows, pour définir des chemins penser à
# utiliser des trouves anti-slash comme ci-dessous.
# "C:Program FilesOpenVPNconfigfoo.key"

#---
# Configuration propre au client
#

# FQDN/IP du serveur, ainsi que son port d'écoute.
# Il est possible définir plusieurs serveurs en
# duplicant la ligne ci-dessous.
remote mon-serveur.macompagnie.fr 1194

# Clé et certificats SSL/TLS.
# Il est conseillé d'avoir des certificats séparés
# pour chaque client.
# Par contre, on peut avoir qu'un seul
# Certificat Autoritaire.
ca ca.crt
cert pc-portable.macompagnie.fr.crt
key pc-portable.macompagnie.fr.key

#---
# Partie devant être identique avec le serveur
#

# Protocole de transport des données.
;proto tcp
proto udp

# Type d'interface à utiliser pour la connexion.
# tap permet de créer un tunnel Ethernet alors que tun
# permet de faire un tunnel IP routé.
# tap sera plus utilisé pour faire un pont d'interfaces,
# cela implique d'avoir déjà créé une interface du genre tap0.
;dev tap
dev tun

# Activation de la compression du trafic circulant
# dans le tunnel VPN.
comp-lzo

# Déclaration de la clé tls-auth
# Le second paramètre doit être 0 sur le serveur
# et 1 sur le(s) client(s).
;tls-auth ta.key 1

# Utilisation de la cryptographie Cipher.
;cipher BF-CBC # Blowfish (default)
;cipher AES-128-CBC # AES
;cipher DES-EDE3-CBC # Triple-DES

#---
# Configuration générale
#

# Activation du mode client, ainsi, nous pourrons
# récupérer certaines directives du serveur.
client

# Niveau de verbosité utilisé pour les fichiers de
# journalisation.
verb 3

# Ne journalise pas plus de n messages consécutifs similaires.
;mute 20

# Si plusieurs serveurs ont précédemment été déclarés,
# il est possible de faire de l'équilibrage de charge
# via ce paramètre. Sinon on utilise l'ordre de
# déclaration des serveurs.
;remote-random

# Permet de résoudre indéfiniment le
# FQDN du serveur OpenVPN. Très utile
# sur des machines qui ne sont pas connectées en permanence
# à Internet tels que les ordinateurs portables.
resolv-retry infinite

# La plupart des clients n'ont pas besoin d'être liés
# un port local spécifique. Un port est attribué
# dynamiquement.
nobind

# Options persistantes malgré un redémarrage.
# On ne relit pas les clés de cryptographie,
# On ne réinitialise pas l'interface virtuelle.
persist-key
persist-tun

# Si le client est connecté à Internet via un proxy,
# il faut définir les informations ici.
# Si le proxy demande une authentification, consulter
# le manuel.
;http-proxy-retry # retry on connection failures
;http-proxy [proxy server] [proxy port #]

# Désactive l'affiche des messages d'avertissement
# concernant la duplication de paquet qui sont la plupart
# du temps de faux indicateurs sur un réseau Wifi.
# Avec cette option, on dispose toujours de la protection
# associée à la duplication de paquet tout en désactivant
# la verbosité.
;mute-replay-warnings

# Vérification de la présence de la directive nsCertType
# contenue dans le certificat du serveur.
# Elle permet d'être protéger contre de potentielles attaques.
# Voir ici pour plus d'informations : http://openvpn.net/howto.html#mitm
#
# Cette directive est normalement insérée si l'on génère le certificat
# du serveur via le script build-key-server présent dans le dossier
# easy-rsa.
ns-cert-type server

#---
# Spécifique à Linux
#

# Après initialisation, on réduit les droits du
# démon par mesure de sécurité.
;user nobody
;group nogroup

#---
# Spécifique à Windows
#

# Windows demande à ce que le nom de l'interface virtuelle soit
# nommée TAP-Win32.
# Il peut arriver que vous en ayez plus qu'une. Dans ce cas, donnez
# son nom ici.
;dev-node MyTap

Dernière chose et pas des moindre, ne pas oublier d’ouvrir le port 1194 en UDP (à adapter si vous avez touchez les fichiers de configurations) et le rediriger sur le serveur VPN 😉

Pour lancer le service OpenVPN sur le serveur et le client, rien de plus simple, il faut saisir la commande suivante.
service openvpn restart

Effectuons un test de connectivité à partir du client pour nous assurer que tout fonctionne.
ping 10.8.0.1 -c 4

Pour révoquer un certificat, il faut retourner dans « /etc/openvpn/easy-rsa ».
cd /etc/openvpn/easy-rsa
./revoke-full pc-portable.macompagnie.fr

Notre serveur fraichement installé est à l’écoute de n’importe quelle demande de connexion. Ainsi, n’importe qui peut lui demander de se connecter, même si la connexion se voit refusée par la suite ; ceci est donc « gourmand » en ressources, et peut causer des types “Denial of Service“. Pour réduire le nombre de personnes ayant l’autorisation de se connecter, nous allons générer un clé permettant de crypter la connexion initiale.
La clé “ta.key” créée devra être copiée sur le serveur ainsi que sur chaque client ! Il faudra d’ailleurs modifier les fichiers de configuration client/serveur pour prendre en compte cette nouvelle clé.
Il faudra aussi décommenter le paramètre « tls-auth » dans les fichiers de configuration.
openvpn --genkey --secret /etc/openvpn/easy-rsa/keys/ta.key
ln -s /etc/openvpn/easy-rsa/keys/ta.key /etc/openvpn

Pour la mise en place plus détaillée d’OpenVPN en mode bridge, (et comme pour par mal de choses d’ailleurs) rendez-vous sur la rubrique documentation d’OpenVPN : Ethernet Bridging.

Erreur au lancement de NetBeans suite à la mise à jour du JDK

Suite à la mise à jour du JDK d’Oracle, un message d’erreur (cf. capture ci-dessous) est apparu lors du lancement de l’IDE NetBeans. En validant par l’option Oui, NetBeans se lance et arrive à compiler le code, mais le message sera à nouveau présent au redémarrage …

La technique, trouvée sur Internet et qui fonctionne, est d’éditer le fichier netbeans.conf présent dans (dans mon cas) « C:Program FilesNetBeans 7.0 Beta 2etc ». Il suffit de redéfinir l’emplacement du JDK en éditant la ligne contenant « netbeans_jdkhome ». Attention ! Il faudra ouvrir votre éditeur de texte en tant qu’administrateur sous peine de ne pas pouvoir enregistrer les modifications apportées.

netbeans_jdkhome="C:Program FilesJavajdk1.6.0_25"

Et là ! Magie (en principe), votre NetBeans s’ouvre comme avant.

Installer les drivers nVidia sur une Debian Squeeze

Pour profiter de toute la puissance de sa carte graphique, il installer une petite série de paquets. Ici, comme le titre de l’article l’indique, nous installerons les pilotes graphiques d’une carte nVidia (la technique ne doit pas être compliquée pour une carte AMD-ATI).

Mise à jour de la liste des paquets
aptitude update

Installation des paquets
aptitude install nvidia-kernel-dkms nvidia-xconfig nvidia-settings

On génère sur le fichier « /etc/X11/xorg.conf » grâce à l’outil fourni par nVidia (une sauvegarde du fichier déjà présent sera effectuée)
nvidia-xconfig

Pour finaliser, il ne reste plus qu’à tenter un redémarrage de la machine (en croisant les doigts pour ne pas avoir un Kernel Panic ^^)
reboot

Il ne reste plus qu’à configurer notre affichage
nvidia-settings

Retrouver le tableau de bord d’origine sur Gnome

Il peut arriver, suite à une maladresse ou un bricolage hasardeux, qu’un utilisateur « perde » son tableau de bord ou qu’il soit totalement désordonné. Pour revenir à la configuration d’origine, il suffit de passer d’exécuter les commandes suivantes.

Arrêt du démon « gconfd » avant toute chose
gconftool-2 --shutdown

Suppression des fichiers des configurations stockés dans le répertoire de l’utilisateur courant
rm -rf ~/.gconf/apps/panel

Envoi d’une demande d’arrêt au processus « gnome-panel »
pkill gnome-panel

Cacher certaines partitions du menu Raccourcis dans Gnome

De base, l’interface graphique Gnome liste toutes les partitions disponibles sur le système dans le menu Raccourcis. Le but est donc d’en cacher certaines, voici comment faire.

Avant de commencer, il faut trouver le nom des partitions à cacher, il est de la forme « /dev/sda1 » (où le « a » correspond au premier disque, et où le « 1 » correspond à la première partition)

Il suffit ensuite de créer un fichier nommé « hide–partitions.rules » (bien mettre deux tirets entre hide et partitions) et le placer dans « /etc/udev/rules.d »

Il ne reste plus qu’à ajouter le contenu suivant

ACTION!="add|change", GOTO="hide_partitions_end"
SUBSYSTEM!="block", GOTO="hide_partitions_end"
KERNEL=="loop*|ram*", GOTO="hide_partitions_end"
#####################################
KERNEL=="sda1", ENV{DKD_PRESENTATION_HIDE}="1"
KERNEL=="sda2", ENV{DKD_PRESENTATION_HIDE}="1"
KERNEL=="sda6", ENV{DKD_PRESENTATION_HIDE}="1"
#####################################
LABEL="hide_partitions_end"

Maîtriser l’éditeur Vi

Vi est certes le plus répandu des éditeurs de texte en mode console, mais ce n’est pas le simple à maîtriser, à moins de connaître les commandes utiles, comme celles qui suivent.

Tout d’abord, pour ouvrir un fichier avec Vi, rien de plus simple

vi nom_du_fichier

Ensuite, il faut savoir que Vi a deux modes de fonctionnement :

  1. un mode de commande, permettant d’effectuer des opérations (effectuer des recherches, suppression d’une ligne, …),
  2. un mode de saisie, qui comme son nom l’indique permet de saisir des informations.

Le mode par défaut étant le mode de commande. Pour quitter le mode de saisie, il suffit d’appuyer sur la touche Echap du clavier.

Touche à utiliser Action réalisée
a positionne le curseur juste après le caractère courant
A positionne le curseur à la fin de la ligne courante
i positionne le curseur juste avant le caractère courant
I positionne le curseur au début de la ligne courante
o crée une nouvelle ligne au dessus de la ligne courante, et positionne le curseur dessus
O crée une nouvelle ligne au dessous de la ligne courante, et positionne le curseur dessus
dd supprime la ligne courante
x supprime les caractères après le curseur
X supprime les caractères avant le curseur
:q et en appuyant sur la touche Entrée, on quitte Vi (à condition de ne pas avoir modifié le fichier courant)
:q! et en appuyant sur la touche Entrée, on quitte Vi (si le fichier courant était modifié, les changements ne seront pas enregistrés)
:w et en appuyant sur la touche Entrée, on enregistre le fichier courant
:wq et en appuyant sur la touche Entrée, on enregistre le fichier courant et on quitte Vi

Astuces diverses :

  • remplacer une chaîne de caractères
    :%s/ancien_texte/nouveau_texte/g

Mise en place de Network UPS Tools pour contrôler un onduleur branché sur une Debian

Network UPS Tools (ou NUT pour les intimes) permet de surveiller l’état d’un onduleur et d’arrêter une ou des machine(s) si le niveau de la batterie devient trop bas.

Installation du paquet « nut » après la mise à jour la liste des paquets disponibles.
aptitude update && aptitude install nut

Editer le fichier « /etc/nut/ups.conf » et remplacer le contenu.
[mge-ellipse-max-1500]
driver = usbhid-ups
port = auto
desc = "MGE Ellipse MAX 1500VA"

Après avoir branché l’onduleur sur un des ports USB libres, vérifions avec la commande les périphériques USB connectés.
lsusb

Voici dans mon cas le résultat obtenu, on peut y voir que l’onduleur est bien connecté.
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 005: ID 043d:0051 Lexmark International, Inc. Laser Printer
Bus 004 Device 002: ID 03f0:6004 Hewlett-Packard DeskJet 5550
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 002: ID 0463:ffff MGE UPS Systems UPS
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 005: ID 10d5:5000 Uni Class Technology Co., Ltd
Bus 001 Device 002: ID 05e3:0608 Genesys Logic, Inc. USB-2.0 4-Port HUB
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Editer le fichier « /etc/nut/upsd.conf » et remplacer son contenu.
# Temps en secondes pendant lequel les données recueillies sont gardées au maximum.
MAXAGE 15

# Interfaces et ports d'écoute.
LISTEN 127.0.0.1 3493

Editer le fichier « /etc/nut/upsd.users » et remplacer son contenu.
[rootnut]
password = motdepassedenut
upsmon master

Editer le fichier « upsmon.conf » et ajouter la ligne suivante dans la section adéquat.
MONITOR mge-ellipse-max-1500@localhost 1 rootnut motdepassedenut master

Editer le fichier /etc/nut/nut.conf et remplacer son contenu.
# Le mode standalone est fait pour les personnes ayant 1 UPS protégeant tout un système local.
# Cela implique de démarrer les 3 couches de NUT (pilote, upsd et upsmon).
MODE=standalone

Démarrer (ou redémarrer) le démon.
/etc/init.d/nut start

Pour vérifier l’état de l’onduleur, ainsi que ses paramètres, la commande upsc est là
upsc mge-ellipse-max-1500
battery.charge: 100
battery.charge.low: 20
battery.runtime: 2006
battery.type: PbAc
device.mfr: MGE UPS SYSTEMS
device.model: Ellipse MAX 1500
device.serial: PbAc
device.type: ups
driver.name: usbhid-ups
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 2
driver.parameter.port: auto
driver.version: 2.4.3
driver.version.data: MGE HID 1.18
driver.version.internal: 0.34
input.sensitivity: normal
input.transfer.boost.low: 185
input.transfer.high: 285
input.transfer.low: 165
input.transfer.trim.high: 265
input.voltage.extended: no
outlet.1.desc: PowerShare Outlet 1
outlet.1.id: 2
outlet.1.status: on
outlet.1.switchable: no
outlet.desc: Main Outlet
outlet.id: 1
outlet.switchable: no
output.frequency.nominal: 50
output.voltage: 230.0
output.voltage.nominal: 230
ups.beeper.status: enabled
ups.delay.shutdown: 20
ups.delay.start: 30
ups.firmware: 1.01
ups.load: 12
ups.mfr: MGE UPS SYSTEMS
ups.model: Ellipse MAX 1500
ups.power.nominal: 1500
ups.productid: ffff
ups.serial: PbAc
ups.status: OL CHRG
ups.timer.shutdown: 0
ups.timer.start: 0
ups.vendorid: 0463

Ajout de périphériques USB à une machine virtuelle sous Xen

Comme sur le logiciel VirtualBox d’Oracle, Xen permet de ponter un périphérique USB présent sur la machine hôte pour le rendre disponible sur une des machines virtuelles.

Affichons la liste des périphériques USB connectés à la machine. Cette liste nous donnera le Vendor et Product ID de chaque périphérique USB.
lsusb

Voici dans mon cas le résultat obtenu.
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 003: ID 043d:0051 Lexmark International, Inc. Laser Printer
Bus 004 Device 002: ID 03f0:6004 Hewlett-Packard DeskJet 5550
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 005: ID 10d5:5000 Uni Class Technology Co., Ltd
Bus 001 Device 002: ID 05e3:0608 Genesys Logic, Inc. USB-2.0 4-Port HUB
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Il suffit ensuite d’ajouter au fichier de configuration de la machine virtuelle (« /etc/xen/mon-vm.cfg » par exemple) les lignes suivantes en remplaçant xxxx par la valeur Vendor du périphérique et yyyy par son Product ID (dans mon cas 043d pour xxxx et 0051 pour yyyy pour avoir l’imprimante Lexmark disponible sur la machine virtuelle).
usb = 1
usbdevice = "host:xxxx:yyyy"

Il se peut qu’un argument (« tablet ») soit déjà déclaré pour la directive « usbdevice ». Il faut absolument le laisser si la machine dispose d’un accès VNC sous peine d’avoir des problèmes de synchronisation entre la souris virtuelle de VNC et la souris physique. D’après pas mal d’articles sur Internet, une limitation dans les scripts de Xen empêcherait de pouvoir déclarer une liste de périphériques USB … Et après tests, je confirme que ces dires … Dommage ! Une mise à jour permettra peut-être un jour de le faire … Il n’est donc pas possible d’avoir pour le moment une ligne ressemblant à ceci :
usbdevice = [ "tablet", "host:043d:0051", "host:03f0:6004" ]

Pour plus d’informations, voir : Virtuatopia.com

Virtualiser une machine Windows sous Xen

Il est facile d’installer une machine Windows sur un serveur Xen. Lors de mes tests, j’ai essayé avec Windows XP, 2003 Server, 2008 Server R2 en 64 bits et aucuns problèmes n’est survenu !

Commençons par l’installation du paquet xen-qemu-dm-4.0 permettant  la prise en charge d’hôtes HVM
aptitude install xen-qemu-dm-4.0

Il nous faut créer les répertoires nécessaires servant à héberger les disques virtuelles et les images de CD/DVD
mkdir -p /home/xen/{domains,images}

Si besoin voici comment faire une copie d’un CD/DVD sur le disque du serveur
dd if=/dev/cdrom of=/home/xen/images/cd-windows.iso

Création du répertoire qui hébergera le disque dur de la machine Windows
mkdir /home/xen/domains/mon-serveur
Création d’un disque dur virtuel pour la machine (10 Gio)

dd if=/dev/zero of=/home/xen/domains/mon-serveur/disk.img bs=1024k count=10000

Créer et éditer le fichier de configuration de la machine virtuelle, dans mon cas, ce sera /etc/xen/mon-serveur.cfg
import os, re
arch = os.uname()[4]
if re.search('64', arch):
arch_libdir = 'lib64'
else:
arch_libdir = 'lib'

kernel = '/usr/lib/xen-4.0/boot/hvmloader'
builder = 'hvm'
memory = 512
shadow_memory = 8
name = "mon-serveur"

vif = ['bridge=eth0']
acpi = 1
apic = 1
disk = [ 'file:/home/xen/domains/mon-serveur/disk.img,hda,w', 'file:/home/xen/images/cd-windows.iso,hdc:cdrom,r']
device_model = '/usr/' + arch_libdir + '/xen-4.0/bin/qemu-dm'

boot = 'dc'
sdl = 0
vnc = 1
vncconsole = 1
vncpasswd = 'secret'

serial = 'pty'
usbdevice = 'tablet'

Lancer la machine virtuelle
xm create mon-serveur.cfg
Il ne reste plus qu’à se connecter à l’aide d’un client VNC (comme UltraVNC Viewer) en renseignant l’IP du serveur et le port 5900 (par défaut) pour procéder à l’installation de Windows.

Mise en place d’un serveur de virtualisation sur une Debian à l’aide de Xen

La virtualisation permet de réduire les coûts et d’utiliser au mieux les ressources, mais il faut savoir qu’il existe deux types de virtualisations :

  1. la para-virtualisation, qui consiste à avoir un noyau xénifié sur la machine virtuelle (modifié pour être compatible Xen). Les accès au matériel physique se font par des appels directs à l’hyperviseur. On dispose donc de bonnes performances.
  2. la virtualisation complète, utilisée par les logiciels comme VirtualBox, VMWare Workstation ou Microsoft VirtualPC où il n’est pas possible d’avoir de noyau modifiable. Dans ce cas, le système de virtualisation virtualise totalement une machine pour héberger la machine virtuelle, elle aura l’impression d’être sur une « vraie » machine. Ce type de virtualisation est surtout utilisé pour les différentes versions de Windows.

Comme d’habitude, le bon réflexe à avoir est de faire des sauvegardes des fichiers de configuration originaux ! Au moins après, il est toujours de revenir en arrière facilement.

Avant de commencer, petite précision du but de ce tutoriel :
– il faut avoir un système LVM fonctionnel
– nous utiliserons le mode bridge de Xen, c’est à dire que les machines virtuelles seront sur le même réseau que le serveur

Commençons par installer les paquets nécessaires
aptitude install xen-hypervisor-4.1-amd64 xen-docs-4.1 xen-utils-4.1 xen-tools

Changement du noyau de démarrage (il faut que l’hyperviseur soit actif pour utiliser Xen)
mv /etc/grub.d/10_linux /etc/grub.d/50_linux

On regénère le fichier de configuration de Grub2
update-grub2

Il faut à présent redémarrer pour démarrer sous le nouveau noyau. Xen 4.1-amd64 doit être en haut de la liste, cela indique que c’est le noyau par défaut.
reboot

Passons maintenant à la configuration de Xen en éditant le fichier « /etc/xen/xend-config.sxp ». Nous allons y activer le mode bridge, voici le contenu de mon fichier.

FICHIER DE CONFIG.

Et remplacer le contenu de « /etc/xen-tools/xen-tools.conf » par les lignes suivantes. Xen-Tools est un ensemble d’outils permettant de créer des machines virtuelles facilement

FICHIER DE CONFIG.

Il est maintenant possible de passer à la création de la première machine virtuelle. Pour cela, Xen-Tools nous sera utile grâce à ce type de commande (en principe, tous les arguments ne sont pas nécessaires, car nous établi les valeurs par défaut à utiliser via le fichier « /etc/xen-tools/xen-tools.conf »)
xen-create-image --hostname=nom-de-la-machine --ip=10.0.0.1 --passwd

Voici une petite liste des arguments possibles :
[generic]–dir : répertoire contenant les images des disques
–size : taille du disque dur principal
–memory : quantité de mémoire (RAM) allouée à la machine
–fs : type du système de fichier
–dist : nom de la distribution (peut-être une distribution Debian comme Lenny ou Ubuntu comme Maverick)
–hostname : nom de la machine
–ip : adresse IP de la machine
–netmask : masque de sous-réseau correspondant à l’IP
–swap : taille du SWAP
–arch : architecture de la machine (amd64 ou i686)
–kernel : emplacement et nom du kernel
–initrd : emplacement et nom de l’image de boot
–mirror : adresse du mirroir Debian ou Ubuntu à utiliser
–passwd : choix du mot de passe de l’utilisateur root de la machine
–boot : pour démarrer la machine après la fin de la création[/generic]

Lancement de notre première machine virtuelle
xm create nom-de-la-machine.cfg

Pour vérifier que la machine soit lancée
xm list

Voici le résultat que j’ai obtenu.
Name ID Mem VCPUs State Time(s)
Domain-0 0 3142 8 r----- 5362.2
nom-de-la-machine 38 128 1 -b---- 1.5

Pour la partie réseau, rien ne pourra égaler le wiki officiel :

En cas de coups durs, aller sur ces sites qui sont de vrais mines :