Servidor WireGuard con dirección IPv6 doméstica en un entorno OpenWrt + Starlink
Hola, soy Munou.
En el artículo anterior, pude obtener una dirección IPv6 pública para mi conexión doméstica, así que haré lo siguiente:
Servidor: OpenWrt + WireGuard Server
Interfaz: wg1(10.2.0.0/24)
Como IP de salida, usaré la conexión doméstica, un entorno libre de límites de ancho de banda (como los límites de ancho de banda de los VPS, etc.).
Cliente: Smartphone, laptop
Además, el objetivo de esta vez es permitir la comunicación desde este servidor WireGuard hacia la interfaz wg0 (10.1.0.0/24) del servidor WireGuard alojado en un VPS de ConoHa.
Al crear un entorno VPN con la interfaz wg1 siempre activa, será posible habilitar la participación en la red interna de forma constante sin preocuparse por el ancho de banda. Existe la preocupación de que permitir la participación en este segmento de red pueda ser una vulnerabilidad, pero es un poco mejor que exponerlo con una IP pública, y de todos modos, si alguien puede unirse a la interfaz wg0, ya se acabó todo.
Con esta configuración, podré alojar un servidor DNS interno con Dnsmasq en el lado de OpenWrt y realizar el bloqueo de anuncios de forma constante.
WireGuard en OpenWrt
Instale wireguard-tools.
root@OpenWrt:~# apk search wireguard
kmod-wireguard-6.12.74-r1
luci-proto-wireguard-26.120.35050~a611522
prometheus-node-exporter-ucode-wireguard-2024.02.07-r2
rpcd-mod-wireguard-2
wireguard-tools-1.0.20250521-r1
root@OpenWrt:~# apk add wireguard-tools-1.0.20250521-r1
Además, probablemente al instalar luci-proto-wireguard-26.120.35050~a611522 se pueda configurar WireGuard desde LuCI en la interfaz web, pero no lo instalaré.
Configuración
/etc/config/network
Cree la interfaz del lado del servidor de la siguiente manera.
~~~
config interface 'wg1'
option proto 'wireguard'
option private_key 'wg1 server private key'
option listen_port '51820'
list addresses '10.2.0.1/24'
list addresses 'fd02::1/64'
option mtu '1420'
~~~
A continuación, añada también la configuración del lado del cliente para permitirlo. Originalmente, sería mejor configurar PreSharedKey y realizar el ajuste de la clave precompartida, pero por ahora lo saltaremos.
config wireguard_wg1
option public_key 'wg1 client public key'
list allowed_ips '10.2.0.2/32'
list allowed_ips 'fd02::2/128'
list allowed_ips 'client ipv6 addr ::2/128'
option persistent_keepalive '25'
option route_allowed_ips '1'
Cree wg1.conf en el lado del cliente. Todo el tráfico pasará a través del router OpenWrt.
[Interface]
PrivateKey = "wg1 client public key "
Address = 10.2.0.2/24, fd02::2/64, client ipv6 addr::2/64
DNS = 10.2.0.1 # Ya configurado porque el servidor DNS ya está levantado con Dnsmasq
[Peer]
PublicKey = "wg1 server public key"
Endpoint = "wg1 ipv6 addr :51820"
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
Tal como está, será bloqueado por el firewall, así que crearé una zona wg, abriré el puerto 51820/udp en el lado IPv6 de wan, permitiré LAN como entorno doméstico y haré que wg pueda salir al exterior a través de wan.
Básicamente, en el caso de IPv6 no es necesario NAT, así que lo desactivaré explícitamente.
/etc/config/firewall
config zone
option name 'wg'
list network 'wg1'
list network 'wg0'
option input 'ACCEPT'
option forward 'ACCEPT'
option output 'ACCEPT'
option masq '1'
option masq6 '0'
config rule
option name 'Allow-WireGuard-IPv6'
option src 'wan'
option family 'ipv6'
option proto 'udp'
option dest_port '51820'
option target 'ACCEPT'
config forwarding
option src 'wg'
option dest 'lan'
config forwarding
option src 'wg'
option dest 'wan'
En este estado, no es posible la comunicación con wg0, por lo que añadiré la configuración.
Se asume que la configuración en el lado del servidor wg0 también se añadirá de acuerdo con lo siguiente (se omite aquí).
/etc/config/network
config route
option interface 'wg0'
option target '10.1.0.0/24'
config interface 'wg0'
option proto 'wireguard'
option private_key 'wg0 client private key'
list addresses '10.1.0.99/24'
config wireguard_wg0
option public_key 'wg0 server public key'
option endpoint_host 'wg0 server addr'
option endpoint_port '51820'
list allowed_ips '10.1.0.0/24'
list allowed_ips '10.2.0.0/24'
option persistent_keepalive '25'
Con esto, la configuración básica está completa, pero para dnsmasq es lo siguiente:
En mi entorno, ya venía incluido desde el principio, así que solo hay que habilitarlo.
/etc/init.d/dnsmasq enable/etc/init.d/dnsmasq start
Después, añade una lista como /etc/dnsmasq.d/adblock.conf para bloquear.
/etc/init.d/dnsmasq restart
Llegados a este punto, solo queda recargar.
/etc/init.d/network restart
/etc/init.d/firewall restart
Con esto se completa el entorno de doble pila (dual-stack) que funciona tanto con IPv4 (incluso con IP CGNAT) como con IPv6.
Prueba de velocidad desde el entorno OpenWrt
A continuación se muestra el entorno cableado sin conexión WireGuard
$ speedtest-go -s 48463
speedtest-go v1.7.10 (git-dev) @showwin
✓ ISP: 206.83.125.125 (Starlink) [35.6893, 139.6899]
✓ Found 1 Specified Public Server(s)
✓ Test Server: [48463] 5.80km Tokyo by IPA CyberLab 400G
✓ Latency: 41.037747ms Jitter: 8.459256ms Min: 24.163074ms Max: 57.008632ms
✓ Packet Loss Analyzer: Running in background (<= 30 Secs)
✓ Download: 173.63 Mbps (Used: 211.22MB) (Latency: 35ms Jitter: 6ms Min: 25ms Max: 41ms)
✓ Upload: 45.99 Mbps (Used: 81.23MB) (Latency: 35ms Jitter: 29ms Min: 23ms Max: 136ms)
✓ Packet Loss: N/A
A continuación se muestra desde el entorno VPN wg1 en una red Wi-Fi de 5 GHz
$ speedtest-go -s 48463
speedtest-go v1.7.10 (git-dev) @showwin
✓ ISP: 206.83.125.125 (Starlink) [35.6893, 139.6899]
✓ Found 1 Specified Public Server(s)
✓ Test Server: [48463] 5.80km Tokyo by IPA CyberLab 400G
✓ Latency: 28.199611ms Jitter: 1.516613ms Min: 26.461289ms Max: 31.90411ms
✓ Packet Loss Analyzer: Running in background (<= 30 Secs)
✓ Download: 79.63 Mbps (Used: 114.99MB) (Latency: 98ms Jitter: 39ms Min: 27ms Max: 151ms)
✓ Upload: 65.86 Mbps (Used: 96.92MB) (Latency: 62ms Jitter: 73ms Min: 26ms Max: 285ms)
✓ Packet Loss: N/A
Ahora es posible acceder a este entorno VPN wg1 desde un smartphone incluso desde el exterior.