SW/리눅스

Linux : CentOS 8 : WireGuard VPN 설정 방법, 예제, 명령어

얇은생각 2022. 9. 17. 07:30
반응형

와이어가드는 최신 암호화 기술을 갖춘 단순하고 현대적인 VPN(Virtual Private Network)입니다. IPsec 및 OpenVPN과 같은 유사한 다른 솔루션보다 빠르고 구성하기 쉬우며 성능이 뛰어납니다.

WirGuard는 교차 플랫폼으로 Linux, Windows, Android 및 macOS를 포함한 거의 모든 곳에서 실행할 수 있습니다. Wireguard는 클라이언트-서버 모델을 기반으로 하지 않는 피어 투 피어 VPN입니다. 피어의 구성에 따라 피어는 기존 서버 또는 클라이언트로 작동할 수 있습니다.

WirGuard는 터널로 작동하는 각 피어 장치에서 네트워크 인터페이스를 만드는 방식으로 작동합니다. 피어는 SSH 모델을 모방하여 공개 키를 교환 및 검증하여 서로를 인증합니다. 공개 키는 터널에서 허용되는 IP 주소 목록과 매핑됩니다. VPN 트래픽은 UDP로 캡슐화됩니다.

이 튜토리얼에서는 WirGuard를 설정하는 방법을 설명합니다.VPN 서버 역할을 할 CentOS 8 시스템입니다. 또한 WireGuard를 클라이언트로 구성하는 방법도 보여드리겠습니다. 클라이언트의 트래픽이 CentOS 8를 통해 라우팅됩니다. 이 설정은 Man in the Middle 공격, 익명 웹 서핑, 지역 제한 콘텐츠 무시 또는 재택 근무 동료가 회사 네트워크에 안전하게 연결할 수 있도록 하는 보호 수단으로 사용할 수 있습니다.

 

 

 

필수 구성 요소

sudo 권한으로 루트 또는 계정으로 액세스할 수 있는 CentOS 8 서버입니다.

 

 

 

WirelessGuard 서버를 설정

와이어가드를 설치하는 것부터 시작하겠습니다. CentOS 머신을 서버 역할을 하도록 설정합니다. 고객의 트래픽을 라우팅하도록 시스템을 구성할 것입니다.

 

 

 

CentOS 8에 WireGuard를 설치

WirelessGuard 도구 및 커널 모듈은 Epel 및 Elrepo 리포지토리에서 설치할 수 있습니다. 시스템에 리포지토리를 추가하려면 다음 명령을 실행합니다.

sudo dnf install epel-release elrepo-release

 

 

완료되면 다음과 같이 WirelessGuard 패키지를 설치합니다.

sudo dnf install kmod-wireguard wireguard-tools

 

 

리포지토리 GPG 키를 가져오라는 메시지가 표시될 수 있습니다. 메시지가 표시되면 y를 입력합니다.

 

 

 

WirGuard를 구성

wirguard-tools 패키지에는 WireGuard 인터페이스를 구성하고 관리할 수 있는 wg 및 wg-quick이라는 두 가지 명령줄 도구가 포함되어 있습니다.

VPN 서버 구성과 /etc/wireguard 디렉토리에 저장합니다. CentOS에서는 설치하는 동안 이 디렉터리가 생성되지 않습니다. 다음 명령을 실행하여 디렉토리를 생성합니다.

sudo mkdir /etc/wireguard

 

 

/etc/wireguard 디렉터리에 공개 키 및 개인 키를 생성합니다.

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

 

 

cat 이하와 함께 파일을 볼 수 있습니다. 개인 키는 절대 누구와도 공유해서는 안 됩니다.

이제 키가 생성되었으므로 다음 단계에서는 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     = firewall-cmd --zone=public --add-port 51820/udp && firewall-cmd --zone=public --add-masquerade
PostDown   = firewall-cmd --zone=public --remove-port 51820/udp && firewall-cmd --zon

 

 

인터페이스의 이름은 원하는 대로 지정할 수 있지만 wg0 또는 wgvpn0을 사용하는 것이 좋습니다. 인터페이스 섹션의 설정에는 다음과 같은 의미가 있습니다.

 

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

ListenPort - WireGuard가 들어오는 연결을 허용하는 포트입니다.

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

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

PostUp - 인터페이스를 시작하기 전에 실행되는 명령 또는 스크립트입니다. 이 예에서는 Firewall-cmd를 사용하여 WireGuard 포트를 열고 위장을 사용하도록 설정했습니다. 이렇게 하면 트래픽이 서버에서 나갈 수 있으므로 VPN 클라이언트가 인터넷에 액세스할 수 있습니다.

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

 

 

일반 사용자는 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 M

 

 

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

sudo wg show wg0

# interface: wg0
#   public key: My3uqg8LL9S3XZBo8alclOjiNkp+T6GfxS+Xhn5a40I=
#   private key: (hidden)
#   listening port: 51820

 

 

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

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

 

 

부팅 시 wg0 인터페이스를 가져오려면 다음 명령을 실행합니다.

sudo systemctl enable wg-quick@wg0

 

 

 

서버 네트워킹

NAT이 작동하려면 IP 전달을 활성화해야 합니다. 새 파일 /etc/sysctl.d/99-custom.conf를 생성하고 다음 줄을 추가하십시오.

# /etc/sysctl.d/99-custom.conf

net.ipv4.ip_forward=1

 

 

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

sudo sysctl -p /etc/sysctl.d/99-custom.conf

# net.ipv4.ip_forward = 1

 

 

 

 

Linux 및 macOS 클라이언트를 설정

지원되는 모든 플랫폼에 대한 설치 지침은 https://wireguard.com/install/에서 확인할 수 있습니다. Linux 시스템에서는 배포 패키지 관리자를 사용하고 macOS에서는 brew를 사용하여 패키지를 설치할 수 있습니다. WirGuard를 설치한 후 아래 단계에 따라 클라이언트 디바이스를 구성하십시오.

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/0을 사용하고 있습니다.

 

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

 

 

 

Windows 클라이언트 설치

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

설치 후, WirGuard 응용 프로그램을 열고 아래 이미지에 표시된 것처럼 "Add Tunnel" -> "Add empty tunnel..."을 클릭합니다.

Linux : CentOS 8 : WireGuard VPN 설정 방법, 예제, 명령어 1

 

 

 

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

Linux : CentOS 8 : 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 - CentOs의 공개 키(/etc/wireguard/publickey 파일)입니다.

Endpoint - CentOS의 IP 주소 뒤에 콜론이 있고 와이어가드 포트(51820)가 있습니다.

AllowedIPs - 0.0.0.0/0

 

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

 

 

 

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

마지막 단계는 클라이언트 공용 키와 IP 주소를 서버에 추가하는 것입니다.

sudo wg set wg0 peer CLIENT_PUBLIC_KEY allowed-ips 10.0.0.2

 

 

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

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

 

 

 

Linux 및 macOS 클라이언트

Linux 클라이언트의 경우 다음 명령을 실행하여 인터페이스를 불러옵니다.

sudo wg-quick up wg0

 

 

이제 CentOS에 연결되어 있어야 합니다. 클라이언트 컴퓨터의 트래픽이 CentOS 서버를 통해 라우팅되어야 합니다. 다음 항목과의 연결을 확인할 수 있습니다.

sudo wg

# interface: wg0
#   public key: sZThYo/0oECwzUsIKTa6LYXLhk+Jb/nqK4kCCP2pyFg=
#   private key: (hidden)
#   listening port: 60351
#   fwmark: 0xca6c
# 
# peer: My3uqg8LL9S3XZBo8alclOjiNkp+T6GfxS+Xhn5a40I=
#   endpoint: XXX.XXX.XXX.XXX:51820
#   allowed ips: 0.0.0.0/0
#   latest handshake: 41 seconds ago
#   transfer: 213.25 KiB received, 106.68 KiB sent

 

 

브라우저를 열고 "What is my ip"를 입력하면 CentOS 서버 IP 주소입니다.

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

sudo wg-quick down wg0

 

 

 

Windows 클라이언트

Windows에 WirGuard를 설치한 경우 "활성화" 단추를 클릭합니다. 피어가 연결되면 터널 상태가 활성으로 변경됩니다.

Linux : CentOS 8 : WireGuard VPN 설정 방법, 예제, 명령어 3

 

 

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

반응형