FreeBSD Jail · 5 min read · Jan 24, 2026

Créer un Jail Avec Serveur VNC Sur FreeBSD

Créer un Jail Avec Serveur VNC Sur FreeBSD

Cet article explique comment vous pouvez exécuter un serveur VNC depuis un jail sur FreeBSD.

Création d’un jail à partir des sources :

Créez un répertoire où nos jails seront stockés :

# mkdir -p /home/jails

Ou dans le répertoire /usr :

# mkdir -p /usr/jails
# mkdir /home/jails/testjail

Allez dans le répertoire /usr/src et vérifiez si vous avez le code source de FreeBSD.

# cd /usr/src
# ls

Vous devriez voir quelque chose comme ça :

COPYRIGHT               contrib                 release
LOCKS                   crypto                  rescue
MAINTAINERS             etc                     sbin
Makefile                games                   secure
Makefile.inc1           gnu                     share
ObsoleteFiles.inc       include                 sys
README                  kerberos5               tools
UPDATING                lib                     usr.bin
bin                     libexec                 usr.sbin

Si vous avez un répertoire vide ou seulement un répertoire sys, vous devez installer le code source de FreeBSD :
Vous pouvez le faire en exécutant sysinstall ou en téléchargeant le code source depuis cvs.

# sysinstall

Allez dans configuration puis dans distributions et sélectionnez “src” et appuyez sur ok. Après cela, vous devriez avoir tout le code source dans le répertoire /usr/src/. Ensuite, vous devez mettre à jour votre code source avec la dernière version de cvs. Vous devez créer un fichier “stable-supfile” dans votre répertoire personnel ou ailleurs.

# vi ~/stable-supfile

Et mettez-y quelques lignes comme ça :

# Votre miroir le plus proche du code source de freebsd, pour moi c'est de Pologne
*default host=cvsup.pl.FreeBSD.org
*default base=/usr
*default prefix=/usr
# pour la version 7.2 de FreeBSD vous mettez RELENG_7_2 7.1 - RELENG_7_1 7.0 - RELENG_7_0 6.4 RELENG_6_4
*default release=cvs tag=RELENG_7_2
*default delete use-rel-suffix
*default compress
src-all

Ensuite, après avoir enregistré le fichier, vous pouvez mettre à jour votre code source FreeBSD avec csup :

# csup /root/stable-supfile

Après cela, vous pouvez compiler votre jail à partir du code source :

# cd /usr/src
# make world DESTDIR=/home/jails/testjail
# make distribution DESTDIR=/home/jails/testjail

Lorsque vous compilez une fois World, vous pouvez créer de nouveaux jails avec deux commandes sans recompiler world une fois de plus :

# make installworld DESTDIR=/home/jails/otherjail
# make distribution DESTDIR=/home/jails/otherjail

Lorsque votre jail est préparé, vous devez apporter quelques modifications dans certains fichiers de configuration.

# vi /home/jails/testjail/etc/rc.conf

Et vous y mettez :

sendmail_enable="NONE"
sshd_enable="YES"
# cp /etc/resolv.conf /home/jails/testjail/etc/
# touch /home/jails/testjail/etc/fstab

Exécution du jail pour la première fois :

Pour exécuter le jail, vous devez monter devfs dans le jail :

# mount -t devfs devfs /home/jails/testjail/dev

Ensuite, vous devez configurer un alias pour votre interface réseau. Dans mon FreeBSD, j’ai l’interface bge0 et l’alias que je crée comme ça :

# ifconfig bge0 alias 192.168.2.2

Exécution du jail :

# jail /home/jails/testjail shell 192.168.2.2 /bin/tcsh

Lorsque vous êtes dans le jail, vous pouvez définir un mot de passe root :

# passwd

Ensuite, vous devez ajouter un compte non-root qui vous donnera accès au jail via ssh.

# adduser

Pour quitter le jail, vous devez utiliser la commande exit.

# exit

Votre jail est presque prêt. Vous devez ajouter quelques lignes au fichier /etc/rc.conf et après cela, votre jail démarrera lorsque votre serveur démarrera.

# alias pour votre interface réseau
ifconfig_bge0_alias0="192.168.2.2"
# ligne qui active les jails dans freebsd
jail_enable="yes"
# liste de vos jails ex. "testjail otherjail httpjail sshjail"
jail_list="testjail"
jail_testjail_rootdir="/home/jails/testjail"
jail_testjail_hostname="testjail"
jail_testjail_ip="192.168.2.2"
jail_testjail_exec_start="/bin/sh /etc/rc"
jail_testjail_exec_stop="/bin/sh /etc/rc.shutdown"
jail_testjail_devfs_enable="YES"

Si vous voulez avoir l’arbre des ports dans le jail et ne pas vouloir le répliquer, nous pouvons monter le répertoire /usr/ports/ dans le jail avec une ligne dans le fichier /etc/fstab. Une ligne comme celle-ci :

/usr/ports              /home/jails/testjail/usr/ports/         nullfs  rw,auto 0 0

Démarrer et arrêter les jails sans redémarrer le système :

# /etc/rc.d/jail start testjail
# /etc/rc.d/jail stop testjail

Si vous voulez obtenir une liste de vos jails, vous pouvez l’obtenir avec cette commande :

# jls

Installation de xorg et vnc dans le jail à partir des paquets :

# pkg_add –r xorg
# pkg_add –r vnc

Pour exécuter vnc sur le compte utilisateur, vous écrivez :

$ vncserver

Lorsque vous exécutez vncserver pour la première fois, vous devez configurer un mot de passe pour la connexion vnc.

Par défaut, lorsque vous vous connectez à vnc, twm sera exécuté. Vous pouvez le changer en modifiant le fichier ~/.vnc/xstartup. Vous devez changer la dernière ligne de “twm &” à par exemple “wmaker &” pour l’environnement WindowMaker.

Pour vous connecter au jail vnc, vous devez écrire dans vncviewer jail_ip_address et le port vnc. Ex. 192.168.2.2:1

Certaines erreurs avec vnc dans le jail : Lorsque vous avez un message de couleurs non reconnues, vous devez éditer le fichier /usr/local/bin/vncserwer et changer la ligne :

$cmd .= " -co /usr/X11R6/lib/X11/rgb";  

Lorsque nous avons le message
!!!!!!!!!!!!!!!!!!!!!!!!!!
aucun affichage libre sur le nom du jail

Vous devez éditer /usr/local/bin/vncserver et changer la fonction pack en sockaddr_in dans deux lignes de la fonction CheckDisplayNumber :

[…]
pack ---> sockaddr_in(6000 +$n, &INADDR_ANY))) {
[…]
pack ---> sockaddr_in(5900 +$n, &INADDR_ANY))) {
[…]

Le code devrait être comme ceci :

sub CheckDisplayNumber
{
    local ($n) = @_;
    socket(S, $AF_INET, $SOCK_STREAM, 0) || die "$prog: socket failed: $!\n";
    eval 'setsockopt(S, &SOL_SOCKET, &SO_REUSEADDR, pack("l", 1))';
    if (!bind(S, sockaddr_in(6000 + $n, &INADDR_ANY))) {
        close(S);
        return 0;
    }
    close(S);
    socket(S, $AF_INET, $SOCK_STREAM, 0) || die "$prog: socket failed: $!\n";
    eval 'setsockopt(S, &SOL_SOCKET, &SO_REUSEADDR, pack("l", 1))';
    if (!bind(S, sockaddr_in(5900 + $n, &INADDR_ANY))) {
        close(S);
        return 0;
    }
    close(S);

Redirection de port dans IPWF pour les jails

Si vous voulez rediriger certains ports vers le jail, vous devez avoir compilé un noyau FreeBSD avec certaines options activées :

options  IPFIREWALL
options  IPFIREWALL_DEFAULT_TO_ACCEPT
options  IPFIREWALL_VERBOSE
options  IPFIREWALL_FORWARD
options  IPDIVERT

Règle de redirection de port :

ipfw add fwd ip_adres_jail,port_jail tcp from any to adresip_local port_local
ex.
ipfw add fwd 192.168.2.2,21 tcp from any to me 21
ipfw add fwd 192.168.2.2,21 tcp from any to 72.46.154.23 21

``
Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.