Professional Documents
Culture Documents
com/montar-un-servidor-casero-con-raspberry-pi-
parte-3-configurar-servidor-dhcp/
Objetivos e ndice.
0.Instalar Raspbian en una tarjeta SD.
1.Primera ejecucin de Raspbian.
2.Configurar servidor DHCP.
3.Configurar servidor DNS cach.
4.DNS local con actualizaciones DHCP.
5.Acceder al servidor desde el exterior.
6.Instalacin y configuracin de OpenVPN.
7.NAS con Raspberry Pi y Samba
Con todo esto y con que tengis una cuarta parte de las ganas de
aprender que tengo yo bastar.
$ sha1sum *-wheezy-raspbian.zip
b4375dc9d140e6e48e0406f96dead3601fac6c81 2013-02-09-wheezy-
raspbian.zip
Posteriormente compararemos el hash obtenido con el que aparece en
la seccin de descargas de la web del proyecto.
Si bien la comprobacin del hash es un paso opcional y puede parecer
innecesario, con el nos aseguraremos de que la descarga se ha
realizado correctamente y que esta no se ha visto comprometida, con
lo que nos podemos ahorrar ms de un problema.
Por ltimo descomprimimos el archivo .zip con:
$ unzip ./*wheezy-raspbian.zip
$ df -h
Esto nos mostrar todos los puntos de montaje del sistema. Para
identificar nuestra SD tenemos dos formas de hacerlo: buscar en la
segunda columna un tamao igual al de nuestra SD o bien ejecutar el
comando sin insertar la tarjeta en nuestro ordenador y comparar esta
salida con la del mismo comando ejecutado con la SD dentro de la
ranura. Hay que tener en cuenta que es posible que nuestra SD
aparezca en ms de una entrada, esto se debe a que en la tabla se
muestran todas las particiones del dispositivo, y si nuestra SD tiene
ms de una aparecer ms de una entrada.
Una vez identificada nuestra SD deberemos fijarnos en la primera
columna, donde se muestra el nombre del sistema de ficheros, que es
la informacin que necesitamos. Nuestra informacin para la SD ser
algo como /dev/mmcblk0p1 o /dev/sdd1, hay que tener en cuenta
que p1 y 1 respectivamente, muestran la particin, as que la
informacin til que utilizaremos ser mmcblk0 o sdd.
TIP: Para realizar dicha identificacin tambin es posible usar una
herramienta grfica de particionado como puede ser Gparted.
INSTALANDO RASPBIAN EN LA TARJETA SD
Ahora que tenemos la informacin necesaria desmontaremos el
volumen (o los volmenes si tenemos ms de una particin) con el
comando umount seguido del volumen (con el nombre completo) por
cada particin montada.
$ umount /dev/mmcblk0p1
Una vez tenemos todos los preparativos hechos solo falta escribir la
imagen .img en nuestra tarjeta SD con el comando dd:
$ ssh pi@192.168.1.132
User: pi
Pass: raspberry
Llegados aqu ya disponemos de acceso total a nuestra Raspberry Pi,
ahora toca configurar!
CONFIGURAR IP FIJA EN RASPBIAN
Lo de mirar la IP desde el DHCP del router est bien para la primera
ejecucin de nuestro home server, pero a partir de ahora
necesitaremos una IP fija con la que identificar siempre el dispositivo.
La eleccin de la direccin de la IP es totalmente irrelevante, yo
elegir la 192.168.1.69 para este tutorial, pero podis usar cualquier
otra. Ms adelante se volver a cambiar esta direccin en el apartado
del servidor DHCP.
1auto lo
2
3iface lo inet loopback
4 iface eth0 inet dhcp
5
6allow-hotplug wlan0
7 iface wlan0 inet manual
8 wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
9 iface default inet dhcp
Las dos primeras lneas hacen referencia a la interfaz loopback,
configuracin que no tocaremos.
La tercera lnea debemos comentarla con # al principio de la lnea y
debajo escribiremos algo tal que as:
Ahora modificaremos los servidores DNS que vamos a usar, para ello
modificaremos el archivo /etc/resolv.conf.
1nameserver 8.8.8.8
Ctrl+X, y y ya tenemos la configuracin creada, ahora falta aplicarla
reiniciando nuestra Raspberry:
$ sudo reboot
$ passwd
$ sudo rpi-update
$ sudo reboot
CONFIGURAR RASPBERRY PI
Raspbian viene provisto de un fantstico script con el que podremos
configurar cosas bsicas del sistema sin tener que calentarnos mucho
la cabeza para poder empezar rpidamente a desarrollar nuestros
proyectos con ella. Para ejecutarlo:
$ sudo raspi-config
Pasamos a detallar las opciones:
ESQUEMA DE LA RED
Advertencia: Este esquema va a ser el que yo utilizar para explicar la
configuracin, podis usar el esquema que os plazca.
En vez de utilizar el rango que por defecto nuestro router trae
incorporado (192.168.1.0/24 o 192.168.0.0/24) lo cambiaremos, por
ejemplo, por 192.168.66.0/24, as si algn dispositivo queda con una
configuracin incorrecta al instante veremos que algo est pasando,
ya que quedar totalmente aislado de la red.
Reservaremos un espacio de direcciones comprendido entre la
192.168.66.100 y 192.168.66.119 donde ubicaremos
el router(192.168.66.100), la Raspberry Pi (192.168.66.101) y en mi
caso el ordenador fijo y un htpc (192.168.66.110 y 111).
El resto del espacio, 192.168.66.1-192.168.66.99 y 192.168.66.120-
192.168.66.254, ser utilizado como rango de asignacin dinmica, un
rango innecesariamente grande para una red domstica, pero que
resulta interesante de configurar.
Con esto en cuenta estos seran los datos:
Red: 192.168.66.0
Mscara de subred: 255.255.255.0
Rango DHCP: 192.168.66.1-192.168.66.99, 192.168.66.120-
192.168.66.254.
Gateway: 192.168.66.100.
Raspberry: 192.168.66.101.
Reservas DHCP: 192.168.66.110 y 192.168.66.111.
DNS: El que queramos, la ip de nuestro router, los DNS de nuestro
ISP, los de Google
/ETC/DEFAULT/ISC-DHCP-SERVER
1INTERFACES=eth0
/ETC/DHCP/DHCPD.CONF
1#Opciones globales
2ddns-update-style none; #Puede actualizar los registros de un DNS si la IP de
un servidor de la LAN cambia, no nos interesa.
3
option domain-name "home.local"; #Establecemos un nombre de dominio.
4
option domain-name-servers 8.8.8.8, 8.8.4.4; #Configuramos los servidores
5
DNS.
6
7
default-lease-time 259200; #Tiempo por defecto de la concesin en
8
segundos.
9
max-lease-time 604800; #Tiempo mximo de la concesin en segundos.
10
11
authoritative; #Establece el servidor como principal.
12
log-facility local7;
13
14
#Opciones de subred
15
subnet 192.168.66.0 netmask 255.255.255.0 { #Declaracin de la subred.
16
range 192.168.66.1 192.168.66.99; #Primer rango de direcciones.
17
range 192.168.66.120 192.168.66.254; #Segundo rango de direcciones.
18
option routers 192.168.66.100; #Gateway (nuestro router).
19
option subnet-mask 255.255.255.0; #Mscara de subred.
20
option broadcast-address 192.168.66.255; #Direccin de broadcast
21
}
22
23
#Reserva de direcciones
24
host timbleck-pc1 { #Declaramos la reserva
25
hardware ethernet 00:11:22:33:44:55; #Direccin MAC del dispositivo.
26
fixed-address 192.168.66.110; #Direccin IP reservada.
27
}
28
29
#Reserva de direcciones
30
host timbleck-pc2 { #Declaramos la reserva
31
hardware ethernet 00:00:00:11:11:11; #Direccin MAC del dispositivo.
32
fixed-address 192.168.66.110; #Direccin IP reservada.
}
Es importante respetar la sintaxis del archivo (sobretodo sus ; ya
que son fciles de olvidar).
Para ahorrarnos el tener que configurar las IPs a mano vamos a hacer
las cosas en el orden correcto.
El primer paso va a ser cambiar la IP interna de nuestro router y
asignarle la que hemos convenido, as que nos conectamos a su
servidor web y le configuramos la IP 192.168.66.100.
Adems, deberemos desactivar el servicio de DHCP del mismo desde
su panel de control.
Lo siguiente ser cambiar la IP de nuestra Raspberry Pi. Lo haremos
como en el tutorial anterior, es decir, editando el
archivo /etc/network/interfaces:
1# dns=dnsmasq
Ctrl + O para salvar cambios y Ctrl + X para salir.
Con esto solo nos queda reiniciar el PC o bien hacer lo propio con
Network Manager:
$ sudo named-checkconf
1nameserver 127.0.0.1
Con esto hecho nuestra Raspberry Pi est consultando a su propio
servidor DNS las direcciones.
OBSERVACIONES FINALES
Haciendo pruebas bajo la misma lnea entre la comparacin de
velocidad de resolucin de nombres apuntando directamente a los
DNS de Google y apuntando a la Raspberry Pi nos encontraremos con
los siguientes datos:
Los tiempos de respuesta para la primera consulta sobre un dominio
apuntando directo al DNS de Google o apuntando a la Raspberry
Pi son muy similares, con variaciones de pocos ms entre un sistema y
el otro. En cambio en la segunda consulta podemos observar como el
tiempo consultando directamente al DNS de Google es el mismo que
en la primera ocasin pero en la Raspberry Pi la resolucin es casi
inmediata.
As que podemos decir tranquilamente que despus de la
implementacin hemos ganado en velocidad de navegacin gracias a
nuestra Raspberry Pi.
Advertencia: Si dispones un ordenador con *buntu o derivadas (a
partir de la versin 12.04) y la configuracin de DNS no se te actualiza
(apuntando siempre a 127.0.0.1 o 127.0.1.1) lee punto Cambiar DNS
en Ubuntu 12.04 y posteriores.
$ sudo /usr/sbin/rndc-confgen -a
$ sudo named-checkconf
$ORIGIN .
1$TTL 604800
2
366.168.192.in-addr.arpa IN SOA raspberry.home.local.
4webmaster.home.local. (
5 1353527647 ; serial
6 10800 ; refresh
7
3600 ; retry
8
604800 ; expire
9
38400 ; minimum
10
11 )
12
13NS raspberry.home.local.
14
15$ORIGIN 66.168.192.in-addr.arpa.
101 PTR raspberry.home.local.
Comprobamos la configuracin con:
$ nslookup
> raspberry.home.local
Que nos mostrar su direccin IP.
Ahora la resolucin inversa:
> 192.168.66.101
Que nos mostrar el campo name junto con el nombre de red del
dispositivo.
Si las pruebas son satisfactorias querr decir que nuestro dominio
est montado.
$ tail -f /var/log/syslog
$ ssh pi@raspberry.home.local
Hasta aqu todo lo relacionado con DHCP y DNS en este tutorial.
$ cd /usr/local/src
Descargamos el programa:
$ sudo wget http://www.no-ip.com/client/linux/noip-duc-
linux.tar.gz
Lo descomprimimos e instalamos:
$ cd no-ip-2.1.9-1
$ sudo make
$ passwd
SEGURIDAD EN SSH
El primer servicio al que probablemente queremos acceder una vez
abierta la comunicacin con el exterior es a ssh, para as poder
acceder a nuestro dispositivo desde donde queramos. Como este
servicio provee acceso completo a nuestro sistema deberemos realizar
algunas tareas para asegurar el servicio. Podemos acceder a su
archivo de configuracin desde:
$ sudo /etc/ssh/sshd_config
Hay muchas cosas que nos puede interesar cambiar en este archivo,
pero bsicamente tocaremos dos. Cambiaremos el puerto por defecto
ya que como anteriormente he dicho hay que huir de las
configuraciones por defecto. As que nos dirigimos al campo Port y
cambiamos el 22 por el que nos plazca:
1Port 6784
Por otro lado prohibiremos al usuario root la conexin ya que en el
supuesto caso de que se consiguiera acceso con este usuario por un
atacante estaramos totalmente vendidos. As que nos dirigimos a
PermitRootLogin y cambiamos el yes por no.
1PermitRootLogin no
Estas son medidas bsicas, con una rpida bsqueda en la red
encontraremos muchas ms medidas a tomar para endurecer el
servicio.
Anonimizar conexiones.
Acceder a recursos internos de nuestra red local desde el exterior.
El primer punto es algo bsico si decidimos conectar nuestros
dispositivos a una red pblica. Desde que capturar trfico en una red
es algo tan trivial como tener la aplicacin indicada en nuestro
telfono mvil el navegar desde cualquier red abierta sin ningn tipo
de proteccin por nuestra parte es cuanto menos temerario. El
segundo punto es una funcionalidad la mar de interesante si
disponemos de algn tipo de almacenamiento compartido en la red
desde el que queramos acceder desde cualquier lado.
Una vez visto lo que nos puede aportar este nuevo servicio de nuestra
Raspberry Pi vamos a instalarlo y configurarlo.
CREAR UNA AUTORIDAD CERTIFICADORA Y GENERAR CERTIFICADOS
CON EASY-RSA
OpenVPN se basa en OpenSSL para implementar la criptografa
SSL/TLS. Para ello tenemos dos opciones:
1.Configurar una clave privada compartida.
2.Configurar un certificado con el estndar X.509 basado en
infraestructura de llave pblica.
Para este tutorial utilizaremos la segunda opcin, aprovechando que
OpenVPN incorpora todo lo necesario para hacerlo.
$ sudo cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0
/etc/openvpn/
$ cd /etc/openvpn/2.0
1export KEY_COUNTRY="ES"
2export KEY_PROVINCE="BARCELONA"
3export KEY_CITY="Barcelona"
4export KEY_ORG="Sobrebits"
5export KEY_EMAIL="micorreo@micorreo.com"
6export KEY_CN=micommonname
7export KEY_NAME=minombredeclave
8export KEY_OU=IT
Despus de esto ya estamos listos para exportar los datos del archivo
vars.
$ sudo su
# source vars
# echo $KEY_CITY
# ./clean-all
# ./build-ca
# ./build-key-server raspberry.home.local
Se nos preguntarn los mismos datos que en el momento de la
generacin de los certificados de la CA, con lo que contestaremos con
los datos deseados y seguiremos las instrucciones. Ahora vamos con
los parmetros Diffie-Hellman:
# ./build-dh
Y por ltimo con la clave para cada uno de los usuarios que se
conecten va VPN:
# ./build-key Nombreusuario
# cp ca.crt /etc/ssl/certs/Sobrebits_CA.crt
# cp raspberry.home.local.crt /etc/ssl/certs/
# cp raspberry.home.local.key /etc/ssl/private/
# cp dh1024.pem /etc/openvpn/
$ sudo cp /usr/share/doc/openvpn/examples/sample-config-
files/server.conf.gz /etc/openvpn/
$ cd /etc/openvpn
$ gunzip server.conf.gz
$ sudo su
Vamos a poner los datos concretos con los que ejemplificar todo el
tutorial:
$ blkid
$ sudo mount -a
Si la sintaxis era correcta y no aparece error alguno al ejecutar mount
ya tendremos nuestra unidad montada en /mnt/NAS.
$ cd /mnt/NAS
$ ls -l
1drwxrws--- 2 root home 4096 Oct 10 21:13 compartida
2drwxrwx--- 2 usuario1 usuario1 4096 Oct 10 22:41
3carpus1
4drwxrwx--- 2 usuario2 usuario2 4096 Oct 10 21:12
carpus2
Como vemos, todas las carpetas tienen permiso 770, y en la carpeta
compartida podemos ver una s en la casilla de ejecucin de grupo,
lo que muestra que est habilitado el bit setgid.
$ sudo su
# cd /etc/samba
# mv smb.conf smb.conf.orig
# nano smb.conf
1security=user
Si bien este es el comportamiento por defecto siempre es interesante
tenerlo puesto.
Ahora generaremos nuestras propias secciones, que correspondern a
las distintas carpetas que compartamos. Puesto que en esencia las
tres secciones son iguales pondr los comentarios solo en la primera:
[carpus1] # Nombre del recurso compartido
1 comment = Carpeta personal de usuario1 # Descripcin.
2 path = /mnt/NAS/carpus1 # Ruta de la carpeta.
3 read only = No # Indicamos que no es de solo lectura.
4 valid users = usuario1 # Usuarios que pueden acceder al recurso.
5 write list = usuario1 # Usuarios que pueden escribir en el
6recurso.
7 create mask = 0660 # Mscara de creacin de archivos.
8 directory mask = 0770 # Mscara de creacin de directorios.
9
10[carpus2]
11 comment = Carpeta personal de usuario2
12 path = /mnt/NAS/carpus2
13 read only = No
14
valid users = usuario2
15
write list = usuario2
16
17 create mask = 0660
18 directory mask = 0770
19
20[compartida]
21 comment = Carpeta compartida
22 path = /mnt/NAS/compartida
23 read only = No
24 valid users = @ home
25 write list = @ home
26 create mask = 0660
directory mask = 0770
NOTA: En valid users y write list de la seccin compartida es @home
sin espacio.
Quiero pararme un momento a hablar de los parmetros create
mask y directory mask. Estos dos parmetros determinarn los
permisos que se aplicarn a los archivos y directorios creados
respectivamente. Es importante especificar esto, sobretodo en la
carpeta compartida, puesto que necesitamos que los archivos se
generen con permiso de escritura para el grupo, de no ser as el otro
usuario que accede a la carpeta no podra modificar los permisos. Por
otro lado, tanto en la compartida como en las personales queremos
evitar que se de ningn tipo de permiso a otros usuarios, por lo cual
es importante que se apliquen estos permisos. De nuevo recomiendo
echar un ojo a los permisos en GNU/Linux ante cualquier duda al
respecto.
Hecho esto guardamos el archivo y ejecutamos la herramienta de
comprobacin del archivo smb.conf:
# testparm
Que no debera mostrarnos errores. Posteriormente reiniciamos el
servicio Samba: