Home Wireguard로 간편하게 VPN 환경 구성하기
Post
Cancel

Wireguard로 간편하게 VPN 환경 구성하기


들어가며

WireGuard 는 간단하고 빠르며 보안이 강한 최신 VPN 프로토콜입니다. 최소한의 코드로 높은 성능과 쉽게 설정 가능한 VPN 연결을 제공합니다. 이번 포스팅에서는 WireGuard를 통해 간편하게 홈 네트워크에 접속하는 VPN 환경을 구성하도록 하겠습니다.

VPN이란?
VPN이란 가상 사설 네트워크를 의미하는 Virtual Private Network의 약자로 인터넷 연결과 개인 정보를 보호합니다. VPN은 데이터가 지나가는 암호화된 터널을 만들고 사용자의 IP 주소를 숨겨 온라인 익명성을 보장합니다.
VPN 개념도


VPN을 왜 구축하게 되었을까?

VPN이 보안에 유용하다는 것은 알았지만 왜 별다른 프로그램이 돌아가지도 않는 홈 서버에 VPN을 도입하게 되었을까요?
사실 VPN은 보안적인 측면 이외에도 굉장히 편리한 점들이 많습니다. 그 중 하나가 바로 해당 가상 네트워크망 안에서 클라이언트가 접속한 것 처럼 사용할 수 있다는 점입니다.

홈 서버에 띄워놓은 여러가지 장난감(?)들에 접속하려고 하면 이전에는 일일이 포트포워딩 해줘야하는 불편함이 있었는데요, 내부 홈서버와 제 macbook 간에 VPN망을 구성해놓으면 이런 귀찮은 작업들은 싹 날아가게 됩니다.


WireGuard 란 무엇인가?

시중에는 이 VPN을 구현해놓은 다양한 구현체들이 존재합니다. OPEN-VPN, WireGuard 등이 여기에 해당합니다. 저도 쓸만한 VPN들을 검색하는 와중에, devsisters의 기술블로그에서 WireGaurd 를 도입한 글을 보게 되었는데요, 그 중 쉬운 연결방법과 빠른 속도, 그리고 경량성에 매력을 느껴 저도 WireGuard를 사용하게 되었습니다.

devtech 블로그 중 WireGuard로 멋진 VPN 서버 구축하기 - 1 에 나온 다른 장점들

  1. 속도와 레이턴시가 우수합니다.
  2. 첨단 암호화 기법을 사용하여 안전하며, 성능도 우수합니다.
  3. Peer 배포가 쉽습니다.
  4. 연결이 안정적입니다.
  5. 리눅스에 내장되어있어 사용하기 편합니다.


WireGuard 설치 과정

홈 서버에 WireGuard를 설치하는 과정은 다음과 같습니다.

  1. 서버에 wireguard 설치 및 공개키 생성
    먼저 홈 서버에 wireguard를 설치해 줍니다. 저는 ubuntu라 apt를 사용했는데요, 다른 os도 wireguard 홈페이지를 참조하면 패키지로 간단하게 설치가 가능합니다. 그 다음 바로 이어서 vpn 연결에 사용할 공개키개인키를 생성해 줍니다.

    1
    2
    3
    4
    5
    
     sudo apt update
     sudo apt install wireguard
    
     umask 077
     sudo wg genkey | tee privatekey | wg pubkey > publickey
    
  2. wireguard config 설정
    다음은 wireguard의 config를 설정해 줍니다. 저는 아래와 같이 설정해 주었습니다. (Peer 쪽은 단계 5의 client 부분을 하고 돌아와서 작성해 주시면 됩니다.) PostUp, PostDown 부분은 선택사항으로, 이더넷 명은 서버의 외부 네트워크 인터페이스를 검색하신 후 넣어주시면 됩니다. VPN 활성화 이후에도 google 등 외부망 접속이 가능하게끔 하기 위해 NAT 규칙을 활성화 해 주었습니다. 만약 Peer를 추가하고 싶다면 아레에 동일 양식으로 추가 작성하면 됩니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
     [Interface]
     Address = {server 내부망 VPN IP}/24
     SaveConfig = true
     PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o enp2s0 -j MASQUERADE
     PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o enp2s0 -j MASQUERADE
     ListenPort = {사용할 vpn 포트}
     PrivateKey = {server의 private key}
    
     [Peer]
     PublicKey = {client의 public key}
     AllowedIPs = {client 내부망 VPN IP}/32
    
  3. IP 포워딩 활성화 및 방화벽 오픈
    다음으로는 VPN 트래픽을 전달할 수 있도록 IP 포워딩을 활성화합니다. 저는 위와 마찬가지의 이유로 ipv4, ipv6를 모두 열어주었습니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
     # IP 포워딩 활성화
     sudo nano /etc/sysctl.conf
    
     net.ipv4.ip_forward=1 
     net.ipv6.conf.all.forwarding=1
    
     sudo sysctl -p
    
     # 방화벽 오픈
     sudo ufw allow 51820/udp
     sudo ufw allow in on wg0 to any
    
  4. wireguard 재시작
    마지막으로 wireguard를 재시작해 줍니다. 이것으로 server 쪽의 작업은 모두 끝났습니다.

    1
    2
    
     #sudo wg-quick down wg0 
     sudo wg-quick up wg0
    
  5. wireguard client 설치 후 config 작성
    client 부분은 더 간단합니다. 먼저 사용하는 pc에서 wireguard client 프로그램을 설치해 줍니다. 설치하면 아래와 같은 화면이 될텐데요, 다음과 같이 ‘add empty tunnel’ 을 클릭하고 다음과 같이 config를 작성해 줍니다. (server쪽에서 필요한 client단의 public key는 화면에 바로 표시됩니다.)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
     [Interface]
     PrivateKey = {client의 private key}
     Address = 10.0.0.2/24
     DNS = 8.8.8.8
    
     [Peer]
     PublicKey = {server의 public key}
     AllowedIPs = 0.0.0.0/0, ::/0
     Endpoint = {server public ip}:{사용할 vpn 포트}
     PersistentKeepalive = 25
    
  6. VPN을 activate 시키고 server url로 접속
    저는 Peer들을 여러개 추가하여 묶어서 사용하고 있습니다. 이제 편하게 즐기면 됩니다!

wireguard VPN activate

10.0.1.1 == vpn으로 설정한 홈서버 IP


정리하며

이렇게 간단하게 VPN 설정이 끝났습니다. VPN으로 설정하니 포트포워딩 부분에서도 기존에 세팅해두었던 RDP, VNC 포트번호를 제외하곤 전부 말끔하게 정리할 수 있었습니다. 개인 홈 IP 구조가 DHCP 방식으로 할당받는 방식이라면 DDNS 설정을 사용하는 것도 편하게 사용 가능한 방법입니다. DDNS 설정이 필요하면 Endpoint 부분의 IP를 DDNS 주소로 매핑하면 됩니다. 👋


참고문헌

This post is licensed under CC BY 4.0 by the author.