Seguindo a documentação do wireguard para conteinerização comum, ele funciona com algo semelhante a este arquivo de configuração:
# /etc/wireguard/wg0.conf
#
[Interface]
PrivateKey = AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
[Peer]
PublicKey = BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB=
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = 11.111.111.111:51820
# Problem, using the following Endpoint won't work
# and the DNS entry is not allowed with wg setconf
# Endpoint = my.vpn.location.com:51820
O problema é que o endpoint precisa ser um ip, já que é um domínio o wireguard não consegue resolver durante o link set gw0 up
.
Como na conteinerização comum wg setconf
é usado, nenhum DNS e endereço são permitidos na seção Interface.
O seguinte funcionaria com wg-quick
embora
# /etc/wireguard/wg0.conf
#
[Interface]
PrivateKey = AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
Address = 10.14.0.2/16
DNS = 123.456.789.01
[Peer]
PublicKey = BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB=
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = my.vpn.location.com:51820
wg-quick
é capaz de resolver my.vpn.location.com
, mas como saber wg setconfg
como resolver my.vpn.location.com
em vez de ter que codificar o IP para o Endpoint?
NOTA: Estes são os comandos que uso para configurá-lo wg setconf
onde o endpoint com ip funciona, mas não com um domínio.
# ip netns add container
# ip link add wg0 type wireguard
# ip link set wg0 netns container
# ip -n container addr add 10.14.0.2/16 dev wg0
# ip netns exec container wg setconf wg0 /etc/wireguard/wg0.conf
# ip -n container link set wg0 up
# ip -n container route add default dev wg0
Conforme sugerido, esta questão foi trazida aqui de networkengineering.stackexchange
wg(8)
documentos que aceita nomes de host, o que significa que irá resolvê-los, inclusive usando DNS (que é padrão em uma configuração padrão):na verdade, o código usa
getaddrinfo(3)
:O problema é porque o comando (
wg
mas o mesmo aconteceria comwg-quick
) é executado em um ambiente onde não há rede disponível: um contêiner totalmente novo sem interface que forneça conectividade ainda, portanto, uma tentativa de resolução baseada em DNS só pode falhar nesta etapa .Como
wg
(ao contrário dewg-quick
) não tocará em endereços ou roteamento, mas apenas nas propriedades do WireGuard, apenas altere a ordem das operações: configure as propriedades do WireGuard da interface no namespace do host, onde funciona a resolução do DNS, só então mova-o para o namespace de destino e, finalmente, conclua sua configuração lá. Isso se torna:Isso será executado
wg
no host em vez do contêiner, mas o resultado final será o mesmo: o contêiner terá umawg0
interface única e essa interface terá uma porta de escuta apenas no host.