웹사이트 검색

Ubuntu 20.04에서 WireGuard VPN을 설정하는 방법


이 튜토리얼은 다음 OS 버전에 대해 존재합니다.

  • Ubuntu 22.04(Jammy Jellyfish)
  • Ubuntu 20.04(Focal Fossa)

이 페이지에서

  1. 전제 조건
  2. 시작하기\n
  3. WireGuard VPN 서버 설치
  4. WireGuard 서버 구성
  5. IP 전달 활성화\n
  6. WireGuard 클라이언트 설치 및 구성
  7. 결론

WireGuard는 단순성과 사용 편의성을 위해 설계된 보안 중심의 오픈 소스 가상 사설망입니다. Linux, macOS, Windows, BSD 및 Android를 포함한 다양한 운영 체제를 지원합니다. 소형 장치에서 고급 서버에 쉽게 배포할 수 있는 단순하고 범용적인 VPN입니다. 클라이언트-서버 모델 대신 포인트 투 포인트 VPN 서버입니다. 공개 키 교환 메커니즘을 사용하여 클라이언트를 인증합니다.

가볍고 빠른 VPN을 찾고 있다면 WireGuard VPN이 최선의 선택입니다. 이 튜토리얼에서는 Ubuntu 20.04에 WireGuard VPN 서버 및 클라이언트를 설치하는 방법을 보여줍니다.

전제 조건

  • Ubuntu 20.04 서버를 실행하는 두 개의 서버.\n
  • 루트 암호는 두 서버 모두에서 구성됩니다.\n

시작하기

먼저 시스템 패키지를 최신 버전으로 업데이트하는 것이 좋습니다. 다음 명령으로 업데이트할 수 있습니다.

apt-get update -y

모든 패키지가 업데이트되면 시스템에 Iptables를 설치해야 합니다. 다음 명령으로 설치할 수 있습니다.

apt-get install iptables -y

설치가 완료되면 다음 단계로 진행할 수 있습니다.

WireGuard VPN 서버 설치

기본적으로 WireGuard 패키지는 Ubuntu 20.04 기본 리포지토리에서 사용할 수 있습니다. 다음 명령을 실행하여 설치할 수 있습니다.

apt-get install wireguard -y

WireGuard 패키지가 설치되면 다음 단계로 진행할 수 있습니다.

WireGuard 서버 구성

WireGuard는 WireGuard 네트워크의 각 장치 간에 공개 키를 교환하여 작동합니다. 따라서 서버에 공개 키와 개인 키를 만들어야 합니다.

WireGuard는 wg 및 wg-quick 명령줄 유틸리티를 제공하여 키를 생성하고 인터페이스를 관리합니다.

다음 명령을 사용하여 공개 키와 개인 키를 모두 만들 수 있습니다.

wg genkey | tee /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey

두 키가 모두 생성되면 다음 명령으로 확인할 수 있습니다.

ls /etc/wireguard

다음 출력이 표시되어야 합니다.

privatekey  publickey

다음 명령을 사용하여 개인 키의 내용을 표시할 수 있습니다.

cat /etc/wireguard/privatekey

다음 출력이 표시되어야 합니다.

4M1l65NIaoR2+fQ6xVnIdwj6iVjsSPDkEMuzVnbFh3A=

다음 명령을 사용하여 공개 키의 내용을 표시할 수 있습니다.

cat /etc/wireguard/publickey

다음 출력이 표시되어야 합니다.

00Jsbppv/gVMy6oHMfFZ+T/eEFBAWVbiZo33HjQBSU4=

다음으로 WireGuard용 네트워크 인터페이스를 생성해야 합니다. 다음 명령으로 만들 수 있습니다.

nano /etc/wireguard/wg0.conf

다음 줄을 추가합니다.

[Interface]
Address = 10.0.0.1/24
SaveConfig = true
ListenPort = 51820
PrivateKey = server-private-key
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

완료되면 파일을 저장하고 닫습니다.

어디에:

  • Address : wg0 인터페이스의 사설 IP 주소입니다.
  • ListenPort : WireGuard의 수신 포트를 지정합니다.\n
  • PrivateKey : /etc/wireguard/privatekey 파일에 저장된 개인 키입니다.
  • PostUp : 트래픽이 서버를 떠나도록 허용하고 VPN 클라이언트가 인터넷에 액세스할 수 있도록 하는 명령을 지정합니다. 또한 eth0을 네트워크 인터페이스 이름으로 바꿉니다.\n

다음으로 privatekey 및 wg0 파일에 적절한 권한을 설정합니다.

chmod 600 /etc/wireguard/{privatekey,wg0.conf}

그런 다음 다음 명령을 실행하여 wg0 인터페이스를 활성화합니다.

wg-quick up wg0

다음 출력이 표시되어야 합니다.

[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.0.0.1/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

아래와 같이 systemd를 사용하여 WireGuard 서비스를 시작할 수도 있습니다.

systemctl start 

그런 다음 다음 명령을 사용하여 시스템 재부팅 시 WireGuard 서비스가 시작되도록 활성화합니다.

systemctl enable 

그런 다음 다음 명령을 사용하여 WireGuard 서비스의 상태를 확인합니다.

systemctl status 

다음 출력이 표시되어야 합니다.

?  - WireGuard via wg-quick(8) for wg0
     Loaded: loaded (/lib/systemd/system/; disabled; vendor preset: enabled)
     Active: active (exited) since Thu 2020-12-10 11:42:14 UTC; 7s 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: 2173 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=0/SUCCESS)
   Main PID: 2173 (code=exited, status=0/SUCCESS)

Dec 10 11:42:14 ubunt4 systemd[1]: Starting WireGuard via wg-quick(8) for wg0...
Dec 10 11:42:14 ubunt4 wg-quick[2173]: [#] ip link add wg0 type wireguard
Dec 10 11:42:14 ubunt4 wg-quick[2173]: [#] wg setconf wg0 /dev/fd/63
Dec 10 11:42:14 ubunt4 wg-quick[2173]: [#] ip -4 address add 10.0.0.1/24 dev wg0
Dec 10 11:42:14 ubunt4 wg-quick[2173]: [#] ip link set mtu 1420 up dev wg0
Dec 10 11:42:14 ubunt4 wg-quick[2173]: [#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Dec 10 11:42:14 ubunt4 systemd[1]: Finished WireGuard via wg-quick(8) for wg0.

다음 명령을 사용하여 wg0 인터페이스의 상태를 확인할 수도 있습니다.

wg show wg0

다음 출력이 표시되어야 합니다.

interface: wg0
  public key: 00Jsbppv/gVMy6oHMfFZ+T/eEFBAWVbiZo33HjQBSU4=
  private key: (hidden)
  listening port: 51820

다음 명령을 사용하여 wg0 인터페이스의 IP 주소 상태를 가져올 수 있습니다.

ip a show wg0

다음 출력이 표시되어야 합니다.

13: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none 
    inet 10.0.0.1/24 scope global wg0
       valid_lft forever preferred_lft forever

완료되면 다음 단계로 진행할 수 있습니다.

IP 포워딩 활성화

다음으로 VPN 클라이언트와 인터넷 간에 패킷을 라우팅하려면 서버에서 IP 전달을 활성화해야 합니다. /etc/sysctl.conf 파일을 편집하여 활성화할 수 있습니다.

nano /etc/sysctl.conf

다음 줄을 변경합니다.

net.ipv4.ip_forward=1

파일을 저장하고 닫은 후 다음 명령을 실행하여 구성 변경 사항을 적용합니다.

sysctl -p

완료되면 다음 단계로 진행할 수 있습니다.

WireGuard 클라이언트 설치 및 구성

먼저 클라이언트 컴퓨터에 WireGuard 패키지를 설치해야 합니다. 다음 명령으로 설치할 수 있습니다.

apt-get install wireguard -y

WireGuard 패키지를 설치한 후 다음 명령을 사용하여 개인 키와 공개 키를 만듭니다.

wg genkey | tee /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey

두 키가 모두 생성되면 새 구성 파일을 생성해야 합니다.

다음 명령으로 만들 수 있습니다.

nano /etc/wireguard/wg0.conf

다음 줄을 추가합니다.

[Interface]
PrivateKey = client-private-key
Address = 10.0.0.2/24

[Peer]
PublicKey = server-public-key
Endpoint = server-ip-address:51820
AllowedIPs = 0.0.0.0/0

완료되면 파일을 저장하고 닫습니다.

어디에:

  • Address : wg0 인터페이스의 사설 IP 주소입니다.
  • PrivateKey : 클라이언트 시스템의 개인 키를 지정합니다.\n
  • PublicKey : 서버 시스템의 공개 키를 지정합니다.\n
  • 엔드포인트 : 서버의 IP 주소를 지정합니다.\n
  • AllowedIPs : 허용된 IP 주소 목록을 지정합니다.\n

다음으로 서버 시스템에 클라이언트 공개 키와 IP 주소를 추가해야 합니다.

서버 시스템에서 다음 명령을 실행하여 둘 다 추가하십시오.

wg set wg0 peer client-public-key allowed-ips 10.0.0.2

다음으로 클라이언트 시스템에서 wg0 인터페이스를 불러와야 합니다.

클라이언트 시스템에서 다음 명령을 실행하여 인터페이스를 불러옵니다.

wg-quick up wg0

다음 출력이 표시되어야 합니다.

[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.0.0.2/24 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] wg set wg0 fwmark 51820

이 시점에서 클라이언트 시스템은 WireGuard VPN 서버에 연결됩니다. 다음 명령으로 연결 상태를 확인할 수 있습니다.

wg

다음 출력이 표시되어야 합니다.

interface: wg0
  public key: 3FXBDpAO4Vado1tDjLtVQt+JnOCa+W2piLeFYQ8KyB4=
  private key: (hidden)
  listening port: 38830
  fwmark: 0xca6c

peer: 00Jsbppv/gVMy6oHMfFZ+T/eEFBAWVbiZo33HjQBSU4=
  endpoint: 69.87.216.36:51820
  allowed ips: 0.0.0.0/0
  latest handshake: 41 seconds ago
  transfer: 5.27 KiB received, 12.97 KiB sent

결론

축하합니다! Ubuntu 20.04 서버에 WireGuard VPN 서버 및 클라이언트를 성공적으로 설치 및 구성했습니다. 이제 클라이언트 시스템의 트래픽은 서버 시스템을 통해 라우팅되어야 합니다. 이제 익명으로 인터넷을 서핑하고 데이터를 비공개로 유지할 수 있습니다. Linux tee 명령 가이드를 확인하세요.