Control Aula
Pas per pas
- Instal·lar Ubuntu server
# apt update && apt upgrade
- El servidor té 2 targetes de xarxa. Cal configurar la de dins de l'aula com a 192.168.aula.250
- La targeta externa serà assignada per Zentyal encara que no és precís que siga una fixa.
- Crear el container LXD que fa de gw.
# lxd init # lxc profile create xarxa # lxc profile edit xarxa name: xarxa config: {} description: "" devices: eth0: name: eth0 nictype: macvlan parent: enp0s3 type: nic eth1: name: eth1 nictype: macvlan parent: enp0s8 type: nic # lxc launch ubuntu:16.04 gw --profile=xarxa
- Entrar dins i fer-lo porta d'enllaç. Aquest container servirà com a plantilla per als altres dos. Per tant, cal fer-lo porta d'enllaç abans de fer-lo servidor dhcp i la resta de coses.
- La seua IP de eth1: 192.168.aula.254. La de fora serà per Zentyal, pot ser fixa o no.
- Actualitzar.
- Descomentar en /etc/sysctrl.conf el ipv4 forward.
- Aplicar les IPtables:
root@gw:~# iptables -A INPUT --match conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT root@gw:~# iptables -A FORWARD --in-interface eth0 --out-interface eth1 -j ACCEPT root@gw:~# iptables -A FORWARD --in-interface eth1 --out-interface eth0 -j ACCEPT root@gw:~# iptables -t nat -A POSTROUTING --out-interface eth0 -j MASQUERADE root@gw:~# iptables-save > /etc/iptables/rules.v4 root@gw:~# apt install iptables-persistent
- Buidar la cau apt
root@gw:~# apt clean && apt autoclean
- Clonar el container per crear el ràpid i el lent, els deixem ahí per tornar després:
lliurex@srv:~$ lxc copy gw gwpreferent lliurex@srv:~$ lxc copy gw gwlent
- Tornar a entrar al gw principal per instal·lar la resta de serveis:
root@gw:~# apt install isc-dhcp-server ddns-update-style none; option domain-name "aula.net"; option domain-name-servers 10.20.0.1; default-lease-time 600; max-lease-time 7200; log-facility local7; subnet 192.168.9.0 netmask 255.255.255.0 { range 192.168.9.150 192.168.9.199; option subnet-mask 255.255.255.0; option routers 192.168.9.254; } root@gw:~# nano /etc/default/isc-dhcp-server # recordar indicar eth1 en interfaces root@gw:~# wget -O- https://raw.github.com/ajenti/ajenti/1.x/scripts/install-ubuntu.sh | sudo sh Now start Ajenti with 'service ajenti restart' Ajenti will listen on HTTPS port 8000 by default Default username : root Default password : admin # Cal canviar el passwd.
- Registre de clients
root@gw:~# apt install nmap
Cal executar aquest script
El resultat és la configuració de IPs fixes als clients i de la porta d'enllaç ràpida per al professor si li donem la IP acabada en 100.
Fer que arranquen a l'inici del sistema:
lliurex@srv:~$ lxc config set gw boot.autostart 1 lliurex@srv:~$ lxc config set gwlent boot.autostart 1 lliurex@srv:~$ lxc config set gwpreferent boot.autostart 1
Control de la velocitat
Per evitar que carreguen la xarxa sols amb youtube podem utilitzar wondershaper. Aquest són els pasos:
- En el DHCP s'indica que el professor té com a router el gw preferent. Això és la configuració prèvia feta en l'script anterior.
- En el DHCP s'indica que el router de la resta és el .254
- Aquest ha de tindre como a porta per defecte la ip interna del gw lent.
El comandament per defecte pot ser:
ip route change default via 192.168.9.252
per a que es quede encara que reiniciem, en /etc/network/interfaces:
auto eth0 iface eth0 inet dhcp post-up ip route change default via 192.168.9.252
- Per a la xarxa local, moodle i altres, tindrà com a porta d'enllaç el preferent o el del centre.
- La gw lenta es configura en wondershaper per tindre una velocitat determinada. Aquesta ha d'estar definida en funció de necessitats.
Al tindre velocitats baixes però suficients, les webs sense videos funcionaran raonablement. El moodle funciona a la màxima velocitat. Si dos o més alumnes tenen videos ralentiran a la resta de la classe, però no a l'institut.
Centralitzar la configuració dels clients
Per a fer això, podem utilitzar Ansible.
root@gw:~# apt install ansible root@gw:~# ssh-keygen -t rsa -b 2048 Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:QUwfjcjUkaFnd8CihW0ANtZwb+7DkUsmXP0hJVtfhlI root@gw The key's randomart image is: +---[RSA 2048]----+ | *O**+Bo.E.o| | o +*+Oo+*.o.| | o+B.=.o .| | ..B o + . | | S * . | | * o | | = | | . | | | +----[SHA256]-----+ root@gw:~# ssh-copy-id lliurex@192.168.9.101 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub" The authenticity of host '192.168.9.101 (192.168.9.101)' can't be established. ECDSA key fingerprint is SHA256:yJB1AmXpfIN/Zpaem8pa+5QaO44iYwzPejp+a9h3AQI. Are you sure you want to continue connecting (yes/no)? yes /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys lliurex@192.168.9.101's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'lliurex@192.168.9.101'" and check to make sure that only the key(s) you wanted were added. root@gw:~# ssh-agent bash root@gw:~# ssh-add ~/.ssh/id_rsa Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)
- Editar el fitxer de /etc/ansible/hosts per tindre tota la llista de hosts administrats.
[alumnes] 192.168.9.101 192.168.9.102 ...
Aquesta és la prova de que funciona:
root@gw:~# ansible all -u lliurex -m ping 192.168.9.101 | SUCCESS => { "changed": false, "ping": "pong" } ...
Comandaments ad-hoc
Podem, per exemple, canviar la contrasenya a Lliurex:
root@gw:~# apt install whois root@gw:~# mkpasswd --method=sha-512 Password: $6$APDy29HR$5lgjvaeU6yaEXhC8tni0f0PzVnQfb2Z1lSJ0IG85YE43cFz42UB65vGZGuhLi1uz1v0PZ6ntI0xNrLJjVWWdT1 root@gw:~# ansible all -u lliurex -m user -a 'name=lliurex password=$6$APDy29HR$5lgjvaeU6yaEXhC8tni0f0PzVnQfb2Z1lSJ0IG85YE43cFz42UB65vGZGuhLi1uz1v0PZ6ntI0xNrLJjVWWdT1' --sudo --ask-become-pass SUDO password: 192.168.9.101 | SUCCESS => { "append": false, "changed": true, "comment": "lliurex,,,", "group": 1000, "home": "/home/lliurex", "move_home": false, "name": "lliurex", "password": "NOT_LOGGING_PASSWORD", "shell": "/bin/bash", "state": "present", "uid": 1000 } ...
Asegurar-nos de que tenen un programa instal·lat:
root@gw:~# ansible all -u lliurex --sudo --ask-become-pass -m apt -a "name=dia state=present"
Actualitzar el sistema:
ansible all -u lliurex --sudo --ask-become-pass -m apt -a "upgrade=dist"