From Scratch Let the BIT rock

30mar/102

Thinstation : client leger en mode PXE

Thinstation est une solution Opensource de déploiement d'un client léger, c'est à dire la possibilité d'utiliser un ordinateur (ayant la capacité de booter en ) pour lancer une connexion vers un serveur central hébergeant le système que vous souhaitez faire tourner. Ce client léger peut se connecter par exemple à une session Citrix, ,  ou tout simplement à un poste distant.

Si vous vous posez la question de l'utilité d'un tel système, il a trouvé tout son sens il y a peu de temps chez nous quand s'est posé la question de la pandémie grippale.

Si les utilisateurs sont bloqués chez eux , comment leur permettre de travailler à distance sans prendre de risque. Installer un client VPN sur leur poste personnel est trop compliqué sur un parc de poste privé trop hétérogène (et risque de transfert de virus en local dans le tunnel VPN vers notre LAN d'entreprise). De plus, il devient compliqué de prendre la main à distance sur ces postes pour assister les utilisateurs en cas de problème.

Dans une situation de crise, on peut imaginer que l'ensemble des bureaux sont vides et donc les ordinateurs non utilisés. Grâce à Thinstation (TS), on boot le poste privé en PXE (pas de risque de virus), une authentification est demandée pour monter un tunnel vpn, puis une connexion TSE est initiée entre le poste privé et le poste de travail de cet utilisateur sur le LAN d'entreprise. L'utilisateur retrouve donc son environnement de travail comme si il se trouvait à son bureau. (et le service informatique a accès à l'ensemble des postes pour faire tout le travail de maintenance du parc). Sympa non ?

Preparation de l'environnement

Je suis parti des sources de Thinstation pour modifier cette distribution.

su (saissisez votre mot de passe root)
cd /usr/src
wget http://downloads.sourceforge.net/project/thinstation/thinstation/thinstation-2.2/Thinstation-2.2.2c.tar.gz?use_mirror=freefr
tar zvxf Thinstation-2.2.2c.tar.gz
cd Thinstation-2.2.2c

L'arborescence de ce dossier est en faite la caisse à outil qui va nous permettre de créer le client.
Ce client sera composé de différents fichiers et ne devrait pas faire plus de 20 Mo. A vous de choisir par la suite de fournir ce client sur un fichier ou bien sur un CDrom. Pour la présentation de Thinstation, j'ai préféré le créer sous forme de LiveCD.

Paramétrage du client Thinstation

Tout d’abord, il faut modifier le fichier « build.conf » qui permet de choisir et d’intégrer des pilotes et des fonctionnalités supplémentaires pour le LiveCD.

vim build.conf

J’ai sélectionné l’ensemble des cartes réseaux disponibles ainsi que les drivers vidéos. Ça ne pèse pas bien lourd et permet un maximum de compatibilité avec les postes clients.
J'ai désélectionné les pilotes TokenRing, wireless, PCMCIA, modem, sons et les applications inutiles pour notre projet, puis choisi "Openvpn" pour la gestion du tunnel sécurisé SSL.

module             acpi #
module             agpgart #
module             ali-agp #
module             amd64-agp #
module             amd-k7-agp #
module             ati-agp #
module             efficeon-agp #
module             intel-agp #
module             nvidia-agp #
module             sis-agp #
module             via-agp #
module             yenta_socket #
module             i82365 #
module             tcic #
module             3c501 #
module             3c503 #
module             3c505 #
module             3c507 #
module             3c509 #
module             3c515 #
module             3c59x #
module             8139too #
module             8139cp #
module             ac3200 #
module             amd8111e #
module             at1700 #
module             b44 #
module             cs89x0 #
module             de4x5 #
module             de2104x #
module             depca #
module             dgrs #
module             dmfe #
module             hp100 #
module             e100 #
module             e2100 #
module             eepro #
module             eepro100 #
module             eexpress #
module             epic100 #
module             eth16i #
module             ewrk3 #
module             fealnx #
module             forcedeth #
module             hp-plus #
module             hp #
module             lp486e #
module             lance #
module             ne        io=0x300 #
module             ne2k-pci #
module             natsemi #
module             ni5010 #
module             ni52 #
module             ni65 #
module             pcnet32 #
module             sis900 #
module             smc-ultra #
module             smc9194 #
module             starfire #
module             sundance #
module             tlan #
module             typhoon #
module             tulip #
module             via-rhine #
module             wd #
module             winbond-840 #
module             xircom_cb #
module             xircom_tulip_cb #
module             acenic #
module             bnx2 #
module             dl2k #
module             e1000 #
module             ns83820 #
module             hamachi #
module             yellowfin #
module             r8169 #
module             sis190 #
module             skge #
module             sk98lin #
module             sky2 #
module             tg3 #
module             via-velocity #
module             cxgb #
module             ixgb #
module             s2io #
module             usb-hid #
module             usb-cdrom #
module             ide-cd #
module             ahci #
module             ata_piix #
module             sata_nv #
module             sata_promise #
module             sata_sil #
module             sata_sil24 #
module             sata_sis #
module             sata_via #
module             isofs #
module             vfat #
module             ntfs #
module             ext2 #
module             ext3 #
module             supermount #
package            hwclock #
package            rdate #
package            xorg6-tinyx #
package            xf3-svga #
package            xf3-s3 #
package            xf3-vmware #
package            xorg6vnc #
package            xorg6-apm #
package            xorg6-ark #
package            xorg6-ati #
package            xorg6-chips #
package            xorg6-cirrus #
package            xorg6-cyrix #
package            xorg6-glint #
package            xorg6-i740 #
package            xorg6-i810 #
package            xorg6-mga #
package            xorg6-neomagic #
package            xorg6-nsc #
package            xorg6-nv #
package            xorg6-r128 #
package            xorg6-radeon #
package            xorg6-rendition #
package            xorg6-s3 #
package            xorg6-s3virge #
package            xorg6-savage #
package            xorg6-siliconmotion #
package            xorg6-sis #
package            xorg6-tdfx #
package            xorg6-tga #
package            xorg6-trident #
package            xorg6-tseng #
package            xorg6-vesa #
package            xorg6-via #
package            xorg6-vmware #
package            keymaps-fr #
package            rdesktop #
package            icewm #
package            xtdesk #
package            openvpn #
package            e3 #

Dans la seconde partie de ce fichier de configuration, soyez vigilent et modifiez les mots de passe selon vos besoins. Vous pouvez aussi définir la résolution par défaut ainsi que le nom de votre client (pour faire pro :p).

param   rootpasswd       motdepasseroot#
param   xorgvncpasswd motdepassevnc#
param   storagepasswd motdepassestorage#
param   dialuppasswd     motdepassedialup#
param   sambapasswd    motdepassesamba#
param   bootlogo           true #
param   bootresolution   1024x768 #
param   defaultconfig     thinstation.conf.buildtime #
param   basename         Nomdevotreclient#
param   basepath           . #
param   localpkgs          false #
param   fulllocales          false #
param   icaencryption     false #
param   bootverbosity    3 #
param   icaurl    file://var/www/TSoM/installs/en.linuxx86.tar.gz #
param   firefoxurl           file://var/www/TSoM/installs/2.3/firefox-2.x-current.tar.gz #
param   flashurl             file://var/www/TSoM/installs/flashplayer/current/install_flash_player_9_linux.tar.gz #
param   nxurl     file://var/www/TSoM/installs/nxclient-3.x-current.i386.tar.gz #
param   2xurl     file://var/www/TSoM/installs/2xApplicationServerClient3.tar.bz2 #
param   javaurl file://var/www/TSoM/installs/jre-1_5_0_06-linux-i586.bin #
param   tarantellaurl      file://var/www/TSoM/installs/tnci3li.tar #

Puis on modifie le fichier de configuration fonctionnel « thinstation.conf.buildtime », c'est à dire la façon dont le LiveCD va démarrer.

vim thinstation.conf.buildtime

Dans ce fichier se trouve la première partie de la configuration, la seconde se trouvant dans un autre dossier que nous étudierons plus loin pour la personnalisation du client.

AUDIO_LEVEL=67
KEYBOARD_MAP=fr
TIME_ZONE="UTC+1"
SYSLOG_SERVER=local
USB_ENABLED=On
DAILY_REBOOT=On
CUSTOM_CONFIG=Off
RECONNECT_PROMPT=AUTO
SCREEN=0
WORKSPACE=1
AUTOSTART=On
ICONMODE=AUTO

SCREEN_RESOLUTION="1280x1024"
SCREEN_COLOR_DEPTH="16"
SCREEN_BLANK_TIME=100
SCREEN_STANDBY_TIME=200
SCREEN_SUSPEND_TIME=300
SCREEN_OFF_TIME=600
MOUSE_RESOLUTION=100
X_DRIVER_OPTION1="swcursor On"
NET_HOSTNAME=Client
STORAGE_CONFIG2=/mnt/cdrom

Modification des parametres openvn

Nous avons activé un module pour intégrer openvpn dans le LiveCD. Malheureusement, ce module est pré-paramétré pour ne fonctionner qu'en mode tap (bridge). Il faut donc modifier les paramètres de openvpn pour pouvoir l'utiliser en mode tun (tunnel).

Pourquoi ce choix du mode tun ? Dans le cadre de ce projet, nous sommes en train de préparer le client sou la forme d'un LiveCD. Mais il faut aussi prévoir l'autre "bout" du tunnel. Le choix s'est porté sur un Ipcop associé au module "Zérina" permettant d'administrer un openvpn. C'est donc l'Ipcop qui créera le certificat client ainsi que le mot de passe associé. Le seul hic est que ce module Zérina, à l'inverse du module Thinstation, ne peut fonctionner qu'en mode tun !!!

Nous allons donc jusqu'au fichier de configuration de Openvpn.

vim packages/openvpn/etc/openvpn/client.tpl

Les paramètres actuelles sont les suivants.

Remplacez la totalité de cette configuration par la suivante.

auth-user-pass
tls-client
client
dev tun
proto $OPENVPN_PROTO
tun-mtu 1400
remote $OPENVPN_SERVER
port $OPENVPN_PORT
pkcs12 client.p12
cipher BF-CBC
comp-lzo
verb 3
ns-cert-type server

Ce module Openvon se lance durant le runlevel rc0, c'est-à-dire parmi les tous premiers scripts au démarrage du LiveCD, et notamment avant le chargement du clavier français (Ce qui créé comme effet de bord que la demande des identifiants de connexion se fait avec un clavier qwerty… beurk…).
En passant le chargement du script d’authentification Openvpn sur le runlevel rc5 (chargement de l’interface graphique), le script de gestion du clavier azerty est déjà chargé donc il n’y a plus de problème. Pour cela, il suffit de renommer le dossier "rc0.d" en "rc5.d".

cd packages/openvpn/etc
mv rc0.d rc5.d

Vous pouvez fouiller dans cette arborescence pour changer par exemple la page de Splash Screen mais c'est un détail. Votre client est terminé et vous pouvez créer l'iso.

cd /usr/src/Thinstation-2.2.2c
./build

Le résultat est dans le dossier suivant.

cd boot-images/iso

Personnalisation de l'archive

En l’état, cet iso peut être gravé mais il manque les paramètres de connexion d’Openvpn (adresse IP de connexion, port, protocole)  ainsi que l’adresse IP du poste à accéder en RDP sur notre domaine. Faire les derniers réglages s'avérer extrêmement simple sous Windows avec la boite à outils rebuild.

Récupérez cette boite à outils ainsi que le fichier iso que nous avons créé dans l'étape précédente. Décompressez ces fichiers.

Le fichier iso contient 5 fichiers.

Copiez-les dans dans le répertoire cd-files du rebuild-iso.

On modifie le fichier isolinux.cfg car de nombreux postes un peu anciens réagissent mal à la gestion d’énergie (acpi). On le désactive donc durant le chargement du LiveCD en ajoutant la commande "acpi=off".

timeout 0
default vmlinuz
append initrd=initrd load_ramdisk=1 ramdisk_blocksize=4096     root=/dev/ram0 ramdisk_size=524288 console=ttyS3 acpi=off splash=silent vga=791

La personnalisation du LiveCD se fait en intégrant un dossier « thinstation.profile » au même endroit que les 5 fichiers de l'iso.
Ce dossier doit contenir le certificat utilisé pour la connexion Openvpn : LE NOM DE CE CERTIFICAT DOIT OBLIGATOIREMENT ETRE « CLIENT.P12 »

Vous pouvez remarquer qu'il est nécessaire d'ajouter un second fichier nommé thinstation.conf.user. On y trouve les informations du poste distant en RDP ainsi que les valeurs des variables du fichier de configuration Openvpn.

SESSION_0_TITLE="remoteRDP0 "
SESSION_0_TYPE=rdesktop
SESSION_0_RDESKTOP_SERVER=adresse-ip-du-poste-dentreprise cible
SESSION_0_SCREEN=0
SESSION_0_RDESKTOP_OPTIONS="-u 'compte-utilisateur-domaine-windows' -d "nom-du-domaine""
OPENVPN_SERVER="adresse-ip-public-du-serveur-ipcop"
OPENVPN_PORT="443"
OPENVPN_PROTO="tcp-client"

La personnalisation du CD est terminée et il faut maintenant créer l’iso. Pour cela, il suffit de cliquer sur « rebuild-iso.bat » qui va créer l’iso dans la seconde.

Conclusion

Le fonctionnement de ce LiveCD est limité à un fonctionnement sur un poste fixe (pas de portable car nous avons enlevé les drivers Wireless). De plus, le poste cible doit se trouver sur un réseau local non routé (donc bridgé) de façon à ce que l’ensemble du flux aille vers ce poste.

Enfin, il peut s’avérer, suivant l’ancienneté du poste, que la carte réseau ne soit pas reconnue.

Mots clefs : , , , ,


Commentaires (2) Trackbacks (0)
  1. Bonjour,

    Pas mal, Pour ma part j’ essaie de faire du Rdesktop et je galère pas mal.
    Je ne sais plus ou donner de la tête…
    Je pense être près du but mais je ne vois pas ou cela coince.
    Pouvez vous m’aider?

  2. Je dois avouer ne pas avoir utilisé rdesktop mais plutôt le vncviewer.


Leave a comment

(required)

Aucun trackbacks pour l'instant