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
- Multiples ips
- Dirección ip compartida entre el padre y las Jails
- Floatresolv
- mkhostsfile -
Bhyve:
- Bridge
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:
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 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:
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:
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:
Configuramos el parámetro desde el asistente:
Arrancamos de nuevo la Jail:
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:
Configuramos la Jail mediante el asistente:
Arrancamos la Jail:
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.