Compare commits

...

3 Commits

Author SHA1 Message Date
Sergio Álvarez 5dc359995f
vpn 2023-01-31 18:19:20 +01:00
Sergio Álvarez 4726f07ea7
unraid 2023-01-31 18:19:20 +01:00
Sergio Álvarez 660b758927
10gb lan 2023-01-31 18:19:20 +01:00
4 changed files with 178 additions and 4 deletions

View File

@ -0,0 +1,65 @@
---
layout: post
title: "Unraid: servidor NAS en casa"
tags: [unraid, nas, server, home, linux, raid]
---
[Unraid](https://unraid.net) es una distribución de Linux para montar una NAS. Además podrás poner en marcha VMs y contenedores de Docker, instalar apps, o usarlo como una distribución más (con sus matices).
La característica principal de este SO es la forma que tiene de gestionar los discos. Tiene algo muy similar a un [MergerFS](https://github.com/trapexit/mergerfs) + [SnapRAID](https://www.snapraid.it/), que no es más que la unión de varios discos con uno para [paridad](https://en.wikipedia.org/wiki/Parity_drive). Y no solo eso, sino que al NO SER UN RAID puedes ver el contenido de los discos desde cualquier otro equipo. Quiero decir, que quitas un disco del equipo, lo pinchas en otro, y ves el contenido qeu ha caido en ese disco concreto. Podrás si quieres copiarlo, o borrar lo que tiene, reemplazarlo por otro igual o mayor (sin superar el disco de paridad), etc. Casi casi es un [JBOD](https://en.wikipedia.org/wiki/Non-RAID_drive_architectures#JBOD) "seguro".
La diferencia con [SHR de Synology](https://kb.synology.com/en-eu/DSM/tutorial/What_is_Synology_Hybrid_RAID_SHR) es que en Unraid se usa [FUSE](https://github.com/libfuse/libfuse) por encima de los discos, y SHR usa [LVM](https://en.wikipedia.org/wiki/Logical_Volume_Manager_(Linux)). Eso da un poco más de performance, pero se pierde la "ventaja" de no usar RAID (si es que queremos verlo como ventaja).
Ok, basta de introducciones y a ver qué cacharro he montado. Este cacharro es la evolución durante años de tener discos por USB con Raspis, NUCs, y ahora ya un sistema hecho y derecho con los discos conectados por SATA. Más seguro, más versátil, y más rápido (y caro, si, pero lo compensa). Podría haber usado LSI/SAS pero para uso doméstico no me he atrevido.
# Hardware
Unraid lo tengo instalado en un *Kingston DataTraveler SE9* de 32GB. Es USB2, como recomiendan. Unraid se carga en memoria, no se instala en disco.
Para la caja uso una *Fractal Design Node 804*. Es cuadrada y con dos "cámaras", una para los componentes y otra para los discos. De lo mejorcito que he probado en mucho tiempo.
La placa base es una *MSI B560M PRO*. Si, una placa de escritorio, lo he preferido sobre la típica Supermicro por un tema de precio + disponibilidad + futura reutilización. Además tiene red de 2.5Gbit y buenas VRMs de alimentación. Chipset B560 para socket LGA1200.
Procesador *Intel Core i3-10105* de 10th generación. Buen precio, potente, "bajo" voltaje y soporte para Quick Sync, necesario para hacer Transcode con Plex, por ejemplo.
Memoria RAM *Kingston FURY Beast DDR4 2666MHz 8GB CL16*. Nada del otro mundo, no es ECC.
Fuente de alimentación *EVGA 500 GD v2 500W 80+ Gold*. Una 80+ Gold "barata", aquí seguramente haya mejores opciones.
Ventilación de CPU *NOX HUMMER H-212*. Silencioso y enfría muy muy bien, muchísimo mejor que el ventilador de stock. Y barato.
Tarjeta de expansión *PCIe SATA3 x1 6ports*. Puesto que tengo 10 discos SATA, necesito más tomas que las que trae la placa.
Tema discos, actualmente esta es la configuración de inicio para aprovechar los discos que ya tengo:
- Disco de paridad: Toshiba N300 4TB 7200RPM
- Discos de datos:
- 5x 4TB Seagate IronWolf 5900RPM
- 2x 3TB Seagate IronWolf 5200RPM
- 2x 1TB WD Red 5200RPM
- Discos de cache:
- appdata y system: Crucial MX500 250GB
- descargas: Crucial MX500 1TB
Por último, un *HDMI Dummy Plug* para que no se desactive la iGPU del procesador.
# Software
Como ya he dicho, he empezado con *Unraid*, versión 6.11.0.
Plugins esenciales:
- Auto Turbo Write Mode: permite duplicar la escritura de paridad cuando todos los discos están encendidos. Sobre todo apra mover los datos inicialmente, esto es esencial.
- Fix Common Problems: el nombre lo dice. Te avisa de cosas que no van bien.
- My Servers: Cloud de unraid, sincroniza la key.
- Unassigned Devices: aumenta las opciones de la pantalla _Main_.
- User Scripts: yo lo uso para crear crones.
Contenedores principales:
- nginx
- iperf3
- qBittorrent
- Plex
VM de momento no tengo ninguna, ni creo que vaya a usar.

View File

@ -0,0 +1,107 @@
---
layout: post
title: "Abrir la LAN con WireGuard"
tags: [unraid, nas, server, home, linux, lan, wireguard, vpn]
---
Hasta ahora lo típico para acceder a la LAN de casa era abrir el puerto 22 por ejemplo, y de ahí ya acceder a los equipos de la red. Pero he ido cambiando eso por WireGuard.
Dejando a un lado las ventajas de WireGuard frente a otras VPN, las dos mayores ventajas que me han hecho cambiar a este setup son:
- Velocidad de reconexión: cuando cambias de red (por ejemplo el móvil entre antenas), o el portátil entre trabajo/casa, el propio túnel se actualiza él solo al vuelo.
- Menos consumo de red: WireGuard usa menos red, lo que se traduce en menos ping y más tasa de red.
Mi configuración inicial consistía en todos los clientes/_peers_ conectados al servidor VPN que monté en el router. Funcionaba, pero eso me hacía depender de un router con kernel moderno. Por diversas razones ya no puedo tener esa dependencia, además no quiero depende tampoco de tener que abrir puertos. Y para finalizar, me he dado cuenta ahora que el router me limitaba levemente la conexión de la VPN por la velocidad del procesador.
Por eso he pasado a tener la VPN en un VPS externo, y para acceder a la LAN de casa (u otra) lo hago _colándome_ por el túnel, concretamente por el _peer_ del NAS.
Para este setup he recurrido a diferentes artículos de referencia sobre WireGuard. Lo que más me ha ayudado, de lejos, es la [página oficial](https://www.wireguard.com/) y este comentario:
> In other words, when sending packets, the list of allowed IPs behaves as a sort of routing table, and when receiving packets, the list of allowed IPs behaves as a sort of access control list.
Otra página que me ha servido de infinita ayuda es [pirate/wireguard-docs](https://github.com/pirate/wireguard-docs). No solo explica cada caso de uso y parámetro, sino que detalla las tripas de WireGuard.
Entre algunos de los problemas que me salieron fue que uno de los _peers_ tenía baja velocidad de transferencia. Resultó ser por el MTU cuando el _endpoint_ iba por IPv6, explicado [aquí](https://keremerkan.net/posts/wireguard-mtu-fixes/).
Y para acabar, los [tutoriales en el foro de Unraid sobre WireGuard](https://forums.unraid.net/topic/84226-wireguard-quickstart/), sobre todo el de [LAN-to-LAN](https://forums.unraid.net/topic/88906-lan-to-lan-wireguard/), donde vi la idea de crear una ruta estática en casa, algo que soportan todos los routers hoy en día.
El resto es cosa de los comandos `ip` e `iptables` de linux .
# Configuración modelo
Servidor:
```
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
MTU = 1412
PrivateKey = ...
PostUp = iptables -A FORWARD -i %i -j ACCEPT
PostUp = iptables -A FORWARD -o %i -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o %i -j MASQUERADE
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PreDown = iptables -D FORWARD -i %i -j ACCEPT
PreDown = iptables -D FORWARD -o %i -j ACCEPT
PreDown = iptables -t nat -D POSTROUTING -o %i -j MASQUERADE
PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
# Name = nas
PublicKey = ...
AllowedIPs = 10.0.0.2/32, 192.168.1.0/24
```
Con esto hacemos que cualquier conexión que nos venga para la LAN de casa (192.168.1.0/24) se mande por el _peer_ 10.0.0.2 (el nas).
Ahora la config del nas:
```
[Interface]
PrivateKey = ...
Address = 10.0.0.2/24
ListenPort = 51820
MTU = 1412
PostUp = iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o br0 -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -s 10.0.0.0/24 -o br0 -j MASQUERADE
PostUp = ip -4 route flush table 200
PostUp = ip -4 route add default via 10.0.0.2 table 200
PostUp = ip -4 route add 192.168.1.0/24 via 192.168.1.1 table 200
PostDown = ip -4 route flush table 200
PostDown = ip -4 route add unreachable default table 200
PostDown = ip -4 route add 192.168.1.0/24 via 192.168.1.1 table 200
[Peer]
# Name = vps
PublicKey = ...
Endpoint = 1.2.3.4:51820
AllowedIPs = 10.0.0.0/24, 172.20.0.0/24
PersistentKeepalive = 25
```
Con este `AllowedIPs` hacemos que se vaya por el túnel todo lo de la VPN y lo de la red de los Dockers que hay en el VPS. Para que cualquier equipo conectado al router de casa se le aplica la ruta estática configurada en el mismo, que precisamente manda estos dos rangos a la IP local del nas, dicho de otra forma, 172.20.0.0/24 redireccionado al "gateway" 192.168.1.2 . Y las rutas y reglas de `iptables` sirven precisamente para que cualquiera que venga por el túnel a otro equipo de la LAN, pueda acceder.
El resto de _peers_ de la VPN no necesitan una config especial, por ejemplo al móvil o al portátil les vale con algo así para acceder tanto a la LAN como a los Dockers:
```
[Interface]
PrivateKey = ...
Address = 10.0.0.x/24
ListenPort = 51820
[Peer]
# Name = movil
PublicKey = ...
Endpoint = 1.2.3.4:51820
AllowedIPs = 192.168.1.0/24, 172.20.0.0/24
```
Resumiendo:
- Todos los _peers_ de la VPN pueden hablar entre si, con los contenedores de Docker del VPS, y con los equipos de la LAN de casa (incluido el NAS y el router).
- El VPS y sus contenedores pueden acceder a la LAN y a los _peers_.
- Cualquier equipo de casa, NAS y router incluidos, pueden acceder a los contendores del VPS y al resto de _peers_.
Total, que todos pueden conectar a todos solo por estar a rango de la VPN.
Y lo mejor de este setup es que me puedo llevar el NAS a otra conexión/casa, o cambiar de proveedor/equipos/router, y con un mínimo ajuste (rutas estáticas) todo funcionaría igual.

View File

@ -1,8 +1,9 @@
Digi Fibra Smart 1Gbps (symetric)
Digi Fibra Smart PRO 10Gbps (symetric)
Linksys WRT3600ACM
Linksys LGS116P-EU
Netgear WAX620
Router Zyxel AX7501-B0
Switch Mikrotik CSS610-8G-2S+IN
Transceptor 10Gtek® SFP+ RJ45 10GBASE-T
DAC 10Gtek® SFP+ 10GBASE-CU
Raspberry Pi 3b+ (MagicMirror²)
Raspberry Pi 4b (PyKVM)

View File

@ -14,5 +14,6 @@ Toshiba N300 4TB 7200RPM [Parity]
Crucial MX500 250GB [Cache]
HDMI Dummy Plug
Kingston DataTraveler SE9 32GB
PCIe 10Gtek® X520-DA2
Plex Pass Lifetime