VPNSmith
self-host-vpnINFO

WireGuard no macOS: as duas instalações e o nome de interface que quebra os tutoriais de Linux

A app da Mac App Store e o brew install wireguard-tools não são o mesmo produto. Qual escolher, como importar um .conf e porque wg0 falha no macOS enquanto utun funciona.

Por Eric Gerard · Fundador · VPNSmith - Especialista em VPN auto-hospedada e VPS RGPD4 min de leituraFoto via Pixabay

Instalar o WireGuard num Mac parece trivial, até que o tutorial que está a seguir tenha sido escrito para Linux. Duas coisas fazem tropeçar: existem dois produtos WireGuard diferentes para macOS, e o nome de interface que toda a gente usa nos exemplos, wg0, não pode existir num Mac.

As duas instalações, segundo a página oficial

A página de instalação do WireGuard lista ambas, e são software realmente distinto:

A app da Mac App Store. Um cliente gráfico com item na barra de menus, importação de túneis e ativação a pedido. É o que a maioria quer.

As ferramentas de linha de comandos.

brew install wireguard-tools
# ou, com MacPorts
port install wireguard-tools

Obtém wg e wg-quick, os mesmos comandos que usa num servidor. Por baixo corre a implementação Go em espaço de utilizador em vez de um módulo do kernel, porque o macOS não traz WireGuard no kernel.

Não partilham a lista de túneis. Um túnel importado na app não aparecerá em wg show, e vice-versa. Escolha um por máquina, salvo motivo concreto para ter os dois.

Grande plano de um ecrã de terminal a mostrar uma listagem de diretórios Unix em verde e azul
Grande plano de um ecrã de terminal a mostrar uma listagem de diretórios Unix em verde e azul

O que quebra os tutoriais de Linux: aqui wg0 não existe

É a falha mais comum, e a mensagem de erro quase nunca a explica.

No Linux cria wg0 e segue em frente. No macOS os túneis passam pelo controlador utun, e a documentação multiplataforma do WireGuard enuncia a restrição sem ambiguidade: o controlador utun não pode ter nomes de interface arbitrários. É preciso usar utun seguido de um número, por exemplo utun0, ou apenas utun para deixar o kernel escolher.

# falha no macOS
sudo wg-quick up wg0

# funciona
sudo wg-quick up utun

Se copiou um guia que diz wg0, mude o nome do ficheiro de configuração e de qualquer comando que o refira. As chaves, AllowedIPs, Endpoint e DNS não são afetados: só o nome da interface depende da plataforma.

Saber que utun lhe calhou. Se deixar o kernel escolher, precisa de uma forma de saber o resultado. Defina WG_TUN_NAME_FILE antes de levantar o túnel e o nome escolhido é escrito aí:

export WG_TUN_NAME_FILE=/tmp/wg-name
sudo -E wg-quick up utun
cat /tmp/wg-name    # por exemplo utun4

Sem isso, lê a saída do ifconfig a adivinhar qual utun é o seu: aceitável uma vez, maçador num script.

Importar uma configuração que já tem

Se gerou uma configuração de cliente no seu servidor, ela transfere-se tal como está. Na app, use a opção de importar e selecione o ficheiro .conf: o túnel aparece na lista, pronto a ativar. Na linha de comandos, coloque-o em /opt/homebrew/etc/wireguard/utun.conf (Apple Silicon) ou /usr/local/etc/wireguard/utun.conf (Intel), dando ao ficheiro o nome da interface, e execute wg-quick up utun.

Uma configuração gerada para um telemóvel também serve num Mac. É uma definição de par, não um artefacto específico do dispositivo, desde que cada equipamento tenha o seu próprio par de chaves e não um partilhado.

Confirmar que funciona mesmo

Levante o túnel e confirme duas coisas em vez de as presumir.

sudo wg show

Um par saudável mostra um latest handshake com menos de dois minutos e contadores transfer diferentes de zero nos dois sentidos. Enviado mas nada recebido é a assinatura de um caminho de regresso bloqueado. Se o handshake nunca se completa, o nosso guia de resolução de problemas do handshake percorre as causas por ordem de probabilidade.

Depois confirme que o tráfego passa mesmo pelo túnel, e não apenas que a interface existe: verifique o seu IP público no navegador e, se encaminhar o DNS pelo túnel, confirme que não há fuga. A nossa nota sobre fugas de DNS no WireGuard cobre as definições que importam.

Em resumo

Dois produtos: a app da App Store para um cliente gráfico, wireguard-tools via Homebrew ou MacPorts para a mesma linha de comandos do seu servidor. Não partilham túneis. E no macOS a interface tem de se chamar utun ou utunN, nunca wg0, porque o controlador utun não aceita nomes arbitrários. Essa única linha explica a maioria das instalações falhadas em Mac copiadas de guias de Linux.

★ Datacenter GDPR em Nuremberg · ✓ IPv4 dedicado incluído · 200+ Mbps garantidos

O seu Mac é o cliente. O túnel precisa de um servidor → VPS ContaboUm VPS Linux corre o lado WireGuard a que o seu Mac se liga, com implementação no kernel em vez de espaço de utilizador. Acesso root, preço previsível, datacenters europeus.

★ Datacenter GDPR em Nuremberg · ✓ IPv4 dedicado incluído · 200+ Mbps garantidos

Aloje a sua VPN no seu próprio VPS → ContaboAcesso root completo · IPv4 público · escolha a sua região

Perguntas frequentes

Como se instala o WireGuard no macOS?
A página oficial de instalação lista dois caminhos. A aplicação gráfica vem da Mac App Store. As ferramentas de linha de comandos vêm de um gestor de pacotes: `brew install wireguard-tools` com o Homebrew, ou `port install wireguard-tools` com o MacPorts. Não são o mesmo produto e não partilham a lista de túneis, por isso escolha um e mantenha-se nele, a menos que queira mesmo ambos.
Porque é que wg0 não funciona no macOS?
Porque o macOS não tem módulo WireGuard no kernel: os túneis passam pela implementação em espaço de utilizador, sobre o controlador utun, e esse controlador não aceita nomes de interface arbitrários. A documentação multiplataforma do WireGuard é explícita: é preciso usar utun seguido de um número, ou apenas utun para deixar o kernel escolher. Um tutorial de Linux que mande criar wg0 falhará, portanto, num Mac, e a mensagem de erro raramente explica porquê.
Como sei que interface utun o kernel escolheu?
Defina a variável de ambiente WG_TUN_NAME_FILE antes de levantar o túnel. Quando o nome da interface fica como utun, o nome realmente escolhido pelo kernel é escrito no ficheiro que indicou. Sem isso, resta ler a saída do `ifconfig` e adivinhar qual utun é o seu.
App da App Store ou ferramentas do Homebrew?
A aplicação se quiser uma experiência macOS normal: interruptor na barra de menus, importação de túneis por arrastamento e ativação a pedido. As wireguard-tools se automatizar, administrar a máquina por SSH ou quiser os mesmos comandos wg e wg-quick do seu servidor. A app está em sandbox e atualiza pela App Store; a linha de comandos atualiza pelo seu gestor de pacotes.
Posso reutilizar o .conf do meu servidor Linux?
Sim, do lado do cliente. Uma configuração de par é texto simples e portanto portátil: os blocos [Interface] e [Peer] gerados para um portátil funcionam tal como estão. A única coisa que não se transfere é o nome da interface: mude-o para utun ou utunN se o ficheiro ou os seus comandos mencionarem wg0. Chaves, AllowedIPs, Endpoint e DNS transitam sem alteração.