sergio.am/_posts/2022-05-10-openwrt-ipv6-hom...

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 🥲