본문 바로가기

기타

[네트워크] WireGuard

VPN이란?

Virtual Private Network의 약자로 가상 사설망을 말한다. 보통 public network에서 목적지에 데이터를 안전하고, 익명으로 전송하기 위해서 사용한다. 다른 네트워크에 있는 자원에 접근하기 위해서 사용하는 경우가 대부분이기 때문에, 보통 기업에서 많이 사용한다.

 

VPN 용도

  • 온라인 개인정보 보호 향상
  • 원격 서버를 통한 라우팅

VPN을 사용하는 이유

  • 온라인 데이터 보호
  • 외부 컨텐츠 이용
  • 보안된 네트워크 사용
  • 기관의 감시 회피
  • ISP 트래픽 제한 우회

VPN 프로토콜

VPN을 제공 서비스에 따라서 사용하는 프로토콜이 다르다. 보통 SSL 과 IPSec을 사용한다.

  SSL IPSec
전용 장비 유무 X O
클라이언트 프로그램 O X
위치 어디서나 고정된 위치의 사용자
사용처(주관적) 개인 기업
Tunnel 단말기 : 서버 서버 : 서버
암호화 방식 비슷함(공개키 방식으로 대칭키 교환 후 통신)

 

일반적인 VPN 네트워크

일반적으로 VPN 네트워크는 허브 앤 스포크 네트워크(Hub and Spoke)방식을 사용한다.

Hub and Spoke

 

가장 떠올리기 쉬운 방법이자 터널을 구성하는 가장 쉬운 방법이다. 따라서 VPN Gateway 즉, Hub는 고정 IP 주소를 가지고 있다.

 

Hub and Spoke Network의 단점

위의 구성에서 client는 server2와 통신하기를 원한다. client는 바로 옆에 있는 server2와 통신하기 위해서는 반드시 강원도에 있는 VPN Gateway와 통신을 해야 한다. 

  • 최단 거리를 두고, 반드시 최장 거리로 통신
  • 연결 시간 지연
  • 데이터 전송 속도 느림

우리나라를 기준으로 간단히 그려냈지만, 만약 client가 대한민국 - 미국 간의 통신을 해야 한다고 보면, VPN의 단점은 더욱 강조되어 보일 것이다. 

Hub and Spoke Network 보완

1차적으로 연결 시간 지연 보완, 데이터 전송 속도 향상을 위해서 멀티 허브를 구성하는 경우도 있다.

 

WireGuard

Jason A. Donenfeld는 보안 연구원이자 커널 개발자이다. 침투 테스트 작업을 하던 중 보다 편리하게 사용하기 위해서 터널링 솔루션을 찾던 중 떠올린 아이디어이다.

 

  • 노드와 노드를 잇는 초경량 터널 구축 기술

 

WireGuard는 네트워크 프로토콜이기 때문에, 네트워크 통신시에 사용되는 것을 볼 수 있다.

 

따라서, WireGuard만을 이용해서 VPN을 구성하면, 다음과 같은 효과를 누릴 수 있다. 더는 Gateway를 필요로 하지 않고, 노드 와 노드가 터널링을 통해서 통신을 한다.

따라서, 만약 새로운 사용자 client2가 네트워크에 추가되었다면 새로운 사용자는 client, server1, server2에 대한 암호화 키를 전부 배포 받아야한다.

반대로, client2는 모든 노드에게 자신의 암호화 키를 배포해줘야 한다.

 

WireGuard의 확장

개인적으로 초경량화와 보안에 초점을 맞춘 프로토콜이다 보니,

"초경량 터널 와이어 가드를 이용해 모든 노드를 이어 버릴까?"

 

라는 아이디어에서 Mesh Network로 구성해야겠다는 아이디어로 확장된 것 같다.

그리고 Mesh Network가 되도록 만드는 것이 WireGuard의 장점이 아닐까 싶다.

 

Mesh Network와 WireGuard Tunnel

  • 자신의 고유한 키 뿐 아니라, 다른 노드의 키를 알고 있어야함
  • 키 변경, 추가, 삭제 시 동기화 되어야함
  • Mesh Network를 구현하려면 WireGuard Tunnel을 N(N-1)개 구축해야함

 

키 교환 방식

위와 같은 상황을 해결하기 위해서 키를 효율적으로 교환하기 위한 방법은 현대의 아키텍처와 동일한 중앙조정서버 방식을 사용한다.

 

 

  • 모든 노드의 위치와 공개키를 알고 있는 중앙 조정 서버
  • 같은 도메인에 있는 노드에게 공개키를 제공함

 

사용자 추가, 삭제, 변경 등이 일어날 때마다 각 노드들이 키를 동기화 할 수 있도록 한다. 일반적으로 WireGuard를 이용한 서비스는 OAuth등을 이용해서 로그인된 PC들끼리 네트워크를 구성할 수 있게 해준다.

 

동작방식

  • 각 노드는 키 쌍을 생성해 공개키와 해당 아이덴티티 연결
  • 조정 서버에 접속해 공개 키와 해당 노드 위치, 노드가 어떤 도메인에 있는지 남김
  • 다른 노드는 조정 서버에 남겨진 공개키 및 주소를 다운로드
  • 공개키를 이용해 노드 대 노드 와이어가드 생성

 

WireGuard 서비스 장점

개인적인 WireGuard 서비스의 장점은 다음과 같다.

  • 각 PC, 서버에 IP를 부여해서 마치 사설 네트워크처럼 사용할 수 있다.
  • IP가 변경되는 개인 AWS 서버에 WireGuard 고정 IP로 접근 가능하다.
  • 포트 방화벽을 우회 가능하다.
  • 각 디바이스의 동작 상태를 확인 가능하다.
  • 어디서나 네트워크만 되면, 서로 암호화 통신이 가능하다.