Tenho duas redes configuradas com Wireguard. wg0 é para servidores e wg1 para usuários de VPN. Quando um usuário VPN em wg1 deseja acessar a rede wg0, os pacotes devem ser roteadores em um dos servidores wg0 (o portão VPN).
wg0.conf no gateway VPN e em todos os servidores com interface wg0
[Interface]
Address = 10.1.0.15
ListenPort = 51820
PrivateKey = privatekey1
# node23
[Peer]
PublicKey = pubkey
AllowedIps = 10.1.0.23
Endpoint = node23.fqdn:51820
# node24
[Peer]
PublicKey = pubkey
AllowedIps = 10.1.0.24
Endpoint = node24:51820
# node25
[Peer]
PublicKey = pubkey
AllowedIps = 10.1.0.25
Endpoint = node25.fqdn:51820
...
wg1.conf no gateway VPN
[Interface]
Address = 10.100.0.1/32
ListenPort = 51810
PrivateKey = privatekey2
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
# user1 [Peer]
PublicKey = pubkey
AllowedIps = 10.100.0.2/32
...
E estes são os usuários wg1.conf (na verdade wg0 porque eles não têm um endereço 10.1.0.0)
[Interface]
Address = 10.100.0.2/32
ListenPort = 21841
PrivateKey = myprivatekey
[Peer]
PublicKey = pubkey
EndPoint = vpngate.fqdn:51810
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
Então, no próprio portão VPN eu posso executar curl -v http://10.1.0.23/
e estou recebendo uma resposta dentro da rede wg0. Ping funciona para. Eu posso alcançar todos os servidores dentro da rede. O mesmo com wg1-client e wg1-server. Também posso navegar na Internet através do portão VPN. Mas quando tento chamar do meu wg1-client um wg0-server como o curl -v http://10.1.0.23/
qual deve ser rota (eu acho) através do vpn-gate e de lá via wg1 -> wg0 não há resposta.
O que eu sinto falta?
Da leitura das explicações de roteamento de chave de criptografia do WireGuard :
=> Um endereço de entrada deve estar no
AllowedIPs
para ser associado à chave criptográfica definida em Peers e permitido.=> Da mesma forma, um endereço de saída deve estar em
AllowedIPs
para que a chave criptográfica correta e seu ponto de extremidade remoto atual do Peer possam ser selecionados.Quando o cliente executa
curl -v http://10.1.0.23/
, os pacotes de saída fazem:10.100.0.2 não está no wg0 do servidor
AllowedIPs
para a entrada do peer do gateway, então o pacote é descartado.Da mesma forma, se um servidor tentasse alcançar o cliente (com sua rota configurada corretamente para usar wg0 ), ele não encontraria um peer correspondente para o endereço de destino, então receberia um erro ao enviar (o erro, como um erro retornado por uma rede syscall, provavelmente é específico do WireGuard:
ENOKEY
(chave necessária não disponível)).Portanto, se os clientes estiverem todos em 10.100.0.0/24, eles devem aparecer na configuração de cada servidor na seção Peer do gateway, na
AllowedIPs
entrada. Portanto, se o endereço do gateway for 10.1.0.1 (não é possível encontrar essa informação no OP), todos os servidores devem incluir algo semelhante a:A direção inversa não terá problemas, pois o cliente está configurado para associar qualquer IP recebido em wg0 ao gateway.
O próprio gateway não precisa alterar nenhuma configuração.