리눅스에서 Wireguard VPN 설정하는 방법

노트북과 그 옆에 있는 데스크탑 모니터의 사진.

Wireguard는 데스크탑과 모바일 장치 모두에서 실행할 수 있는 강력한 오픈 소스 가상 사설망(VPN) 데몬입니다. IPsec 및 OpenVPN과 같은 전통적인 VPN 솔루션에 대한 빠르고 경량의 대안을 제공합니다. 여기에서는 Wireguard를 설치하고 세 대의 리눅스 머신을 사용하여 간단한 VPN 설정을 만드는 방법을 보여줍니다.

목차

  • Wireguard를 VPN 솔루션으로 사용하는 이유
  • Wireguard 얻기
  • Wireguard 서버 설정
  • Wireguard 클라이언트 설정 및 연결
  • 서버에 두 번째 클라이언트 추가
  • Wireguard 네트워크 테스트

Wireguard를 VPN 솔루션으로 사용하는 이유

Wireguard의 가장 큰 장점 중 하나는 빠르고 경량의 VPN 데몬이라는 것입니다. 전통적인 솔루션과 달리 Wireguard는 네트워크에 많은 오버헤드를 추가하지 않습니다. 이로 인해 지연 시간이 낮고 노드 간의 전체 처리량이 높아집니다.

두 개의 Wireguard 노드 간의 높은 처리량을 보여주는 iperf3 테스트를 표시하는 터미널.

Wireguard의 또 다른 주요 특징은 리눅스 커널 내부의 모듈이라는 것입니다. 이를 통해 컴퓨터의 추가 시스템 리소스를 사용하지 않고 실행할 수 있어 저사양 및 SOC 장치에 배포하기에 이상적인 선택이 됩니다.

리눅스 커널에 로드된 Wireguard를 보여주는 터미널.

마지막으로 Wireguard는 현대 암호화 표준 및 개발 관행을 활용합니다. 또한 Wireguard의 코드 정확성, 보안 보장 및 공격 저항 능력을 확인하는 여러 공식 검증이 있었습니다.

참고: Wireguard에 여전히 확신이 서지 않나요? Wireguard가 OpenVPN과 어떻게 비교되는지 알아보세요.

Wireguard 얻기

리눅스에서 Wireguard를 설정하는 첫 번째 단계는 배포판의 저장소에서 핵심 도구를 다운로드하는 것입니다. 이를 통해 사용자 공간 명령을 사용하여 내장된 Wireguard 커널 모듈을 제어할 수 있습니다.

Ubuntu 및 Debian에서 핵심 도구를 설치하려면 다음 명령을 실행하세요:

sudo apt install wireguard wireguard-tools

Fedora에서는 dnf 패키지 관리자를 사용할 수 있습니다:

sudo dnf install wireguard-tools

Arch Linux에서는 pacman을 실행하여 Wireguard 핵심 도구를 얻을 수 있습니다:

sudo pacman -S wireguard-tools

Wireguard 도구가 제대로 설치되었는지 확인하려면 도움말 화면을 로드하세요:

wg -h

Wireguard 사용자 공간 도구의 도움말 메뉴를 보여주는 터미널.

Wireguard 서버 설정

가정: 이 문서는 공개적으로 접근 가능한 IPv4 주소가 있는 리눅스 시스템에 Wireguard 서버를 설치한다고 가정합니다. NAT 뒤에 있는 서버에서도 지침이 작동하지만 서브넷 외부의 노드를 찾을 수는 없습니다.

리눅스 머신에 Wireguard 핵심 도구 키트를 설치한 후, 이제 VPN의 서버 노드를 설정할 수 있습니다. 이는 네트워크의 클라이언트 노드에 대한 인터넷 게이트웨이 역할을 합니다.

Wireguard 구성 디렉토리로 이동하고 기본 권한을 “root 전용”으로 설정하세요:

cd/etc/wireguard  
sudo umask 077

참고: 일부 시스템에서는 일반 사용자로 “ /etc/wireguard” 폴더에 들어가는 것을 방지할 수 있습니다. 이를 해결하려면 sudo -s를 사용하여 루트 사용자로 전환하세요.

Wireguard 서버의 공개 키와 개인 키를 생성하세요:

sudo sh -c 'wg genkey | tee /etc/wireguard/server-private-key | wg pubkey > /etc/wireguard/server-public-key'

선호하는 텍스트 편집기를 사용하여 서버의 구성 파일을 만드세요:

sudo nano /etc/wireguard/wg0.conf

서버 구성 파일에 다음 코드 블록을 붙여넣으세요:

[Interface]  
PrivateKey= PASTE-YOUR-SERVER-PRIVATE-KEY-HERE  
Address= 10.0.0.1/32  
ListenPort= 60101  
PostUp= iptables -t nat -I POSTROUTING -o NETWORK-INTERFACE-HERE -j MASQUERADE  
PostDown= iptables -t nat -D POSTROUTING -o NETWORK-INTERFACE-HERE -j MASQUERADE

새로운 터미널 세션을 열고 서버의 Wireguard 개인 키를 출력하세요:

sudo cat /etc/wireguard/server-private-key

서버의 개인 키를 클립보드에 복사하세요.

Ubuntu에서 서버의 개인 키를 복사하는 과정을 보여주는 터미널.

PrivateKey 변수의 값을 클립보드에 있는 키로 바꾸세요.

서버의 Wireguard 구성에서 서버 개인 키를 보여주는 터미널.

인터넷에 접근할 수 있는 네트워크 인터페이스를 ip 명령을 사용하여 찾으세요:

ip route get 8.8.8.8

PostUpPostDown 변수의 -o 플래그 값을 인터넷에 접근할 수 있는 인터페이스로 설정한 후 구성 파일을 저장하세요.

Wireguard 서버의 구성 파일에서 올바른 장치 이름을 보여주는 터미널.

서버의 “ /etc/sysctl.conf” 파일을 선호하는 텍스트 편집기로 열어보세요:

sudo nano /etc/sysctl.conf

net.ipv4.ip_forward=1이 포함된 줄로 스크롤한 후, 그 앞의 샵(#) 기호를 제거하세요.

sysctl.conf에서 IPv4 포워딩 옵션의 위치를 강조하는 터미널.

sudo sysctl -p를 실행하여 새로운 sysctl 구성을 다시 로드하세요.

참고: Wireguard는 리눅스에서 실행할 수 있는 유일한 VPN 솔루션이 아닙니다. OpenVPN을 사용하여 자신의 VPN을 만드는 방법을 알아보세요.

Wireguard 클라이언트 설정 및 연결

이 시점에서, 이제 동료가 없는 적절하게 구성된 Wireguard 서버가 있습니다. 이를 사용하려면 첫 번째 Wireguard 클라이언트를 설정하고 연결해야 합니다.

클라이언트 시스템의 Wireguard 구성 디렉토리로 이동하고 기본 권한을 설정하세요:

cd/etc/wireguard  
sudo umask 077

다음 명령을 사용하여 클라이언트의 Wireguard 키 쌍을 생성하세요:

sudo sh -c 'wg genkey | tee /etc/wireguard/client1-private-key | wg pubkey > /etc/wireguard/client1-public-key'

선호하는 텍스트 편집기를 사용하여 클라이언트의 Wireguard 구성 파일을 만드세요:

sudo nano /etc/wireguard/wg0.conf

클라이언트 구성 파일에 다음 코드 블록을 붙여넣으세요:

[Interface]  
PrivateKey= PASTE-YOUR-CLIENT1-PRIVATE-KEY-HERE  
Address= 10.0.0.2/32  
ListenPort= 60101  
  
[Peer]  
PublicKey= PASTE-YOUR-SERVER-PUBLIC-KEY-HERE  
AllowedIPs= 0.0.0.0/0  
Endpoint= PASTE-YOUR-SERVER-IP-ADDRESS-HERE:60101  
PersistentKeepalive= 25

PrivateKey 변수를 클라이언트의 개인 키로 바꾸세요.

첫 번째 Wireguard 클라이언트의 개인 키를 강조하는 터미널.

Wireguard 서버의 터미널 세션을 열고 공개 키를 출력하세요:

sudo cat /etc/wireguard/server-public-key

PublicKey 변수의 값을 서버의 공개 키로 설정하세요.

두 번째 클라이언트의 구성 파일에서 Wireguard 서버의 공개 키를 강조하는 터미널.

Endpoint 변수를 Wireguard 서버의 IP 주소로 변경하세요.

Wireguard 서버의 IP 주소를 강조하는 터미널.

구성 파일을 저장한 후, wg-quick 명령을 사용하여 Wireguard 클라이언트를 시작하세요:

sudo wg-quick up wg0

Wireguard 클라이언트 데몬을 시작하는 과정을 보여주는 터미널.

참고: 이 명령은 Wireguard 서버를 시작할 때까지 클라이언트의 네트워크 연결을 비활성화합니다. 원래 네트워크로 돌아가려면 sudo wg-quick down wg0를 실행하세요.

Wireguard 서버와 클라이언트 연결

Wireguard 서버의 터미널 세션으로 가서 구성 파일을 엽니다:

sudo nano /etc/wireguard/wg0.conf

[Interface] 섹션 뒤에 다음 코드 블록을 붙여넣으세요:

[Peer]  
PublicKey= PASTE-YOUR-CLIENT1-PUBLIC-KEY-HERE  
AllowedIPs= 10.0.0.2/32  
PersistentKeepalive= 25

PublicKey 변수를 Wireguard 클라이언트의 공개 키로 설정하세요.

[Peer] 블록의 위치를 보여주고 클라이언트의 공개 키를 강조하는 터미널.

참고: 클라이언트 머신에서 sudo cat /etc/wireguard/client1-public-key를 실행하여 공개 키를 얻을 수 있습니다.

구성 파일을 저장한 후, 다음 명령을 실행하여 서버에서 Wireguard 서비스를 시작하세요:

sudo wg-quick up wg0

서버에 두 번째 클라이언트 추가

모든 VPN 서비스의 주요 기능 중 하나는 서로 다른 네트워크의 여러 머신을 연결할 수 있다는 것입니다. 이는 서로 다른 위치에 컴퓨터가 있거나 친구들을 위한 개인 게임 서버를 호스팅하려는 경우에 유용합니다.

Wireguard에서 이를 수행하려면 서버에 대한 새로운 VPN 인터페이스의 구성 파일을 만들어야 합니다. 가장 쉬운 방법은 현재 서버 구성을 복사하고 복사본에 새 이름을 지정하는 것입니다:

sudo cp /etc/wireguard/wg0.conf /etc/wireguard/wg1.conf

선호하는 텍스트 편집기를 사용하여 새 구성 파일을 엽니다:

sudo nano /etc/wireguard/wg1.conf

ListenPort 변수를 60102로 설정하세요. 이렇게 하면 wg0와 wg1 VPN 인터페이스 간의 포트 충돌을 방지할 수 있습니다.

두 번째 Wireguard 인터페이스에 대한 수정된 ListenPort 변수를 강조하는 터미널.

[Peer] 섹션으로 가서 AllowedIPs 변수를 “10.0.0.2/32”에서 “10.0.0.3/32”로 변경한 후 구성 파일을 저장하세요.

두 번째 Wireguard 클라이언트에 대한 수정된 AllowedIPs 변수를 강조하는 터미널.

두 번째 Wireguard 클라이언트 구성

두 번째 머신에 로그인한 후 Wireguard 구성 디렉토리를 준비하세요:

cd/etc/wireguard  
sudo umask 077

다음 명령을 사용하여 새로운 Wireguard 키 쌍을 생성하세요:

sudo sh -c 'wg genkey | tee /etc/wireguard/client2-private-key | wg pubkey > /etc/wireguard/client2-public-key'

선호하는 텍스트 편집기를 사용하여 새 구성 파일을 만드세요:

sudo nano /etc/wireguard/wg0.conf

새 구성 파일에 다음 코드 블록을 붙여넣으세요:

[Interface]  
PrivateKey= PASTE-YOUR-CLIENT2-PRIVATE-KEY-HERE  
Address= 10.0.0.3/32  
ListenPort= 60102  
  
[Peer]  
PublicKey= PASTE-YOUR-SERVER-PUBLIC-KEY-HERE  
AllowedIPs= 0.0.0.0/0  
Endpoint= PASTE-YOUR-SERVER-IP-ADDRESS-HERE:60102  
PersistentKeepalive= 25

PrivateKey 변수를 두 번째 머신의 개인 키로 설정한 후, PublicKey 변수를 서버의 공개 키로 변경하세요.

Endpoint 변수를 서버의 IP 주소로 바꾸고 “ :60102”를 추가하세요.

구성 파일을 저장한 후, 두 번째 머신의 Wireguard 클라이언트를 시작하세요:

sudo wg-quick up wg0

두 번째 클라이언트를 Wireguard 서버에 연결

Wireguard 서버에 다시 로그인한 후, 두 번째 클라이언트의 VPN 인터페이스 구성을 엽니다:

sudo nano /etc/wireguard/wg1.conf

[Peer] 섹션으로 스크롤한 후, PublicKey 변수를 두 번째 클라이언트의 공개 키로 바꾸세요.

서버의 wg1 구성 파일 내에서 두 번째 클라이언트의 공개 키를 강조하는 터미널.

구성 파일을 저장한 후, wg-quick 명령을 사용하여 두 번째 VPN 인터페이스를 시작하세요:

sudo wg-quick up wg1

서버에서 wg를 실행하여 첫 번째 및 두 번째 Wireguard 클라이언트가 올바르게 표시되는지 확인하세요.

Wireguard 서버와 통신하는 두 클라이언트 노드를 보여주는 터미널.

Wireguard 네트워크 테스트

서버와 클라이언트가 Wireguard 네트워크에 연결되었으므로 이제 노드 간의 연결성과 지연 시간을 테스트할 수 있습니다. 이를 위해 시스템에 네트워크 진단 도구가 설치되어 있는지 확인하세요:

sudo apt install net-tools curl

Fedora에서는 기본적으로 네트워킹 도구가 제공되므로 curl만 설치하면 됩니다:

sudo dnf install curl

Arch Linux에서는 pacman을 사용하여 네트워크 도구와 curl을 설치할 수 있습니다:

sudo pacman -S traceroute curl

두 클라이언트 간의 패킷 경로를 추적하여 시작하세요. 다음 명령은 “10.0.0.2”에서 “10.0.0.3”으로 IP 패킷이 어떻게 이동하는지를 보여줍니다:

traceroute 10.0.0.3

공용 IP 주소에 ping을 보내어 노드 중 하나가 공용 인터넷에 접근할 수 있는지 확인하세요:

ping -c 5 8.8.8.8

외부 사이트로의 Wireguard 네트워크에서의 지연 시간을 보여주는 터미널.

마지막으로, 노드가 Wireguard 서버와 동일한 공용 IP 주소를 공유하는지 확인하세요:

curl ipinfo.io/ip

세 개의 Wireguard 노드에서 유사한 외부 IP 주소를 강조하는 터미널.

리눅스에서 Wireguard 네트워크를 설정하는 방법을 배우는 것은 VPN의 매혹적인 세계를 탐험하는 첫 번째 단계입니다. 깊이 파고들어 오늘날 사용할 수 있는 최고의 보안 중심 VPN 제공업체를 살펴보세요.

이미지 출처: Kari Shea via Unsplash 및 Wikimedia Commons. 모든 수정 및 스크린샷은 Ramces Red에 의해 작성되었습니다.