
Estou precisando configurar várias wg-quick
interfaces em uma única máquina, ambas usando a NIC Ethernet real diretamente e de forma independente.
O problema que parece estar acontecendo é que, por meio de cada um deles, quero acessar toda a Internet, o que presumo significar AllowedIPs = ::0
, mas wg-quick
gosto de adicionar rotas localmente, de modo que todo o tráfego que vai para qualquer lugar passe por essa nova interface; incluindo quaisquer wg-quick
tentativas seguintes.
Existe uma maneira de ligar wg-quick
e dizer "ei, não, gostaria que você usasse especificamente eno1
, não o 'gateway padrão'"? Talvez usando raw wg
?
Tentei ler um monte on-line, mas fico confuso com o que os outros estão perguntando quandoparececomo uma pergunta semelhante, mas acaba hospedando vários serviços wireguard ou algo assim.
Abaixo está a essência básica, com duas interfaces wg. wg0
neste caso, estou fazendo o normal wg-quick
de roubar todo o tráfego de forma transparente, onde wg1
há uma interface disponível onde posso configurar aplicativos para conversar especificamente com ele.
Não me importo se sua solução foi wg0
forçada a funcionar dessa maneira, posso configurar um proxy SOCKS e HTTP para software que não suporta sinalizadores "usar esta interface/IP para tráfego" para obter o mesmo efeito.
Home ║ ISP ║ Internet
║ ║
║ ║
┌─────────────┐ ║ ║
│ │ ║ ║
│ │ ║ ║ ┌───┐
│ │ ║ ║ ╔══╪
│ eno1│ ║ ║ ║ └───┘
│ wg0 ┐│ ╙────────────────╜ ║ VPN0
│ ┐ └─────────────┘ ║
│ ╞════════════════════════════════════════╝
│ ┘ ╔════════════════════════════════════╗
│ wg1 ║ ┌─────────────┐ ║
│ ╓ ║ ┘│ router ║ ┌───┐
│ ╠═══╝ │ ╓────────────────╖ ╚══╪
│ ╙ │ ║ ║ └───┘
│ │ ║ ║ VPN1
│ │ ║ ║
└─────────────┘ ║ ║
PC
"Por que?". Usando o openVPN, meu provedor permitia portas abertas, basicamente permitindo o firewall local, eu era roteável publicamente e poderia hospedar serviços em qualquer número de portas que desejasse. Eles mudaram para wireguard, o que é ótimo, mas eles suportam apenas uma porta aberta por conexão wireguard. Então, basicamente, para cada aplicativo que eu encaminhei uma porta, quero criar uma interface VPN para ele.
Isso é possível usando apenas wireguard, sem iptables ou algo assim (o que eu não entendo de jeito nenhum)?
Responder1
SIM. OK. Portanto, a solução aparentemente é tão simples que sudo ip route add $VPN1 via eno1
permitirá que ele se conecte à VPN1 via eno1, independentemente da existência de wg0. Você tem total permissão para ter múltiplas ::0
interfaces wg nomesmo espaço para nomecom um deles como padrão (wg0), desde que seus aplicativos suportem ligação a uma interface para conexões (como netcat -s
). A ressalva é que apenas um desses túneis pode ser gerado com wg-quick
's Table=auto
.
NO ENTANTO, o que passei a última semana lutando é o propósito de eu querer fazer isso em primeiro lugar; fazer com que essas interfaces wg transmitam tráfego de entrada!
Tentei várias coisas;
- ingenuamente apenas executando
wg-quick
várias vezes com as rotas em vigor (isso mata tudo e tenta quebrarwg-quick down
totalmente a pilha de rede) - como acima, girando múltiplos, um com
Table=auto
, os outros comTable=off
- como acima, girando múltiplos, um com
wg-quick
, os outros comwg
- girando múltiplos com
eno1
se escondendo atrás de umnamespace
(Eu não consegui nem fazer isso funcionar para o tráfego de saída...) - girando múltiplos comcada um
wg
na suanamespace
Mas mesmo que funcionem [para o tráfego de saída em seus respectivos túneis] (salvo indicação em contrário), todas essas conexões de entrada recusaram (testando com netcat -l -p $assignedPort
), independentemente de ufw disable
usarem servidores iguais ou diferentes para "VPN{0,1}".
A solução aqui é algo que eufinalmente me deparei ontem. O molho mágico wg-quick
estava fazendo com Table=auto
; FwMark.
O que eu estava tentando evitar era aprender a fazer sozinho "Isso é possível usando apenas wireguard?". Bem, você precisa que os pacotes sejam marcados e associados a uma tabela, MAS você não precisa entender/imitar/reimplementar o que wg-quick
faz...aparentemente você pode apenasusaristo.
Então, depois de configurar o túnel padrão para VPN0 usando wg-quick
você pega aquele FwMark e depois de configurar o ip route
para VPN1reutilizar esse FwMarkpara wg
. Esta última conexão agora passa por eno1 (de acordo com a rota), mas permite a entrada de pacotes encaminhados da VPN1 (graças à tabela configurada pelo túnel da VPN0).