Cintillo Institucional

Instalación de plataforma XEN en Debian Squeeze

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:

Secuencia de pasos

  1. 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.
  2. Seleccionar sha512 como hash para almacenar las claves y deshabilitar el uso de claves nulas:
    1. En /etc/pam.d/common-password
    2. Cambiar:

         password        [success=1 default=ignore]      pam_unix.so obscure sha512

    3. Por:

         password        [success=1 default=ignore]      pam_unix.so obscure sha512 rounds=1048576

  3. 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.
  4. Instalar paquetes:
    • openssh-server vlan ifenslave
  5. 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

  6. Agregar el módulo bonding a la lista del proceso de arranque del sistema
    • En el archivo /etc/modules agregar la línea

      bonding

  7. 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

  8. 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
  9. 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
  10. 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) )
  11. Reiniciar dispositivos de red para activar la configuración:
    • invoke-rc.d networking restart

  12. 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)

  13. Instalar y configurar agente snmp
            aptitude install snmpd
    • En default/snmp:
    1. Cambiar la opción "-Lsd" por "-LS5d" en la variable SNMPDOPTS
      • En snmp/snmpd.conf
    2. Cambiar línea:
                      agentAddress  udp:127.0.0.1:161
      • por:
                      agentAddress  udp:xx.xx.xx.xx:161 (ip de monitoreo del DomU)
    3. 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
    4. 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
    5. Modificar línea:
                      rouser   authOnlyUser
      • en la forma:
                      # rouser   authOnlyUser
    6. 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
    7. Cambiar líneas:
                                          #   send SNMPv1  traps
       trapsink     localhost public
      • por:
                                          #   send SNMPv1  traps
      # trapsink     localhost public 
    8. 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
    9. 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
    10. Cambiar líneas:
                                                 #  Run as an AgentX master agent
       master          agentx
      • por:
                                              #  Run as an AgentX master agent
      # master          agentx
      • En snmp/snmptrapd:
    11. Agregar línea:

                         (ip de monitoreo del DomU)

                                 v                 

                              snmpTrapdAddr udp:xx.xx.xx.xx             
    12. Reiniciar snmpd
  14. 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
  15. Eliminar nfs-common y portmap (a menos que por alguna razón se necesite nfs en el servidor)
  16. Instalar el paquete xen-linux-system
  17. En /etc/grub.d/ renombrar el archivo 10_linux a 20_linux y el archivo 20_linux_xen a 10_linux_xen
  18. Configurar parámetros de arranque del hypervisor y del kernel del dom0:
    • En /etc/default/grub
      1. Configurar memoria que el Xen asigna al dom0 agregando la siguiente variable:

        GRUB_CMDLINE_XEN_DEFAULT="dom0_mem=256M" 

      2. 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)"

  19. Actualizar configuración del grub:
    • update-grub

  20. 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

      por:
      • XENDOMAINS_SAVE=""

  21. Instalar paquetes parted, kpartx y debootstrap:
    • aptitude install parted kpartx debootstrap

  22. 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

  23. Sustituir el script network-bridge en /etc/xen/scripts por el siguiente: network-bridge

  24. Agregar el script network-bridge-vlan al directorio /etc/xen/scripts

  25. Agregar el script network-multi-vlan al directorio /etc/xen/scripts

  26. Sustituir el script vif-common.sh en /etc/xen/scripts por el siguiente: vif-common.sh

  27. 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"
  28. Verificar que los nuevos scripts tengan permiso de lectura y ejecución para root.
  29. 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.
  30. Limpiar cache de paquetes
    • aptitude clean

  31. 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:

Secuencia de pasos

  1. 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.
  2. Seleccionar sha512 como hash para almacenar las claves y deshabilitar el uso de claves nulas:
    1. En /etc/pam.d/common-password
    2. Cambiar:

         password   required   pam_unix.so nullok obscure md5

    3. Por:

         password   required   pam_unix.so obscure sha512 rounds=1048576

  3. 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.
  4. Instalar paquetes:
    • openssh-server vlan ifenslave
  5. 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

  6. Agregar el módulo bonding a la lista del proceso de arranque del sistema
    • En el archivo /etc/modules agregar la línea

      bonding

  7. 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

  8. 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
  9. 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) )
  10. 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)

  11. Instalar y configurar agente snmp
    • aptitude install snmpd

    1. 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.

    2. En default/snmpd:
      • Eliminar 127.0.0.1 de la variable SNMPDOPTS
      • Cambiar la opción "-Lsd" por "-LS5d" en la variable SNMPDOPTS
    3. 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

    4. En snmp/snmptrapd:
      • Agregar línea:
        •                  (ip de monitoreo del dom0)

                                   v                 

           snmpTrapdAddr udp:xx.xx.xx.xx

      • Reiniciar snmpd
  12. 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
  13. Eliminar nfs-common y portmap (a menos que por alguna razón se necesite nfs en el servidor)
  14. Instalar paquetes:
    • xen-linux-system-2.6.26-2-xen-amd64 xen-utils-3.2-1 bridge-utils
  15. Configurar parámetros de arranque del hypervisor y del kernel del dom0:
    • En /boot/grub/menu.lst
      1. Configurar memoria que el Xen asigna al dom0

        # xenhopt=dom0_mem=256M

      2. Configurar (por ejemplo) pci passtrough en el kernel del dom0:

        # xenkopt=console=tty0 pciback.hide=(0000:0c:02.0)

      3. Actualizar configuración del grub:

        update-grub

  16. 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

      por:
      • XENDOMAINS_SAVE=""

  17. Instalar paquetes parted, kpartx y debootstrap:
    • aptitude install parted kpartx debootstrap

  18. 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

  19. Sustituir el script network-bridge en /etc/xen/scripts por el siguiente: network-bridge

  20. Agregar el script network-bridge-vlan al directorio /etc/xen/scripts

  21. Agregar el script network-multi-vlan al directorio /etc/xen/scripts

  22. 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 \
              )
  23. Verificar que los nuevos scripts tengan permiso de lectura y ejecución para root.
  24. 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

  25. Limpiar cache de paquetes
    • aptitude clean

  26. Reiniciar el servidor para activar el hypervisor y el dom0
    • reboot

infra_red/dom0 (última edición 2012-02-01 17:21:17 efectuada por ddiaz)