우분투 22.04에서 WireGuard 설정하는 방법

소개

WireGuard는 IPv4 및 IPv6 연결을 지원하는 가벼운 가상 사설망(VPN)입니다. VPN을 사용하면 믿을 수 없는 네트워크를 사설 네트워크에 연결된 것처럼 통과할 수 있습니다. 이를 통해 호텔이나 커피숍과 같은 믿을 수 없는 네트워크에 연결된 스마트폰이나 노트북에서 안전하고 보안된 상태로 인터넷에 접속할 수 있는 자유가 주어집니다.

WireGuard의 암호화는 피어 간에 암호화된 터널을 설정하기 위해 공개 및 개인 키에 의존합니다. 각 WireGuard 버전은 간단함, 보안성 및 피어와의 호환성을 보장하기 위해 특정한 암호화 알고리즘 스위트를 사용합니다.

반면에 OpenVPN 및 IPSec와 같은 다른 VPN 소프트웨어는 전송 계층 보안(TLS)과 인증서를 사용하여 시스템 간에 암호화된 터널을 인증하고 설정합니다. TLS의 다양한 버전에는 수백 가지 다른 암호화 알고리즘과 스위트를 지원하는데, 이는 다양한 클라이언트를 지원하기 위한 큰 유연성을 제공하지만, TLS를 사용하는 VPN을 구성하는 데 시간이 더 많이 소요되고 복잡하며 오류가 발생할 가능성이 있습니다.

이 튜토리얼에서는 Ubuntu 22.04 서버에 WireGuard를 설정한 다음, 다른 기기를 IPv4 및 IPv6 연결을 사용하여 피어로 연결하는 방법을 배우게 됩니다 (이중 스택 연결로도 알려짐). WireGuard 서버를 게이트웨이 구성으로 피어의 인터넷 트래픽을 라우팅하는 방법뿐만 아니라 암호화된 피어 간 터널에 VPN을 사용하는 방법도 배우게 됩니다.

이 튜토리얼에서는 다른 Ubuntu 22.04 시스템을 WireGuard 서버의 피어(또는 클라이언트로도 불림)로 구성합니다. 이 시리즈의 후속 튜토리얼에서는 Windows, macOS, Android 및 iOS 시스템 및 장치에 WireGuard를 설치하고 실행하는 방법에 대해 설명할 것입니다.

참고: DigitalOcean Droplet에 WireGuard를 설정할 계획이 있다면, 많은 호스팅 제공 업체와 마찬가지로 대역폭 초과에 대해 요금을 부과하는 것을 알아두세요. 이유로 인해 서버가 처리하는 트래픽 양을 주의 깊게 살펴보시기 바랍니다. 자세한 내용은 이 페이지를 참조하세요.

전제 조건

이 튜토리얼을 따라가려면 다음이 필요합니다:

  • sudo 비루트 사용자 및 활성화된 방화벽이 있는 Ubuntu 22.04 서버 하나. 이를 설정하려면 저희의 Ubuntu 22.04에서의 초기 서버 설정 튜토리얼을 따라갈 수 있습니다. 이를 이 가이드에서는 WireGuard 서버라고 참조하겠습니다.
  • 클라이언트 머신이 필요합니다. 이 머신을 사용하여 WireGuard 서버에 연결할 것입니다. 이 튜토리얼에서는 이 머신을 WireGuard 피어라고 참조할 것입니다. 이 튜토리얼의 목적을 위해 WireGuard 피어로 로컬 머신을 사용하는 것이 좋지만, 원하는 경우 원격 서버나 모바일 폰을 클라이언트로 사용할 수 있습니다. 원격 시스템을 사용하는 경우 나중에 이 튜토리얼의 선택적 섹션을 모두 따르거나 시스템에 잠길 수 있습니다.
  • IPv6를 사용하여 WireGuard를 사용하려면 서버가 해당 유형의 트래픽을 지원하도록 구성되어 있어야 합니다. WireGuard와 함께 IPv6 지원을 활성화하려는 경우 DigitalOcean 도플릿을 사용하는 경우 해당 문서 페이지인 Droplets에서 IPv6 활성화하는 방법을 참조하십시오. Droplet을 생성할 때 IPv6 지원을 추가하거나 해당 페이지의 지침을 사용하여 이후에 추가할 수 있습니다.

단계 1 — WireGuard 설치 및 키 페어 생성

이 튜토리얼의 첫 번째 단계는 서버에 WireGuard를 설치하는 것입니다. 먼저, WireGuard 서버의 패키지 인덱스를 업데이트하고 다음 명령을 사용하여 WireGuard를 설치하세요. 이 세션에서 처음으로 sudo를 사용하는 경우 sudo 사용자의 암호를 제공하라는 메시지가 표시될 수 있습니다:

  1. sudo apt update
  2. sudo apt install wireguard

이제 WireGuard가 설치되었으므로 서버용 개인 및 공개 키 쌍을 생성해야 합니다. 내장된 wg genkeywg pubkey 명령을 사용하여 키를 생성한 다음 생성된 개인 키를 WireGuard의 구성 파일에 추가하게 됩니다.

또한 방금 생성한 키의 권한을 변경해야 합니다. 기본적으로 파일은 서버의 모든 사용자에 의해 읽을 수 있습니다. 따라서 chmod 명령을 사용하여 권한을 변경해야 합니다.

다음 명령을 사용하여 WireGuard용 개인 키를 생성하고 해당 권한을 변경합니다:

  1. wg genkey | sudo tee /etc/wireguard/private.key
  2. sudo chmod go= /etc/wireguard/private.key

sudo chmod go=... 명령은 루트 사용자 이외의 사용자 및 그룹에 대한 파일의 모든 권한을 제거하여 개인 키에 대한 액세스를 루트 사용자만 할 수 있도록합니다.

이 명령은 base64로 인코딩된 출력의 한 줄을 받게 되며, 이는 개인 키입니다. 명령의 tee 부분에 의해 출력의 사본이 미래에 참고할 수 있도록 /etc/wireguard/private.key 파일에도 저장됩니다. 출력된 개인 키에 유의하여 나중에 이 절에서 WireGuard의 구성 파일에 추가해야 합니다.

다음 단계는 해당하는 공개 키를 생성하는 것입니다. 공개 키는 개인 키에서 유도됩니다. 다음 명령을 사용하여 공개 키 파일을 만듭니다:

  1. sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key

이 명령은 | (파이프) 연산자를 사용하여 서로 연결된 세 개의 개별 명령으로 구성됩니다.

  • sudo cat /etc/wireguard/private.key: 이 명령은 개인 키 파일을 읽고 표준 출력 스트림에 출력합니다.
  • wg pubkey: 두 번째 명령은 첫 번째 명령의 출력을 표준 입력으로 사용하여 공개 키를 생성합니다.
  • sudo tee /etc/wireguard/public.key: 마지막 명령은 공개 키 생성 명령의 출력을 /etc/wireguard/public.key라는 파일로 리디렉션합니다.

명령을 실행하면 WireGuard 서버의 공개 키에 대한 base64로 인코딩된 출력 한 줄을 다시 받게 됩니다. 서버에 연결하는 모든 피어에게 공개 키를 배포해야 하므로 참조용으로 어딘가에 복사하세요.

단계 2 — IPv4 및 IPv6 주소 선택

이전 섹션에서 WireGuard를 설치하고 서버로부터 및 서버로의 트래픽을 암호화하는 데 사용되는 키 쌍을 생성했습니다. 이 섹션에서는 서버를 위한 구성 파일을 생성하고 서버가 재부팅될 때 자동으로 WireGuard를 시작하도록 설정합니다. 또한 WireGuard 서버 및 피어에 사용할 사설 IPv4 및 IPv6 주소를 정의합니다.

IPv4 및 IPv6 주소를 모두 사용할 계획이라면 이 두 섹션을 모두 따르십시오. 그렇지 않으면 VPN 네트워크 요구에 맞는 섹션의 지침을 따르십시오.

단계 2(a) – IPv4 범위 선택

IPv4 피어를 사용하여 WireGuard 서버를 사용하는 경우 서버는 클라이언트 및 터널 인터페이스에 사용할 개인 IPv4 주소 범위가 필요합니다. 다음의 주소 블록에서 IP 주소 범위를 선택할 수 있습니다(이러한 블록이 어떻게 할당되는지 자세히 알아보려면 RFC 1918 명세서를 방문하십시오):

  • 10.0.0.0 ~ 10.255.255.255 (10/8 prefix)
  • 172.16.0.0 ~ 172.31.255.255 (172.16/12 prefix)
  • 192.168.0.0 ~ 192.168.255.255 (192.168/16 prefix)

이 튜토리얼의 목적을 위해 우리는 첫 번째 예약된 IP 범위의 주소 블록으로부터 10.8.0.0/24를 사용할 것입니다. 이 범위는 최대 255개의 다른 피어 연결을 허용하며, 일반적으로 다른 개인 IP 범위와 중첩되거나 충돌하는 주소를 가지지 않아야 합니다. 이 예제 범위가 네트워크와 호환되지 않는 경우 네트워크 구성에 맞는 주소 범위를 선택하십시오.

WireGuard 서버는 그 ​​사설 터널 IPv4 주소를 범위에서 하나의 IP 주소를 사용할 것입니다. 여기서는 10.8.0.1/24를 사용할 것입니다만, 10.8.0.1에서 10.8.0.255 범위 내의 어떤 주소든 사용할 수 있습니다. 다른 주소를 사용한다면 선택한 IP 주소를 메모해 두세요. 이것을 Step 3 — WireGuard 서버 구성 생성에서 정의한 구성 파일에 추가하게 됩니다.

단계 2(b) — IPv6 범위 선택

WireGuard를 IPv6로 사용하는 경우, RFC 4193의 알고리즘을 기반으로 고유한 로컬 IPv6 유니캐스트 주소 접두어를 생성해야 합니다. WireGuard에서 사용하는 주소는 가상 터널 인터페이스와 관련이 있을 것입니다. 예약된 fd00::/8 블록의 사설 IPv6 주소 내에서 무작위로 고유한 IPv6 접두어를 생성하기 위해 몇 가지 단계를 완료해야 할 것입니다.

RFC에 따르면 고유한 IPv6 접두어를 얻는 권장 방법은 시간과 시리얼 번호 또는 장치 ID와 같은 고유한 식별 값을 결합하는 것입니다. 그런 값들은 해싱되고 잘린 후 결과적으로 사설 fd00::/8 블록의 내에서 고유한 주소로 사용할 수 있는 비트 집합이 생성됩니다.

WireGuard 서버의 IPv6 범위를 생성하려면 다음 명령을 사용하여 date 유틸리티를 통해 64비트 타임스탬프를 수집하세요:

  1. date +%s%N

다음과 같은 숫자를 받게 될 것입니다. 이는 1970-01-01 00:00:00 UTC부터의 초 수 (date 명령어의 %s)와 나노초 수 (%N)가 결합된 값입니다:

Output
1650301699497770167

나중에 이 섹션에서 사용하기 위해 이 값을 어딘가에 기록하세요. 다음으로, 서버의 /var/lib/dbus/machine-id 파일에서 machine-id 값을 복사하세요. 이 식별자는 시스템에 고유하며 서버가 존재하는 한 변경되지 않아야 합니다.

  1. cat /var/lib/dbus/machine-id

다음과 같은 출력을 받게 될 것입니다:

/var/lib/dbus/machine-id
610cef4946ed46da8f71dba9d66c67fb

이제 타임스탬프와 machine-id를 결합하고 결과 값을 SHA-1 알고리즘을 사용하여 해싱해야 합니다. 명령어는 다음 형식을 사용할 것입니다:

printf <timestamp><machine-id> | sha1sum

명령을 실행하여 타임스탬프와 기계 식별 값으로 대체하세요:

  1. printf 1650301699497770167610cef4946ed46da8f71dba9d66c67fb | sha1sum

다음과 같은 해시 값을 받게 될 것입니다:

Output
442adea1488d96388dae9ab816045b24609a6c18 -

sha1sum 명령의 출력은 16진수로 되어 있으므로 출력은 데이터의 하나의 바이트를 나타내기 위해 두 문자를 사용합니다. 예를 들어, 예제 출력의 4f26은 해싱된 데이터의 처음 두 바이트입니다.

RFC의 알고리즘은 해싱된 출력의 최하위(맨 끝) 40비트 또는 5바이트만 필요로 합니다. cut 명령을 사용하여 해시에서 마지막 5개의 16진수로 인코딩된 바이트를 출력하세요:

  1. printf 442adea1488d96388dae9ab816045b24609a6c18 | cut -c 31-

-c 인수는 cut 명령에게 지정된 문자 집합만 선택하도록 지시합니다. 31- 인수는 cut에게 입력 라인의 31번째 위치부터 끝까지의 모든 문자를 출력하도록 지시합니다.

다음과 같은 출력을 받아야 합니다:

Output
24609a6c18

이 예제 출력에서 바이트 집합은 다음과 같습니다: 24 60 9a 6c 18.

이제 fd 접두사와 생성된 5바이트를 사용하여 고유한 IPv6 네트워크 접두사를 구성할 수 있습니다. 가독성을 위해 : 콜론으로 모든 2바이트를 분리합니다. 고유 접두사의 각 서브넷은 총 18,446,744,073,709,551,616개의 가능한 IPv6 주소를 보유할 수 있으므로 간단히 /64 표준 크기로 서브넷을 제한할 수 있습니다.

/64 서브넷 크기로 이전에 생성된 바이트를 사용하면 다음과 같은 결과 접두사가 됩니다:

Unique Local IPv6 Address Prefix
fd24:609a:6c18::/64

fd24:609a:6c18::/64 범위를 사용하여 서버 및 피어의 WireGuard 터널 인터페이스에 개별 IP 주소를 할당합니다. 서버에 IP를 할당하려면 마지막 :: 문자 뒤에 1을 추가하십시오. 결과 주소는 fd24:609a:6c18::1/64가 됩니다. 피어는 범위 내에서 아무 IP를 사용할 수 있지만 보통 피어를 추가할 때마다 값이 1씩 증가합니다. 예: fd24:609a:6c18::2/64. IP를 기록하고 다음 자습서 섹션에서 WireGuard 서버를 구성하십시오.

단계 3 — WireGuard 서버 구성 만들기

WireGuard 서버 구성을 만들기 전에 다음 정보가 필요합니다:

  1. WireGuard를 설치하고 키 쌍을 생성하는 단계 1 — WireGuard 설치 및 키 쌍 생성에서 개인 키를 사용할 수 있는지 확인하세요.

  2. IPv4로 WireGuard를 사용하는 경우, 이 예에서는 10.8.0.1/24인 서버에 대한 IP 주소가 필요합니다. 이는 단계 2(a) — IPv4 범위 선택에서 선택한 것입니다.

  3. IPv6로 WireGuard를 사용하는 경우, 단계 2(b) — IPv6 범위 선택에서 생성한 서버의 IP 주소가 필요합니다. 이 예에서 IP는 fd24:609a:6c18::1/64입니다.

필요한 개인 키 및 IP 주소를 얻은 후에는 다음 명령을 실행하여 nano 또는 선호하는 편집기를 사용하여 새 구성 파일을 만듭니다:

  1. sudo nano /etc/wireguard/wg0.conf

다음 줄을 파일에 추가하고 하이라이트된 base64_encoded_private_key_goes_here 값을 개인 키로, Address 줄의 IP 주소를 대체하십시오. 또한 ListenPort 줄을 변경하여 WireGuard를 다른 포트에서 사용할 수 있습니다:

/etc/wireguard/wg0.conf
[Interface] PrivateKey = base64_encoded_private_key_goes_here Address = 10.8.0.1/24, fd24:609a:6c18::1/64 ListenPort = 51820 SaveConfig = true

SaveConfig 줄은 WireGuard 인터페이스가 종료될 때 구성 파일에 변경 사항이 저장되도록합니다.

/etc/wireguard/wg0.conf 파일을 저장하고 닫습니다. 만약 nano를 사용하고 있다면 CTRL+X를 누르고, 그런 다음 Y를 입력하고 ENTER를 눌러 확인할 수 있습니다. WireGuard VPN 서버를 사용하는 방법에 따라 빌드 할 수 있는 초기 서버 구성이 있습니다.

단계 4 – WireGuard 서버의 네트워크 구성 조정

만약 서버에서 서비스에만 액세스하려는 피어를 WireGuard를 사용하여 WireGuard 서버에 연결하는 경우이 섹션을 완료할 필요가 없습니다. WireGuard 피어의 인터넷 트래픽을 WireGuard 서버를 통해 경로 지정하려는 경우 튜토리얼의 이 섹션을 따라 IP 전달을 구성해야합니다.

전달을 구성하려면 /etc/sysctl.conf 파일을 nano 또는 선호하는 편집기를 사용하여 엽니 다:

  1. sudo nano /etc/sysctl.conf

WireGuard를 사용하는 IPv4를 사용하는 경우 파일의 맨 아래에 다음 줄을 추가하십시오:

/etc/sysctl.conf
net.ipv4.ip_forward=1

WireGuard를 사용하는 IPv6를 사용하는 경우 파일의 맨 아래에이 줄을 추가하십시오:

/etc/sysctl.conf
net.ipv6.conf.all.forwarding=1

IPv4 및 IPv6를 모두 사용하는 경우 두 줄을 모두 포함하는지 확인하십시오. 작업을 마치면 파일을 저장하고 닫으십시오.

파일을 읽고 새 값이 현재 터미널 세션에로드되도록하려면 다음을 실행하십시오:

  1. sudo sysctl -p
Output
net.ipv6.conf.all.forwarding = 1 net.ipv4.ip_forward = 1

이제 WireGuard 서버에서 가상 VPN 이더넷 장치로부터 들어오는 트래픽을 서버의 다른 장치로 전달하고 거기서 공개 인터넷으로 전달 할 수 있게됩니다. 이 구성을 사용하면 WireGuard 피어의 모든 웹 트래픽을 서버의 IP 주소를 통해 경로 지정하고 클라이언트의 공개 IP 주소가 효과적으로 숨겨집니다.

그러나 트래픽을 서버를 통해 올바르게 경로 지정하기 전에 일부 방화벽 규칙을 구성해야합니다. 이러한 규칙을 사용하면 WireGuard 서버 및 피어간의 트래픽이 제대로 흐르도록합니다.

단계 5 — WireGuard 서버의 방화벽 구성

이 섹션에서는 서버 및 클라이언트 간의 트래픽이 올바르게 라우팅되도록하는 방화벽 규칙을 추가하기 위해 WireGuard 서버의 구성을 편집합니다. 이전 섹션과 마찬가지로, WireGuard VPN을 단순히 기계 간 연결에 사용하고 VPN에 제한된 리소스에 액세스하기 위해 사용하는 경우이 단계를 건너 뜁니다.

WireGuard VPN 트래픽을 서버의 방화벽을 통해 허용하려면 동적 네트워크 주소 변환(NAT)을 제공하는 iptables 개념 인 마스커레이딩을 활성화해야합니다. 이는 클라이언트 연결을 올바르게 라우팅하기 위해 필요합니다.

먼저 ip route 하위 명령을 사용하여 WireGuard 서버의 공용 네트워크 인터페이스를 찾습니다:

  1. ip route list default

공용 인터페이스는 “dev” 뒤에 오는 이 명령의 출력에서 찾은 문자열입니다. 예를 들어, 이 결과는 아래에서 강조된 인터페이스 인 eth0라는 이름의 인터페이스를 보여줍니다:

Output
default via 203.0.113.1 dev eth0 proto static

다음 단계에서 iptables 규칙에 장치 이름을 추가해야하므로 장치 이름을 기록하십시오.

WireGuard 서버에 방화벽 규칙을 추가하려면 다시 nano 또는 기호에 따라 /etc/wireguard/wg0.conf 파일을 엽니다.

  1. sudo nano /etc/wireguard/wg0.conf

파일 하단에 SaveConfig = true 줄 다음에 다음 줄을 붙여넣으십시오:

/etc/wireguard/wg0.conf
. . . PostUp = ufw route allow in on wg0 out on eth0 PostUp = iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE PostUp = ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE PreDown = ufw route delete allow in on wg0 out on eth0 PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE PreDown = ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

PostUp 라인은 WireGuard 서버가 가상 VPN 터널을 시작할 때 실행됩니다. 여기 예시에서는 세 개의 ufwiptables 규칙이 추가됩니다:

  • ufw route allow in on wg0 out on eth0 – 이 규칙은 wg0 VPN 인터페이스로 들어오는 IPv4 및 IPv6 트래픽을 서버의 eth0 네트워크 인터페이스로 전달할 수 있도록 합니다. 이는 이전 섹션에서 구성한 net.ipv4.ip_forwardnet.ipv6.conf.all.forwarding sysctl 값과 함께 작동합니다.
  • iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE – 이 규칙은 마스커레이딩을 구성하고, wg0 VPN 인터페이스로 들어오는 IPv4 트래픽을 WireGuard 서버의 공용 IPv4 주소에서 직접 유래한 것처럼 보이도록 재작성합니다.
  • ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE – 이 규칙은 마스커레이딩을 구성하고, wg0 VPN 인터페이스로 들어오는 IPv6 트래픽을 WireGuard 서버의 공용 IPv6 주소에서 직접 유래한 것처럼 보이도록 재작성합니다.

PreDown 규칙은 WireGuard 서버가 가상 VPN 터널을 중지할 때 실행됩니다. 이러한 규칙은 PostUp 규칙의 역이며, VPN이 중지될 때 VPN 인터페이스에 대한 전달 및 마스커레이딩 규칙을 되돌립니다.

두 경우 모두 VPN에 적합한 IPv4 및 IPv6 규칙을 포함하거나 제외하도록 구성을 편집하십시오. 예를 들어, IPv4만 사용하는 경우에는 ip6tables 명령을 포함하지 않을 수 있습니다.

반면에, IPv6만 사용하는 경우에는 구성을 편집하여 ip6tables 명령만 포함하도록 합니다. ufw 라인은 IPv4와 IPv6 네트워크의 모든 조합에 대해 존재해야 합니다. 완료하면 파일을 저장하고 닫으십시오.

WireGuard 서버의 방화벽 구성의 마지막 부분은 WireGuard UDP 포트 자체로의 트래픽을 허용하는 것입니다. 서버의 /etc/wireguard/wg0.conf 파일에서 포트를 변경하지 않았다면, 열 포트는 51820입니다. 구성을 편집할 때 다른 포트를 선택한 경우에는 다음 UFW 명령에 대체해야 합니다.

전제 조건 튜토리얼을 따를 때 SSH 포트를 열지 않았다면 여기에 추가하십시오:

  1. sudo ufw allow 51820/udp
  2. sudo ufw allow OpenSSH

참고: 다른 방화벽을 사용하거나 UFW 구성을 사용자 지정한 경우 추가 방화벽 규칙을 추가해야 할 수 있습니다. 예를 들어, VPN 연결을 통해 모든 네트워크 트래픽을 터널링하기로 결정한 경우 DNS 요청에 대한 포트 53 트래픽이 허용되어야 하며, HTTP 및 HTTPS 트래픽에 대한 포트 80443과 같은 포트도 포함됩니다. VPN을 통해 사용하는 다른 프로토콜이 있는 경우 해당 규칙을 추가해야 합니다.

이러한 규칙을 추가한 후에는 UFW를 비활성화하고 다시 활성화하여 모든 수정한 파일에서 변경 사항을 다시로드합니다:

  1. sudo ufw disable
  2. sudo ufw enable

규칙이 적용되었는지 확인하려면 ufw status 명령을 실행하여 확인할 수 있습니다. 실행하면 다음과 유사한 출력을 받아야 합니다:

  1. sudo ufw status
Output
Status: active To Action From -- ------ ---- 51280/udp ALLOW Anywhere 22/tcp ALLOW Anywhere 51280/udp (v6) ALLOW Anywhere (v6) 22/tcp (v6) ALLOW Anywhere (v6)

WireGuard 서버는 이제 VPN 트래픽을 올바르게 처리하도록 구성되어 있으며, 피어를 위한 전달 및 마스커레이드도 포함되어 있습니다. 방화벽 규칙이 설정되어 있으므로 WireGuard 서비스 자체를 시작하여 피어 연결을 수신할 수 있습니다.

단계 6 — WireGuard 서버 시작

WireGuard는 내장된 wg-quick 스크립트를 사용하여 systemd 서비스로 실행되도록 구성할 수 있습니다. VPN을 사용할 때마다 터널을 수동으로 만들 수는 있지만, 이렇게 하면 반복적이고 오류가 발생하기 쉬운 수동 프로세스가 됩니다. 대신 systemctl을 사용하여 wg-quick 스크립트의 도움을 받아 터널을 관리할 수 있습니다.

systemd 서비스를 사용하면 서버가 실행 중인 한 부팅 시 WireGuard를 시작할 수 있도록 구성할 수 있습니다. 이를 위해 systemctlwg0 터널에 대한 wg-quick 서비스를 활성화하세요:

  1. sudo systemctl enable [email protected]

명령에서 터널 이름 wg0 장치 이름을 서비스 이름의 일부로 지정한다는 것에 유의하세요. 이 이름은 /etc/wireguard/wg0.conf 구성 파일에 매핑됩니다. 이러한 이름 짓는 방식을 사용하면 서버를 사용하여 원하는만큼 많은 별도의 VPN 터널을 생성할 수 있습니다.

예를 들어, 터널 장치를 가지고 있고 이름을 prod로 지정하면 설정 파일은 /etc/wireguard/prod.conf가 됩니다. 각 터널 구성은 다른 IPv4, IPv6 및 클라이언트 방화벽 설정을 포함할 수 있습니다. 이렇게 함으로써 여러 다른 피어 연결을 지원할 수 있으며 각각 고유한 IP 주소와 라우팅 규칙을 가질 수 있습니다.

이제 서비스를 시작하세요:

  1. sudo systemctl start [email protected]

다음 명령을 사용하여 WireGuard 서비스가 활성화되었는지 확인합니다. 출력에서 active (running)을 볼 수 있어야 합니다:

  1. sudo systemctl status [email protected]
Output
[email protected] - WireGuard via wg-quick(8) for wg0 Loaded: loaded (/lib/systemd/system/[email protected]; enabled; vendor preset: enabled) Active: active (exited) since Mon 2022-04-18 17:22:13 UTC; 2s ago Docs: man:wg-quick(8) man:wg(8) https://www.wireguard.com/ https://www.wireguard.com/quickstart/ https://git.zx2c4.com/wireguard-tools/about/src/man/wg-quick.8 https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8 Process: 98834 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=0/SUCCESS) Main PID: 98834 (code=exited, status=0/SUCCESS) CPU: 193ms Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] wg setconf wg0 /dev/fd/63 Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip -4 address add 10.8.0.1/24 dev wg0 Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip -6 address add fd24:609a:6c18::1/64 dev wg0 Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip link set mtu 1420 up dev wg0 Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ufw route allow in on wg0 out on ens3 Apr 18 17:22:13 thats-my-jam wg-quick[98890]: Rule added Apr 18 17:22:13 thats-my-jam wg-quick[98890]: Rule added (v6) Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] iptables -t nat -I POSTROUTING -o ens3 -j MASQUERADE Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip6tables -t nat -I POSTROUTING -o ens3 -j MASQUERADE Apr 18 17:22:13 thats-my-jam systemd[1]: Finished WireGuard via wg-quick(8) for wg0.

출력에는 가상 wg0 장치를 생성하고 구성 파일에 추가한 IPv4 및 IPv6 주소를 할당하는 데 사용되는 ip 명령이 표시됩니다. 이러한 규칙을 사용하여 터널을 문제 해결하거나 VPN 인터페이스를 수동으로 구성하려면 wg 명령을 사용할 수 있습니다.

서버를 구성하고 실행한 후, 다음 단계는 클라이언트 컴퓨터를 WireGuard 피어로 구성하고 WireGuard 서버에 연결하는 것입니다.

단계 7 — WireGuard 피어 구성

WireGuard 피어를 구성하는 것은 WireGuard 서버를 설정하는 것과 유사합니다. 클라이언트 소프트웨어를 설치한 후에는 공개 및 개인 키 쌍을 생성하고 피어를 위해 IP 주소 또는 주소를 정하고 피어를 위한 구성 파일을 정의한 다음 wg-quick 스크립트를 사용하여 터널을 시작합니다.

VPN에 동료를 추가하려면 키 쌍을 생성하고 다음 단계를 사용하여 구성을 생성하십시오. VPN에 여러 동료를 추가하는 경우 충돌을 방지하기 위해 동료의 개인 IP 주소를 추적하십시오.

WireGuard 피어를 구성하려면 다음 apt 명령을 사용하여 WireGuard 패키지가 설치되어 있는지 확인하십시오. WireGuard 피어에서 다음을 실행하십시오:

  1. sudo apt update
  2. sudo apt install wireguard

WireGuard 피어의 키 쌍 생성

다음으로, 서버에서 사용한 것과 동일한 단계를 사용하여 피어에서 키 쌍을 생성해야 합니다. 피어로 사용할 로컬 머신 또는 원격 서버에서 다음 명령을 사용하여 피어의 개인 키를 생성하십시오:

  1. wg genkey | sudo tee /etc/wireguard/private.key
  2. sudo chmod go= /etc/wireguard/private.key

다시 한 번 base64로 인코딩된 출력의 단일 행을 받게 되는데, 이는 개인 키입니다. 출력의 사본은 또한 /etc/wireguard/private.key에 저장됩니다. 출력에서 출력되는 개인 키에 주의하여이 섹션의 나중에 WireGuard의 구성 파일에 추가해야 합니다.

다음 명령을 사용하여 공개 키 파일을 만드십시오:

  1. sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key

다시 한 번 base64로 인코딩된 출력의 단일 행을 받게 되는데, 이는 WireGuard 피어의 공개 키입니다. 암호화된 연결을 설정하기 위해 공개 키를 WireGuard 서버에 배포해야 하므로 참조용으로 어딘가에 복사하십시오.

WireGuard 피어 구성 파일 만들기

이제 키 쌍이 준비되었으므로 WireGuard 서버에 연결을 설정하는 데 필요한 모든 정보가 포함된 피어용 구성 파일을 만들 수 있습니다.

구성 파일에는 몇 가지 정보가 필요합니다:

  • 피어에서 생성한 base64 인코딩된 개인 키

  • WireGuard 서버에서 정의한 IPv4 및 IPv6 주소 범위

  • WireGuard 서버의 base64 인코딩된 공개 키

  • WireGuard 서버의 공용 IP 주소 및 포트 번호. 일반적으로 이는 IPv4 주소가 될 것이지만, 서버가 IPv6 주소를 가지고 있고 클라이언트 기기가 인터넷에 IPv6 연결을 가지고 있는 경우 IPv4 대신에 이를 사용할 수 있습니다.

모든 이 정보를 갖고, 원하는 편집기를 사용하여 WireGuard 피어 머신에서 새로운 /etc/wireguard/wg0.conf 파일을 엽니다:

  1. sudo nano /etc/wireguard/wg0.conf

다음 줄을 파일에 추가하고, 필요한 경우 각 부분에 다양한 데이터를 대체합니다:

/etc/wireguard/wg0.conf
[Interface] PrivateKey = base64_encoded_peer_private_key_goes_here Address = 10.8.0.2/24 Address = fd24:609a:6c18::2/64 [Peer] PublicKey = U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE= AllowedIPs = 10.8.0.0/24, fd24:609a:6c18::/64 Endpoint = 203.0.113.1:51820

첫 번째 Address 줄이 이전에 선택한 10.8.0.0/24 서브넷에서의 IPv4 주소를 사용하는 방법에 주목하세요. 이 IP 주소는 서버의 IP와 다르면서 서브넷 내에서 아무거나여도 상관없습니다. 각 피어를 추가할 때마다 주소를 1씩 증가시키는 것이 IP를 할당하는 가장 쉬운 방법입니다.

마찬가지로, 두 번째 Address 줄이 이전에 생성한 서브넷에서의 IPv6 주소를 사용하고, 서버의 주소를 1씩 증가시킵니다. 다른 주소를 사용하기로 결정하면 범위 내의 아무 IP도 유효합니다.

파일의 다른 주목할만한 부분은 마지막 AllowedIPs 줄입니다. 이 두 IPv4 및 IPv6 범위는 피어에게 VPN을 통해 트래픽을 보내도록 지시합니다. 대상 시스템의 IP 주소가 양쪽 범위 중 하나에 속할 경우에만. AllowedIPs 지시문을 사용하여 피어에서 VPN을 다른 피어와 서비스에만 연결하도록 제한할 수 있거나, 모든 트래픽을 VPN을 통해 터널링하고 WireGuard 서버를 게이트웨이로 사용하도록 설정할 수 있습니다.

IPv4만 사용하는 경우, 나머지 fd24:609a:6c18::/64 범위(쉼표 ,를 포함하여)를 생략하세요. 반대로, IPv6만 사용하는 경우에는 fd24:609a:6c18::/64 접두사만 포함하고 10.8.0.0/24 IPv4 범위를 빼세요.

양쪽 경우 모두 피어의 모든 트래픽을 VPN을 통해 보내고 WireGuard 서버를 모든 트래픽의 게이트웨이로 사용하려면 전체 IPv4 주소 공간을 나타내는 0.0.0.0/0과 전체 IPv6 주소 공간을 나타내는 ::/0을 사용할 수 있습니다.

(선택 사항) 터널을 통해 모든 트래픽을 라우팅하는 피어 구성

피어의 모든 트래픽을 0.0.0.0/0 또는 ::/0 경로를 사용하여 터널을 통해 라우팅하도록 선택한 경우, 그리고 피어가 원격 시스템인 경우 이 섹션의 단계를 완료해야 합니다. 피어가 로컬 시스템인 경우에는 이 섹션을 건너뛰는 것이 좋습니다.

공용 IP 주소를 사용하여 SSH 또는 기타 프로토콜을 통해 액세스하는 원격 피어의 경우, 피어의 wg0.conf 파일에 몇 가지 추가 규칙을 추가해야 합니다. 이러한 규칙을 추가하면 터널이 연결된 상태에서도 시스템에 외부에서 연결할 수 있도록 보장됩니다. 그렇지 않으면 터널이 설정되면 일반적으로 공용 네트워크 인터페이스에서 처리되는 모든 트래픽이 올바르게 wg0 터널 인터페이스를 우회하여 라우팅되지 않아 원격 시스템에 액세스할 수 없게 됩니다.

먼저 시스템이 기본 게이트웨이로 사용하는 IP 주소를 결정해야 합니다. 다음 ip route 명령을 실행합니다:

  1. ip route list table main default

다음과 같은 출력을 받게 될 것입니다:

Output
default via 203.0.113.1 dev eth0 proto static

게이트웨이의 강조된 IP 주소 203.0.113.1를 나중에 사용할 수 있도록 참고하고 장치 eth0를 찾으십시오. 장치 이름이 다를 수 있습니다. 그렇다면 다음 명령어에서 eth0의 자리에 대체하십시오.

다음은 시스템의 공용 IP를 찾는 방법입니다. ip address show 명령어로 장치를 검사합니다:

  1. ip -brief address show eth0

다음과 같은 출력을 받게 됩니다:

Output
eth0 UP 203.0.113.5/20 10.20.30.40/16 2604:a880:400:d1::3d3:6001/64 fe80::68d5:beff:feff:974c/64

이 예제 출력에서 강조된 203.0.113.5 IP(마지막의 /20을 제외한)는 eth0 장치에 할당된 공용 주소로, WireGuard 구성에 추가해야 할 것입니다.

이제 WireGuard 피어의 /etc/wireguard/wg0.conf 파일을 nano 또는 선호하는 편집기로 엽니다.

  1. sudo nano /etc/wireguard/wg0.conf

[Peer] 라인 앞에 다음 4 줄을 추가하십시오:

PostUp = ip rule add table 200 from 203.0.113.5
PostUp = ip route add table 200 default via 203.0.113.1
PreDown = ip rule delete table 200 from 203.0.113.5
PreDown = ip route delete table 200 default via 203.0.113.1

[Peer]
. . .

이러한 줄은 사용자 정의 경로 규칙을 생성하고 시스템의 공용 트래픽이 기본 게이트웨이를 사용하도록 사용자 정의 경로를 추가합니다.

  • PostUp = ip rule add table 200 from 203.0.113.5 – 이 명령어는 시스템의 공용 203.0.113.5 주소와 일치하는 경우 테이블 번호가 200인 테이블에 대한 라우팅 항목을 확인하는 규칙을 생성합니다.
  • PostUp = ip route add table 200 default via 203.0.113.1 – 이 명령은 200 테이블에서 처리되는 모든 트래픽이 WireGuard 인터페이스 대신 라우팅에 203.0.113.1 게이트웨이를 사용하도록 보장합니다.

PreDown 라인은 터널이 종료될 때 사용자 정의 규칙과 경로를 제거합니다.

참고: 이러한 규칙을 구성할 때 테이블 번호 200은 임의로 지정됩니다. 2에서 252 사이의 값을 사용하거나 /etc/iproute2/rt_tables 파일에 레이블을 추가하여 숫자 값 대신 이름을 참조할 수 있습니다.

Linux에서 라우팅 테이블이 작동하는 방법에 대한 자세한 내용은 리눅스 IP 레이어 네트워크 관리 가이드라우팅 테이블 섹션을 참조하십시오.

VPN을 통해 모든 피어의 트래픽을 라우팅하는 경우, 단계 4 – WireGuard 서버 네트워크 구성 조정단계 5 – WireGuard 서버 방화벽 구성에서 올바른 sysctliptables 규칙을 구성했는지 확인하십시오.

(선택 사항) WireGuard 피어의 DNS 리졸버 구성

만약 WireGuard 서버를 VPN 게이트웨이로 사용하여 피어의 모든 트래픽을 라우팅하는 경우, [Interface] 섹션에 DNS 리졸버를 지정하는 줄을 추가해야 합니다. 이 설정을 추가하지 않으면 VPN에 의해 DNS 요청이 안전하게 보호되지 않을 수 있으며, 인터넷 서비스 제공업체(ISP)나 기타 제3자에게 노출될 수 있습니다.

만약 WireGuard를 VPN 네트워크의 리소스에 액세스하거나 피어 간 구성으로만 사용하는 경우 이 섹션을 건너뛸 수 있습니다.

피어의 구성에 DNS 리졸버를 추가하려면 먼저 WireGuard 서버가 사용하는 DNS 서버를 확인해야 합니다. 다음 명령을 WireGuard 서버에서 실행하십시오. eth0을(를) 이 예제와 다른 경우 이더넷 장치 이름으로 바꿉니다:

  1. resolvectl dns eth0

다음과 같은 출력을 받아야 합니다:

Output
Link 2 (eth0): 67.207.67.2 67.207.67.3 2001:4860:4860::8844 2001:4860:4860::8888

출력된 IP 주소는 서버가 사용하는 DNS 리졸버입니다. 필요에 따라 그 중 하나 이상을 선택하거나 IPv4 또는 IPv6만 사용할 수 있습니다. 사용할 리졸버를 메모해 두세요.

다음으로 선택한 리졸버를 WireGuard 피어의 구성 파일에 추가해야 합니다. 다시 WireGuard 피어로 돌아가서 /etc/wireguard/wg0.conf 파일을 nano 또는 선호하는 편집기를 사용하여 엽니다:

  1. sudo nano /etc/wireguard/wg0.conf

[Peer] 줄 앞에 다음을 추가하십시오:

DNS = 67.207.67.2 2001:4860:4860::8844

[Peer]
. . .

다시 한번, IPv4와 IPv6에 대한 선호도나 요구 사항에 따라 필요에 따라 목록을 편집할 수 있습니다.

다음 단계에서 VPN에 연결되면 DNS leak test.com과 같은 사이트를 사용하여 VPN을 통해 DNS 쿼리를 보내는지 확인할 수 있습니다.

또한 서버에서 실행한 것과 같이 resolvectl dns 명령을 사용하여 동료가 구성된 리졸버를 사용하는지 확인할 수 있습니다. 다음과 같은 출력을 받아야 합니다. 이 출력은 VPN 터널에 구성한 DNS 리졸버를 보여줍니다:

Output
Global: 67.207.67.2 67.207.67.3 . . .

이러한 DNS 리졸버 설정이 모두 완료되었으므로 이제 동료의 공개 키를 서버에 추가한 다음 동료에서 WireGuard 터널을 시작할 준비가 되었습니다.

단계 8 — WireGuard 서버에 동료의 공개 키 추가

동료를 서버에 연결하기 전에 WireGuard 서버에 동료의 공개 키를 추가하는 것이 중요합니다. 이 단계를 완료하면 VPN을 통해 트래픽을 라우팅하고 연결할 수 있게 됩니다. 이 단계를 완료하지 않으면 WireGuard 서버가 터널을 통해 트래픽을 보내거나 받도록 동료를 허용하지 않습니다.

WireGuard 피어의 base64로 인코딩된 공개 키 사본이 있는지 확인하려면 다음을 실행합니다:

  1. sudo cat /etc/wireguard/public.key
Output
PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=

이제 WireGuard 서버에 로그인한 후 다음 명령을 실행하세요:

  1. sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,fd24:609a:6c18::2

주의하세요. 명령의 allowed-ips 부분은 쉼표로 구분된 IPv4 및 IPv6 주소 목록을 사용합니다. 피어가 할당할 수 있는 IP 주소를 제한하려면 개별 IP를 지정하거나, VPN 범위 내에서 피어가 모든 IP 주소를 사용할 수 있는 경우와 같이 범위를 지정할 수 있습니다. 또한 두 개 이상의 피어가 동일한 allowed-ips 설정을 가질 수 없음을 유의하십시오.

기존 피어의 allowed-ips를 업데이트하려면 동일한 명령을 다시 실행하여 IP 주소를 변경할 수 있습니다. 여러 IP 주소가 지원됩니다. 예를 들어 방금 추가한 WireGuard 피어에 대해 10.8.0.2fd24:609a:6c18::2 IP에 10.8.0.100과 같은 IP를 추가하려면 다음을 실행합니다:

  1. sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,10.8.0.100,fd24:609a:6c18::2

피어를 추가하는 명령을 실행한 후 서버에서 터널 상태를 wg 명령을 사용하여 확인합니다:

  1. sudo wg
Output
interface: wg0 public key: U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE= private key: (hidden) listening port: 51820 peer: PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed ips: 10.8.0.2/32, fd24:609a:6c18::/128

peer 줄이 WireGuard 피어의 공개 키와 허용된 IP 주소 또는 주소 범위를 보여줍니다.

이제 서버에 피어의 연결 매개변수를 정의했으므로 다음 단계는 피어에서 터널을 시작하는 것입니다.

단계 9 — WireGuard 피어를 터널에 연결하기

이제 서버와 피어가 모두 IPv4, IPv6, 패킷 전달 및 DNS 해결을 지원하도록 구성되었으므로 VPN 터널에 피어를 연결할 시간입니다.

VPN을 특정 사용 사례에만 사용하고자 할 수 있으므로 연결을 수동으로 설정하기 위해 wg-quick 명령을 사용할 것입니다. 서버에서 수행한 것처럼 터널을 시작을 자동화하려면 단계 6 — WireGuard 서버 시작 섹션의 단계를 따르십시오. 그렇지 않으면 wq-quick 명령을 사용하세요.

모든 트래픽을 VPN을 통해 라우팅하고 DNS 전달을 설정한 경우 VPN 피어에 resolvconf 유틸리티를 설치해야합니다. 다음 명령을 실행하여 이를 설정하십시오:

  1. sudo apt install resolvconf

터널을 시작하려면 VPN 피어에서 다음을 실행하십시오:

  1. sudo wg-quick up wg0

다음과 같은 출력이 표시됩니다:

Output
[#] ip link add wg0 type wireguard [#] wg setconf wg0 /dev/fd/63 [#] ip -4 address add 10.8.0.2/24 dev wg0 [#] ip -6 address add fd24:609a:6c18::2/64 dev wg0 [#] ip link set mtu 1420 up dev wg0 [#] resolvconf -a tun.wg0 -m 0 -x

할당한 IPv4 및 IPv6 주소를 강조 표시한 것에 주목하십시오.

피어에서 AllowedIPs0.0.0.0/0::/0 (또는 VPN에 대해 선택한 것과 다른 범위를 사용)로 설정한 경우 출력은 다음과 유사합니다:

Output
[#] ip link add wg0 type wireguard [#] wg setconf wg0 /dev/fd/63 [#] ip -4 address add 10.8.0.2/24 dev wg0 [#] ip -6 address add fd24:609a:6c18::2/64 dev wg0 [#] ip link set mtu 1420 up dev wg0 [#] resolvconf -a tun.wg0 -m 0 -x [#] wg set wg0 fwmark 51820 [#] ip -6 route add ::/0 dev wg0 table 51820 [#] ip -6 rule add not fwmark 51820 table 51820 [#] ip -6 rule add table main suppress_prefixlength 0 [#] ip6tables-restore -n [#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820 [#] ip -4 rule add not fwmark 51820 table 51820 [#] ip -4 rule add table main suppress_prefixlength 0 [#] sysctl -q net.ipv4.conf.all.src_valid_mark=1 [#] iptables-restore -n

이 예에서 명령이 추가한 강조 표시된 경로에 주목하십시오. 이는 피어 구성의 AllowedIPs에 해당합니다.

wg 명령을 사용하여 피어에서 터널의 상태를 확인할 수 있습니다:

  1. sudo wg
Output
interface: wg0 public key: PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= private key: (hidden) listening port: 49338 fwmark: 0xca6c peer: U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE= endpoint: 203.0.113.1:51820 allowed ips: 10.8.0.0/24, fd24:609a:6c18::/64 latest handshake: 1 second ago transfer: 6.50 KiB received, 15.41 KiB sent

서버에서도 상태를 다시 확인할 수 있으며 유사한 출력을 받게 됩니다.

동료가 VPN을 사용하는지 확인하려면 ip routeip -6 route 명령을 사용하십시오. 모든 인터넷 트래픽에 대한 게이트웨이로 VPN을 사용하는 경우 CloudFlare의 1.1.1.12606:4700:4700::1111 DNS 리졸버로 전송되는 트래픽에 사용되는 인터페이스를 확인하십시오.

VPN을 사용하여 VPN에 액세스하는 경우 게이트웨이 자체와 같은 유효한 IPv4 또는 IPv6 주소를 이러한 명령에 대체하십시오. 예를 들어 10.8.0.1 또는 fd24:609a:6c18::1.

  1. ip route get 1.1.1.1
Output
1.1.1.1 dev wg0 table 51820 src 10.8.0.2 uid 1000 cache

wg0 디바이스가 사용되고 동료에 할당된 IPv4 주소 10.8.0.2를 참고하십시오. 마찬가지로 IPv6를 사용하는 경우 다음을 실행하십시오:

  1. ip -6 route get 2606:4700:4700::1111
Output
2606:4700:4700::1111 from :: dev wg0 table 51820 src fd24:609a:6c18::2 metric 1024 pref medium

다시 한번 wg0 인터페이스 및 동료에 할당된 IPv6 주소 fd24:609a:6c18::2를 주의하십시오.

동료에 브라우저가 설치되어 있는 경우 VPN을 통해 트래픽을 라우팅하는지 확인하기 위해 ipleak.netipv6-test.com을 방문할 수도 있습니다.

동료에서 VPN 연결을 해제하려면 준비가 되면 wg-quick 명령을 사용하십시오:

  1. sudo wg-quick down wg0

VPN 터널이 닫혔음을 나타내는 다음과 같은 출력을 받게 됩니다:

Output
[#] ip link delete dev wg0 [#] resolvconf -d tun.wg0 -f

동료의 AllowedIPs0.0.0.0/0::/0 (또는 VPN에 선택한 것과 다른 범위를 사용하도록 설정한 경우)로 설정한 경우 출력이 다음과 같이 나타납니다:

Output
[#] ip rule delete table 200 from 203.0.113.5 [#] ip route delete table 200 default via 203.0.113.1 [#] ip -4 rule delete table 51820 [#] ip -4 rule delete table main suppress_prefixlength 0 [#] ip -6 rule delete table 51820 [#] ip -6 rule delete table main suppress_prefixlength 0 [#] ip link delete dev wg0 [#] resolvconf -d tun.wg0 -f [#] iptables-restore -n [#] ip6tables-restore -n

VPN에 다시 연결하려면 피어에서 다시 wg-quick up wg0 명령을 실행하십시오. WireGuard 서버에서 피어의 구성을 완전히 제거하려면 원하는 피어의 공개 키를 올바르게 대체하여 다음 명령을 실행할 수 있습니다:

  1. sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= remove

일반적으로 피어가 더 이상 존재하지 않거나 그 암호화 키가 노출되거나 변경된 경우에만 피어 구성을 제거해야 합니다. 그렇지 않으면 매번 키와 allowed-ips를 추가하지 않고도 피어가 VPN에 다시 연결할 수 있도록 구성을 그대로 두는 것이 좋습니다.

결론

이 튜토리얼에서는 서버와 클라이언트 Ubuntu 22.04 시스템에 WireGuard 패키지와 도구를 설치했습니다. WireGuard를 위한 방화벽 규칙을 설정하고, 서버에서 sysctl 명령을 사용하여 패킷 전달을 허용할 수 있도록 커널 설정을 구성했습니다. 프라이빗 및 퍼블릭 WireGuard 암호화 키를 생성하고, 서버 및 피어(또는 피어들)가 서로 연결되도록 구성하는 방법을 배웠습니다.

네트워크가 IPv6를 사용하는 경우 피어 연결에 사용할 고유한 로컬 주소 범위를 생성하는 방법도 배웠습니다. 마지막으로, 피어가 사용할 수 있는 네트워크 접두사를 제한하여 VPN을 통해 전송해야 할 트래픽을 제한하는 방법과 피어를 위해 모든 인터넷 트래픽을 처리하는 VPN 게이트웨이로 WireGuard 서버를 사용하는 방법을 배웠습니다.

WireGuard에 대해 더 알고 싶으시다면, 더 고급 터널을 구성하는 방법이나 컨테이너와 함께 WireGuard를 사용하는 방법을 알아보려면 공식 WireGuard 문서를 방문하십시오.

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-wireguard-on-ubuntu-22-04