FreeBSD VNC · 4 min read · Jan 24, 2026
Creando una Cárcel Con Servidor VNC En FreeBSD
Creando una Cárcel Con Servidor VNC En FreeBSD
Este artículo explica cómo puedes ejecutar un servidor VNC desde dentro de una cárcel en FreeBSD.
Creando cárcel desde el código fuente:
Crea un directorio donde se almacenarán nuestras cárceles:
# mkdir -p /home/jailsO en el directorio /usr:
# mkdir -p /usr/jails# mkdir /home/jails/testjailVe al directorio /usr/src y verifica si tienes el código fuente de FreeBSD.
# cd /usr/src# lsDeberías ver algo como esto:
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 tienes un directorio vacío o solo un directorio sys, debes instalar el código fuente de FreeBSD:
Puedes hacer esto ejecutando sysinstall o descargar el código fuente desde cvs.
# sysinstallVe a configuración, luego a distribuciones y selecciona “src” y presiona ok. Después de eso deberías tener todo el código fuente en el directorio /usr/src/. Luego debes actualizar tu código fuente con la última versión de cvs. Debes crear un archivo “stable-supfile” en tu directorio home o en otro lugar.
# vi ~/stable-supfileY poner algunas líneas como estas:
# Tu espejo más cercano del código fuente de freebsd, para mí es de Polonia
*default host=cvsup.pl.FreeBSD.org
*default base=/usr
*default prefix=/usr
# para la versión 7.2 de FreeBSD pones 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
A continuación, después de guardar el archivo, puedes actualizar tu código fuente de FreeBSD con csup:
# csup /root/stable-supfileDespués de eso, puedes compilar tu cárcel desde el código fuente:
# cd /usr/src# make world DESTDIR=/home/jails/testjail# make distribution DESTDIR=/home/jails/testjailCuando compiles World una vez, puedes crear nuevas cárceles con dos comandos sin compilar world una vez más:
# make installworld DESTDIR=/home/jails/otherjail# make distribution DESTDIR=/home/jails/otherjailCuando tu cárcel esté preparada, debes hacer algunos cambios en algunos archivos de configuración.
# vi /home/jails/testjail/etc/rc.confY pones allí:
sendmail_enable="NONE"
sshd_enable="YES"
# cp /etc/resolv.conf /home/jails/testjail/etc/# touch /home/jails/testjail/etc/fstabEjecutando la cárcel por primera vez:
Para ejecutar la cárcel, debes montar devfs en la cárcel:
# mount -t devfs devfs /home/jails/testjail/devLuego debes configurar un alias para tu interfaz de red. En mi FreeBSD tengo la interfaz bge0 y el alias lo creo así:
# ifconfig bge0 alias 192.168.2.2Ejecutando la cárcel:
# jail /home/jails/testjail shell 192.168.2.2 /bin/tcshCuando estés en la cárcel, puedes establecer una contraseña de root:
# passwdLuego debes agregar una cuenta no-root que te dará acceso a la cárcel a través de ssh.
# adduserPara salir de la cárcel, debes usar el comando exit.
# exitTu cárcel está casi lista. Debes agregar algunas líneas al archivo /etc/rc.conf y después de eso tu cárcel se iniciará cuando tu servidor se inicie.
# alias para tu interfaz de red
ifconfig_bge0_alias0="192.168.2.2"
# línea que habilita cárceles en freebsd
jail_enable="yes"
# lista de tus cárceles ej. "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 deseas tener el árbol de puertos en la cárcel y no quieres replicarlo, podemos montar el directorio /usr/ports/ en la cárcel con una línea en el archivo /etc/fstab. Línea como esta:
/usr/ports /home/jails/testjail/usr/ports/ nullfs rw,auto 0 0
Iniciando y deteniendo cárceles sin reiniciar el sistema:
# /etc/rc.d/jail start testjail# /etc/rc.d/jail stop testjailSi deseas obtener una lista de tus cárceles, puedes obtenerla con este comando:
# jlsInstalando xorg y vnc en la cárcel desde paquetes:
# pkg_add –r xorg# pkg_add –r vncPara ejecutar vnc en la cuenta de usuario, escribes:
$ vncserverCuando ejecutas vncserver por primera vez, debes configurar una contraseña para la conexión vnc.
Por defecto, cuando te conectas a vnc, se ejecutará twm. Puedes cambiarlo editando el archivo ~/.vnc/xstartup. Debes cambiar la última línea de “twm &” a por ejemplo “wmaker &” para el entorno de WindowMaker.
Para conectarte a la cárcel vnc, debes escribir en vncviewer jail_ip_address y el puerto vnc. Ej. 192.168.2.2:1
Algunos errores con vnc en la cárcel: Cuando tienes un mensaje de colores no reconocidos, debes editar el archivo /usr/local/bin/vncserwer y cambiar la línea:
$cmd .= " -co /usr/X11R6/lib/X11/rgb";
Cuando tenemos el mensaje
!!!!!!!!!!!!!!!!!!!!!!!!!!
no hay pantalla libre en jailname
Debes editar /usr/local/bin/vncserver y cambiar la función pack a sockaddr_in en dos líneas en la función CheckDisplayNumber:
[…]
pack ---> sockaddr_in(6000 +$n, &INADDR_ANY))) {
[…]
pack ---> sockaddr_in(5900 +$n, &INADDR_ANY))) {
[…]
El código debería ser así:
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);
Reenvío de puertos en IPWF para cárceles
Si deseas reenviar algunos puertos a la cárcel, debes haber compilado un kernel de FreeBSD con algunas opciones habilitadas:
options IPFIREWALL
options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPFIREWALL_VERBOSE
options IPFIREWALL_FORWARD
options IPDIVERT
Regla de reenvío de puertos:
ipfw add fwd ip_adres_jail,port_jail tcp from any to adresip_local port_local
ej.
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
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.