Estou tentando configurar duas (ou mais) interfaces WireGuard em um servidor com a mesma porta, mas intervalos de IP diferentes (não sobrepostos).
O motivo da porta idêntica é porque a conexão está sendo encaminhada para a porta 51820 no servidor Wireguard, e queremos evitar alterar detalhes fora do servidor Wireguard.
Minha ideia seria mudar a porta do endereço local do atual 0.0.0.0:51820 para, por exemplo, 10.0.0.0/24:51820 para wg0, e 10.0.1.0/24:51820 para wg1. Isso é possível ou estou latindo para a árvore errada com essa solução?
ip address show wg0 me dá o endereço IP correto: (10.0.0.1/24 e 10.0.1.1/24 para wg1), mas ss -tuln mostra que a porta do endereço local é 0.0.0.0:51820.
Gostaria também de descartar todas as mensagens fora dos intervalos de IP correspondentes a wg0 e wg1 na porta 51820.
O servidor roda no Ubuntu 22.04.4 LTS.
Esclarecimento:
O problema é que não consigo adicionar uma segunda interface que tenha a mesma porta de escuta, mas um intervalo de IP diferente.
Exemplo: wgX.conf é:
[Interface]
PrivateKey = chave-única-para-cada-X
ListenPort = 51820
Comandos: ip link add dev wg0 type wireguard
ip address add dev wg0 10.40. 0 .1/24
wg setconf wg0.conf
ip link set up dev wg0
isso funciona bem, mas quando adiciono a segunda interface em um intervalo diferente, mas com listenPort idêntico:
ip link add dev wg1 type wireguard
ip address add dev wg1 10.40. 1 .1/24
wg setconf wg1.conf
ip link set up dev wg1
retorna o erro "Falha ao configurar a interface wg1: RTNETLINK responde: Endereço já em uso"
ip address show wg0 retorna
wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
link/none
inet 10.40.0.1/24
ss -tuln retorna
udp ... 0.0.0.0:51820 ...
Você não pode reutilizar o mesmo ListenPort independentemente do intervalo de endereços, porque o endereço IP interno (encapsulado) só se torna conhecido depois que o pacote UDP externo é recebido e descriptografado — e a descriptografia requer que o pacote externo possa ser mapeado para um peer WG primeiro (devido a cada associação de peer ter uma chave exclusiva), e isso requer que você já conheça a interface WG.
(Além disso, é completamente válido para uma interface de túnel enviar e receber pacotes para redes além de sua própria sub-rede, portanto, mesmo que o endereço IP interno fosse conhecido, ainda seria incorreto selecionar a interface de entrada com base nessas informações.)
Não é possível ter duas interfaces WireGuard escutando na mesma porta.
Você pode ter duas interfaces WireGuard diferentes escutando em portas diferentes e, então, usar regras de netfilter para redirecionar o tráfego e atingir seu objetivo.
Por exemplo:
No servidor
node0
, temos duas interfaces wireguard;wg0
escutando na porta 50010 ewg1
escutando na porta 50011`:wg0
está usando o intervalo de rede10.0.10.0/24
:E
wg1
está usando10.0.11.0/24
:Para atingir seu objetivo de usar a mesma porta com diferentes IPs de escuta, atribuímos vários endereços ao servidor:
E então adicione algumas regras NAT. Clientes que se conectam a
192.168.124.210:51820
estarão se conectando awg0
, e clientes que se conectam a192.168.124.211:51820
estarão se conectando awg1
:Em um cliente conectado a
wg0
(10.0.10.0/24), usamos a seguinte configuração:Em um cliente que se conecta a
wg1
(10.0.11.0/24), usamos:E é basicamente isso: você tem duas interfaces wireguard associadas a diferentes intervalos de rede. Os clientes se conectam à mesma porta (51820) no servidor, mas usam endereços de destino diferentes dependendo de qual rede eles querem.