O que estou tentando fazer é ter uma interface separada para alguns aplicativos usarem uma VPN através do WireGuard enquanto TODOS os outros aplicativos usam minhas interfaces regulares (Túnel dividido por aplicativo). Já resolvi como fazer com que aplicativos específicos usem minha interface WireGuard.
Meu problema agora é que TODO o tráfego das minhas máquinas é direcionado através da minha VPN quando meu túnel WireGuard está aberto.
Eu tentei remover allowedIPs = 0.0.0.0/0, ::/0
de baixo [Peer]
e isso resultou no meu túnel não permitindo tráfego de meus aplicativos para a Internet.
Eu também tentei adicionar Table = off
abaixo [Interface]
para desabilitar o WireGuard de adicionar meu túnel à minha tabela de roteamento de sistemas. O que acontece para isso é que o WireGuard se recusa a salvar ou importar a configuração e responde com "Chave inválida para a seção [Interface]: "tabela".
Estou usando o WireGuard para Windows v0.3.14.
Existe alguma outra maneira de realizar isso?
Um dos meus amigos me ajudou a resolver esse problema com a ajuda de zx2c4 (Jason Donenfeld) do WireGuard. Estou compartilhando nossa solução aqui para a próxima pessoa com esse mesmo problema.
Suporte adicionado ao WireGuard para Windows
Table = off
na v0.3.15. Isso faz com que o WireGuard não atualize a tabela de roteamento quando o túnel for aberto.Neste ponto, temos um túnel, mas o Windows não roteará o tráfego por ele, mesmo que seja o único adaptador para o aplicativo. Para resolver esse problema, precisamos adicionar uma rota padrão ao adaptador com uma prioridade menor do que nossa rota padrão regular.
Para fazer isso, precisamos primeiro habilitar DangerousScriptExecution no WireGuard. Para fazer isso, precisamos definir a chave do registro
HKEY_LOCAL_MACHINE\Software\WireGuard\DangerousScriptExecution
paraDWORD(1)
usar o regedit. A chave não existe por padrão e precisa ser criada usando o regedit. Em seguida, o WireGuard precisa ser reiniciado.Feito isso, precisamos executar alguns comandos do PowerShell ao iniciar e parar o túnel para criar nossa rota padrão para o túnel. Essa rota precisa ter uma métrica/custo mais alta (menor prioridade) do que nossa rota padrão normal. Para esta solução, usamos um valor métrico de 95 (10 superior à métrica automática mais alta).
O WireGuard tem a capacidade de executar automaticamente os comandos do Windows especificados nas opções
PreUp
,PostUp
,PreDown
ePostDown
na configuração do túnel. Usamos isso para configurar nossas rotas automaticamente.O WireGuard define a variável de ambiente
WIREGUARD_TUNNEL_NAME
para o nome desse túnel exato quando está executando comandos. Podemos convertê-lo em um objeto do PowerShell chamando$wgInterface = Get-NetAdapter -Name %WIREGUARD_TUNNEL_NAME%
.Assim que tivermos o túnel como um objeto do PowerShell, podemos configurar ou desativar nossa rota no windows.
Para criar nossa rota chamamos
route add 0.0.0.0 mask 0.0.0.0 0.0.0.0 IF $wgInterface.ifIndex metric 95
Para remover nossa rota, chamamos
route delete 0.0.0.0 mask 0.0.0.0 0.0.0.0 if $wgInterface.ifIndex metric 95
Quando combinamos tudo isso, acabamos com o seguinte
[Interface]
na configuração do túnel.PostUp
,PreDown
, eTable = off
são o que esta solução fornece.Eu adoraria responder diretamente ao Ryan, mas não consegui ¯\_(ツ)_/¯
Com base em sua resposta, fiz um pequeno script auxiliar do powershell.
Ele pode configurar a chave de registro, reiniciar o WireGuard Manager Service e, claro, configurar a rota padrão (e mais uma!)
Você o encontrará aqui (com um exemplo de configuração): https://gist.github.com/webtroter/36477c014e4cc5f169468891fa7652f2