Ubuntu 20.04에서 WireGuard VPN 서버 및 클라이언트를 설정하는 방법

Wireguard를 사용하여 자체 호스팅 VPN 설정

VPN(가상 사설망) 사용자의 컴퓨터가 사설망에 직접 연결된 것처럼 원격으로 사설망에 연결할 수 있습니다. 이 기술은 처음에 내부 네트워크 위치에 실제로 존재하지 않는 직원을 위해 회사 내부 사설망에 원격 액세스를 허용하기 위해 개발되었습니다.

VPN 서버는 내부 네트워크 위치에 배포됩니다. 이 서버는 공용 네트워크에 있으며 직원이 VPN 클라이언트를 사용하여 액세스할 수 있습니다. VPN 서버에 연결하려면 인증이 필요합니다. VPN 서버와 VPN 클라이언트 간의 통신은 터널링 프로토콜을 사용하여 보호됩니다. 이 통신은 암호화되거나 암호화되지 않을 수 있지만 일반적으로 대부분의 VPN 프로토콜에서 암호화됩니다.

VPN의 또 다른 용도는 인터넷에 접속할 때 익명성을 얻다 또는 일부 웹사이트에 액세스하는 동안 부과된 지리적 제한을 우회하기 위해. 이 경우 사용자가 연결하려는 네트워크는 사설망이 아니라 인터넷입니다.

수년 동안 많은 VPN 프로토콜이 개발되었습니다. 이러한 프로토콜은 서버와 클라이언트 간의 통신을 위해 서로 다른 터널링 프로토콜과 암호화 알고리즘을 사용합니다.

최근 널리 사용되고 있는 그러한 프로토콜 중 하나는 다음과 같습니다. 와이어가드. Wireguard는 OpenVPN, IPSec과 같이 전통적으로 사용되는 잘 알려진 VPN 프로토콜보다 더 가볍고 간단하며 성능이 뛰어납니다. Windows, Mac OS 및 많은 수의 Linux 배포판에 이미 구현되어 있습니다. Linux에서는 커널 모듈로 구현됩니다. Ubuntu 20.04의 공식 리포지토리에서 사용할 수 있습니다.

이 기사에서는 Ubuntu 20.04에서 Wireguard VPN 서버 및 클라이언트를 설정하는 방법을 살펴봅니다.

설치

이 기사에서는 Ubuntu 20.04 Linode에 Wireguard 서버를 설정하고 Ubuntu 20.04가 설치된 로컬 컴퓨터에 Wireguard 클라이언트를 설정합니다.

패키지 와이어가드 Wireguard 서버와 클라이언트를 모두 설치합니다. 다음 명령을 실행 서버 시스템과 클라이언트 시스템 모두에서.

sudo apt 설치 와이어 가드

서버 구성

보안 키

공개/개인 키 쌍 세트를 생성해야 합니다. Wireguard 연결을 인증하고 보호하기 위해. 이것은 다음 명령을 사용하여 수행할 수 있습니다.

sudo su cd /etc/wireguard umask 077 wg genkey | 티 private_key | wg pubkey > public_key

우리는 수퍼유저로서 모든 구성 작업을 수행하고 있습니다. 그 이유는 디렉토리에 대한 액세스 /etc/wireguard 일반 사용자는 금지되며 일반 사용자의 sudo 권한만으로는 디렉토리 액세스를 얻을 수 없습니다.

다음으로 파일 생성 마스크를 다음으로 설정합니다. 077. 이는 프로세스에 의해 이 폴더에 새 파일이 생성될 때마다 해당 권한이 자동으로 077로 마스킹됨을 의미합니다. 예. 이 폴더에 권한이 777인 파일이 생성되면 해당 파일은 자동으로 마스킹되고 권한은 사실상 700이 됩니다. 이는 파일 소유자만 파일에 대한 모든 권한을 갖고 다른 모든 사람은 권한이 없도록 하기 위해 수행됩니다.

다음 줄에서, 공개/개인 키 쌍을 생성합니다. 서버용. 그들은 파일에 저장됩니다 private_key 그리고 공개 키. 키를 보려면 다음을 실행합니다.

고양이 private_key 고양이 public_key

개인 키를 복사합니다. 다음 단계에서 필요합니다.

메모: 개인 키를 공개적으로 공유하지 마십시오!

구성 파일

Wireguard 서버에 대한 구성 파일을 생성해 보겠습니다. 파일 이름을 선택할 수 있습니다. 우리는 파일을 만들 것입니다 wg0.conf 이 예에서.

vim wg0.conf

파일에 다음을 추가합니다.

[인터페이스] 주소 = 10.20.43.1/24 SaveConfig = true ListenPort = 51190 PrivateKey = PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o -j MASQUERADE; ip6tables -A 앞으로 -i wg0 -j 수락; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D 앞으로 -i wg0 -j 수락; ip6tables -t nat -D POSTROUTING -o -j MASQUERADE 

이전에 복사한 Private Key를 위 코드의 5행에 붙여넣습니다.

다른(가상) 서브넷에서 Wireguard를 구성해야 합니다. 서버의 IP 주소보다 여기에서는 서버에 10.20.43.1을 사용했고 클라이언트에 10.20.43.2를 사용할 것입니다. 여기에서 모든 서브넷을 사용할 수 있습니다. 서버 및 인터페이스의 IP 주소를 얻으려면 다음을 실행하십시오.

ifconfig

서버의 IP 주소를 기록해 두십시오. 이것은 클라이언트 구성 중에 필요합니다.

위의 이미지에서 볼 수 있듯이 서버에서 사용하는 인터페이스는 eth0. 인터페이스 이름은 사용자의 네트워크에 따라 다를 수 있습니다. 무선랜0 또는 wlp2s0 사용자가 무선 카드를 사용하여 WiFi 네트워크에 연결된 경우.

교체 ~에 포스트업 그리고 포스트다운 당신의 인터페이스와 함께; 이 예에서는 eth0.포스트업 그리고 포스트다운 지시문은 서버가 각각 시작되고 중지될 때 실행되어야 하는 명령을 지정하는 데 사용됩니다. 이 예에서는 다음을 사용합니다. iptables 클라이언트가 서버의 IP 주소를 공유하도록 IP 규칙을 설정하는 명령입니다. 서버가 중지되면 규칙이 삭제됩니다.

파일을 저장하고 종료합니다. vim을 사용할 때 다음을 누르십시오. ESC, 입력 :wq 그리고 누르다 입력하다 저장하고 종료합니다.

사용 중인 경우 ufw 서버의 방화벽을 사용하려면 VPN 서버용 포트 51190에 대한 UDP 연결을 허용해야 합니다.

ufw 51190/udp 허용

서비스 시작

이제 구성이 완료되면 Wireguard VPN 서비스를 시작할 수 있습니다.

사용하려면 부팅 시 서비스를 시작하려면 다음을 실행하십시오.

systemctl enable wg-quick@wg0

참고로 여기 wg0 구성 파일의 이름입니다.

시작한다 서비스, ​​실행:

서비스 wg-quick@wg0 시작

확인하다 서비스가 성공적으로 시작되었는지 여부:

서비스 wg-quick@wg0 상태

인터페이스 확인 구성 파일에서 만든 IP 명령을 사용하여 시작되었습니다.

ip 쇼 wg0

이제 Wireguard VPN 서버가 설정되어 실행 중입니다. 이제 클라이언트를 구성해 보겠습니다.

클라이언트 구성

Wireguard의 클라이언트 구성은 서버 구성과 거의 동일합니다. 클라이언트용 키를 생성한 다음 구성 파일을 생성합니다.

보안 키

공개/개인 키를 생성하려면 클라이언트에 대해 다음을 실행합니다.

sudo su cd /etc/wireguard umask 077 wg genkey | 티 client_private_key | wg pubkey > client_public_key

이제 클라이언트의 공개 키와 개인 키가 각각 파일에 생성됩니다. client_private_key 그리고 client_public_key.

다음을 사용하여 생성되었는지 확인합니다. 고양이 명령.

고양이 client_private_key 고양이 client_public_key

클라이언트의 구성 파일에 추가해야 하므로 표시된 개인 키를 복사합니다.

구성 파일

구성 파일 만들기 원하는 이름으로. 이름으로 만들어드립니다. wg0-클라이언트 이 예의 경우.

vim wg0-client.conf

다음 구성을 추가합니다.

[Interface] # 클라이언트 주소의 IP 주소 및 개인 키 = 10.20.43.2/24 PrivateKey = [Peer] # 서버의 공개 키, IP 주소 및 포트 PublicKey = Endpoint = :51190 AllowedIPs = 0.0.0.0/0, : :/0

클라이언트의 서브넷 주소를 입력합니다. 앞에서 설명한 대로 우리는 10.20.43.2 이 예에서 클라이언트의 경우.

클라이언트 개인 키 추가 위의 구성 코드에서 4행으로 이전 단계에서 생성되었습니다.

'피어' 아래에 Wireguard VPN 서버에 대한 정보를 추가합니다. 우리는 연결하고 싶습니다.

서버의 공개 키를 입력합니다. 들어가다 서버의 IP 주소, 이전에 언급한 대로 지정된 형식으로 이식합니다. 끝점. 이것은 서버 구성 파일에 지정하고 서버의 VPN 서비스가 시작된 포트입니다.

클라이언트가 사용하는 동적 공개 IP에 대한 모든 요청이 항상 VPN 서버로 전달되도록 허용된 IP를 주어진 대로 입력해야 합니다(0.0.0.0/0).

파일을 저장하고 종료합니다. vim을 사용할 때 다음을 누르십시오. ESC, 입력 :wq 그리고 누르다 입력하다 저장하고 종료합니다.

클라이언트 서비스 활성화 부팅할 때마다 실행하고 시작합니다.

systemctl enable wg-quick@wg-client 서비스 wg-quick@wg-client 시작

확인하다 서비스가 시작된 경우.

서비스 wg-quick@wg-client 상태

서버에 피어 추가

이제 VPN 서버와 클라이언트가 실행되고 있습니다. 그러나 서버와 클라이언트 간에 피어 투 피어 연결을 설정하지 않으면 둘 사이의 보안 터널이 설정되지 않습니다.

돌아가기 서버에. 첫 번째, VPN 서비스를 중지.

서비스 wg-quick@wg0 stop

다음으로 구성 파일을 열어 피어에 대한 구성 추가 (고객).

vim /etc/wireguard/wg0.conf

추가 파일에 다음 줄을 추가합니다.

[피어] PublicKey = AllowedIPs = 10.20.43.2/32

지금, VPN 서비스를 다시 시작하십시오.

서비스 wg-quick@wg0 시작

그게 다야! 이것은 Wireguard VPN 클라이언트 및 서버 설정에 필요한 모든 구성입니다. 이제 VPN을 테스트해 보겠습니다.

VPN 테스트

먼저 클라이언트에서 서버로 간단한 ping을 수행하여 VPN 터널 통신이 작동하는지 확인합니다. 클라이언트에서 다음을 실행하십시오.:

핑 10.20.43.1

다음, 웹 브라우저를 열고 웹 사이트를 엽니다. 클라이언트 컴퓨터에서 인터넷에 연결할 수 있는지 확인합니다. 다음을 사용하여 명령줄에서 인터넷 연결을 확인할 수도 있습니다. wget.

wget 

이제 터널 연결과 인터넷 연결을 확인했습니다. 둘 다 작동한다면 이제 클라이언트로 들어오는 모든 인터넷 트래픽이 서버를 통과하는지 확인해야 합니다.

이를 위해서는 인터넷에서 볼 수 있는 클라이언트의 IP 주소를 확인하기만 하면 됩니다. 한 가지 방법은 whatsmyip.org로 이동하는 것입니다. 또는 명령줄에서 Curl을 사용하여 IP 정보라는 다른 유사한 서비스를 쿼리할 수 있습니다.

클라이언트 시스템에서 다음을 실행합니다.

컬 //ipinfo.io/ip

예. VPN 서버가 호스팅되는 Linode의 공인 IP 주소입니다. 이것이 VPN을 사용하여 익명성을 달성하는 방법입니다. 이제 인터넷 전체에서 컴퓨터가 아닌 VPN 서버의 IP가 표시되기 때문입니다.

결론

설정의 용이성은 설정을 위해 더 높은 수준의 네트워킹 및 라우팅 지식이 필요한 OpenVPN과 같은 기존 VPN 소프트웨어에 비해 Wireguard의 가장 중요한 장점 중 하나입니다. 그러나 Wireguard 설정에서 오류가 발생하거나 예상대로 작동하지 않는 경우 문제를 일으킬 수 있는 Wireguard에 대한 자세한 공식 문서가 부족합니다.

그럼에도 불구하고 Wireguard는 인터넷을 통한 보안 통신을 위해 자체 호스팅 VPN을 원하는 경우 탁월한 선택입니다. Wireguard와 Wireguard가 사용하는 프로토콜 및 기술에 대해 자세히 알아보려면 공식 사이트를 확인하세요.