SW/리눅스

Linux : Debian 10 : WireGuard VPN 설정 방법, 예제, 명령어

얇은생각 2023. 1. 20. 07:30
반응형

WireGuard는 최첨단 암호화 기술을 활용하는 범용 VPN(Virtual Private Network)입니다. IPsec 및 OpenVPN과 같이 널리 사용되는 다른 VPN 솔루션에 비해 WireGuard는 일반적으로 더 빠르고, 구성하기 쉬우며, 설치 공간이 더 작습니다. 크로스 플랫폼이며 Linux, Windows, Android 및 macOS를 포함한 거의 모든 곳에서 실행할 수 있습니다.

Wireguard는 피어 투 피어 VPN이며 클라이언트-서버 모델을 사용하지 않습니다. 구성에 따라 피어가 기존 서버 또는 클라이언트로 작동할 수 있습니다. 터널 역할을 하는 각 피어 장치에 네트워크 인터페이스를 생성하여 작동합니다. 피어는 SSH 모델을 모방하여 공용 키를 교환 및 검증하여 서로를 인증합니다. 공용 키는 터널에서 허용되는 IP 주소 목록과 함께 매핑됩니다. VPN 트래픽은 UDP로 캡슐화됩니다.

VPN 서버 역할을 할 Debian 10에 WireGuard를 설치하고 구성하는 방법을 설명합니다. 또한 Linux, Windows 및 macOS에서 WireGuard를 클라이언트로 구성하는 방법도 보여줍니다. 클라이언트의 트래픽은 Debian 10 서버를 통해 라우팅됩니다.

이 설정은 Man in the Middle 공격, 익명으로 웹 서핑, Geo 제한 콘텐츠 무시 또는 재택 근무 동료가 회사 네트워크에 안전하게 연결할 수 있도록 하는 보호 기능으로 사용할 수 있습니다.

 

 

 

전제 조건

이 가이드를 따르려면 데비안 10이 설치된 기계가 필요합니다. 패키지를 설치하고 시스템을 변경하려면 root 또는 sudo access도 필요합니다.

 

 

 

WireGuard 서버를 설정

먼저 Debian 기기에 WireGuard 패키지를 설치하고 서버 역할을 하도록 설정합니다. 또한 클라이언트의 트래픽을 라우팅하도록 시스템을 구성할 것입니다.

 

 

Debian 10에 와이어 가드를 설치

WireGuard는 Debian 백포트 리포지토리에서 사용할 수 있습니다. 시스템에 리포지토리를 추가하려면 다음을 실행합니다.

echo 'deb http://ftp.debian.org/debian buster-backports main' | sudo tee /etc/apt/sources.list.d/buster-backports.list

 

 

리포지토리가 활성화되면 적절한 캐시를 업데이트하고 WireGuard 모듈 및 도구를 설치합니다.

sudo apt update
sudo apt install wireguard

 

 

WireGuard는 커널 모듈로 실행됩니다.

 

 

 

와이어 가드를 구성

wg 및 wg-quick 명령줄 도구를 사용하여 WireGuard 인터페이스를 구성하고 관리할 수 있습니다.

WireGuard VPN 네트워크의 각 디바이스에는 개인 키와 공용 키가 있어야 합니다. 다음 명령을 실행하여 키 쌍을 생성합니다.

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

 

 

파일은 /etc/wireguard 디렉토리에 생성됩니다. cat 이하의 명령을 사용하여 파일 내용을 봅니다. 개인 키는 다른 사람과 공유해서는 안 되며 항상 안전하게 보관해야 합니다.

또한 Wireguard는 대칭 키 암호화 계층을 추가하는 사전 공유 키를 지원합니다. 이 키는 선택 사항이며 각 피어 쌍에 대해 고유해야 합니다.

다음 단계는 VPN 트래픽을 라우팅할 터널 장치를 구성하는 것입니다.

ip 및 wg 명령을 사용하거나 구성 파일을 수동으로 만들어 명령줄에서 장치를 설정할 수 있습니다. 텍스트 편집기를 사용하여 구성을 만듭니다.

편집기를 열고 다음 내용으로 wg0.conf라는 새 파일을 만듭니다.

# /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 ens3 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens

 

 

인터페이스의 이름을 원하는 대로 지정할 수 있습니다. 그러나 wg0 또는 wgvpn0과 같은 것을 사용하는 것이 좋습니다.

 

인터페이스 섹션의 설정에는 다음과 같은 뜻이 있습니다.

Address - wg0 인터페이스에 대한 v4 또는 v6 IP 주소의 쉼표로 구분된 목록입니다. 전용 네트워크용으로 예약된 범위(10.0.0/8, 172.16.0.0/12 또는 192.168.0.0/16)에서 IP 주소를 사용할 수 있습니다.

ListenProt - 수신 대기 포트입니다.

 PrivateKey - wggenkey 명령에 의해 생성된 개인 키입니다. (파일 형식의 내용을 보려면 sudo cat /etc/wireguard/privatekey)

 SaveConfig - true로 설정하면 종료 시 인터페이스의 현재 상태가 구성 파일에 저장됩니다.

PostUp - 인터페이스를 시작하기 전에 실행되는 명령 또는 스크립트입니다. 이 예에서는 iptables를 사용하여 위장 기능을 활성화하고 있습니다. 이렇게 하면 트래픽이 서버에서 나갈 수 있으므로 VPN 클라이언트는 인터넷에 액세스할 수 있습니다.

 

공용 네트워크 인터페이스의 이름과 일치하도록 -A POSTROUTING 뒤에 ens3을 교체해야 합니다. 다음과 같은 방법으로 인터페이스를 쉽게 찾을 수 있습니다.

ip -o -4 route show to default | awk '{print $5}'

 

 

PostDown - 인터페이스를 종료하기 전에 실행되는 명령 또는 스크립트입니다. 인터페이스가 중단되면 iptables 규칙이 제거됩니다.

wg0.conf 및 개인 키 파일은 일반 사용자가 읽을 수 없어야 합니다.

chmod를 사용하여 파일 권한을 600으로 설정합니다.

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

 

 

완료되면 구성 파일에 지정된 속성을 사용하여 wg0 인터페이스를 실행합니다.

sudo 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 ens3 -j

 

 

인터페이스 상태 및 구성을 확인하려면 다음을 실행합니다.

sudo wg show wg0

# interface: wg0
#   public key: +Vpyku+gjVJuXGR/OXXt6cmBKPdc06Qnm3hpRhMBtxs=
#   private key: (hidden)
#   listening port: 51820

 

 

ip a show wg0을 사용하여 인터페이스 상태를 확인할 수도 있습니다.

ip a show wg0

# 4: 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

 

 

와이어가드는 Systemd로 관리할 수 있습니다. 부팅 시 WireGuard 인터페이스를 가져오려면 다음 명령을 실행합니다.

sudo systemctl enable wg-quick@wg0

 

 

 

서버 네트워킹 및 방화벽 구성

NAT이 작동하려면 IP 전달을 사용하도록 설정해야 합니다. /etc/sysctl.conf 파일을 열고 다음 행을 추가하거나 주석을 해제합니다.

# /etc/sysctl.conf

net.ipv4.ip_forward=1

 

 

파일을 저장하고 변경 내용을 적용합니다.

sudo sysctl -p

# net.ipv4.ip_forward = 1

 

 

UFW를 사용하여 방화벽을 관리하는 경우 포트 51820에서 UDP 트래픽을 열어야 합니다.

sudo ufw allow 51820/udp

 

 

서버 역할을 할 Debian 피어가 설정되었습니다.

 

 

 

Linux 및 macOS 클라이언트 설정

지원되는 모든 플랫폼에 대한 설치 지침은 https://wireguard.com/install/에서 확인할 수 있습니다. Linux 시스템의 경우 배포 패키지 관리자를 사용하여 패키지를 설치할 수 있고 brew가 포함된 macOS에 설치할 수 있습니다.

설치가 완료되면 다음 단계에 따라 클라이언트 장치를 구성하십시오.

Linux 및 macOS 클라이언트를 설정하는 프로세스는 서버에 대해 설정한 프로세스와 거의 동일합니다. 먼저 공용 및 개인 키를 생성합니다.

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

 

 

wg0.conf 파일을 생성하고 다음 내용을 추가하십시오.

# /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 인터페이스에 대한 v4 또는 v6 IP 주소의 쉼표로 구분된 목록입니다.

PrivateKey - 클라이언트 컴퓨터의 파일 내용을 보려면 sudo cat /etc/wireguard/privatekey를 실행하십시오.

 

피어 섹션에는 다음 필드가 있습니다.

 PublicKey - 연결할 피어의 공용 키입니다. (서버의 /etc/wireguard/publickey 파일의 내용).

Endpoint - 연결할 피어의 IP 또는 호스트 이름, 콜론, 원격 피어가 수신하는 포트 번호 순으로 표시됩니다.

AllowedIPs: 피어에 대한 들어오는 트래픽이 허용되고 이 피어에 대한 나가는 트래픽이 전달되는 v4 또는 v6 IP 주소의 쉼표로 구분된 목록입니다. 트래픽을 라우팅하고 서버 피어가 임의의 소스 IP를 사용하여 패킷을 전송하기를 원하기 때문에 0.0.0/0을 사용합니다.

 

추가 클라이언트를 구성해야 하는 경우 다른 개인 IP 주소를 사용하여 동일한 단계를 반복하십시오.

 

 

 

Windows 클라이언트 설정

WireGuard 웹 사이트에서 Windows msi 패키지를 다운로드하여 설치합니다.

설치했으면, WireGuard 애플리케이션을 열고 아래 이미지와 같이 "터널 추가" -> "빈 터널 추가..."를 클릭합니다.

Linux : Debian 10 : WireGuard VPN 설정 방법, 예제, 명령어 1

 

 

공용 키 쌍이 자동으로 생성되어 화면에 표시됩니다.

Linux : Debian 10 : WireGuard VPN 설정 방법, 예제, 명령어 2

 

 

터널 이름을 입력하고 다음과 같이 구성을 편집합니다.

[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

 

 

인터페이스 섹션에서 새 줄을 추가하여 클라이언트 터널 주소를 정의합니다.

피어 섹션에서 다음 필드를 추가하십시오.

PublicKey - Debian 서버의 공용 키(/etc/wireguard/publickey 파일)입니다.

Endpoint - Debian 서버의 IP 주소 다음에 콜론 및 WireGuard 포트(51820)가 나옵니다.

AllowedIPs - 0.0.0.0/0입니다.

 

완료되면 "저장" 버튼을 클릭합니다.

 

 

 

서버에 클라이언트 피어를 추가

마지막 단계는 클라이언트의 공용 키 및 IP 주소를 서버에 추가하는 것입니다. 이렇게 하려면 Debian 서버에서 다음 명령을 실행하십시오.

sudo wg set wg0 peer CLIENT_PUBLIC_KEY allowed-ips 10.0.0.2

 

 

클라이언트 시스템에서 생성한 공개 키(sudo cat /etc/wireguard/publickey)로 CLIENT_PUBLIC_KEY를 변경하고 다른 경우 클라이언트 IP 주소를 조정합니다. Windows 사용자는 WireGuard 응용 프로그램에서 공용 키를 복사할 수 있습니다.

완료되면 클라이언트 시스템으로 돌아가 터널링 인터페이스를 시작합니다.

 

 

 

Linux 및 macOS 클라이언트

다음 명령을 실행하여 인터페이스를 시작합니다.

sudo wg-quick up wg0

 

 

이제 Debian 서버에 연결되고 클라이언트 시스템의 트래픽이 Debian 서버를 통해 라우팅되어야 합니다. 다음을 사용하여 연결을 확인할 수 있습니다.

sudo wg

# interface: wg0
#   public key: gFeK6A16ncnT1FG6fJhOCMPMeY4hZa97cZCNWis7cSo=
#   private key: (hidden)
#   listening port: 53527
#   fwmark: 0xca6c
# 
# peer: r3imyh3MCYggaZACmkx+CxlD6uAmICI8pe/PGq8+qCg=
#   endpoint: XXX.XXX.XXX.XXX:51820
#   allowed ips: 0.0.0.0/0
#   latest handshake: 53 seconds ago
#   transfer: 3.23 KiB received, 3.50 KiB sent

 

 

브라우저를 열고 "What is my ip"를 입력하면 데비안 서버 IP 주소가 표시됩니다.

터널링을 중지하려면 wg0 인터페이스를 중지합니다.

sudo wg-quick down wg0

 

 

 

Windows 클라이언트

Windows에 WireGuard를 설치한 경우 "Activate"(활성화) 버튼을 클릭합니다. 피어가 연결되면 터널 상태가 활성으로 변경됩니다.

Linux : Debian 10 : WireGuard VPN 설정 방법, 예제, 명령어 3

 

 

Debian 10에 WireGuard를 설치하고 VPN 서버로 구성하는 방법을 보여드렸습니다. 이 설정을 사용하면 트래픽 데이터를 비공개로 유지하여 익명으로 웹 서핑을 할 수 있습니다.

반응형