Eu tenho uma instância do Windows Server 2019. Instalei o OpenVPN 2.4.9 nela. Isso resultou em um novo adaptador de rede chamado "Conexão de Área Local / Adaptador TAP-Windows V9", conforme visto no Painel de Controle:
Esta máquina Windows está atuando como um cliente OpenVPN. Aqui está a configuração do cliente OpenVPN na máquina:
client
dev tap
proto tcp
remote x.x.x.x 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
auth SHA512
cipher AES-256-CBC
ignore-unknown-option block-outside-dns
block-outside-dns
verb 3
Outra máquina está atuando como servidor OpenVPN. Aqui está o server.conf dessa máquina:
local x.x.x.x
port 1194
proto tcp
dev tap
ca ca.crt
cert server.crt
key server.key
dh dh.pem
auth SHA512
tls-crypt tc.key
topology subnet
server 10.8.0.0 255.255.0.0
ifconfig-pool-persist ipp.txt
client-config-dir /etc/openvpn/ccd
client-to-client
keepalive 10 120
cipher AES-256-CBC
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3
crl-verify crl.pem
Estou tentando fazer com que o servidor OpenVPN atribua um endereço IP estático de 10.8.0.2 à máquina Windows Server 2019. Aqui está o arquivo no diretório /etc/openvpn/ccd do servidor OpenVPN para o cliente:
ifconfig-push 10.8.0.2 255.255.0.0
Quando o cliente OpenVPN no Windows Server 2019 é iniciado, ele parece se conectar ao servidor OpenVPN. Aqui está o arquivo de log no cliente OpenVPN:
Wed Jul 14 01:15:02 2021 [server] Peer Connection Initiated with [AF_INET]x.x.x.x:1194
Wed Jul 14 01:15:03 2021 SENT CONTROL [server]: 'PUSH_REQUEST' (status=1)
Wed Jul 14 01:15:03 2021 PUSH: Received control message: 'PUSH_REPLY,route-gateway 10.8.0.1,ping 10,ping-restart 120,ifconfig 10.8.0.2 255.255.0.0,peer-id 0,cipher AES-256-GCM'
Wed Jul 14 01:15:03 2021 OPTIONS IMPORT: timers and/or timeouts modified
Wed Jul 14 01:15:03 2021 OPTIONS IMPORT: --ifconfig/up options modified
Wed Jul 14 01:15:03 2021 OPTIONS IMPORT: route-related options modified
Wed Jul 14 01:15:03 2021 OPTIONS IMPORT: peer-id set
Wed Jul 14 01:15:03 2021 OPTIONS IMPORT: adjusting link_mtu to 1658
Wed Jul 14 01:15:03 2021 OPTIONS IMPORT: data channel crypto options modified
Wed Jul 14 01:15:03 2021 Data Channel: using negotiated cipher 'AES-256-GCM'
Wed Jul 14 01:15:03 2021 Outgoing Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key
Wed Jul 14 01:15:03 2021 Incoming Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key
Wed Jul 14 01:15:03 2021 interactive service msg_channel=0
Wed Jul 14 01:15:03 2021 open_tun
Wed Jul 14 01:15:03 2021 TAP-WIN32 device [Local Area Connection] opened: \\.\Global\{526EF9D3-DC84-41B0-B139-F1D4BAEFBF4F}.tap
Wed Jul 14 01:15:03 2021 TAP-Windows Driver Version 9.24
Wed Jul 14 01:15:03 2021 Notified TAP-Windows driver to set a DHCP IP/netmask of 10.8.0.2/255.255.0.0 on interface {526EF9D3-DC84-41B0-B139-F1D4BAEFBF4F} [DHCP-serv: 10.8.0.0, lease-time: 31536000]
Wed Jul 14 01:15:03 2021 Successful ARP Flush on interface [11] {526EF9D3-DC84-41B0-B139-F1D4BAEFBF4F}
Wed Jul 14 01:15:03 2021 Block_DNS: WFP engine opened
Wed Jul 14 01:15:03 2021 Block_DNS: Using existing sublayer
Wed Jul 14 01:15:03 2021 Block_DNS: Added permit filters for exe_path
Wed Jul 14 01:15:03 2021 Block_DNS: Added block filters for all interfaces
Wed Jul 14 01:15:03 2021 Block_DNS: Added permit filters for TAP interface
Wed Jul 14 01:15:08 2021 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
Wed Jul 14 01:15:08 2021 Route: Waiting for TUN/TAP interface to come up...
Wed Jul 14 01:15:13 2021 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
Wed Jul 14 01:15:13 2021 Route: Waiting for TUN/TAP interface to come up...
Wed Jul 14 01:15:14 2021 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
Wed Jul 14 01:15:14 2021 Route: Waiting for TUN/TAP interface to come up...
Wed Jul 14 01:15:15 2021 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
Wed Jul 14 01:15:15 2021 Route: Waiting for TUN/TAP interface to come up...
Wed Jul 14 01:15:16 2021 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
Wed Jul 14 01:15:16 2021 Route: Waiting for TUN/TAP interface to come up...
Wed Jul 14 01:15:17 2021 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
Wed Jul 14 01:15:17 2021 Route: Waiting for TUN/TAP interface to come up...
Wed Jul 14 01:15:18 2021 TEST ROUTES: 0/0 succeeded len=0 ret=1 a=0 u/d=up
Wed Jul 14 01:15:18 2021 WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this
Wed Jul 14 01:15:18 2021 Initialization Sequence Completed
Como você pode ver, o cliente OpenVPN está recebendo o endereço IP 10.8.0.2 do servidor OpenVPN. No entanto, estou fazendo repetidamente ipconfig
em uma janela de linha de comando e o que vejo é que a cada 15 segundos acontece o seguinte:
- o adaptador "Local Area Connection" obtém um endereço IP de 169.254.211.103 por alguns segundos
- em seguida, o adaptador "Conexão de Área Local" obtém um endereço IP de 10.8.0.2 por um segundo. Durante esse segundo, um ping de 10.8.0.1 (o servidor OpenVPN) será bem-sucedido.
- então o adaptador "Local Area Connection" não mostra nenhum endereço IP pelos próximos 12 segundos
- esse processo continua se repetindo a cada 15 segundos
Enquanto isso está acontecendo, posso ver que o adaptador no Painel de Controle às vezes muda para "Identificando...":
Se o cliente OpenVPN está obtendo o endereço 10.8.0.2 do servidor OpenVPN, então por que o adaptador primeiro tem um endereço 169.254.xx atribuído? Então, por que ele tem o endereço 10.8.0.2 atribuído por apenas 1 segundo antes de perdê-lo?
INFORMAÇÃO ADICIONAL:
O endereço IP 10.8.0.2 na verdade foi atribuído a uma máquina diferente antes de ontem - uma instância do Linux em execução na AWS. Então fiz o seguinte:
- excluiu a instância do Linux na AWS
- usou o script Nyr OpenVPN openvpn-install.sh no servidor OpenVPN para revogar esse cliente Linux
- excluiu o arquivo no diretório /etc/openvpn/ccd do servidor OpenVPN para o cliente Linux
- adicionou um novo arquivo no diretório /etc/openvpn/ccd do servidor OpenVPN para a máquina Windows Server 2019 com 10.8.0.2 como seu endereço IP
Verifiquei no diretório /etc/openvpn/ccd do servidor OpenVPN que 10.8.0.2 está sendo atribuído apenas à máquina Windows Server 2019 e não a qualquer outra máquina.
Acabei de tentar fazer com que o servidor OpenVPN atribua 10.8.0.11 à máquina Windows Server 2019 e funciona bem, sem problemas. Então, algo está errado com esse endereço 10.8.0.2, provavelmente pelo fato de ter sido usado anteriormente. Alguma ideia do que possa ser?
Eu preferiria poder usar o endereço 10.8.0.2, porque já escrevemos scripts assumindo que 10.8.0.2 será o IP estático e enviamos esses scripts para terceiros. Será mais fácil ficar com 10.8.0.2, se possível.
MAIS INFORMAÇÕES
Decidi tentar eliminar qualquer vestígio do antigo cliente Linux do servidor OpenVPN:
- Eu deletei do arquivo /etc/openvpn/server/easy-rsa/pki/index.txt.
- Eu deletei seu certificado do diretório /etc/openvpn/server/easy-rsa/pki/revoked/certs_by_serial.
Também notei que o arquivo /etc/openvpn/server/ipp.txt do servidor OpenVPN continha uma associação do antigo cliente Linux ao 10.8.0.2 e uma associação do cliente Windows Server 2019 a um endereço IP incorreto. Eu apaguei o arquivo ipp.txt.
Em seguida, reiniciei o servidor OpenVPN e reconectei o cliente OpenVPN do Windows 2019 Server. Infelizmente continuo com o mesmo comportamento de antes.
ATUALIZAR:
Não olhei para a máquina Windows Server 2019 por alguns dias e agora acabei de olhar novamente. Surpreendentemente, ele tinha o endereço IP 10.8.0.2 e nunca desapareceu. Tudo estava funcionando como esperado. Não sei por que, pois não mudei nada.
Então reiniciei o cliente OpenVPN na máquina Windows Server 2019 para ver o que aconteceria, e agora está de volta ao comportamento de obter um endereço 169.254.xx e depois obter e perder o endereço 10.8.0.2 a cada 15 segundos.
Foi um conflito de endereço IP, conforme indicado pelo log de eventos do sistema na instância do Windows Server 2019.
Temos alguns servidores Linux adicionais executando clientes OpenVPN (diferente do cliente Linux que mencionei na pergunta). Cada um desses servidores Linux possui uma ponte configurada com o endereço IP 10.8.0.2. Essa ponte conecta a interface tap0 do cliente OpenVPN à interface eth1 que está conectada ao dispositivo de um fornecedor. Essa configuração permite que o software do fornecedor em execução na instância do Windows Server 2019 se conecte ao dispositivo.
Desliguei os servidores Linux e reiniciei a instância do Windows Server 2019. A instância do Windows Server 2019 conseguiu obter a versão 10.8.0.2 sem perdê-la. Então eu inicializei os servidores Linux e tudo está funcionando bem agora. As instâncias do Windows Server 2019 e Linux estão satisfeitas, e o software em execução no Windows Server pode se conectar aos dispositivos conectados aos servidores Linux por meio do OpenVPN.
Portanto, a solução é apenas garantir que a instância do Windows Server 2019 seja inicializada antes que qualquer uma das instâncias do Linux configure sua ponte.
Editar: Uma solução mais fácil é apenas reiniciar o servidor OpenVPN e iniciar imediatamente o cliente OpenVPN na instância do Windows Server 2019. Ele obterá 10.8.0.2 antes que qualquer uma das instâncias do Linux possa se reconectar ao servidor OpenVPN.