OpenVPN 서버는 클라이언트 간에 데이터를 전송할 때 데이터를 해독하고 다시 암호화합니까?

OpenVPN 서버는 클라이언트 간에 데이터를 전송할 때 데이터를 해독하고 다시 암호화합니까?

우리는 방금 12개 노드로 구성된 클러스터를 생성했으며 100% 보안이 필요한 각 컴퓨터 간의 많은 통신에 OpenVPN을 사용하려고 합니다(100% 보안/개인 환경에 액세스할 수 없으므로 OpenVPN을 사용해야 함) 컴퓨터 간)).

따라서 다음과 같은 설정이 있습니다.

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

OpenVPN 서버는 12대의 컴퓨터 중 하나였으며 클라이언트가 다른 클라이언트와 통신할 때마다 작동이 중단되는 것을 발견했습니다. 방화벽 정보를 보면 클라이언트가 서로 통신하고 있지 않음을 분명히 알 수 있습니다. 대신, 모든 데이터는 서버로 전송된 다음 다른 클라이언트로 전달됩니다. 즉, 클라이언트 A에서 클라이언트 B로 전송이 A에서 서버로, 그리고 서버에서 B로 진행되는 것을 볼 수 있습니다.

내가 알고 싶은 것은:

A는 B에게 데이터를 보낼 때마다 B의 공개 키를 얻나요? OpenVPN 클라이언트 코드가 데이터가 B로 전송되고 있음을 알아야 하기 때문은 아닌 것 같습니다. 따라서 내가 올바르게 이해했다면 무슨 일이 일어나고 있는지는 다음과 같습니다.

  1. 클라이언트 A는 서버의 공개 키를 사용하여 데이터를 암호화합니다.
  2. 클라이언트 A는 암호화된 Blob을 서버로 보냅니다.
  3. 서버는 개인 키를 사용하여 Blob을 해독합니다.
  4. 서버는 Blob을 전달할 위치를 결정합니다.
  5. 서버는 클라이언트 B의 공개 키를 사용하여 데이터를 다시 암호화합니다.
  6. 서버는 새로 암호화된 Blob을 클라이언트에 보냅니다.
  7. 클라이언트 B는 개인 키를 사용하여 Blob을 해독합니다.

즉, 실제로는 다음과 같습니다.

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

그렇죠? 문서에서 비슷한 것을 찾으려고 노력했지만 OpenVPN을 설치하는 방법에 대해서만 찾을 수 있었습니다. (우리가 해냈고 효과가 있었지만 꽤 느린 것 같았습니다! 예상보다 훨씬 느렸습니다.)

답변1

당신 말이 맞아요. 설정에는 클라이언트와 서버 사이에 "사이트 간" VPN 세트가 있습니다. 클라이언트 간의 통신은 서버에서 이루어져야 합니다.

실제로 기본적으로 클라이언트는 서버가 허용하지 않는 한 서로를 볼 수 없습니다. 맨페이지에서:

   --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.

답변2

예, OpenVPN 클라이언트-서버 구성은 두 번째 그림과 같습니다. 터널은 OpenVPN 서버와 OpenVPN 클라이언트 사이에 있습니다. OpenVPN 서버는 한 터널의 데이터를 해독하여 다른 터널로 암호화합니다.

(클라이언트-서버 아키텍처가 아닌) 피어 투 피어 아키텍처를 사용하는 OpenVPN을 사용하여 첫 번째 차트를 구현할 수 있습니다. 네트워크의 각 시스템 쌍에 대해 VPN 터널을 설정해야 합니다. 즉, 노드당 n VPN 터널, 총 n² 터널(매우 편리하지 않음)입니다.

무슨 일이 일어나고 있는지에 대한 당신의 분석은 한 부분을 제외하고 대부분 정확합니다. 공개/개인 키는 터널 내부/외부 패킷을 암호화/해독하는 데 (직접) 사용되지 않습니다. 대신 터널을 인증하고 실제 암호화/암호 해독(및 MAC)에 사용되는 대칭 세션 키를 협상하는 데 사용됩니다.

관련 정보