Zentyal como servidor VPN en Proxmox como Openvz

En principio esta combinación no debería suponer mayor complicación, que una instalación similar en una maquina física, pero como veremos a continuación sí hay que tener en cuenta varios particularidades que harán el proceso un poco más complejo de lo que pudiéramos haber pensado en un inicio.

two-offices

La motivación fundamental por la que decidimos realizar este diseño de sistemas, no es otra que optimizar al máximo las capacidades de nuestra máquina (host) en relación a los sistemas virtuales que vamos  desplegar. El uso de proxmox está justificado básicamente por su facilidad para gestionar los sistemas virtualizados y por poder desplegar tanto máquinas OpenVZ como KVM. Decidirnos por Openvz frente a KVM para instalar Zentyal, está fundamentado en el aprovechamiento máximo del HOST, y dado que las aplicaciones que correrán en Zentyal no requieren de una dedicación total del un sistema (KVM) nos decidimos por implantarlo sobre un templare de Ubuntu 10.10 Server en Openvz.

En este artículo nos centraremos en detalles y problemas específicos con los que nos hemos encontrados, no será un HOWTO completo

de la instalación, que de otro modo podréis fácilmente seguir apartar de la recopilación de enlaces que os presentaremos a continuación.

  1. Instalación de Ubuntu 10.10 en Proxmox OpenVZ.

Descargar el template:  http://pve.proxmox.com/wiki/Get_Virtual_Appliances#Ubuntu_Lucid_Standard

Creación de la máquina virtual Openvz: http://pve.proxmox.com/wiki/Installation#Container_.28OpenVZ.29_Virtual_Machines_-_Default

  1. Instalación de Zentyal 2.0 http://trac.zentyal.org/wiki/Document/Documentation/InstallationGuide

  2. Problemas de red e iptables en máquinas OpenVZ:

3.1 Instalar una segunda interfaz de red en openvz. Para nuestra instalación usaremos 2 interfaces de red, una externa y otra interna. En Proxmox desde la interfaz web no hay forma de agregar 2 interfaces de red. Hay que seguir los pasos siguientes:

101 es el ID de nuestro contenedor y vmbr1 es una interfaz bringe que hemos levantado en el host.

vzctl set 101 --netif_add eth1,,,,vmbr1 --save

Enlace de referencia: http://forum.proxmox.com/threads/5008-Network-issue-setting-up-two-networks-(OpenVZ-container)

3.2. Hay que habilitar en el servidor host los módulos necesarios para iptables

Enlace de referencia: http://wiki.openvz.org/Using_NAT_for_VE_with_private_IPs  y http://wiki.openvz.org/Common_Networking_HOWTOs

(enlaces foros: http://forum.openvz.org/index.php?t=msg&goto=42693& http://www.leopoldomaestro.com/habilitar-iptables-para-los-containers-openvz-en-proxmox/)

modprobe ip_conntrack ip_conntrack_enable_ve0=1

3.3. Hay que configurar las máquinas VZ para que soporten los módulos necesarios de iptables

– Modificar /etc/vz/vz.conf e incluir:


IPTABLES="iptable_filter iptable_mangle ipt_limit ipt_multiport ipt_tos ipt_TOS ipt_REJECT ipt_TCPMSS ipt_tcpmss ipt_ttl ipt_LOG ipt_length ip_conntrack ip_conntrack_ftp ip_conntrack_irc ipt_conntrack ipt_state ipt_helper iptable_nat ip_nat_ftp ip_nat_irc ipt_REDIRECT"```
  
  

– Reiniciar el servicio vz.

`/etc/init.d/vz restart`

 

4. OpenVPN sobre OpenVZ

Aquí el principal problema al instalar los módulos de VPN en Zentyal es que por defecto los contenedores VZ no tienen las interfaces virtuales para los túneles de VPN. En esta página se explica detalladamente cómo hay que configurar el host y la máquina virtual VZ.

http://wiki.openvz.org/VPN_via_the_TUN/TAP_device

   

lsmod | grep tun```

modprobe tun

vzctl set 101 --devices c:10:200:rw --save

vzctl set 101 --capability net_admin:on --save

vzctl exec 101 mkdir -p /dev/net

vzctl exec 101 mknod /dev/net/tun c 10 200

vzctl exec 101 chmod 600 /dev/net/tun

vzctl set 101 --devnodes net/tun:rw --save

más enlaces: http://wiki.vpslink.com/TUN/TAP_device_with_OpenVPN_or_Hamachi

http://forum.openvz.org/index.php?t=msg&goto=8117

http://openvpn.net/index.php/access-server/docs/admin-guides/186-how-to-run-access-server-on-a-vps-container.html

  1. Configuración de Zentyal VPN

En este caso nosotros siguiendo las indicaciones de la documentación de Zentyal y por nuestra propia experiencia todo funcionó correctamente, aunque  tuvimos que reiniciar en varias ocasiones el servicio de openvpn porque no se arrancaba correctamente y pusimos manualmente la reglas  de iptables.

Para confirmar que todo está correctamente configurado podéis ejecutar: sudo iptables  -t nat  -L -n   y os debe salir algo similar a esto:


Chain PREROUTING (policy ACCEPT)```

target     prot opt source               destination

premodules  all  --  0.0.0.0/0            0.0.0.0/0

Chain POSTROUTING (policy ACCEPT)

target     prot opt source               destination

postmodules  all  --  0.0.0.0/0            0.0.0.0/0

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination

Chain postmodules (1 references)

target     prot opt source               destination

MASQUERADE  all  --  192.168.161.0/24     0.0.0.0/0

Chain premodules (1 references)

target     prot opt source

Donde 192.168.161.0/24 es el rango para las interfaces virtuales de VPN.

Esperamos que esta especie de manual recopilatorio os sirva para vuestros proyectos de virtualización.


Pablo García

Pablo García