Diferencia entre revisiones de «LXD per a SX»
Sin resumen de edición |
Sin resumen de edición |
||
Línea 110: | Línea 110: | ||
</pre> | </pre> | ||
Script per gestionar targetes: | == Script per gestionar targetes:== | ||
<div class="toccolours mw-collapsible mw-collapsed" style="overflow: hidden;"> | <div class="toccolours mw-collapsible mw-collapsed" style="overflow: hidden;"> | ||
<syntaxhighlight lang="bash" style="font-family:monospace"> | <syntaxhighlight lang="bash" style="font-family:monospace"> | ||
#!/bin/bash | #!/bin/bash | ||
function crear_ponts { | function crear_ponts { | ||
echo -e "Crear Ponts\nAquesta opció crea un pont de xarxa sense connexió a res. És útil per crear switchs virtuals" | echo -e "Crear Ponts\nAquesta opció crea un pont de xarxa sense connexió a res. És útil per crear switchs virtuals" | ||
Línea 120: | Línea 120: | ||
read -p "IP del pont: " adr | read -p "IP del pont: " adr | ||
echo -e "\n\nauto $nom\niface $nom inet static\naddress $adr\nnetmask 255.255.255.0\nbridge-ports none" >> /etc/network/interfaces | echo -e "\n\nauto $nom\niface $nom inet static\naddress $adr\nnetmask 255.255.255.0\nbridge-ports none" >> /etc/network/interfaces | ||
brctl addbr $nom | brctl addbr $nom | ||
ifup $nom | ifup $nom | ||
} | } | ||
function crear_targeta { | function crear_targeta { | ||
echo "Crear targeta" | echo "Crear targeta" | ||
Línea 136: | Línea 136: | ||
read -p "Nom del parent: " parent | read -p "Nom del parent: " parent | ||
read -p "Tipus de targeta [bridged macvlan]: " tipus | read -p "Tipus de targeta [bridged macvlan]: " tipus | ||
lxc config device add $nom $eth nic nictype=$tipus parent=$parent name=$ | lxc config device add $nom $eth nic nictype=$tipus parent=$parent name=$eth | ||
lxc config show --expanded $nom | lxc config show --expanded $nom | ||
} | } | ||
function crear_targeta_bridged { | function crear_targeta_bridged { | ||
echo "Crear targeta bridged en varis containers" | echo "Crear targeta bridged en varis containers" | ||
Línea 150: | Línea 150: | ||
for i in $noms | for i in $noms | ||
do | do | ||
lxc config device add $i $eth nic nictype=bridged parent=$parent name=$ | lxc config device add $i $eth nic nictype=bridged parent=$parent name=$eth | ||
lxc config show --expanded $i | lxc config show --expanded $i | ||
done | done | ||
} | } | ||
function crear_targeta_profile { | function crear_targeta_profile { | ||
echo "Crear targeta" | echo "Crear targeta" | ||
Línea 166: | Línea 166: | ||
read -p "Nom del parent: " parent | read -p "Nom del parent: " parent | ||
read -p "Tipus de targeta [bridged macvlan]: " tipus | read -p "Tipus de targeta [bridged macvlan]: " tipus | ||
lxc profile device add $nom $eth nic nictype=$tipus parent=$parent name=$ | lxc profile device add $nom $eth nic nictype=$tipus parent=$parent name=$eth | ||
lxc profile show $nom | lxc profile show $nom | ||
} | } | ||
function ip_estatica { | |||
echo "Donar una IP estàtica a una container" | |||
lxc list | |||
read -p "Nom del container: " nom | |||
echo "Configuració del contenidor:" | |||
lxc config show --expanded $nom | |||
read -p "Nom de la targeta: " eth | |||
read -p "IP de la targeta: " ip | |||
read -p "Màscara de la targeta: " masc | |||
echo -e "\n\nauto $eth\niface $eth inet static\naddress $ip\nnetmask $masc" > /tmp/${eth}.cfg && lxc file push /tmp/${eth}.cfg ${nom}/etc/network/interfaces.d/ | |||
lxc exec $nom -- ifdown $eth | |||
lxc exec $nom -- ifup $eth | |||
} | |||
echo "Configurador LXD" | echo "Configurador LXD" | ||
echo "MENU" | echo "MENU" | ||
Línea 178: | Línea 191: | ||
echo "3) Crear una targeta bridged en varis containers" | echo "3) Crear una targeta bridged en varis containers" | ||
echo "4) Crear una targeta en un profile" | echo "4) Crear una targeta en un profile" | ||
echo "5) IP estàtica a container" | |||
read -p "Opció: " opcio | read -p "Opció: " opcio | ||
case $opcio in | case $opcio in | ||
1) crear_ponts;; | 1) crear_ponts;; | ||
Línea 186: | Línea 200: | ||
3) crear_targeta_bridged;; | 3) crear_targeta_bridged;; | ||
4) crear_targeta_profile;; | 4) crear_targeta_profile;; | ||
5) ip_estatica;; | |||
*) echo "Opció no valida" | *) echo "Opció no valida" | ||
esac | esac | ||
</syntaxhighlight> | </syntaxhighlight> | ||
</div> | </div> |
Revisión del 20:24 20 jul 2017
Amb la tecnologia LXD es pot configurar un servidor que proporcione un entorn virtual per a fer pràctiques. Una forma de fer-ho ràpidament pot ser amb Proxmox. Aquest manual és per fer-ho sols amb LXD en un Ubuntu 16.04.
El cas (real) que ens ocupa tracta de crear un servidor per a una classe de 15 alumnes per a que practiquen en Servicis en Xarxa. Es tracta de provar DHCP, DNS i altres servidors i clients. Cada alumne té accés a 2 contenidors prèviament configurats per a que tinguen l'estructura de xarxa típica de client servidor. Ells els controlen totalment, però no poden accedir als dels companys.
Abans de tot, cal configurar el servidor correctament segons aquest manual.
En /etc/security/limits.conf:
* soft nofile 1048576 * hard nofile 1048576 root soft nofile 1048576 root hard nofile 1048576 * soft memlock unlimited * hard memlock unlimited
En /etc/sysctrl.conf:
fs.inotify.max_queued_events=1048576 fs.inotify.max_user_instances=1048576 fs.inotify.max_user_watches=1048576 vm.max_map_count=262144
A continuació, cal iniciar lxd:
# lxd init # Se configura amb quasi tot per defecte. # lxd launch ubuntu:16.04 plantillla -c security.nesting=true # lxd config edit plantilla # Es canvia la eth0 de bridged a macvlan amb la targeta del server.
Dins del container cal fer algunes coses:
- Reinstal·lar openssh-server per tindre la configuració per defecte.
- Donar password a ubuntu per poder accedir per ssh.
- Crear els containers:
- Fer un pont br0 per a la xarxa interna sols accesible per els containers de dins.
- Fer que el client tinga sols el pont i el servidor una en el br0 i l'altra en lxdbr0
D'aquesta manera, cada alumne entra per ssh a un container, canvia la contrasenya de ubuntu i té disponible una configuració de dos containers dins del seu o pot configurar el que necessite.
Una vegada tot configurat, es paren els containers de dins i el container plantilla. Després es copia la plantilla:
# for n in {1..15}; do echo "Copiant $n"; lxc copy plantilla alumne$n; done
Aquest for es pot utilitzar després per iniciar-los tots o parar-los.
Avís Cal pensar que són 15x2 + 15 = 45 contenidors en total els que té que suportar el servidor. Pot ser interessant fer un sleep en el for d'arrancar-los tots per donar temps a que es configuren totalment. L'arranc total pot durar uns minuts en els que els disc dur té molt de treball. Una vegada en marxa tot funciona perfectament. El coll de botella és el disc dur. El meu servidor és un i5 amb 8GB de RAM
Exemple de cóm queda:
lliurex@2smxv:~$ lxc list +----------+---------+--------------------------------+--------------------------------------------+------------+-----------+ | NOMBRE | ESTADO | IPV4 | IPV6 | TIPO | SNAPSHOTS | +----------+---------+--------------------------------+--------------------------------------------+------------+-----------+ | alumne1 | RUNNING | 192.168.66.1 (br0) | fd62:5f40:e210:0:216:3eff:fe31:1c2d (eth0) | PERSISTENT | 0 | | | | 192.168.0.218 (eth0) | | | | | | | 10.235.78.1 (lxdbr0) | | | | +----------+---------+--------------------------------+--------------------------------------------+------------+-----------+ | alumne10 | RUNNING | 192.168.66.1 (br0) | fd62:5f40:e210:0:216:3eff:fe67:f1f7 (eth0) | PERSISTENT | 0 | | | | 192.168.0.227 (eth0) | | | | +----------+---------+--------------------------------+--------------------------------------------+------------+-----------+ | alumne11 | RUNNING | 192.168.66.1 (br0) | fd62:5f40:e210:0:216:3eff:feb9:a80c (eth0) | PERSISTENT | 0 | | | | 192.168.0.228 (eth0) | | | | +----------+---------+--------------------------------+--------------------------------------------+------------+-----------+ | alumne12 | RUNNING | 192.168.66.1 (br0) | fd62:5f40:e210:0:216:3eff:fecc:e507 (eth0) | PERSISTENT | 0 | | | | 192.168.0.232 (eth0) | | | | +----------+---------+--------------------------------+--------------------------------------------+------------+-----------+ | alumne13 | RUNNING | 192.168.66.1 (br0) | fd62:5f40:e210:0:216:3eff:feee:768d (eth0) | PERSISTENT | 0 | | | | 192.168.0.229 (eth0) | | | | +----------+---------+--------------------------------+--------------------------------------------+------------+-----------+ | alumne14 | RUNNING | 192.168.66.1 (br0) | fd62:5f40:e210:0:216:3eff:fe95:14d0 (eth0) | PERSISTENT | 0 | | | | 192.168.0.230 (eth0) | | | | +----------+---------+--------------------------------+--------------------------------------------+------------+-----------+ | alumne15 | RUNNING | 192.168.66.1 (br0) | fd62:5f40:e210:0:216:3eff:fe60:cc7c (eth0) | PERSISTENT | 0 | | | | 192.168.0.231 (eth0) | | | | | | | 10.235.78.1 (lxdbr0) | | | | +----------+---------+--------------------------------+--------------------------------------------+------------+-----------+ | alumne2 | RUNNING | 192.168.66.1 (br0) | fd62:5f40:e210:0:216:3eff:fe21:6a76 (eth0) | PERSISTENT | 0 | | | | 192.168.0.219 (eth0) | | | | +----------+---------+--------------------------------+--------------------------------------------+------------+-----------+ | alumne3 | RUNNING | 192.168.66.1 (br0) | fd62:5f40:e210:0:216:3eff:fe6b:7f64 (eth0) | PERSISTENT | 0 | | | | 192.168.0.220 (eth0) | | | | +----------+---------+--------------------------------+--------------------------------------------+------------+-----------+ | alumne4 | RUNNING | 192.168.66.1 (br0) | fd62:5f40:e210:0:216:3eff:fec2:86ea (eth0) | PERSISTENT | 0 | | | | 192.168.0.221 (eth0) | | | | +----------+---------+--------------------------------+--------------------------------------------+------------+-----------+ | alumne5 | RUNNING | 192.168.0.222 (eth0) | fd62:5f40:e210:0:216:3eff:fe9c:f3aa (eth0) | PERSISTENT | 0 | | | | 192.168.66.1 (br0) | | | | +----------+---------+--------------------------------+--------------------------------------------+------------+-----------+ | alumne6 | RUNNING | 192.168.66.1 (br0) | fd62:5f40:e210:0:216:3eff:fe16:bea4 (eth0) | PERSISTENT | 0 | | | | 192.168.0.223 (eth0) | | | | +----------+---------+--------------------------------+--------------------------------------------+------------+-----------+ | alumne7 | RUNNING | 192.168.66.1 (br0) | fd62:5f40:e210:0:216:3eff:fe73:c391 (eth0) | PERSISTENT | 0 | | | | 192.168.0.224 (eth0) | | | | | | | 10.235.78.1 (lxdbr0) | | | | +----------+---------+--------------------------------+--------------------------------------------+------------+-----------+ | alumne8 | RUNNING | 192.168.66.1 (br0) | fd62:5f40:e210:0:216:3eff:fe90:163e (eth0) | PERSISTENT | 0 | | | | 192.168.0.225 (eth0) | | | | +----------+---------+--------------------------------+--------------------------------------------+------------+-----------+ | alumne9 | RUNNING | 10.235.78.1 (lxdbr0) | fd62:5f40:e210:0:216:3eff:feaa:d8 (eth0) | PERSISTENT | 0 | | | | 192.168.66.1 (br0) | | | | | | | 192.168.0.226 (eth0) | | | | +----------+---------+--------------------------------+--------------------------------------------+------------+-----------+ | plantilla| STOPPED | | | PERSISTENT | 0 | +----------+---------+--------------------------------+--------------------------------------------+------------+-----------+