Instalación de plataforma XEN en Debian Squeeze
- (En preparación ...)
Se indican a continuación una secuencia de pasos que puede seguirse para la instalación de la plataforma de virtualización XEN. La configuración a obtener en el servidor de virtualización es la siguiente:
- Sistema operativo Debian squeeze, arquitectura x86_64.
- Manejo del almacenamiento en disco mediante volúmenes lógicos (LVM2)
- Partición / en un volúmen lógico.
- Partición /var en un volúmen lógico.
- Dos interfaces de red integradas con bonding en software.
Secuencia de pasos
- Instalar el sistema base estándar Debian Squeeze x86-64 con el almacenamiento en disco basado en volúmenes lógicos. Colocar / en volúmen lógico, /var en un volumen lógico y dejar en el grupo de volumenes espacio disponible para los volúmenes lógicos que se asignarán a los domU. En /var/lib debe quedar espacio suficiente para guardar las imágenes de la memoria de los domU cuando se realicen operaciones save y restore.
- Seleccionar sha512 como hash para almacenar las claves y deshabilitar el uso de claves nulas:
- En /etc/pam.d/common-password
- Cambiar:
password [success=1 default=ignore] pam_unix.so obscure sha512
- Por:
password [success=1 default=ignore] pam_unix.so obscure sha512 rounds=1048576
- Cambiar las claves de root y de usuario que se crearon en la instalación del sistema, para que queden almacenadas con el hash sha512.
- Instalar paquetes:
- openssh-server vlan ifenslave
- Configurar sshd_config:
- Sólo recibir conexiones en la interface de administración:
ListenAddress X.X.X.X
- No permitir entrada a root:
PermitRootLogin no
- Sólo permitir entrada al usuario creado en la IP que se asigne a la estación de trabajo designada para administrar el dom0:
AllowUsers username@Y.Y.Y.Y
- Sólo recibir conexiones en la interface de administración:
- Agregar el módulo bonding a la lista del proceso de arranque del sistema
- En el archivo /etc/modules agregar la línea
bonding
- En el archivo /etc/modules agregar la línea
- Configurar el módulo bonding:
- Crear el archivo /etc/modprobe.d/options.conf con la línea
options bonding mode=802.3ad xmit_hash_policy=layer2+3 miimon=100 downdelay=200 updelay=200
- Activar el módulo bonding
modprobe bonding
- Crear el archivo /etc/modprobe.d/options.conf con la línea
- Configurar parámetros del módulo conntrack
- Agregar las siguientes líneas al archivo /etc/sysctl.conf:
#Incrementar el límite de memoria para el módulo conntrack net.netfilter.nf_conntrack_max=131072
- Agregar la siguiente línea al archivo /etc/modprobe.d/options.conf:
options nf_conntrack hashsize=131072
- Agregar las siguientes líneas al archivo /etc/sysctl.conf:
- Configurar /etc/network/interfaces para activar la interfaz bond0 y las interfaces de vlan del dom0:
auto lo iface lo inet loopback auto bond0 iface bond0 inet manual up /sbin/ip link set dev bond0 up up /sbin/ip link set dev eth0 up up /sbin/ip link set dev eth1 up up /sbin/ifenslave bond0 eth0 eth1 down /sbin/ifenslave -d bond0 eth0 eth1 down /sbin/ip link set dev bond0 down down /sbin/ip link set dev eth1 down down /sbin/ip link set dev eth0 down #Ejemplo de interfaz de vlan, nnnn es el número de vlan a configurar auto bond0.nnnn iface bond0.nnnn inet static address xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx
- Configurar los puertos del switch donde se conectan eth0 y eth1 para que formen un canal 802.3ad (link-aggregation en los 3com, port-channel en los cisco y similares, en ambos con protocolo lacp activado en el canal (channel group mode auto en cisco y similares) )
- Reiniciar dispositivos de red para activar la configuración:
invoke-rc.d networking restart
- Reiniciar el servicio ssh para activar la nueva configuración:
invoke-rc.d ssh restart
(Los siguientes pasos pueden ahora realizarse de manera remota, via ssh)
- Instalar y configurar agente snmp
aptitude install snmpd
- En default/snmp:
- Cambiar la opción "-Lsd" por "-LS5d" en la variable SNMPDOPTS
- En snmp/snmpd.conf
- Cambiar línea:
agentAddress udp:127.0.0.1:161
- por:
agentAddress udp:xx.xx.xx.xx:161 (ip de monitoreo del DomU)
- Cambiar líneas:
# system + hrSystem groups only view systemonly included .1.3.6.1.2.1.1 view systemonly included .1.3.6.1.2.1.25.1
- por:
# system + hrSystem + interfaces groups only view systemonly included .1.3.6.1.2.1.1 view systemonly included .1.3.6.1.2.1.25.1 view systemonly included .1.3.6.1.2.1.2.2.1 view systemonly included .1.3.6.1.2.1.31.1.1.1 view systemonly included .1.3.6.1.2.1.4.20.1.2 view systemonly included .1.3.6.1.4.1.2021
- Modificar línea:
rocommunity public default -V systemonly
- de la forma:
(red de monitorio del DomU)
v
rocommunity public xx.xx.xx.240/28 -V systemonly
- Modificar línea:
rouser authOnlyUser
- en la forma:
# rouser authOnlyUser
- Cambiar líneas:
# At least one 'mountd' process proc mountd # No more than 4 'ntalkd' processes - 0 is OK proc ntalkd 4 # At least one 'sendmail' process, but no more th an 10 proc sendmail 10 1
- por:
# At least one 'sshd' process proc sshd # No more than 4 'ntalkd' processes - 0 is OK #proc ntalkd 4 # At least one 'sendmail' process, but no more than 10 #proc sendmail 10 1
- Cambiar líneas:
# send SNMPv1 traps trapsink localhost public
- por:
# send SNMPv1 traps # trapsink localhost public
- Cambiar líneas:
# Remember to activate the 'createUser' lines above iquerySecName internalUser rouser internalUser # generate traps on UCD error conditions defaultMonitors yes # generate traps on linkUp/Down linkUpDownNotifications yes
- por:
# Remember to activate the 'createUser' lines above #iquerySecName internalUser #rouser internalUser # generate traps on UCD error conditions #defaultMonitors yes # generate traps on linkUp/Down #linkUpDownNotifications yes
- Cambiar líneas:
extend test1 /bin/echo Hello, world! extend-sh test2 echo Hello, world! ; echo Hi there ; exit 35
- por:
# extend test1 /bin/echo Hello, world! # extend-sh test2 echo Hello, world! ; echo Hi there ; exit 35
- Cambiar líneas:
# Run as an AgentX master agent master agentx
- por:
# Run as an AgentX master agent # master agentx
- En snmp/snmptrapd:
- Agregar línea:
(ip de monitoreo del DomU)
v
snmpTrapdAddr udp:xx.xx.xx.xx
- Reiniciar snmpd
- Instalar y configurar ntp. (En el ejemplo un solo servidor ntp y se ignoran los paquetes provenientes de todas las redes exceptuando la que contiene al servidor ntp).
aptitude install ntp
- En ntp.conf:
server xxx.yyy.zzz.kkk iburst true restrict -4 default ignore restrict -6 default ignore restrict xxx.yyy.zzz.0 mask 255.255.255.0 kod notrap nomodify nopeer noquery
- Eliminar nfs-common y portmap (a menos que por alguna razón se necesite nfs en el servidor)
- Instalar el paquete xen-linux-system
- En /etc/grub.d/ renombrar el archivo 10_linux a 20_linux y el archivo 20_linux_xen a 10_linux_xen
- Configurar parámetros de arranque del hypervisor y del kernel del dom0:
- En /etc/default/grub
- Configurar memoria que el Xen asigna al dom0 agregando la siguiente variable:
GRUB_CMDLINE_XEN_DEFAULT="dom0_mem=256M"
- Configurar (por ejemplo) pci passtrough en el kernel del dom0. Esto solo aplica en los casos que un dispositivo PCI va a ser utilizado directamente por un DomU:
GRUB_CMDLINE_LINUX="console=tty0 pciback.hide=(0000:0c:02.0)"
- Configurar memoria que el Xen asigna al dom0 agregando la siguiente variable:
- En /etc/default/grub
- Actualizar configuración del grub:
update-grub
- Desactivar la realización de save y restore cuando se apaga o reinicia el servidor. En Debian Lenny esta funcionalidad tiene algunos problemas con el dispositivo de reloj clocksource xen y ocasiona que los servidores virtuales no funcionen bien luego del restore. Aunque en squeeze quizás se haya resuelto este problema es mejor dejarlo deshabilitado hasta realizar las pruebas correspondientes.
- En el archivo /etc/default/xendomains cambiar la linea
XENDOMAINS_SAVE=/var/lib/xen/save
XENDOMAINS_SAVE=""
- En el archivo /etc/default/xendomains cambiar la linea
- Instalar paquetes parted, kpartx y debootstrap:
aptitude install parted kpartx debootstrap
- Verificar que sólo están abiertos puertos ssh en la interfaz de administración, snmp en la interfaz de monitoreo, y los del ntp:
netstat -an
Sustituir el script network-bridge en /etc/xen/scripts por el siguiente: network-bridge
Agregar el script network-bridge-vlan al directorio /etc/xen/scripts
Agregar el script network-multi-vlan al directorio /etc/xen/scripts
Sustituir el script vif-common.sh en /etc/xen/scripts por el siguiente: vif-common.sh
- Crear en el directorio /etc/xen un script con nombre listaVLAN siguiendo el esquema siguiente, al cual se le deberán incorporar los datos propios de la configuración de red a implementar:
#============================================================================ # Listado de vlan a activar con el script network-multi-vlan # #============================================================================ #Listado de VLAN a activar LISTA_VLAN=" 3 5\ 7 9\ 11 13\ 17 19"
- Verificar que los nuevos scripts tengan permiso de lectura y ejecución para root.
- En el archivo /etc/xen/xend-config.sxp en la sección correspondiente a la configuración de la red colocar la línea:
(network-script 'network-multi-vlan netdev=bond0')
- Nota: La configuración de red está diseñada para utilizar un bonding de dos interfaces conectadas a puertos preparados con soporte LACP (link-aggregation ó port-channel). El script network-multi-vlan permite crear conmutadores virtuales conectados a interfaces de VLAN sobre la interface principal especificada en xend-config.sxp.
- Limpiar cache de paquetes
aptitude clean
- Reiniciar el servidor para activar el hypervisor y el dom0
reboot
Instalación de plataforma XEN en Debian Lenny
Se indican a continuación una secuencia de pasos que puede seguirse para la instalación de la plataforma de virtualización XEN. La configuración a obtener en el servidor de virtualización es la siguiente:
- Sistema operativo Debian lenny, arquitectura x86_64.
- Manejo del almacenamiento en disco mediante volúmenes lógicos (LVM2)
- Partición / en un volúmen lógico.
- Partición /boot en una partición primaria con sistema de archivos ext2.
- Dos interfaces de red integradas con bonding en software.
Secuencia de pasos
- Instalar el sistema base estándar Debian Lenny x86-64 con el almacenamiento en disco basado en volúmenes lógicos. Colocar / en volúmen lógico, /boot en una partición primaria con ext3 y dejar en el grupo de volumenes espacio disponible para los volúmenes lógicos que se asignarán a los domU. En /var/lib debe quedar espacio suficiente para guardar las imágenes de la memoria de los domU cuando se realicen operaciones save y restore.
- Seleccionar sha512 como hash para almacenar las claves y deshabilitar el uso de claves nulas:
- En /etc/pam.d/common-password
- Cambiar:
password required pam_unix.so nullok obscure md5
- Por:
password required pam_unix.so obscure sha512 rounds=1048576
- Cambiar las claves de root y de usuario que se crearon en la instalación del sistema, para que queden almacenadas con el hash sha512.
- Instalar paquetes:
- openssh-server vlan ifenslave
- Configurar sshd_config:
- Sólo recibir conexiones en la interface de administración:
ListenAddress X.X.X.X
- No permitir entrada a root:
PermitRootLogin no
- Sólo permitir entrada al usuario creado en la IP que se asigne a la estación de trabajo designada para administrar el dom0:
AllowUsers username@Y.Y.Y.Y
/etc/init.d/ssh restart
- Sólo recibir conexiones en la interface de administración:
- Agregar el módulo bonding a la lista del proceso de arranque del sistema
- En el archivo /etc/modules agregar la línea
bonding
- En el archivo /etc/modules agregar la línea
- Configurar el módulo bonding:
- Crear el archivo /etc/modprobe.d/options con la línea
options bonding mode=802.3ad xmit_hash_policy=layer2+3 miimon=100 downdelay=200 updelay=200
- Activar el módulo bonding
modprobe bonding
- Crear el archivo /etc/modprobe.d/options con la línea
- Configurar /etc/network/interfaces para activar la interfaz bond0 y las interfaces de vlan del dom0:
auto lo iface lo inet loopback auto bond0 iface bond0 inet manual up /sbin/ifconfig bond0 up up /sbin/ifconfig eth0 up up /sbin/ifconfig eth1 up up /sbin/ifenslave bond0 eth0 eth1 down /sbin/ifenslave -d bond0 eth0 eth1 down /sbin/ifconfig bond0 down down /sbin/ifconfig eth1 down down /sbin/ifconfig eth0 down #Ejemplo de interfaz de vlan, nnnn es el número de vlan a configurar auto bond0.nnnn iface bond0.nnnn inet static address xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx
- Configurar los puertos del switch donde se conectan eth0 y eth1 para que formen un canal 802.3ad (link-aggregation en los 3com, port-channel en los cisco y similares, en ambos con protocolo lacp activado en el canal (channel group mode auto en cisco y similares) )
- Reiniciar dispositivos de red para activar la configuración
/etc/init.d/networking restart (Los siguientes pasos pueden ahora realizarse de manera remota, via ssh)
- Instalar y configurar agente snmp
aptitude install snmpd
Compilar e instalar los paquetes libsnmp15 libsnmp-base snmpd desde una versión del código fuente al que se le haya aplicado el siguiente parche que corrige una fuga de memoria: 531056-duplicate-ipv6addr-memleak.debdiff. Como alternativa a este proceso puede instalarse la versión 5.4.2.1~dfsg-5 de esos paquetes, disponible en la distribución squeeze de Debian.
- En default/snmpd:
- Eliminar 127.0.0.1 de la variable SNMPDOPTS
- Cambiar la opción "-Lsd" por "-LS5d" en la variable SNMPDOPTS
- En snmp/snmpd.conf
- Agregar líneas:
rocommunity public
agentaddress udp:xx.xx.xx.xx (ip de monitoreo del dom0)
- Modificar línea:
com2sec paranoid default public de la forma:
(red de monitoreo del dom0)
v
com2sec paranoid xx.xx.xx.240/28 public
- Agregar líneas:
- En snmp/snmptrapd:
- Agregar línea:
(ip de monitoreo del dom0)
v
snmpTrapdAddr udp:xx.xx.xx.xx
- Reiniciar snmpd
- Agregar línea:
Instalar y configurar ntp. (En el ejemplo un solo servidor ntp y se ignoran los paquetes provenientes de todas las redes exceptuando la que contiene al servidor ntp). Se desactiva el PLL del kernel debido a un fallo conocido (Referencias: debugging-ntp-again-part-4-and-last clocksource/0: Time went backwards).
aptitude install ntp
- En ntp.conf:
# Deshabilitar el PLL del kernel, que genera inestabilidad en la # versión 2.6.26-2-xen-amd64 de Linux disable kernel server xxx.yyy.zzz.kkk iburst dynamic true restrict -4 default ignore restrict -6 default ignore restrict xxx.yyy.zzz.0 mask 255.255.255.0 kod notrap nomodify nopeer noquery
- Eliminar nfs-common y portmap (a menos que por alguna razón se necesite nfs en el servidor)
- Instalar paquetes:
- xen-linux-system-2.6.26-2-xen-amd64 xen-utils-3.2-1 bridge-utils
- Configurar parámetros de arranque del hypervisor y del kernel del dom0:
- En /boot/grub/menu.lst
- Configurar memoria que el Xen asigna al dom0
# xenhopt=dom0_mem=256M
- Configurar (por ejemplo) pci passtrough en el kernel del dom0:
# xenkopt=console=tty0 pciback.hide=(0000:0c:02.0)
- Actualizar configuración del grub:
update-grub
- Configurar memoria que el Xen asigna al dom0
- En /boot/grub/menu.lst
- Desactivar la realización de save y restore cuando se apaga o reinicia el servidor (actualmente esta funcionalidad todavia tiene algunos problemas con el dispositivo de reloj clocksource xen y ocasiona que los servidores virtuales no funcionen bien luego del restore, se espera que esto se pueda resolver eventualmente).
- En el archivo /etc/default/xendomains cambiar la linea
XENDOMAINS_SAVE=/var/lib/xen/save
XENDOMAINS_SAVE=""
- En el archivo /etc/default/xendomains cambiar la linea
- Instalar paquetes parted, kpartx y debootstrap:
aptitude install parted kpartx debootstrap
- Verificar que sólo están abiertos puertos ssh en la interfaz de administración, snmp en la interfaz de monitoreo, y los del ntp:
netstat -an
Sustituir el script network-bridge en /etc/xen/scripts por el siguiente: network-bridge
Agregar el script network-bridge-vlan al directorio /etc/xen/scripts
Agregar el script network-multi-vlan al directorio /etc/xen/scripts
- Crear en el directorio /etc/xen un script con nombre listaVLAN siguiendo el esquema siguiente, al cual se le deberán incorporar los datos propios de la configuración de red a implementar:
#============================================================================ # Listado de vlan a activar con el script network-multi-vlan # #============================================================================ #Listado de VLAN a activar LISTA_VLAN=( 3 5 7 9 \ 11 13 17 19 \ 23 29 31 37 \ )
- Verificar que los nuevos scripts tengan permiso de lectura y ejecución para root.
- En el archivo /etc/xen/xend-config.sxp cambiar la línea:
(network-script network-dummy)
- por:
(network-script network-multi-vlan)
- luego activar la configuración con el comando:
/etc/init.d/xend restart
- Limpiar cache de paquetes
aptitude clean
- Reiniciar el servidor para activar el hypervisor y el dom0
reboot