Al fer l'adaptacio de SantaFe sensefils a guifi.net hem vaig trobar en que havia de canviar la configuracio dels Linksys de tots els usuaris. Per evitar tenir que anar a casa de cada un, he fet un sicript que automaticament hem crea un firmware amb la configuracio de xarxa especifica per al Linksys de cada usuari.
Amb el ni1solclic es pot crear un firmware únic per cada usuari. Volia que:
- El Linksys havia de funcionar en mode routed client (http://wiki.openwrt.org/ClientModeHowto#head-0012e2eac83294245701043ed629fbf4c6e66c0a). Es a dir, trencar el bridge que uneix la interficie wifi (eth1) amb la vlan0, i crear dues subxarxes diferents. La wifi tindria la IP publica de guifi. i la vlan0 el rang 192.168.2.0/x. La configuracio de les subxarxes les tenia que fer el mateix firmware a l'hora d'instalar-se.
- El firewall ha de permetre l'entrada als ports TCP 22 (ssh), TCP 80 (panell web) i UDP 161 (snmp). Tambe havia de fer “masquerade†amb la IP publica.
- Configurar automaticament un client OpenVPN, incloent els certificats de client corresponents tal com s'explica a http://guifi.net/ca/node/3278. Les claus son úniques per a cada usuari. També es configura el ntpclient per a posar l'hora correcta al Linksys cada vegada que s'enjega, en cas contrari el OpenVPN no funciona, ja que els certificats tenen una data posterior a la del Linksys.
- Configuracio automatica d'un password.
- Configuracio d'un servidor DHCP per la subxarxa 192.168.2.0/24.
Quan vaig començar a fer el ni1solclic, la whiterussian era l'unica versio estable de OpenWRT, per tant vaig fer servir aquesta com a base. Van alliberar la versio kamikaze com a estable al cap de 2 dies que havia començat a posar firmware generat amb el ni1solclic als usuaris :-( De totes maneres, el whiterussian funciona perfectament, es estable, i no dona cap problema.
Adjunto el ni1solclic.tar.gz, on hi ha el Imagebuilder + script ni1solclic + easy-rsa. Descarreguem el ni1solclic i el descomprimim:
cd /var sudo tar xvzf ni1solclic.tar.gz
El Imagebuilder per funcionar necessita: libstdc++6 i el gcc >3.4. Per provar manualment si hi ha cap problema per a construir el firmware:
cd /var/ni1solclic make
Tarda uns 20 segons en fer-ho tot. Si ha anat bé, hi haura una llista de firmwares creats per a diferents trastos a /var/ni1solclic/bin/guifi/ , no els feu servir, son de prova i no estan configurats. Configurem-lo per a que poguem accedir al script PHP mitjançant el navegador:
chown -R www-data:www-data /var/ni1solclic
en la configuració de l'Apache:
Alias /ni1solclic /var/ni1solclic/html
Apart de configurar el Linksys en mode client amb la IP pública de guifi, l'script també pot configurar un client d'OpenVPN. Ho veurem més endavant. Per fer un firmware bàsic de client guifi.net, editeu /var/ni1solclic/html/index.php i en les primeres linees:
$fes_vpn = 0;
Obriu el navegador, i aneu a http://el.que.sigui/ni1solclic. Ompliu les dades que us demana i cliqueu el boto “fesâ€. Espereu uns segons. Si l'ordinador on s'executa el ni1solclic es lent, potser caldrà que incrementeu el set_time_limit( 60 ) que hi ha al principi de index.php. Normalment tarda uns 20 segons, us apareixara una plana on podeu descarregar el firmware.bin o el firmware.trx per si feu un upgrade manual amb “mtd -e linux -r firmware.trx linuxâ€.
Assegureu-vos que entreu bé les dades que us demana al formulari, l'script no comprova si hi ha, per exemple, un error entre la IP pública, mascara i porta d'enllaç.
Vaig fer diverses proves amb el OpenVPN, seguint el comesfa http://guifi.net/ca/node/3278. Vaig trobar un parell de coses que no m'acabaven de rutllar bé. En la configuració del client, el paràmetre “dev-node†s'havia de treure perquè funciones. I despres de fer diverses proves vaig veure que era millor fer servir TCP que UDP per al túnel. Sobretot en cas de que el servidor caigui, amb UDP te molts problemes per tornar a refer el túnel, amb TCP va perfectament,
El ni1solclic pot configurar el client OpenVPN de dos maneres diferents, sigui la que sigui abans haurem de crear els certificats del servidor. Per crear els certificats del servidor, seguirem el que diu el comesfa, amb alguna variació:
cd /var/ni1solclic/easy-rsa . ./vars ./clean-all ./build-ca ./build-key-server openvpn-servidor ./build-dh openvpn --genkey --secret auth.key
A l'ordinador que fa de servidor openvpn copiem a /etc/openvpn/keys/ els fitxers:
/var/ni1solclic/easy-rsa/auth.key /var/ni1solclic/easy-rsa/keys/openvpn-servidor.crt /var/ni1solclic/easy-rsa/keys/openvpn-servidor.key /var/ni1solclic/easy-rsa/keys/ca.crt /var/ni1solclic/easy-rsa/keys/dh1024.pem
i creem un fitxer a /etc/openvpn/openvp-servidor que contingui:
port 1194 proto tcp dev tun dh /etc/openvpn/keys/dh1024.pem ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/openvpn-servidor.crt key /etc/openvpn/keys/openvpn-servidor.key tls-auth /etc/openvpn/keys/auth.key 0 server 192.168.8.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "route 192.168.9.0 255.255.255.0" client-to-client keepalive 10 120 comp-lzo user nobody group nogroup persist-key persist-tun verb 3
Com es pot veure, farem servir TCP i a mes el tunel entre el servidor i els clients tindrà una subxarxa 192.168.8.0/24. Evito fer servir el rang 10.0.0.0 perquè pertanyen a freenetworks, i millor deixar-les sense fer servir. Tampoc farem servir el duplicate-ca, perquè cada client OpenVPN tindrà un certificat diferent.
Per configurar el firewall, seguiu el que diu el comesfa.
En aquest mode, el mateix ni1solclic crearà un certificat diferent per a cada usuari. En primer lloc cal canviar els permisos del directori easy-rsa per a que hi pugui accedir l'script PHP:
chown -R www-data:www-data /var/ni1solclic/easy-rsa
Hem d'editar /var/ni1solclic/html/index.php i posar:
$fes_vpn = 1; $vpn_server = "adreça_del_servidor_openvpn"; $vpn_ntp_server = "adreça_del_servidor_rellotge";
Necessitem un servidor de rellotge per posar el Linksys a l'hora cada vegada que s'enjegui, en cas contrari no establira el tunel OpenVPN. També li hem d'indicar l'adreça del servidor OpenVPN.
Ara nomes ens cal anar a http://el.que.sigui/ni1solclic i ja podem crear tants firmwares com volguem. Tots tindran un certificat únic, i establiran el tunel OpenVPN automaticament al enjegar-se. També reestabliran el tunel automaticament en cas de que caigui.
Aquest mode esta pensat per poder integrar el ni1solclic a l'aplicació de guifi.net. No te cap sentit que guifi.net tingui que crear cap certificat. El més logic i practic es que es doniguin els certificats als usuaris, i que aquestos els introdueixin a guifi.net a l'hora de crear el firmware.
Per tant, l'admin d'un servidor OpenVPN localitzat dins de guifi.net, pot enviar els certificats a un usuari, i aquest introduir-los al ni1solclic. Per a fer-ho l'admin ha de tenir una copia local del ni1solclic, i ha de crear els certificats del servidor tal com he explicat abans. Despres ha d'anar a:
niunsolclic/gen-cert
Allà editar openvpn.conf i canviar el “remote†perque apunti al seu servidor openvpn, el mateix amb S60ntp perque apunti a un servidor de rellotge. Ara, per exemple, es poden generar 10 certificats per aquell servidor OpenVPN amb:
php gen-cert.php 5
Els certificats estan en forma de fitxers comprimits a niunsolclic/gen-cert. Cada fitxer comprimit inclou els certificats, la configuració del client OpenVPN i la del rellotge.
Editem /var/ni1solclic/html/index.php i posem:
$fes_vpn = 2;
En el formulari ens demana un fitxer de certificats, li posem qualsevol dels que hem creat i tenim, de nou, un firmware que al instal·lar-se queda configurat, amb client OpenVPN i tot.
La idea es integrar-lo de manera que tots els paràmetres de la xarxa publica els passi directament l'aplicació de guifi.net. S'hauria d'oferir la possibilitat al usuari que abans de generar el firmware pogués variar la configuració de la LAN i el password. En cas de que tingues un fitxer amb certificats que li hagues enviat algun admin d'un servidor OpenVPN, també l'hauria de poder introduir.
Com ho veieu?