Servidor WireGuard com endereço IPv6 residencial em ambiente OpenWrt + Starlink

9 min

language: ja bn en es hi pt ru zh-cn zh-tw

Olá, aqui é o Munou.

No artigo anterior, consegui obter um endereço IPv6 público para a minha conexão doméstica, então farei o seguinte:

  • Servidor: OpenWrt + WireGuard Server

    • Interface: wg1(10.2.0.0/24)

    • Como IP de saída, utilizarei a conexão doméstica, um ambiente livre de limites de banda (como os limites de banda de VPS, etc.).

  • Clientes: Smartphone, notebook

Além disso, o objetivo desta vez é permitir a comunicação deste servidor WireGuard com a interface wg0 (10.1.0.0/24) do servidor WireGuard hospedado no ConoHa VPS.

Ao criar um ambiente VPN constante na interface wg1, será possível habilitar a participação na rede interna a qualquer momento sem se preocupar com a largura de banda. Existe a preocupação de que o simples fato de poder participar deste segmento de rede possa ser uma vulnerabilidade, mas é um pouco melhor do que expor através de um IP público e, de qualquer forma, se alguém conseguir acessar a interface wg0, já era.

Com esta configuração, será possível hospedar um servidor DNS interno com Dnsmasq no lado do OpenWrt e realizar o bloqueio de anúncios constantemente.

WireGuard no OpenWrt

Instale o 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

Além disso, provavelmente ao instalar o luci-proto-wireguard-26.120.35050~a611522, seria possível configurar o WireGuard através da interface web LuCI, mas não irei instalá-lo.

Configuração

/etc/config/network

Crie a interface do lado do servidor da seguinte forma:

~~~
config interface 'wg1'
        option proto 'wireguard'
        option private_key 'chave privada do servidor wg1'
        option listen_port '51820'
        list addresses '10.2.0.1/24'
        list addresses 'fd02::1/64'
        option mtu '1420'
~~~

Adicione também as configurações do lado do cliente permitidas abaixo. Originalmente, seria melhor configurar a PreSharedKey para chaves pré-compartilhadas, mas vou pular isso por enquanto.

config wireguard_wg1
        option public_key 'chave pública do cliente wg1'
        list allowed_ips '10.2.0.2/32'
        list allowed_ips 'fd02::2/128'
        list allowed_ips 'endereço ipv6 do cliente ::2/128'
        option persistent_keepalive '25'
        option route_allowed_ips '1'

Crie o arquivo wg1.conf no lado do cliente. Todo o tráfego passará pelo roteador OpenWrt.

[Interface]
PrivateKey = "chave pública do cliente wg1 "
Address = 10.2.0.2/24, fd02::2/64, endereço ipv6 do cliente::2/64
DNS = 10.2.0.1 # Já configurado, pois o servidor DNS já foi criado com Dnsmasq
[Peer]
PublicKey = "chave pública do servidor wg1"
Endpoint = "endereço ipv6 wg1 :51820"
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25

Neste estado, ele será bloqueado pelo firewall, então criaremos uma zona wg, abriremos a porta 51820/udp no IPv6 do lado wan, permitiremos a LAN como ambiente doméstico e faremos com que a wg possa sair pela wan.

Basicamente, no caso do IPv6, o NAT não é necessário, então irei desativá-lo explicitamente.

/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'

Neste estado, não é possível se comunicar com a wg0, então adicione as seguintes configurações.

Assume-se que as configurações no lado do servidor wg0 também serão adicionadas de acordo (omitido aqui).

/etc/config/network

config route
        option interface 'wg0'
        option target '10.1.0.0/24'
config interface 'wg0'
        option proto 'wireguard'
        option private_key 'chave privada do cliente wg0'
        list addresses '10.1.0.99/24'
config wireguard_wg0
        option public_key 'chave pública do servidor wg0'
        option endpoint_host 'endereço do servidor wg0'
        option endpoint_port '51820'
        list allowed_ips '10.1.0.0/24'
        list allowed_ips '10.2.0.0/24'
        option persistent_keepalive '25'

Com isso, a configuração básica está concluída, mas para o dnsmasq veja abaixo:

No meu ambiente, ele já veio instalado, então basta ativá-lo.

/etc/init.d/dnsmasq enable
/etc/init.d/dnsmasq start

Depois, basta adicionar uma lista como /etc/dnsmasq.d/adblock.conf para realizar o bloqueio.

/etc/init.d/dnsmasq restart

Uma vez feito isso, basta reiniciar os serviços.

/etc/init.d/network restart
/etc/init.d/firewall restart

Isso conclui a configuração do ambiente dual-stack, que funciona tanto com IPv4 (mesmo sob CGNAT) quanto com IPv6.

Teste de velocidade do ambiente OpenWrt

Abaixo, o ambiente de conexão cabeada sem 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

Abaixo, o ambiente VPN wg1 em uma rede Wi-Fi de 5GHz

$ 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

Com isso, agora é possível acessar este ambiente VPN wg1 pelo smartphone, mesmo estando fora.

Related Posts