VPNSmith
Ferramenta gratuita - MTU do WireGuard

Calculadora de MTU do WireGuard

O túnel liga e responde ao ping, mas as páginas travam? Introduza o maior payload de ping sem fragmentação que passa, ou escolha o seu tipo de ligação, e obtenha a MTU para o wg0.conf, os comandos para a aplicar e a escada de pings para a verificar. Tudo corre no seu navegador.

Corre inteiramente no seu navegador. Nada do que escreve sai da página.

O que sabe sobre a sua ligação?

Exemplo: ping -M do -s 1472 IP_PUBLICO_SERVIDOR responde, por isso escreve 1472. Se falhar, siga a escada nos comandos de teste abaixo e introduza o maior tamanho que passa.

Ligação ao servidor (fora do túnel)
Comandos para

Resultado

1500
MTU do caminho
-80
Sobrecarga WireGuard
1420
MTU a definir

O seu caminho transporta pacotes completos de 1500 bytes: o 1420 predefinido serve. Se as transferências grandes continuarem a travar, a causa está noutro lado (encaminhamento, masquerade, AllowedIPs). Pode mesmo assim escrever MTU = 1420 explicitamente.

wg0.conf
[Interface]
PrivateKey = <client private key>
Address = 10.66.66.2/32
MTU = 1420

[Peer]
PublicKey = <server public key>
Endpoint = SERVER_PUBLIC_IP:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
apply-mtu.sh
# 1. Adicione a linha MTU em [Interface] no /etc/wireguard/wg0.conf e reinicie o túnel
sudo wg-quick down wg0 && sudo wg-quick up wg0

# 2. Ou altere-a a quente sem reiniciar (perde-se no próximo wg-quick down)
sudo ip link set dev wg0 mtu 1420
ip link show wg0 | grep -o 'mtu [0-9]*'
test-mtu.sh
# Escada de pings para o IP PÚBLICO do servidor, fora do túnel: comece de cima, o primeiro tamanho que responde é o seu payload
# Um tamanho que falha mostra 'message too long', 'needs to be fragmented' ou nenhuma resposta
ping -M do -s 1472 -c 3 SERVER_PUBLIC_IP
ping -M do -s 1464 -c 3 SERVER_PUBLIC_IP
ping -M do -s 1452 -c 3 SERVER_PUBLIC_IP
ping -M do -s 1444 -c 3 SERVER_PUBLIC_IP
ping -M do -s 1400 -c 3 SERVER_PUBLIC_IP
ping -M do -s 1372 -c 3 SERVER_PUBLIC_IP
ping -M do -s 1300 -c 3 SERVER_PUBLIC_IP
ping -M do -s 1252 -c 3 SERVER_PUBLIC_IP

# Verificação através do túnel, para o IP de túnel do servidor: tem de responder com a nova MTU
ping -M do -s 1392 -c 3 10.66.66.1
# payload = MTU menos 28; se falhar, baixe mais a MTU

Metade dos problemas de MTU é o caminho, não a configuração

NAT duplo, o router de casa e um túnel empilhado sobre outro túnel roubam todos bytes ao seu caminho. Um VPS com um IPv4 público limpo é um único salto numa ligação de 1500 bytes, onde o 1420 predefinido funciona sem mais. O VPS de entrada da Contabo inclui um endereço IPv4 público e acesso root completo.

Ligação de afiliado: podemos receber uma comissão, sem custo extra para si. A calculadora continua gratuita e não depende disso.

Ver o VPS da Contabo

De onde vêm os números

O WireGuard embrulha cada um dos seus pacotes num datagrama UDP. O invólucro tem um tamanho fixo, por isso a MTU do túnel é simplesmente a MTU do caminho menos esse invólucro. É exatamente o que o wg-quick faz quando nenhuma MTU é indicada: pega na MTU da rota para o endpoint e subtrai 80, daí o conhecido 1420 numa ligação de 1500 bytes.

CabeçalhoBytes
Cabeçalho IPv4 exterior20
Cabeçalho IPv6 exterior40
Cabeçalho UDP8
Cabeçalho de dados do WireGuard (tipo, índice, contador)16
Etiqueta de autenticação Poly130516
Total sobre IPv4 / sobre IPv660 / 80
Ping: cabeçalhos IPv4 + ICMP à volta do payload28

Um payload de ping de 1472 bytes viaja portanto num pacote de 1500 bytes. Se 1472 passa com a flag de não fragmentar, a MTU do seu caminho é 1500 e o 1420 predefinido serve. Se só 1400 passa, a MTU do caminho é 1428 e o WireGuard não deve enviar mais de 1348 sobre IPv6. A calculadora subtrai 80, salvo se indicar que a ligação exterior é só IPv4: nesse caso bastam 60.

Valores típicos quando não consegue medir

Um valor medido ganha sempre a uma tabela. Estas referências servem quando não pode executar o ping, por exemplo num telemóvel ou numa rede que não controla.

Tipo de ligaçãoMTU do caminhoMTU do WireGuard
Ethernet, fibra, cabo15001420 (predefinido)
ADSL/VDSL com PPPoE14921412
Móvel, 5G, CGNATvariável1280 (recurso)
Túnel dentro de outra VPNreduzido duas vezes1280 (recurso)
Mínimo garantido do IPv612801280

Perguntas frequentes

Qual é a MTU predefinida do WireGuard e porquê 1420?
Quando a configuração não tem linha MTU, o wg-quick define a MTU da interface como a da rota para o endpoint menos 80 bytes. Numa ligação padrão de 1500 bytes isso dá 1420. Os 80 bytes são o pior caso: 40 de cabeçalho IPv6, 8 de UDP e 32 de enquadramento WireGuard. Sobre IPv4 a sobrecarga real é de 60 bytes, por isso 1440 também caberia, mas 1420 é seguro em ambos os casos.
Como meço a MTU certa?
Envie um ping para o IP público do servidor com a flag de não fragmentar e um payload grande, e reduza-o até chegarem respostas: ping -M do -s 1472 em Linux, ping -f -l 1472 em Windows, ping -D -s 1472 em macOS. Pegue no maior payload que passa, some 28 bytes de cabeçalhos IP e ICMP para obter a MTU do caminho e subtraia 80 para o WireGuard. A calculadora faz a aritmética e escreve os comandos para o seu sistema.
O WireGuard liga mas nenhuma página carrega: é a MTU?
Muito provavelmente, quando o tráfego pequeno funciona e o grande não. Um handshake, uma consulta DNS e um ping são pequenos, por isso têm êxito. Uma página web completa é um pacote de tamanho máximo; se exceder a MTU do caminho e a mensagem ICMP de fragmentação necessária for filtrada algures, é descartado em silêncio. Baixar a MTU do WireGuard abaixo da MTU real do caminho resolve. Se nada passa de todo, verifique primeiro o encaminhamento IP, a regra de masquerade e AllowedIPs.
Porque é 1280 o recurso seguro?
A RFC 8200 exige que toda a ligação IPv6 transporte pacotes de 1280 bytes, e na prática todo o caminho IPv4 também o faz. Uma MTU WireGuard de 1280 funciona portanto em PPPoE, móvel, CGNAT e túneis aninhados sem medição, ao preço de alguns pontos de eficiência numa ligação limpa de 1500. Se o próprio túnel transporta IPv6, a MTU da interface não deve descer abaixo de 1280.
Cliente ou servidor: onde defino a MTU?
No lado cuja ligação é limitada, ou seja quase sempre o cliente (ADSL doméstico, móvel, escritório). A MTU de uma interface só limita o que essa interface envia: baixá-la no cliente corrige envios e pedidos, e as respostas do servidor seguem o MSS TCP daí resultante. Se o próprio servidor está atrás de um uplink inferior a 1500, defina-a também aí.
A linha MTU= funciona em Windows, macOS, Android e iOS?
Sim. As aplicações oficiais do WireGuard leem a chave MTU= da secção [Interface] e aplicam-na ao ativar o túnel. Em Linux é o wg-quick que a aplica, e também pode alterá-la a quente com ip link set dev wg0 mtu, o que não sobrevive a um reinício do túnel.