웹사이트 검색

CentOS 8에서 Wireguard VPN을 설정하는 방법


이 페이지에서

  1. 1단계 - 시스템 업데이트
  2. 2단계 - EPEL 저장소 설치 및 활성화\n
  3. 3단계 - Wireguard 설치
  4. 4단계 - Wireguard 서버 구성
  5. 5단계 - 방화벽 구성\n
  6. 6단계 - IPv4 포워딩 켜기
  7. 7단계 - Wireguard 서비스 활성화 및 시작\n
  8. 8단계 - WireGuard 클라이언트 설치 및 구성
  9. 9단계 - 클라이언트를 추가하도록 서버 구성\n
  10. 10단계 - 테스트
  11. 결론

Wireguard는 최신 암호화 기술을 사용하는 오픈 소스 교차 플랫폼 VPN 구현입니다. IPSec 및 OpenVPN 프로토콜보다 빠르고 간단하며 기능이 뛰어납니다. 임베디드 인터페이스와 슈퍼컴퓨터에서 실행되는 범용 VPN으로 설계되었으며 Linux, Windows, macOS, iOS, Android, BSD 및 기타 다양한 플랫폼에서 실행됩니다.

이 튜토리얼에서는 Wireguard VPN을 CentOS 8 기반 서버에 설치하고 Linux(CentOS/Fedora/Ubuntu) 클라이언트를 사용하여 연결하는 방법을 설명합니다.

1단계 - 시스템 업데이트

계속 진행하기 전에 시스템을 업데이트하여 최신 업데이트를 설치해야 합니다.

$ sudo dnf update

2단계 - EPEL 저장소 설치 및 활성화

필요한 Wireguard 패키지는 EPEL 저장소에서 찾을 수 있으므로 설치하고 활성화해야 합니다.

$ sudo dnf install epel-release
$ sudo dnf config-manager --set-enabled PowerTools

EPEL 패키지가 PowerTools 저장소에 의존하기 때문에 PowerTools 저장소도 활성화했습니다.

3단계 - Wireguard 설치

Wireguard 저장소를 활성화합니다.

$ sudo dnf copr enable jdoss/wireguard

와이어가드를 설치합니다.

$ sudo dnf install wireguard-dkms wireguard-tools

이 단계에서는 Linux 커널 모듈을 빌드하는 데 필요한 GNU GCC 컴파일러도 설치합니다.

4단계 - Wireguard 서버 구성

적절한 권한으로 Wireguard 설정을 위해 서버에 빈 구성 파일을 만듭니다.

$ sudo mkdir /etc/wireguard
$ sudo sh -c 'umask 077; touch /etc/wireguard/wg0.conf'

Touch 명령은 /etc/wireguard 디렉토리에 wg0-server.conf 파일을 생성합니다.

다음으로 Wireguard 서버에 대한 개인/공용 키 쌍을 만듭니다.

$ cd /etc/wireguard
$ sudo sh -c 'umask 077; wg genkey | tee privatekey | wg pubkey > publickey'

이렇게 하면 Wireguard에 대한 공개 키와 개인 키가 모두 생성되어 해당 파일에 기록됩니다.

방금 생성한 개인 키를 봅니다.

$ sudo cat privatekey

Wireguard를 구성하는 데 필요하므로 키를 기록하고 복사합니다.

다음으로 구성 파일을 편집합니다.

$ sudo nano /etc/wireguard/wg0.conf

다음 코드를 추가합니다.

[Interface]
## VPN server private IP address ##
Address = 192.168.10.1/24
 
## VPN server port - You can choose any port ##
ListenPort = 37822
 
## VPN server's private key i.e. /etc/wireguard/privatekey - the one from above ##
PrivateKey = GCEXafeZKqSsuLfvuHE+zLzMYwoH4qQyBh7MZ4f/3kM=
 
## Save and update this config file when a new peer (vpn client) added ##
SaveConfig = true

각 구성에는 서버 부분이 정의된 [Interface]라는 섹션이 하나 있습니다.

여기에는 로컬 WireGuard 서버의 개인 키, 들어오는 연결 및 자체 VPN IP 주소를 수신해야 하는 UDP 포트가 포함됩니다.

또한 SaveConfigtrue로 설정했습니다. 이렇게 하면 Wireguard 서비스가 종료 시 활성 구성을 이 파일에 자동으로 저장하도록 지시합니다.

Ctrl + W를 눌러 파일을 닫고 파일을 저장하라는 메시지가 표시되면 Y를 입력합니다.

5단계 - 방화벽 구성

Wireguard용으로 선택한 포트를 열어야 합니다.

먼저 방화벽에 대한 Wireguard 서비스를 정의해야 합니다. 그렇게 하려면 Nano 편집기로 wireguard.xml 파일을 만드십시오.

$ sudo nano /etc/firewalld/services/wireguard.xml

파일에 다음 코드를 붙여넣습니다.

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>wireguard</short>
  <description>WireGuard open UDP port 37822 for client connections</description>
  <port protocol="udp" port="37822"/>
</service>

Ctrl + W를 눌러 파일을 닫고 파일을 저장하라는 메시지가 표시되면 Y를 입력합니다.

그런 다음 방화벽에서 Wireguard 서비스를 활성화합니다.

$ sudo firewall-cmd --permanent --add-service=wireguard

가장을 켜서 192.168.10.0/24에서 들어오고 나가는 모든 트래픽이 서버 203.1.114.98/24의 공용 IP 주소를 통해 라우팅되도록 합니다.

$ sudo firewall-cmd --permanent --add-masquerade

마지막으로 방화벽을 다시 로드하여 규칙을 활성화합니다.

$ sudo firewall-cmd --reload

확인할 현재 방화벽 규칙을 나열합니다.

$ sudo firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: wireguard ssh
  ports: 
  protocols: 
  masquerade: yes
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

6단계 - IPv4 포워딩 켜기

/etc/sysctl.d/99-custom.conf 파일을 생성합니다.

$ sudo nano /etc/sysctl.d/99-custom.conf

파일에 다음 코드를 붙여넣습니다.

## Turn on bbr ##
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
 
## for IPv4 ##
net.ipv4.ip_forward = 1
 
## Turn on basic protection/security ##
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.tcp_syncookies = 1

## for IPv6 ##
net.ipv6.conf.all.forwarding = 1

Ctrl + W를 눌러 파일을 닫고 파일을 저장하라는 메시지가 표시되면 Y를 입력합니다.

위 파일의 코드 범위는 이 튜토리얼의 범위를 벗어나므로 지금은 그대로 사용하십시오.

변경 사항을 다시 로드합니다.

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

기본적으로 방화벽은 wg0eth0 인터페이스가 서로 통신하도록 허용하지 않습니다. 따라서 Wireguard 인터페이스를 내부 네트워크에 추가하고 매스커레이딩을 켜야 합니다.

$ sudo firewall-cmd --add-interface=wg0 --zone=internal
$ sudo firewall-cmd --permanent --zone=internal --add-masquerade

7단계 - Wireguard 서비스 활성화 및 시작

다음으로 Wireguard 서비스를 활성화하고 시작해야 합니다.

$ sudo systemctl enable 
$ sudo systemctl start 

다음 명령을 사용하여 Wireguard 인터페이스인 wg0이 실행 중인지 확인할 수 있습니다.

$ sudo wg
interface: wg0
  public key: VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI=
  private key: (hidden)
  listening port: 37822

$ sudo ip a show wg0
3: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none
    inet 192.168.10.1/24 scope global wg0
       valid_lft forever preferred_lft forever

8단계 - WireGuard 클라이언트 설치 및 구성

공식 설치 페이지에서 Linux 배포용 Wireguard 클라이언트 설치 지침을 찾을 수 있습니다.

클라이언트를 설치한 후에는 클라이언트 구성 파일을 생성해야 합니다.

$ sudo mkdir /etc/wireguard
$ sudo sh -c 'umask 077; touch /etc/wireguard/wg0.conf'
$ cd /etc/wireguard/
$ sudo sh -c 'umask 077; wg genkey | tee privatekey | wg pubkey > publickey'
$ sudo cat privatekey

마지막에 얻은 개인 키를 기록해 두십시오. 다음으로 방금 만든 구성 파일을 편집해야 합니다.

$ sudo nano /etc/wireguard/wg0.conf

파일에 다음 지시문을 추가합니다.

[Interface]
## client private key ##
PrivateKey = OEM6D/zt2fVWOepVv3iEDD430V0gAshKp4+5oVVt5EE=
 
## client ip address ##
Address = 192.168.10.2/24
 
[Peer]
## CentOS 8 server public key ##
PublicKey = VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI=
 
## set ACL ##
AllowedIPs = 192.168.10.0/24
 
## Your CentOS 8 server's public IPv4/IPv6 address and port ##
Endpoint = 203.1.114.98:37822
 
##  Key connection alive ##
PersistentKeepalive = 15

사설 IP 192.168.10.1을 서버에 할당하고 192.168.10.2를 클라이언트에 할당했습니다. 또한 클라이언트 개인 키를 파일에 추가했습니다.

[Peer] 섹션은 클라이언트가 연결할 서버 구성을 입력하는 곳입니다. 여기에 공개 키, 공개 IP 및 서버의 개인 IP를 포함하는 허용된 IP 집합을 추가했습니다. PersistentKeepalive는 WireGuard에게 15초마다 UDP 패킷을 보내도록 지시합니다. 이는 NAT 뒤에 있고 연결을 유지하려는 경우에 유용합니다.

Ctrl + W를 눌러 파일을 닫고 파일을 저장하라는 메시지가 표시되면 Y를 입력합니다.

이제 VPN 클라이언트를 활성화하고 시작할 때입니다.

$ sudo systemctl enable 
$ sudo systemctl start 
$ sudo systemctl status 

9단계 - 클라이언트를 추가하도록 서버 구성

이제 서버에 클라이언트 구성을 다시 추가하여 클라이언트에 대해 알려야 합니다.

먼저 Wireguard 서비스를 중지하십시오.

$ sudo systemctl stop 

편집을 위해 wg0.conf 파일을 엽니다.

$ sudo nano /etc/wireguard/wg0.conf

파일 끝에 다음 코드를 추가합니다.

[Peer] 
## client VPN public key ## 
PublicKey = dmfO9pirB315slXOgxXtmrBwAqPy07C57EvPks1IKzA=  

## client VPN IP address (note /32 subnet) ## 
AllowedIPs = 192.168.10.2/32

Ctrl + W를 눌러 파일을 닫고 파일을 저장하라는 메시지가 표시되면 Y를 입력합니다.

[Peer] 섹션은 VPN 네트워크의 다른 구성원을 정의합니다. 필요한 만큼 추가할 수 있습니다.

여기에는 [Interface] 섹션의 피어 개인 키와 일치해야 하는 공개 키가 포함되어 있습니다.

들어오는 모든 연결은 먼저 공개 키 중 하나에 대해 인증됩니다. 확인된 피어에서 연결되지 않은 경우 들어오는 패킷은 자동으로 무시됩니다. 일치하는 개인 키를 소유하지 않은 호스트의 연결은 전혀 응답되지 않으므로 WireGuard VPN은 암호화된 통신을 제공할 뿐만 아니라 외부인에게 숨겨진 상태로 유지됩니다.

Wireguard 서비스를 다시 시작하십시오.

$ sudo systemctl start 

10단계 - 테스트

클라이언트와 서버가 모두 VPN을 사용하여 안전하게 연결되어 있는지 확인하십시오. 연결을 테스트하려면 클라이언트에서 다음 명령을 실행하십시오.

$ ping -c 192.168.10.1
PING 192.168.10.1 (192.168.10.1) 56(84) bytes of data.
64 bytes from 192.168.10.1: icmp_seq=1 ttl=64 time=44.2 ms
64 bytes from 192.168.10.1: icmp_seq=2 ttl=64 time=45.8 ms
64 bytes from 192.168.10.1: icmp_seq=3 ttl=64 time=46.7 ms
64 bytes from 192.168.10.1: icmp_seq=4 ttl=64 time=44.1 ms

--- 192.168.10.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2800ms
rtt min/avg/max/mdev = 41.729/47.829/48.953/5.046 ms

$ sudo wg
interface: wg0
  public key: dmfO9pirB315slXOgxXtmrBwAqPy07C57EvPks1IKzA= 
  private key: (hidden)
  listening port: 
 
peer: VWndJ4oB7ZJwC/7UOm++OLDrbAxMPsR2yd0cl3sEkUI=
  endpoint: 203.1.114.98:37822
  allowed ips: 192.168.10.0/24
  latest handshake: 1 minute, 40 seconds ago
  transfer: 938 B received, 45.67 KiB sent
  persistent: keepalive: every 15 seconds

결론

이것이 이 튜토리얼의 전부입니다. 이제 CentOS 8 서버를 기반으로 하는 Wireguard 기반 VPN 서버가 있어야 합니다. 질문이 있으시면 아래 의견에 질문하십시오.