Jails de FreeBSD

Antes de que Linux supiese lo que es un contenedor o un Docker, FreeBSD ya tenía su manera de aislar procesos y mas recientemente, recursos de la máquina sin tener que virtualizar propiamente dicho (aunque sigue siendo por definición una máquina virtual)

Encontrarás respuestas mas esclarecedoras en el handbook

Creación de una Jail

Lo mas fácil es usar un gestor de jails como bastillebsd pero yo creé jails manualmente antes de usar Bastille, y migrar a bastille no fue precisamente fácil, así que sigo haciendolo de la manera por defecto y no hay demasiado dolor. Se deben crear en /etc/jail.conf, por ejemplo, para crear una jail básica:

/etc/jail.conf
ejemplo {
  # STARTUP/LOGGING
  exec.start = "/bin/sh /etc/rc";
  exec.stop = "/bin/sh /etc/rc.shutdown";
  exec.consolelog = "/var/log/jail_console_${name}.log";
 
  # PERMISSIONS
  allow.raw_sockets;
  exec.clean;
  mount.devfs;
 
  # HOSTNAME/PATH
  host.hostname = "${name}";
  path = "/stranger/jails/${name}";
 
  # NETWORK
  ip4.addr = 192.168.1.166;
  interface = bge4;
}

Esto creara una jail llamada “ejemplo”, que tendrá su root en /stranger/jails/ejemplo. Para instalar ahí un sistema base, podemos usar el comando “bsdinstall”

bsdinstall jail /stranger/jails/ejemplo

Lo que harías si fueses listo, es crear /stranger/jails/template como un FS de ZFS, hacer bsdinstall jail /stranger/jails/template y cuando necesites crear una jail, hacerlo con zfs send stranger/jails/template@snap || zfs recv stranger/jails/nueva_jail

Esto te permite crear un FS para cada jail, para darles cuotas de disco y todo eso, además de que es mas fácil crear una jail así.

Una vez finalice la instalación, puedes iniciar la jail con service jail start ejemplo y verla con el comando jls. Aquí un ejemplo del comando jls en un entorno donde ya se han creado distintas jails y algunas no tan básicas. Debido a que no me fío una mierda, las IPs de las máquinas están censuradas.

~ [icarus] % jls
   JID  IP Address      Hostname                      Path
     1  192.168.1.xxx   mc                            /stranger/jails/mc
     2  192.168.1.xxx   shimmie2                      /stranger/jails/shimmie2
     3  192.168.1.xxx   sakisafe                      /stranger/jails/sakisafe
     4  192.168.1.xxx   dokuwiki                      /stranger/jails/dokuwiki
     5  192.168.1.xxx   forgejo                       /stranger/jails/forgejo
     6                  grafana                       /stranger/jails/grafana
     7                  wireguard                     /stranger/jails/wireguard
     8  192.168.1.xxx   build                         /stranger/jails/build
     9  192.168.1.xxx   ansible                       /stranger/jails/ansible
    10  192.168.1.xxx   archivebox                    /stranger/jails/archivebox
    11  192.168.1.xxx   jellyfin                      /stranger/jails/jellyfin

Jails VNET

TODO: Consulte el handbook de mientras