El objetivo de esta guía es explicar los conceptos básicos necesarios para poder diseñar y ejecutar una red local con hardware genérico y software libre con el servicio de FTTH de Digi, ya sea GPON (1 Gb/s) o XGS-PON (10 Gb/s). Con pequeños cambios se puede aplicar a cualquier proveedor que utilice las mismas tecnologías, que son prácticamente todos.
Este montaje reemplaza el router de Digi por hardware propio que está bajo el control total del administrador de la red local, sin que Digi pueda acceder o modificar de ninguna forma los dispositivos. De esta forma se puede hacer cualquier montaje de red, según las necesidades de cada caso.
Téngase en cuenta que no es malo que el proveedor ofrezca equipamiento propio y que pueda gestionarlo remotamente. De hecho, es lo más apropiado en la mayoría de casos. Sin embargo, los usuarios más avanzados que quieran tomar el control de su red, también deben poder hacerlo. Es fundamental para mantener la neutralidad de internet y su naturaleza distribuida.
De ahí la motivación para hacer esta guía, que tiene un nivel técnico avanzado. La intención no es explicar hasta el mínimo detalle de la ejecución, sino proporcionar toda la información necesaria en un mismo sitio. En cualquier caso, si a alguien le surge alguna consulta, por favor, que no dude en preguntar en los comentarios.
Arquitectura y tecnologías
Los proveedores de servicios de internet (ISP) tienen redes que cubren áreas geográficas muy grandes: barrios, municipios, comarcas, provincias y países enteros. Estas redes de un mismo proveedor están conectadas entre sí y a su vez también lo están con las redes de otros proveedores. Juntas, todas forman lo que conocemos como internet:
Está fuera del ámbito de esta guía explicar cómo funcionan estas redes tan grandes. Lo que nos ocupa en este caso es el último tramo de entrega, entre la central de telecomunicaciones de nuestra zona (barrio, municipio, etc.) y nuestro domicilio, que es donde se utilizan las redes ópticas pasivas (PON).
La característica definitoria de las redes de fibra pasivas es que no necesitan componentes electrónicos en los puntos intermedios, solo en los dos extremos. El proveedor tiene un dispositivo llamado OLT (terminal de línea óptica, por sus siglas en inglés) en un edificio, y desde él sale un cable de fibra que se puede ir subdividiendo por el camino hasta llegar a los puntos de entrega finales. Esta subdivisión se hace con unas cosas llamadas splitters, que separan la luz sin necesidad de electricidad (básicamente son unos espejos sofisticados).
Al otro lado del cable conectado a la OLT se encuentran muchas ONU (unidad de red óptica, por sus siglas en inglés, no Organización de las Naciones Unidas), también llamadas ONT (terminal de red óptica). Concretamente, puede haber hasta 128.
La distancia entre la OLT y la ONU/ONT puede ser de hasta 20 km. Las redes ópticas pasivas permiten hacer llegar internet de alta velocidad y baja latencia con un coste de despliegue y mantenimiento imbatibles.
El proveedor entrega una fibra monomodo en el punto final (normalmente, un domicilio o una oficina) con conector SC/APC. Esta fibra, como hemos visto, está conectada a la OLT que se encuentra en la central de nuestra zona. A partir de ese conector empieza nuestra red local.
Las redes ópticas pasivas permiten dar saltos tecnológicos sin necesidad de cambiar el cableado, únicamente actualizando las OLTs y las ONUs, o sea, los dispositivos de los extremos. En España, la primera tecnología de fibra óptica pasiva que se desplegó fue GPON, que permite alcanzar hasta 2,4 Gb/s de descarga y 1,2 Gb/s de subida el punto de entrega. Recientemente, operadores como Digi y Orange han empezado a actualizar sus OLTs y ONUs a XGS-PON, que permite velocidades de 10 Gb/s simétricos en el punto de entrega. Además, las OLTs pueden trabajar simultáneamente con ambas tecnologías para poder ir actualizándolas progresivamente conforme los clientes también lo vayan haciendo.
Diseño
Explicados los conceptos, el siguiente paso es hacer el montaje de la red local. La fibra monomodo que nos entrega el proveedor se conectará a una ONU/OLT, que a su vez estará conectada a un router, el cual finalmente se conectará al switch:
OLT - ONU - Router - Switch
Hardware
Estos son los requisitos de hardware para poder hacer el montaje:
- ONU/ONT. Dependiendo de la tecnología que utilice la OLT (es decir, el primer dispositivo del operador que hay al otro lado de la fibra que nos llega a casa), necesitaremos una ONU GPON o XGS-PON. Además, dependiendo de los requisitos de la OLT, será necesario que la ONU permita modificar algunos parámetros de PON (como el número de serie o la MAC de la interfaz).
- Router. Puesto que las tarjetas de red modernas suelen encargarse del trabajo duro, no es necesario que sea tremendo maquinote.
- Mínimo 2 interfaces SFP+ (una para upstream y otra para downstream, es decir, una para el lado del proveedor y otra para el nuestro).
- CPU con arquitectura AMD64 (o sea, AMD o Intel). Es una limitación del software que se va a utilizar.
- Memoria y almacenamiento suficientes.
- Switch:
- Mínimo 2 interfaces SFP+. También puede tener interfaces RJ45 10GBASE-T (10 Gb/s) y/o RJ45 1GBASE-T (1 Gb/s), según las necesidades y el presupuesto.
- Es recomendable que sea gestionable para poder hacer más virguerías, pero no es necesario.
- Cableado para los enlaces. Según las interfaces a conectar.
Se propone el siguiente hardware para este caso en concreto:
- Switch. Escójase uno en función de las necesidades y presupuesto.
- Router: Qotom Q20331G9-S10
- ONU/ONT. Escójase uno en función de la red del proveedor.
- XGS-PON:
- XGS-ONU-25-20NI
- EN-XGSFPP-OMAC-V2 (es exactamente el mismo dispositivo que Azores WAS-110)
- GPON: GPON-ONU-34-20BI
- XGS-PON:
- Cableado para los enlaces.
- Entre interfaces SFP+ y menos de 15 m: cable twinax DAC SFP+. Hará falta al menos uno de 2 metros para el enlace entre el router y el switch.
- Entre interfaces SFP+ y más de 15 m: cable de fibra OM3 multimodo y los transceptores correspondientes según los dispositivos de los extremos.
- Entre interfaces RJ45 10GBASE-T: cable de par trenzado, categoría 7, S/FTP
- Entre interfaces RJ45 1GBASE-T o inferior: cable de par trenzado, categoría 6, S/FTP.
Todo el hardware propuesto ha sido probado con éxito para este caso de uso. Esto no significa que no haya más opciones, sino que estas funcionan y son buenas.
Software
En este caso se escoge VyOS, pero podría ser cualquier software compatible con el hardware escogido:
El software debe ser compatible con PPPoE.
Montaje
Router
El primer paso será descargar la versión rolling VyOS o compilarse uno mismo la versión estable (así lo exige la licencia) y crear un USB arrancable con alguna herramienta como Balena Etcher.
A continuación, con el router conectado a un monitor y un teclado (o, para los más frikis, a la consola serie), habría que instalar VyOS. Es seguir los pasos como con cualquier instalador, no tiene mayor misterio este punto. Recomiendo dejar todos los valores por defecto, especialmente la contraseña (vyos
), esto último por comodidad.
Una vez instalado VyOS, lo recomendable es configurar alguna de las interfaces de red para poder conectarnos por SSH y terminar la configuración. Para ello, a manubrio en el teclado que aún tenemos conectado a la máquina, ejecutaremos los siguientes comandos (una vez iniciada la sesión):
Por ejemplo, en el router Qotom propuesto, la interfaz eth8
es la última RJ45, la que queda separada de las demás.
configure # para entrar en el modo de edición de la configuración
set system option keyboard-layout es # nos ahorramos dolores de cabeza
commit
set interfaces ethernet eth8 address 172.16.0.1/24
set service ssh
commit
save
A continuación, conectaremos nuestra máquina directamente a la interfaz eth8
del router y nos asignaremos la IP 172.16.0.2/24
para poder llegar. Además, pondremos la puerta de enlace por defecto 172.16.0.1
, lo cual nos será de utilidad en pasos posteriores.
Nos conectamos al router por SSH (con la contraseña que hemos definido en el instalador, que por defecto es vyos
):
ssh vyos@172.16.0.1
Una vez dentro, podemos crear un archivo de texto en el que pegar y editar la configuración:
nano config.boot
Y pegamos la siguiente configuración base:
interfaces {
loopback lo {
}
ethernet eth0 {
description "upstream-digi"
offload {
gro
gso
rfs
rps
sg
tso
}
vif 20 {
}
}
ethernet eth1 {
description "downstream"
offload {
gro
gso
rfs
rps
sg
tso
}
address "192.168.1.1/24"
address "fe80::1/64"
}
ethernet eth2 {
}
ethernet eth3 {
}
ethernet eth4 {
}
ethernet eth5 {
}
ethernet eth6 {
}
ethernet eth7 {
}
ethernet eth8 {
description "management"
address "172.16.0.1/24"
}
pppoe pppoe0 {
source-interface "eth0.20"
mtu "1492"
no-peer-dns
authentication {
username "<reemplazar>@digi"
password "<reemplazar>"
}
dhcpv6-options {
pd 0 {
length "56"
interface eth1 {
sla-id "0"
address "1"
}
}
}
ip {
adjust-mss "clamp-mss-to-pmtu"
source-validation "strict"
}
ipv6 {
adjust-mss "clamp-mss-to-pmtu"
address {
autoconf
}
}
}
}
protocols {
static {
route 10.0.0.0/8 {
blackhole {
distance "254"
}
}
route 172.16.0.0/12 {
blackhole {
distance "254"
}
}
route 192.168.0.0/16 {
blackhole {
distance "254"
}
}
}
}
firewall {
global-options {
broadcast-ping "disable"
ip-src-route "disable"
ipv6-src-route "disable"
receive-redirects "disable"
ipv6-receive-redirects "disable"
send-redirects "disable"
source-validation "strict"
syn-cookies "enable"
twa-hazards-protection "enable"
}
state-policy {
established {
action "accept"
}
related {
action "accept"
}
invalid {
action "drop"
}
}
zone wan {
interface "pppoe0"
default-action "drop"
from private {
firewall {
name accept-all-v4
ipv6-name accept-all-v6
}
}
}
zone private {
interface "eth1"
default-action "drop"
from wan {
firewall {
name accept-icmp-v4
ipv6-name accept-icmp-v6
}
}
}
name accept-all-v4 {
default-action "accept"
}
ipv6-name accept-all-v6 {
default-action "accept"
}
name accept-icmp-v4 {
default-action "drop"
rule 10 {
action "accept"
protocol "icmp"
}
}
ipv6-name accept-icmp-v6 {
default-action "drop"
rule 10 {
action "accept"
protocol "ipv6-icmp"
}
}
}
nat {
source {
rule 1 {
description "ipv4 masquerade"
outbound-interface "pppoe0"
source {
address "192.168.1.0/24"
}
destination {
address "!192.168.1.0/24"
}
translation {
address "masquerade"
}
}
}
}
service {
ntp {
server 0.pool.ntp.org {
}
server 1.pool.ntp.org {
}
server 2.pool.ntp.org {
}
}
lldp {
interface eth0 {
}
interface eth1 {
}
interface eth2 {
}
interface eth3 {
}
interface eth4 {
}
interface eth5 {
}
interface eth6 {
}
interface eth7 {
}
interface eth8 {
}
}
ssh {
listen-address "192.168.1.1"
disable-host-validation
}
dhcp-server {
listen-address "192.168.1.1"
shared-network-name private {
authoritative
domain-name "local"
domain-search "local"
name-server "1.1.1.1"
name-server "8.8.8.8"
name-server "76.76.2.5"
subnet 192.168.1.0/24 {
default-router "192.168.1.1"
lease "86400"
range 1 {
start "192.168.1.100"
stop "192.168.1.254"
}
}
}
}
router-advert {
interface eth1 {
name-server "2606:4700:4700::1111"
name-server "2001:4860:4860::8888"
name-server "2606:1a40::5"
prefix ::/64 {
decrement-lifetime
deprecate-prefix
preferred-lifetime "4294967295"
valid-lifetime "4294967295"
}
}
}
}
system {
host-name "router"
name-server "2606:4700:4700::1111"
name-server "2001:4860:4860::8888"
name-server "2606:1a40::5"
name-server "1.1.1.1"
name-server "8.8.8.8"
name-server "76.76.2.0"
option {
keyboard-layout "es"
}
login {
banner {
pre-login ""
post-login ""
}
user vyos {
authentication {
plaintext-password "<reemplazar>"
}
}
}
syslog {
global {
facility all {
level "notice"
}
}
}
console {
device ttyS0 {
speed "115200"
}
}
}
En la cual tendremos que reemplazar todos los <reemplazar>
por sus correspondientes valores:
- Usuario y contraseña PPPoE: si se tiene GPON, se pueden pedir a Digi directamente por el chat de la web o por teléfono. Si no, oficialmente no los proporcionan, pero se pueden obtener mediante varios métodos.
- Contraseña del router: una contraseña suficientemente segura que almacenaremos en nuestro gestor de contraseñas y que servirá para autenticarse por SSH (solo desde la red local) o por consola en el router.
Una vez el archivo de configuración tenga los valores correctos:
load config.boot
commit
save
Y con esto el router ya estaría listo.
ONU
El siguiente paso es conectar la ONU al router. De acuerdo con la configuración anterior, lo haremos en la primera interfaz SFP+ (eth0
).
Dependiendo de la ONU que hayamos adquirido, le asignaremos al router una IP en su interfaz para que podamos llegar a la interfaz de gestión de la ONU desde nuestra máquina:
set interfaces ethernet eth0 address 192.168.100.2/24 # XGS-ONU-25-20NI
set interfaces ethernet eth0 address 192.168.11.2/24 # EN-XGSFPP-OMAC-V2 / WAS-110
set interfaces ethernet eth0 address 192.168.1.11/24 # XGS-ONU-25-20NI
commit
save
Antes de continuar necesitaremos obtener el número de serie PON de nuestro router Digi. Lo podremos encontrar en la etiqueta, tanto de la caja como del propio dispositivo, y tiene el siguiente aspecto: ZTEGABCD0123
. Empieza siempre por ZTEG
, que es el identificador del fabricante de la OLT y la ONU/ONT, y va seguido de ocho caracteres hexadecimales en mayúsculas. Tomaremos nota para posteriores pasos.
XGS-ONU-25-20NI
Si hemos adquirido la ONU XGS-ONU-25-20NI, a continuación nos conectaremos a ella por Telnet desde nuestra máquina:
telnet 192.168.100.1
Nos preguntará por el nombre de usuario y la contraseña. En este enlace podemos obtener más información sobre cómo conseguirlos la primera vez.
Una vez dentro, hay que activar el modo de administración:
enable
La contraseña de esta ONU cambia en función del número de serie PON. Es importantísimo obtener la nueva contraseña antes de hacer cualquier cambio. Si no, perderemos acceso al dispositivo para siempre. En el enlace anterior hay una herramienta equivalente a ejecutar este comando, pero no hay garantías de que vaya a estar ahí siempre.
Ejecutaremos el siguiente comando, con la parte hexadecimal del número de serie PON en minúsculas, y guardaremos el resultado en nuestro gestor de contraseñas. Estas serán las credenciales para autenticarse por Telnet las siguientes veces.
/system/debug/md5 "ZTEGabcd0123" 8
Finalmente, cambiaremos el número de serie PON y reiniciaremos la ONU.
/system/misc/eqsn set "ZTEGabcd0123"
reboot
EN-XGSFPP-OMAC-V2 / WAS-110
Si hemos adquirido la ONU EN-XGSFPP-OMAC-V2 (o Azores WAS-110, que es la misma), a continuación abriremos la interfaz web desde nuestro navegador:
- URL: http://192.168.11.1
- Usuario:
admin
- Contraseña:
QsCg@7249#5281
Iremos a la pestaña "Service", activaremos SSH y guardaremos los cambios.
Después, nos conectaremos por SSH desde nuestra máquina con el siguiente comando y la contraseña QpZm@4246#5753
:
ssh -oHostKeyAlgorithms=+ssh-rsa -oPubkeyAcceptedKeyTypes=+ssh-rsa root@192.168.11.1
Finalmente, ejecutaremos los siguientes comandos para establecer el registration id a DEFAULT
y el número de serie PON al que hemos anotado previamente.
load_cli factory
set registration_id DEFAULT
set gpon_sn ZTEGabcd0123
exit
reboot
A esta ONU se le puede instalar fácilmente un firmware personalizado, aunque en mis pruebas tenía aproximadamente un 30 % de pérdida de tráfico y no he conseguido averiguar la causa. Tanto aquí como aquí pueden encontrarse instrucciones de instalación.
Existe una comunidad de Discord donde puede obtenerse soporte sobre esta ONU, así como las versiones más recientes del firmware oficial para poder actualizar.
GPON-ONU-34-20BI
Si hemos adquirido la ONU GPON-ONU-34-20BI, a continuación nos conectaremos por SSH desde nuestra máquina con el siguiente comando y la contraseña 7sp!lwUBz1
:
ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 -oHostKeyAlgorithms=+ssh-rsa -oPubkeyAcceptedKeyTypes=+ssh-rsa ONTUSER@192.168.1.10
Y ejecutaremos el siguiente comando para establecer el número de serie PON al que hemos anotado previamente.
set_serial_number ZTEGabcd0123
reboot
Enlaces
Una vez configurada la ONU y antes de empezar a conectar enlaces, es recomendable eliminar la dirección asignada previamente a la interfaz del router en la que tenemos conectada la ONU para evitar que cualquier máquina de la red local pueda alcanzarla.
Para ello, ejecutaremos lo siguiente en el router, en función de la ONU que hayamos adquirido:
delete interfaces ethernet eth0 address 192.168.100.2/24 # XGS-ONU-25-20NI
delete interfaces ethernet eth0 address 192.168.11.2/24 # EN-XGSFPP-OMAC-V2 / WAS-110
delete interfaces ethernet eth0 address 192.168.1.11/24 # XGS-ONU-25-20NI
commit
save
El último paso es conectar los diferentes enlaces:
- La fibra del proveedor a la ONU con un cable SC/APC (el mismo que viene con el router del proveedor).
- Cualquier interfaz SFP+ del switch a la interfaz
eth1
del router con un cable twinax DAC. - El resto de dispositivos (puntos de acceso, ordenadores, etc.) a cualquier interfaz del switch.
Comprobación
Para comprobar que todo está funcionando correctamente, ejecutaremos el siguiente comando en VyOS (si aún estamos en el modo de configuración, hay que añadirle run
delante):
show interfaces pppoe pppoe0
Si vemos algo así, es que Digi nos ha delegado con éxito una IPv4 y un prefijo IPv6 /56
, con lo que la ONU ha sincronizado correctamente con la OLT y además hemos configurado bien el router.
vyos@router:~$ show interfaces pppoe pppoe0
pppoe0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1492 qdisc pfifo_fast state UNKNOWN group default qlen 3
link/ppp
inet 1.2.3.4 peer 10.0.0.1/32 scope global pppoe0
valid_lft forever preferred_lft forever
inet6 fe80::a8bb:ccff:fedd:eeff/64 scope link
valid_lft forever preferred_lft forever
RX: bytes packets errors dropped overrun mcast
936777963 1275362 0 0 0 0
TX: bytes packets errors dropped carrier collisions
157513026 912981 0 0 0 0
Desde nuestra máquina se nos tendrá que haber asignado una IPv4 por DHCP y anunciado el prefijo IPv6 /64
de la red local para que se autoconfigure una dirección:
victor@example[~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp6s18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether aa:bb:cc:dd:ee:ff brd ff:ff:ff:ff:ff:ff
inet 192.168.1.100/24 brd 192.168.1.255 scope global enp6s18
valid_lft forever preferred_lft forever
inet6 2001:0db8::a8bb:ccff:fedd:eeff/64 scope global dynamic mngtmpaddr
valid_lft 4294943156sec preferred_lft 4294943156sec
Comentarios
- La configuración del router es segura por defecto y no permite iniciar conexiones desde internet hacia la red local, pero sí al revés. Téngase en cuenta que NAT no es un mecanismo de seguridad, por lo que es imprescindible tener el firewall configurado de esta forma independientemente de si el proveedor nos ofrece dual-stack o no.
- Si se adquiere un switch administrable, es posible tener varias redes locales en diferentes VLANs, con prefijos IPv4 e IPv6 diferentes y políticas de firewall específicas entre las diferentes redes. Como Digi delega un prefijo IPv6
/56
, es posible tener hasta 256 redes locales/64
. Puede utilizarse para tener red de invitados, red del trabajo, red para IoT, etc. - VyOS es compatible con DNS dinámico. Véase la documentación.
- VyOS es compatible con WireGuard. Véase la documentación. Por ejemplo, yo tengo un túnel entre dos ubicaciones con montajes equivalentes al de esta guía, de forma que las redes que escojo pueden llegar directamente a las redes de otras ubicaciones de forma completamente transparente. Como curiosidad, el tráfico del túnel alcanza unos 3 Gb/s. Por fuera del túnel, unos 6 o 7.
- Es posible contratar varios proveedores de red y configurar el router para que los utilice por prioridad. Si estos proveedores utilizan redes diferentes, se conseguirá tener la conexión a internet en alta disponibilidad.
Conclusiones
Espero que esta guía sea de utilidad.
Si alguien cree que falta algo, que algo se puede explicar mejor o que hay algún error, estoy abierto a sugerencias y aportaciones.
Y, como decía al principio, si alguien tiene alguna consulta, que no dude en preguntar en los comentarios.