Inici de sessió d'usuari


blog de Joan Llopart


Com crear automaticament els fitxers de zona de Resolució Inversa als servidors DNS de guifi

 En l'entrada anterior del blog vaig explicar com fer les proves. Ara he automatitzat el sistema, incloent unes linees de codi a les funcions CNML de guifi.net per poder obtenir un llistat de les IPs públiques de guifi, junt amb el nom curt del trasto i id.

Proves amb Resolució Inversa de DNS a guifi

La funció principal dels servidors de noms (DNS) és la de resoldre FQDN. Per exemple, google.com el resolen amb la IP 64.233.167.99. Però també tenen la funcionalitat inversa, a partir d'una IP retornar un FQDN. Aquesta funcionalitat només té un interès tècnic, per a mi, el més important és poder entendre fàcilment el output dels traceroutes.

Ordre de les miniPCI en un RB600 + RB604

Un esquema per saber quin es l'ordre correcte amb el que s'haurien de posar les miniPCIs en una Routerboard 600 i l'expansió RB604.

     RB600
+--------------+
| +---+ +---+ |
| | 3 | | 1 | |
| +---+ +---+ |
| +---+ +---+ |
| | 4 | | 2 | |
| +---+ +---+ | RB604
| | +--------------+
| :| | +---+ +---+ :
| :| | | 8 | | 6 | :
| :| <== | +---+ +---+ :
| :| <== | +---+ +---+ :
| :| | | 7 | | 5 | :
| :| | +---+ +---+ :
| | +--------------+
| |
+--PoE---------+

Com fer un OpenWRT per la nanostation2 des de zero

En comptes de partir d'una versió precompilada per a un model de router, veurem, pas a pas, com construir un firmware OpenWRT Kamikaze 7.09 compilant-lo des de zero, farem un build a partir del codi font del programari, afegint alguns paquets extres. També veurem com construir imatges a mida.

Nanostation2 amb OpenWRT i servidor/client OpenVPN

En l'anterior comesfa vaig explicat com fer un firm a mida per a la nano2. Aqui en teniu un de genèric preparat per a instalar, pensat per a que un usuari de guifi pugui compartir la seva connexió a Internet amb qui vulgui de guifi, fent servir tunels OpenVPN. També serveix com a un client estàndard.

 

El firmware

Es pràcticament el mateix que explico en el comesfa anterior. Hi he afegit uns exemples de configuracions de client i servidor de OpenVPN. He tingut que fer una petita modificació al Makefile del OpenVPN perquè funciones correctament el OpenVPN com a servidor, esta explicat aqui (http://forum.openwrt.org/viewtopic.php?pid=67828).

startpage.pl, nou redirector per a l'Squid

Provant el capo, que es un redirector per al Squid, he vist que no acabava de funcionar del tot bé. En comptes de retocar el codi existent, he decidit fer un redirector nou, que no s'ahgi de compilar, amb Perl i que sigui més fàcil. Al menys m'ho sembla a mi Smiling

Aquest és l'script:

#!/usr/bin/perl

#
# startpage.pl (Squid Proxy Redirector)
# joan.llopart@guifi.net 03-2008

# Redirects proxy user to a defined startpage every certain time.

use strict;

#
# --- CONFIG ---
#
# Startpage will be shown every ... (time in seconds)
my $ref_time = 3600; # 1 hour
#
# Redirection to this webpage
my $startp = "302:http://guifi.net";

Actualitzar subdomini de guifi amb ADSL amb IP dinàmica

Ara que la gestio dels dominis de guifi.net s'han passat a zoneedit, podeu demanar a la llista que us asignin un subdomini de guifi, per poder accedir-hi des d'Internet. En la majoria dels casos tindreu una ADSL amb IP dinàmica. Per a que els registres DNS s'actualitzin regularment amb la IP que teniu asignada al router ADSL, nomes cal que feu una entrada al cron.

Seguint l'exemple de santafe, vam demanar a la llista el subdomini santafe.guifi.net. Ens el van donar d'alta al zoneedit, i ara només cal posar al cron (crontab -e):

0 2 */1 * *  wget -O - --http-user=USER --http-passwd=PASS 'http://dynamic.zoneedit.com/auth/dynamic.html?host=santafe.guifi.net'

 
El "USER" i "PASS" l'heu de demanar. D'aquesta manera, cada dia a les 2:00 s'actualitzarà el registre DNS de zoneedit amb la IP pública que tingueu a Internet.

Com graficar ADSL que no te IP pública

El Servidor de SantaFe te diverses interfícies de xarxa, la eth2 és la pública de guifi (10.138.75.98) que esta connectada directament a un mikrotik. La eth1 esta connectada directament al router ADSL, amb un rang privat (192.168.0.x/24). En teoria caldria tenir una IP pública per poder graficar-la, però es pot fer d'una altre manera.

Tunels OpenVPN als CPEs amb RouterOS v3

 
Com ja sabeu per aqui fem servir tunels des dels routers dels usuaris fins a un servidor per a accedir a Internet. Fins ara ho feiem amb Linksys amb OpenWRT i tunels OpenVPN amb certificats, com s'explica aqui. De manera que els usuaris accedeixen de forma transparent tant a la xarxa guifi com a Internet.

Fins ara no haviem fet servir gaire els CPEs. La rao principal era que no els necessitavem i que tenia que posar-m'hi per a poder fer que establisin tunels de la mateixa manera que fem amb els Linksys. El RouterOS 2.x nomes suporta tunels PPTP, i despres de bastantes hores esbarellant-me amb el servidor Debian i el PPTPd, els he descartat perque tenia molts problemes d'estabilitat. Aixi que he agafat la RouterOS 3.0rc13 i m'hi he posat.

Guia d'Instal·lació "RouterBoard Large Outdoor Case"

Amb una de les caixes grans, de les que hi caben 2 RB532, que vaig comprar fa unes setmanes hi venia un full que explica com es munten aquestes caixes. Les primeres que havia muntat eren un churro comparades amb les que he muntat des de que tinc la guia, no soc gaire manetes ...

Ho he escanjat i queda penjat aqui, per a qui li pugui interessar.

Problemes instal·lant IPP2P en un Debian Etch

A SantaFe en comptes de fer servir proxy per l'accés a Internet, ho fem amb tunels OpenVPN. Sempre hi ha algun usuari "despistat" que prova de fer anar el emule. Per evitar-ho, el millor es fer servir algun mòdul per a iptables que identifiqui el trànsit P2P i així poder bloquejar-lo. Sempre he fet servir el IPP2P. Es bastant fàcil d'instal·lar, a la mateixa web del IPP2P ho explica. També hi ha un how-to en espanyol aqui.

Tot i que no és difícil instal·lar-lo i que ja ho havia fet diverses vegades, al fer l'upgrade del servidor (ara és un Debian Etch), no hi havia manera de que funciones. He perdut algunes hores intentant fer-ho anar, fins que finalment he trobat un post dient que hi ha un probelma entre el IPP2P v0.8.2 (l'ultim disponible a dia d'avui) i els iptables v1.3.6 (els que porta el Debian Etch).

Simplement calia editar el Makefile del IPP2P v0.8.2 i quasi al final del fitxer, canviar el principi de la linea:

ld -shared -o libipt_ipp2p.so libipt_ipp2p.o

 
per:

$(CC) -shared -o libipt_ipp2p.so libipt_ipp2p.o

 
En fi, que a ningú li torni a pasar el mateix. ;-)

Ni1SolClic Beta

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.

Instalació

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

OpenVPN

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.

OpenVPN mode 1

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.

OpenVPN mode 2

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.

ni1solclic + guifi.net

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?

Instal·lant i configurant un servidor de gràfiques de guifi en un Debian Etch

Hem va costar de posar en funcionament un servidor de gràfiques de guifi, detallo els pasos per si algu altre ho ha de fer. Aquesta es la meva “recepta”, la podeu variar :-) Espero no deixar-me res. En primer lloc anem a http://guifi.net/ca/node/add/guifi-service i creem un servidor de gràfiques (SNP Graph Server). Guardem la ID del servidor de gràfiques, en el meu cas era el 9039. Hem d'anar a tots els trastos i nodes que faran servir aquest servidor i seleccionar-lo en de la llista de servidors de gràfiques. En el meu cas ho vaig fer en un Debian 4.0 (Etch). Apart del php5 i apache2 que ja els tenia ,vaig tenir que instalar:

apt-get install rrdtool librrdp-perl librrds-perl mrtg mrtg-rrd subversion php5-cli

  Despres heu d'obtenir el snpservices del svn de guifi. Heu d'estar registrats a lafarga.cat perque us demanara nom d'usuari i password:

cd /var/www svn checkout https://svn.projectes.lafarga.cat/svn/guifi/snpservices

  Es crea una carpeta a /var/www/snpservices on hi ha tot el que cal. Ara feu que l'apache2 apunti a la carpeta graphs:

Alias /guifigraphs /var/www/snpservices/graphs

  En el meu cas al crear el servidor de gràfiques a la web de guifi.net li vaig que la url per accedir a les grafiques era http://santafe1.dyndns.org:2000/guifigraphs/graphs.php. Ara cal donar permisos d'escriptura per a tothom del subdirectir tmp, crear un config.php i un parell de subdirs per al rrdtool:

chmod a+rw /var/www/snpservices/tmp cp /var/www/snpservices/common/config.php.template /var/www/snpservices/common/config.php mkdir /var/www/snpservices/rrdb mkdir /var/www/snpservices/rrimg

  Configurem amb el nostre editor preferit el fitxer de configuració /var/www/snpservices/common/config.php. Canviem els següents paràmetres, ajustant-los a la nostres dades, en comptes de 9039 heu de posar la ID del vostre servidor de gràfiques:

$snp_path='/var/www/html/snpservices'; $SNPGraphServerId = 9039; $MRTGConfigSource='http://www.guifi.net/snpservices/graphs/cnml2mrtgcsv.php?server=9039'; $CNMLSource='http://www.guifi.net/snpservices/common/qnodes.php?nodes=%s'; $rrddb_path='/var/www/snpservices/rrdb/'; $rrdimg_path='/var/www/snpservices/rrimg/';

  Ara nomes cal fer un parell d'entrades al crontab. La primer perque cada mitja hora descarregui de guifi.net la llista de trastos dels que ha de fer grafiques, i el segon perque cada 5 minuts reculli les dades de tots els trastos:

crontab -e */30 * * * * cd /var/www/snpservices/graphs; php mrtgcsv2mrtgcfg.php */5 * * * * env LANG=c /usr/bin/mrtg /var/www/snpservices/data/mrtg.cfg --lock-file /var/lock/mrtg/guifi_l

  Per no tenir que esperar, forceu la primera descarrega dels trastos a graficar des de guifi.net executant:

cd /var/www/snpservices/graphs; php mrtgcsv2mrtgcfg.php

  I ja esta, espero que tingueu mes sort que jo i us vagi tot a la primera.

 

Script per mantenir espai lliure en un servidor amb Mldonkey

Tenim un servidor amb el Mldonkey, amb un disc dur dedicat a guardar les descarregues. Cada 3-4 dies haviem de borrar manualment fitxers per alliberar espai. He fet un petit script amb perl que fa la feina per mi, pot ser útil per algú. En l'script només s'ha de definir la carpeta on hi ha els fitxers a borrar ($path) i l'espai mínim que volem tenir lliure al disc dur ($min_free):

#!/usr/bin/perl

use File::stat;
use Filesys::DiskSpace;

my $path = "/dades/files";
my $min_free=2*1024*1024; # 2 GBytes lliure

opendir(DIRHANDLE, $path) || die;
# Posa nom fitxer i mida en dos hash amb la data com a key
foreach $name (readdir(DIRHANDLE)) {
        my $fs=stat($path.$name);
        my $ftime=$fs->mtime;
        my $fls{"$ftime"}=$fs->size;
        my $fln{"$ftime"}=$name;
}
closedir(DIRHANDLE);

foreach my $key (sort keys %fls){  # Ordena fitxers per antiguitat
        # Comprova espai lliure ...
        my ($fs_type, $fs_desc, $used, $avail, $fused, $favail) = df $path;
        if($avail>$min_free){ last; }
        # ... si falta, esborra. Abans comprova que no sigui "." o ".."
        if( $fln{"$key"}!~/^\.$/ && $fln{"$key"}!~/^\.\.$/ ) {
                unlink($path.$fln{"$key"});
        }
}

 

En el meu cas tinc muntat un dic dur com a “/dades”, i tinc configurat el Mldonkey perque guardi els fitxers descarregats a “/dades/files”, els temporals tambe, de fet corre integrament en aquest disc dur. Aquest script es crida desde el crontab cada mitja hora. El que fa es comprovar l'espai lliure al disk, i en cas de que n'hi hagi menys del definit a $min_free, comença a borrar els fitxers mes vells fins que el disk te el mínim d'espai definit.

Recordeu que l'script a de correr sota un usuari que tingui permisos per a borrar fitxers en aquell directori.

Banners de cortesia en RouterOS amb hotspots descafeinats

Tot i que en els comentaris de http://guifi.net/ca/node/7029 s'explica un mètode fàcil i efectiu per a mostrar banners de cortesia als clients oportunistes dels APs mitjançant DNAT en el firewall de l'AP, es pot fer també mitjançant el hotspot (portal captiu) que inclou el RouterOS dels Mikrotiks.

Amb un hotspot descafeinat tindrem:


  • Transparent pels clients de l'AP amb nodes creats a Guifi.net.
  • Es pot afegir facilment a l'unsolcic.
  • No cal un servidor web extra que mostri la web de cortesia.
  • No cal un Ràdius ni ningú s'ha d'autenticar.
  • Els clients oportunistes reben un banner de cortesia i alhora tenen acces a 10.x.x.x

Contingut sindicat