Esta pagina se ve mejor con JavaScript habilitado

CBSD Configuración básica de red en Jails/Bhyve

 ·  🎃 kr0m

En artículos anteriores ya explicamos el uso básico de CBSD tanto para Jails como VMs Bhyve, en esta ocasión vamos a analizar los modos de red por defecto en Jails/Bhyve y las opciones que estos nos brindan.

Las secciones que componen el artículo son:


Jails

Alias:

Para proporcionar red a las Jails por defecto se utilizan alias en la interfaz del padre, al ser alias estas son ips del padre y de la Jail simultáneamente, esto implica ciertos problemas si en el padre bindeamos en todas las direcciones disponibles los servicios ya que se solaparán con las ips de las jails.

En el padre debemos evitar los bindeos genéricos como estos:

ListenAddress 0.0.0.0  
listen *

Configurar una ip puede hacerse tanto desde el asistente de creación de una Jail como por comando:

cbsd jset jname=jail1 ip4_addr=“192.168.69.77/24”

Multiples ips:

Para asignar multiples ips a una Jail basta con separarlas por una coma, por supuesto los rangos no tienen porque ser del mismo rango de red:

cbsd jset jname=jail1 ip4_addr=“192.168.69.77/24,192.168.69.78/24”
cbsd jls

JNAME  JID  IP4_ADDR                           HOST_HOSTNAME          PATH                    STATUS
jail1  1    192.168.69.77/24,192.168.69.78/24  jail1.alfaexploit.com  /usr/jails/jails/jail1  On                

Dirección ip compartida entre el padre y las Jails:

Hay que tener en cuenta que los alias de la interfaz del padre se configuran y desconfiguran de forma automática al arrancar/parar la Jail, en caso de tener una única ip compartida entre el padre y las Jails al parar alguna de las Jails eliminaría el alias dejando al padre sin dirección ip y por lo tanto el host quedaría incomunicado.

En estos casos debemos configurar las Jails para que no llamen a los scripts de configuración/desconfiguración de alias, accedemos al asistente de configuración y cambiamos la opción interface a disable:

cbsd jconfig jname=jail1


Y al campo ip4_addr le asignamos la misma ip que tenga el padre 192.168.69.77 -> 192.168.69.4:


Nos advertirá de que se ha detectado una duplicidad de ip en la red, pero es normal, aceptamos los cambios:

Finalmente quedará así:

Consultamos las Jails existentes:

cbsd jls

JNAME  JID  IP4_ADDR      HOST_HOSTNAME          PATH                    STATUS
jail1  0    192.168.69.4  jail1.alfaexploit.com  /usr/jails/jails/jail1  Off  

Ahora si paramos la Jail no afectará a la dirección ip del padre.

NOTA: En estos casos en los que solo se dispone de una dirección ip habrá que configurar los servicios de las Jails en puertos distintos para que no se solapen entre el padre/Jails o Jails/Jails.

Floatresolv:

Otra opción interesante es floatresolv, mediante esta podremos resetear los valores del fichero /etc/resolv.conf en cada reinicio de la Jail a valores definidos por CBSD.

Paramos la Jail:

cbsd jstop jail1

Configuramos el parámetro desde el asistente:

cbsd jconfig jname=jail1

Arrancamos de nuevo la Jail:

cbsd jstart jail1

Los valores por defecto son:

nameserver 9.9.9.9   # CBSD makeresolv function  
nameserver 149.112.112.112   # CBSD makeresolv function

Si se modifica el fichero en cada reinicio de la Jail volverá a tener el contenido original.

mkhostsfile:

Esta opción generará una entrada adicional en el fichero /etc/hosts con la dirección ip y el nombre de la Jail, si se elimina la entrada manualmente en el próximo reinicio se regenerará.

Paramos la Jail:

cbsd jstop jail1

Configuramos la Jail mediante el asistente:

cbsd jconfig jname=jail1

Arrancamos la Jail:

cbsd jstart jail1

La entrada generada en este caso es:

192.168.69.4 jail1.alfaexploit.com # CBSD autotpl for mkhostsfile

Como nota final recalcar que el fichero hosts es copiado del padre a las Jails, así que habrá que evitar configuración sensible en el hosts del padre ya que podría suponer un leak de la estructura interna de los servidores o direccionamiento utilizado.


Bhyve

Bridge:

Para proporcionar red a una VM Bhyve se crean dos interfaces tap en el padre, una para la VM y otra para el padre, estas dos interfaces junto con la interfaz física se meten dentro de un bridge.

La configuración de red se regirá por la configuración que se realice mediante el instalador del SO invitado ignorando los parámetros del asistente. Estos parámetros simplemente se guardan en la base de datos SQLite por si fuese necesaria la integración con algún servicio externo como puede ser un servidor DHCP, de este modo podríamos ejecutar un script de configuración del DHCP en base a la IP indicada y la dirección MAC de la VM justo antes de arrancarla, en este artículo podemos ver un ejemplo completo.

Si te ha gustado el artículo puedes invitarme a un RedBull aquí