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/jailsOu dans le répertoire /usr :
# mkdir -p /usr/jails# mkdir /home/jails/testjailAllez dans le répertoire /usr/src et vérifiez si vous avez le code source de FreeBSD.
# cd /usr/src# lsVous 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.
# sysinstallAllez 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-supfileEt 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-supfileAprè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/testjailLorsque 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/otherjailLorsque votre jail est préparé, vous devez apporter quelques modifications dans certains fichiers de configuration.
# vi /home/jails/testjail/etc/rc.confEt vous y mettez :
sendmail_enable="NONE"
sshd_enable="YES"
# cp /etc/resolv.conf /home/jails/testjail/etc/# touch /home/jails/testjail/etc/fstabExé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/devEnsuite, 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.2Exécution du jail :
# jail /home/jails/testjail shell 192.168.2.2 /bin/tcshLorsque vous êtes dans le jail, vous pouvez définir un mot de passe root :
# passwdEnsuite, vous devez ajouter un compte non-root qui vous donnera accès au jail via ssh.
# adduserPour quitter le jail, vous devez utiliser la commande exit.
# exitVotre 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 testjailSi vous voulez obtenir une liste de vos jails, vous pouvez l’obtenir avec cette commande :
# jlsInstallation de xorg et vnc dans le jail à partir des paquets :
# pkg_add –r xorg# pkg_add –r vncPour exécuter vnc sur le compte utilisateur, vous écrivez :
$ vncserverLorsque 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
``Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.