81 lines
4.1 KiB
Markdown
81 lines
4.1 KiB
Markdown
---
|
|
layout: post
|
|
title: "Conectividad IPv6 sobre túnel WireGuard y OpenWRT"
|
|
tags: [openwrt, wireguard, vpn, tunnel, 6in4, tunnelbroker]
|
|
---
|
|
La situación actual en España es que ningún operador de internet da IPv6. Y yo quiero IPv6. No por nada especial, simplemente por tener esa alternativa de conexión, probar cosas, aprender, etc. Y como lo quiero, lo he hecho, ejemplo de petición a [ipv6.google.com](https://ipv6.google.com/):
|
|
|
|
![https://ipv6.google.com](https://xrg.io/x/4c0t/49Zy.png)
|
|
|
|
O un ping:
|
|
|
|
![ping6 google.com](https://xrg.io/x/4c0t/Khg.png)
|
|
|
|
Antes de seguir, recomiendo la lectura de estos [hilos sobre IPv6](https://twitter.com/weareDMNTRs/status/1485600456583921670) de [@weareDMNTRs](https://twitter.com/weareDMNTRs). Aunque llevo tiempo interesándome por todo esto, sus hilos me dieron mucha claridad en el asunto.
|
|
|
|
En casa tengo _bridgeado_ el router de la operadora para que delegue todo a mi router _pofesional_, un [Linksys WRT3200ACM](https://www.linksys.com/es/wireless-routers/wrt-wireless-routers/linksys-wrt3200acm-ac3200-mu-mimo-gigabit-wifi-router/p/p-wrt3200acm/) con [OpenWRT](https://openwrt.org/) como sistema operativo.
|
|
|
|
## Opciones
|
|
|
|
Llegados a este punto hay alternativas para dar conectividad IPv6 hacia el mundo a todos los dispositivos de casa, la más sencilla de ellas es usar [Tunnelbroker.net](https://tunnelbroker.net/) de HE.net. Aunque funciona y sirve para lo que digo, no es conveniente para tener un tunel UP todo el día: a veces falla, tiene demasiada latencia, el protocolo es [6in4](https://en.wikipedia.org/wiki/6in4), y dicho todo esto ya no hace falta decir nada más.
|
|
|
|
Aunque mi solución no es perfecta tampoco (mirad el ping), solo por la estabilidad y poder aprovechar casi casi el 100% del ancho de banda, renta. Mi solución tampoco es 100% gratuita, ojo, pero como tengo servidores por todas partes puedo aprovecharme de ello, ya que me sirve literalmente cualquier proveedor (hoy en día raro es que no den IPv6 en servidores).
|
|
|
|
## VPS barato + WireGuard + OpenWRT
|
|
|
|
Esta es mi solución: crear un tunel seguro con [WireGuard](https://www.wireguard.com/) entre un VPS cualquiera y el router con OpenWRT. Si has llegado hasta aquí no necesito decirte por qué WireGuard. El router hace de cliente, y el VPS de servidor. Configuración standart. La clave de sacar todo el tráfico IPv6 por el tunel es el siguiente, `/etc/config/network`:
|
|
|
|
```
|
|
config interface 'WG'
|
|
option proto 'wireguard'
|
|
option listen_port '51820'
|
|
option private_key 'priv.key...'
|
|
list addresses '10.11.12.2/24'
|
|
list addresses 'fdbc:f607:7749::2/64'
|
|
|
|
config wireguard_WG
|
|
option description 'WireGuard'
|
|
option endpoint_port '51820'
|
|
option route_allowed_ips '1'
|
|
option public_key 'pub.key...'
|
|
option endpoint_host '1.2.3.4'
|
|
option persistent_keepalive '25'
|
|
list allowed_ips '10.11.12.0/24'
|
|
list allowed_ips '::/0'
|
|
```
|
|
|
|
El segundo `list addresses` del _interface_, y el `list allowed_ips`. Hay que darle al interface una IPv6 en el servidor también:
|
|
|
|
```ini
|
|
[Peer]
|
|
# Name = peer_openwrt
|
|
PublicKey = pub.key...
|
|
AllowedIPs = 10.11.12.2/32,fdbc:f607:7748::2,fdb9:f2e5:ccc0::/48
|
|
```
|
|
|
|
Además el interface del servidor necesita IPv6 también:
|
|
|
|
```ini
|
|
[Interface]
|
|
Address = 10.11.12.1/24, fdbc:f607:7748::1/64
|
|
```
|
|
|
|
Y las reglas de `iptables` para IPv4 y 6:
|
|
|
|
```ini
|
|
PostUp = iptables -A FORWARD -i %i -j ACCEPT
|
|
PostUp = iptables -A FORWARD -o %i -j ACCEPT
|
|
PostUp = ip6tables -A FORWARD -i %i -j ACCEPT
|
|
PostUp = ip6tables -A FORWARD -o %i -j ACCEPT
|
|
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
|
|
PostUp = ip6tables -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 = ip6tables -D FORWARD -i %i -j ACCEPT
|
|
PreDown = ip6tables -D FORWARD -o %i -j ACCEPT
|
|
PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
|
|
PreDown = ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
|
|
```
|
|
|
|
"Y ya está"! 3 años para conseguir que esto funcione, para que a las dos semanas cambie de operadora y me den IPv6 nativo 🥲
|