Es un entorno para arrancar e instalar el SO a través de la red. PXE, (Preboot eXecution Enviroment)
La idea es que las máquinas que arranquen por red, instalen Ubuntu 16.04 con el disco cifrado y de forma desatendida.
Trabajando con VB, máquina server con dos interfaces:
- enp0s3 hacia internet con ip 10.2.0.15
- enp0s8 hacia la red de clientes 192.168.1.1/24
Cliente:
- arranque por red
Instalación de servicios.
En primer lugar se deberían instalar servidores DHCP, TFTP, Apache2.
Utilizamos el servidor DHCP para gestionar las peticiones de los clientes, por otro lado utilizaremos TFTP para la descarga de archivos de configuración. Y Apache2 para servir el SO a los clientes.
Configuración de ficheros
En primer lugar hay que editar el archivo de configuración de tftp, y añadir la siguentes lineas:
/etc/defatul/tftpd-hpa
RUN_DAEMON ="yes"
OPTIONS = "-l -s /var/lib/tftpboot"
Editamos el archivo /etc/inetd.conf, y añadimos la siguiente linea:
tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /var/lib/tftpboot
#Si utilizan ipv6, deberán cambiar udp por upd4
Reiniciamos el sevicio tftpd-hpa y comprobamos su estado
Descargamos la imagen de la web de ubuntu y la montamos en /mnt/
mount -o loop ubuntu-16.04.3-server-amd64.iso /mnt/
Necesitamos el contenido de netboot referente a nuestra imagen, podemos obtenerlo de la web de ubuntu
Descomprimimos netboot y copiamos su contenido a /var/lib/tftpboot/
cp -fr ./netboot/* /var/lib/tftpboot/
Muestro los archivos que contiene mi netboot:
Necesitamos copiar los archivos del SO, anteriormente montado en /mnt/ en los ficheros de apache.
Necesitamos copiar los archivos del SO, anteriormente montado en /mnt/ en los ficheros de apache.
cp -fr /mnt/* /var/www/html/ubuntu/
Hay que añadir las siguientes lineas al archivo /var/lib/tftpboot/pxelinux.cfg/default
label linux
kernel ubuntu-installer/amd64/linux
append ks=http://dirección_servidor/preseed.cfg vga=normal initrd=ubuntu-installer/amd64/initrd.gz preseed/url=http://direccion_servidor/preseed.cfg preseed/interactive=false
ramdisk_size=16432 root=/dev/rd/0 rw --
Esto nos genera una nueva opción dentro del menú de instalación, e indica de donde tirar para los archivos de arranque.
Configuración de red.
Para evitar realizar un mirror en local, realizaremos un puente entre las dos interfaces del servidor, para que los clientes consulten directamente a es.archive.ubuntu.comPara ello lo configuraremos mediante iptables.
Limpiamos todas las rutas que pudiera contener:
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -F
iptables -t INPUT ACCEPT
iptables -t FORWARD ACCEPT
iptables -t OUTPUT ACCEPT
Y verificamos con
iptables -L
Para activar ip_forward:
echo "1" > /proc/sys/net/ipv4/ip_forward
(esto se desactiva en cada reinicio, para evitarlo, hacer lo siguiente)Editar el archivo /etc/sysctl.conf
y descomentar
net.ipv4.ip_forward=1
A continuación creamos la ruta:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o enp0s3 -j SNAT --to 10.0.2.15
-A POSTROUTING: añade una regla de la cadena POSTROUTING
-s 192.168.1.0/24: Se aplica a los paquete que provienen de 192.168.1.0/24
-o enp0s3: paquetes que se entrega a traves de enp0s3, que es la interface de la red cliente
-j SNAT --to 10.0.2.15. Destino
Hay que indicar el rango y la red correspondientes.
Debemos reiniciar el servicio dhcp.
Archivo pressed.
Se utiliza para una instalación desatendida. Mi archivo es el siguiente:d-i debian-installer/locale string es_ES.UTF-8
d-i console-setup/ask_detect boolean false
d-i keyboard-configuration/xkb-keymap select es
d-i netcfg/choose_interface select auto
d-i netcfg/get_hostname string unassigned-hostname
d-i netcfg/get_domain string unassigned-domain
d-i netcfg/wireless_wep string
d-i mirror/country string manual
d-i mirror/http/hostname string es.archive.ubuntu.com
d-i mirror/http/directory string /ubuntu
d-i passwd/user-fullname string *nombre_completo*
d-i passwd/username string *nombre_usuario*
d-i passwd/user-password password *clave_usuario*
d-i passwd/user-password-again password *clave_usuario*
d-i user-setup/allow-password-weak boolean true
d-i user-setup/encrypt-home boolean false
d-i clock-setup/utc boolean true
d-i time/zone string Europe/Madrid
d-i clock-setup/ntp boolean true
d-u partman-auto/disk string /dev/sda
d-i partman-lvm/confirm boolean true
d-i partman-auto-lvm/guided_size string max
d-i partman-auto/method string crypto
d-i partman-crypto/passphrase password *clave_cifrado*
d-i partman-crypto/passphrase-again password *clave_cifrado*
d-i partman-crypto/weak_passphrase boolean true
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-md/device_remove_md boolean true
d-i partman-auto/choose_recipe select boot-crypto
d-i partman-auto-lvm/new_vg_name string crypt
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
tasksel tasksel/first multiselect ubuntu-desktop
d-i grub-installer/bootdev string /dev/sda
d-i grub-installer/only_debian boolean true
d-i grub-installer/with_other_os boolean true
d-i pkgsel/include string libpam-cracklib curl bash-completion
d-i preseed/late_command string \
cryptsetup luksAddKey /dev/sda5; \
cryptsetup luksAddKey /dev/sda5; \
echo "password required pam_cracklib.so retry=3 minlen=10 difok=3 dcredit=1 ucredit=1 lcredit=1 ocredit=1" >> /target/etc/pam.d/common-password; \
echo "auth required pam_tally2.so deny=5 unlock_time=600" >> /target/etc/pam.d/common-auth;\
sed -i -e 's/PASS_MAX_DAYS.*/PASS_MAX_DAYS\ 100/g' /target/etc/login.defs; \
sed -i -e 's/PASS_WARN_AGE.*/PASS_WARN_AGE\ 20/g' /target/etc/login.defs; \
echo "" > /target/etc/apt/apt.conf
d-i finish-install/reboot_in_progress note
Realizará una instalación desatendida, y cifrará el disco con la clave que indiquemos, nos creará el usuario que indiquemos y su clave.
Este archivo lo he incluido en /var/www/html/
#Tuve problemas para coger el mirror a través de internet, añadí manualmente la dirección es.archive.ubuntu.com en el fichero /etc/hosts del servidor.
Por último debemos configurar la máquina para que arranque por red. Yo estoy utilizando Vbox
No hay comentarios:
Publicar un comentario