Os dados são decriptografados e criptografados novamente pelo servidor OpenVPN quando enviados entre clientes?

3

Acabamos de criar um cluster de 12 nós e queríamos que o OpenVPN para muitas das comunicações precisasse ser 100% seguro entre cada computador (não temos acesso a um ambiente 100% seguro / privado, então temos que ter criptografia entre computadores.)

Então, temos uma configuração que se parece com isso:

             +------------------+
             |                  |
             |  OpenVPN Server  |
             |                  |
             +------------------+
                      ^
                      |
                +-----+------+----------------+----------+
                |            |                .          |
                |            |                .          |
                v            v                .          v
+------------------+  +------------------+  .....  +------------------+
|                  |  |                  |  .   .  |                  |
|  OpenVPN Client  |  |  OpenVPN Client  |  .   .  |  OpenVPN Client  |
|               A  |  |               B  |  .   .  |               n  |
+------------------+  +------------------+  .....  +------------------+

O OpenVPN Server é um dos 12 computadores e notamos que ele fica furioso sempre que qualquer cliente se comunica com outro cliente. Observando as informações do firewall, podemos ver claramente que os clientes não se comunicam entre si. Em vez disso, todos os dados são enviados para o servidor e depois encaminhados para outro cliente (ou seja, do cliente A para o cliente B, vemos a transferência indo de A para Servidor e, em seguida, de Servidor para B.)

O que eu estou querendo saber é isso:

A recebe a chave pública de B sempre que quiser enviar dados para B? Eu imagino que não é porque exigiria para o código do cliente OpenVPN saber que os dados estão sendo enviados para B. Então, se eu entendi corretamente, o que está acontecendo é:

  1. O cliente A criptografa seus dados com a chave pública do servidor.
  2. O cliente A envia esse blob criptografado para o servidor.
  3. O servidor usa sua chave privada para descriptografar o blob.
  4. O servidor determina para onde está encaminhando o blob.
  5. O servidor criptografa novamente os dados com a chave pública do Cliente B.
  6. O servidor envia esse blob recém-criptografado para o cliente.
  7. O cliente B usa sua chave privada para descriptografar o blob.

Em outras palavras, parece mesmo assim:

             +------------------+
             |                  |
             |  OpenVPN Server  |<-----------------------+
             |                  |                        |
             +------------------+                        |
                ^       ^    ^                           |
                |       |    .                           |
                |       |    .                           |
                |       |    ..................          |
                |       |                     .          |
                v       v                     v          v
+------------------+  +------------------+  .....  +------------------+
|                  |  |                  |  .   .  |                  |
|  OpenVPN Client  |  |  OpenVPN Client  |  .   .  |  OpenVPN Client  |
|               A  |  |               B  |  .   .  |               n  |
+------------------+  +------------------+  .....  +------------------+

Isso está correto? Eu tentei encontrar algo parecido na documentação e só encontrei coisas sobre como instalar o OpenVPN (o que fizemos e funciona, mas parece bastante lento! Muito mais lento do que eu esperava).

    
por Alexis Wilke 14.09.2016 / 23:03

2 respostas

1

Sim, uma configuração do servidor cliente OpenVPN se parece com o segundo diagrama. Os túneis estão entre o servidor OpenVPN e os clientes OpenVPN. O servidor OpenVPN descriptografa os dados provenientes do único túnel e criptografa-os em outro túnel.

Você pode implementar seu primeiro diagrama com o OpenVPN usando uma arquitetura ponto-a-ponto em vez de uma arquitetura cliente-servidor. Você precisa configurar um túnel VPN para cada par de máquinas em sua rede: cada nó tem n túneis VPN para um total de túneis de n² (o que não é conveniente).

Você analisa o que está acontecendo é basicamente correto, exceto por uma parte. As chaves públicas / privadas não são (diretamente) usadas para criptografar / descriptografar os pacotes de entrada / saída do túnel. Em vez disso, eles são usados para autenticar o encapsulamento e negociar chaves de sessão simétricas usadas para a criptografia / descriptografia (e MAC) real.

    
por 18.09.2016 / 02:28
2

Você está correto. Em sua configuração, você tem uma coleção de VPNs "ponto a ponto" entre seus clientes e o servidor. A comunicação entre os clientes deve ser realizada no servidor.

De fato, por padrão, os clientes não podem ver um ao outro a menos que o servidor o permita. A partir do manpage:

   --client-to-client
          Because the OpenVPN server mode handles multiple clients through
          a  single tun or tap interface, it is effectively a router.  The
          --client-to-client  flag  tells  OpenVPN  to  internally   route
          client-to-client  traffic  rather than pushing all client-origi-
          nating traffic to the TUN/TAP interface.

          When this option is used,  each  client  will  "see"  the  other
          clients  which  are currently connected.  Otherwise, each client
          will only see the server.  Don't use this option if you want  to
          firewall tunnel traffic using custom, per-client rules.
    
por 14.09.2016 / 23:22