웹사이트 검색

Debian 11에 Wireguard VPN을 설치하는 방법


이 페이지에서

  1. 전제 조건
  2. Wireguard 설치
  3. 공용/개인 키 쌍 생성
    1. Wireguard 서버용 키 쌍 생성
    2. 클라이언트용 키 쌍 생성

    Wireguard는 IPSec, IKEv2 및 OpenVPN을 대체하는 무료 오픈 소스 VPN 프로토콜입니다. Wiruguard는 Linux 및 Unix 운영 체제용으로 설계되었습니다. Wireguard를 더 빠르고 안정적으로 만드는 Linux 커널 공간에서 실행됩니다. Wireguard는 두 대 이상의 컴퓨터 간에 보안 터널 연결을 만드는 데 사용됩니다.

    Wireguard는 IPSec, IKEv2 및 OpenVPN과 같은 VPN 프로토콜을 대체하는 것을 목표로 합니다. Wireguard는 더 가볍고 빠르며 설정하기 쉽고 효율적입니다. 동시에 Wiregurad는 VPN 프로토콜의 보안 측면을 희생하지 않았습니다. Wireguard는 Noise 프로토콜 프레임워크, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF 및 안전하고 신뢰할 수 있는 구성과 같은 최신 첨단 암호화를 지원합니다.

    OpenVPN, IPSec 및 IKEv2와 같은 다른 VPN 프로토콜과 비교할 때 wireguard는 새로운 VPN 프로토콜입니다. Wireguard는 2015년에 Jason A. Donenfeld에 의해 대체 VPN 프로토콜로 출시되었으며, 2020년에 Linus Torvalds에 의해 Linux 커널 v5.6에 병합되었고 같은 해에 FreeBSD 13에도 포팅되었습니다.

    이 튜토리얼에서는 Debian 11 서버에서 Wireguard를 통해 VPN 서버를 설치하고 설정합니다. Debian 11 서버로 Wireguard VPN 서버를 설정한 다음 Wireguard VPN 서버에 연결하도록 클라이언트 시스템을 설정합니다.

    클라이언트 시스템의 경우 모든 Linux 배포판을 사용할 수 있지만 이 예에서는 Debian 시스템을 사용합니다.

    전제 조건

    이 자습서를 시작하려면 다음 요구 사항이 있어야 합니다.

    • Debian 11 서버 - 이 예에서는 호스트 이름이 wireguard-server이고 외부 고정 IP 주소가 SERVER-IP인 Debian 서버를 사용합니다.\n
    • 클라이언트로 사용할 Linux 시스템 - 모든 Linux 배포판을 사용할 수 있지만 이 예에서는 호스트 이름이 client1인 Debian 시스템을 사용합니다.\n
    • sudo/root 관리자 권한이 있는 루트가 아닌 사용자.\n

    이러한 요구 사항이 모두 준비되었으면 시작하겠습니다.

    와이어가드 설치

    Wireguard를 설치하기 전에 아래 apt 명령을 실행하여 Debian 패키지 인덱스를 업데이트하고 새로 고칩니다.

    sudo apt update

    Debian 리포지토리가 업데이트되면 아래 apt 명령을 실행하여 Debian 서버에 Wireguard 패키지를 설치합니다. 그러면 Wireguard 서버 설치를 관리하는 데 사용될 wireguard-tools 패키지도 설치됩니다.

    sudo apt install wireguard

    확인 메시지가 표시되면 y를 입력하여 확인하고 ENTER를 눌러 계속 진행합니다. 이제 설치를 시작해야 합니다.

    서버에 Wireguard를 설치하면 Wireguard 서버 및 클라이언트에 대한 공개 및 개인 키 쌍을 생성할 준비가 된 것입니다.

    공개/개인 키 쌍 생성

    이 단계에서는 Wireguard 서버와 클라이언트 시스템에 대한 공개 및 개인 키 쌍을 생성합니다. 이는 wireguard-tools 패키지에서 제공하는 wg 명령줄을 통해 수행할 수 있습니다.

    서버의 키 쌍은 Wireguard 서버에서 사용하고 클라이언트 시스템은 클라이언트용 키 쌍을 사용합니다. 클라이언트 시스템이 여러 개인 경우 클라이언트에 대해 여러 키 쌍을 생성해야 합니다.

    Wireguard 서버용 키 쌍 생성

    아래 wg genkey 명령을 실행하여 Wireguard 서버용 개인 키를 생성합니다. 그런 다음 개인 키의 권한을 0400으로 변경하여 그룹 및 기타 사용자의 읽기 및 쓰기 액세스를 비활성화합니다.

    이 예에서는 개인 키 /etc/wireguard/server.key를 생성합니다.

    wg genkey | sudo tee /etc/wireguard/server.key
    sudo chmod 0400 /etc/wireguard/server.key

    그러면 터미널 화면에 임의의 base64 키가 출력됩니다.

    다음으로 wg pubkey 명령을 실행하여 /etc/wireguard/server.pub에 대한 새 서버 공개 키를 생성합니다. 서버 공개 키는 서버 개인 키 /etc/wireguard/server.key에서 파생됩니다.

    sudo cat /etc/wireguard/server.key | wg pubkey | sudo tee /etc/wireguard/server.pub

    그러면 터미널에서 임의의 base64 공개 키 출력을 받게 됩니다.

    이제 Wireguard 서버에 대한 공개 및 개인 키 쌍을 생성했습니다. 개인 키는 /etc/wireguard/server.key에 있고 공개 키는 /etc/wireguard/server.pub에 있습니다. >.

    아래 cat 명령을 실행하여 Wireguard 서버에 대해 생성된 키 쌍을 표시하고 확인합니다.

    cat /etc/wireguard/server.key
    cat /etc/wireguard/server.pub

    클라이언트용 키 쌍 생성

    클라이언트 키 쌍의 경우 wireguard-tools가 설치된 모든 시스템(Wireguard 서버 또는 클라이언트)에서 생성할 수 있습니다. 이 단계에서는 Wireguard 서버에서 클라이언트 키 쌍을 생성합니다.

    서버와 클라이언트의 키 쌍을 생성하는 프로세스는 wg genkey 명령을 사용하여 개인 키를 생성하고 wg pubkey를 사용하여 공개 키를 생성하는 것과 동일합니다. , 개인 키에서 파생됩니다.

    이제 아래 명령을 실행하여 새 디렉터리 /etc/wireguard/clients를 만듭니다. 이 디렉토리는 클라이언트 키 쌍을 저장하는 데 사용됩니다.

    mkdir -p /etc/wireguard/clients

    아래 wg genkey 명령을 실행하여 클라이언트 개인 키를 /etc/wireguard/clients/client1.key에 생성합니다. 그런 다음 /etc/wireguard/clients/client1.pub에 대한 wg pubkey 명령을 통해 클라이언트 공개 키를 생성합니다.

    wg genkey | tee /etc/wireguard/clients/client1.key
    cat /etc/wireguard/clients/client1.key | wg pubkey | tee /etc/wireguard/clients/client1.pub

    이제 클라이언트 키 쌍이 생성되었으므로 공개 키는 /etc/wireguard/clients/client1.pub에 있고 개인 키는 /etc/wireguard/clients/client1.key. 아래 명령을 실행하여 생성된 키 쌍을 표시하고 확인합니다.

    cat /etc/wireguard/clients/client1.key
    cat /etc/wireguard/clients/client1.pub

    Wireguard 서버 구성

    이 단계에서는 Wireguard 서버에 대한 새 구성 파일을 생성합니다. 그러나 그 전에 Wireguard VPN 서버에 사용할 서브넷을 결정해야 합니다. Wireguard VPN 서버에 대한 IPv6 활성화 또는 비활성화 여부를 결정할 수도 있습니다.

    이 예에서 Wireguard VPN 서버는 서브넷이 10.8.0.2/24인 IP 주소를 가지며 Wireguard VPN에 대해 IPv6를 비활성화합니다.

    아래의 nano 편집기 명령을 사용하여 새 Wireguard 구성 파일 /etc/wireguard/wg0.conf을 만듭니다.

    sudo nano /etc/wireguard/wg0.conf

    먼저 파일에 다음 줄을 추가하여 Wirguard 서버 세부 정보를 정의합니다. 그리고 Wirguard 서버 개인 키 server.key로 PrivateKey를 변경해야 합니다. 이를 통해 Wireguard 서버 인터페이스는 IP 주소 10.8.0.1에서 실행되고 클라이언트가 연결할 수 있는 UDP 포트 51820을 열며 SaveConfig 매개변수는 Wireguard 인터페이스가 꺼져 있습니다.

    [Interface]
    # Wireguard Server private key - server.key
    PrivateKey = SIybp8GHtKIPtHPBOQFP1kbQg4UCLCMyNIfCLBQR2EA=

    # Wireguard interface will be run at 10.8.0.1
    Address = 10.8.0.1/24

    # Clients will connect to UDP port 51820
    ListenPort = 51820

    # Ensure any changes will be saved to the Wireguard config file
    SaveConfig = true

    그런 다음 아래 줄을 추가하여 클라이언트 피어 연결을 정의합니다. 클라이언트 공개 키 client1.pub로 PublicKey 매개변수를 변경하십시오. 그리고 AllowedIPs 매개변수는 이 피어에 대한 액세스를 허용한 Wireguard 클라이언트를 지정합니다. 이 예에서는 IP가 10.8.0.2인 클라이언트만 이 피어 연결에 액세스할 수 있습니다. 그러나 10.8.0.0/24와 같은 서브넷 범위를 허용할 수도 있습니다.

    [Peer]
    # Wireguard client public key - client1.pub
    PublicKey = ENokvIsS2euXrmM4OVFHPmTdCZ4wfEIR/UHuGCW64lw=

    # clients' VPN IP addresses you allow to connect
    # possible to specify subnet ⇒ [10.8.0.0/24]
    AllowedIPs = 10.8.0.2/24

    파일을 저장하고 완료되면 편집기를 종료합니다.

    Wireguard 서버 구성 파일이 생성되고 클라이언트 피어 연결이 추가되면 Weireguard 서버에서 포트 포워딩을 설정하고 방화벽을 설정하여 트래픽 라우팅을 설정합니다.

    /etc/sysctl.conf를 통해 포트 포워딩 활성화

    이 단계에서는 /etc/sysctl.conf 파일을 통해 Wireguard 서버에서 포트 포워딩을 활성화합니다. Wireguard 가드 서버에서 IPv4 및 IPv6 모두에 대해 포트 전달을 활성화할 수 있습니다.

    시작하려면 아래의 nano 편집기 명령을 사용하여 구성 파일 /etc/sysctl.conf을 엽니다.

    sudo nano /etc/sysctl.conf

    파일에 다음 줄을 추가합니다. 이렇게 하면 Wireguard 서버에서 포트 포워딩이 활성화됩니다. IPv4 및 IPv6에 모두 사용할 수 있습니다. 또는 Wireguard 서버에서 IPv6를 비활성화한 경우 IPv4를 사용할 수 있습니다.

    # Port Forwarding for IPv4
    net.ipv4.ip_forward=1

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

    파일을 저장하고 완료되면 편집기를 종료합니다.

    그런 다음 아래 sysctl 명령 유틸리티를 실행하여 변경 사항을 적용합니다.

    sudo sysctl -p

    다음과 같은 출력이 표시됩니다. 포트 포워딩이 즉시 활성화되어야 합니다.

    Wireguard 서버에서 포트 포워딩을 활성화한 상태에서 다음으로 Wireguard 클라이언트의 트래픽을 특정 네트워크 인터페이스로 라우팅하는 방화벽을 설정합니다.

    Wireguard Server용 방화벽 구성

    이 단계에서는 클라이언트 연결을 인터넷 액세스에 사용할 적절한 네트워크 인터페이스로 라우팅하기 위해 Wireguard 서버에 사용할 방화벽을 설정합니다. 또한 Wireguard 클라이언트는 Wireguard 서버의 특정 인터페이스를 통해 인터넷에 액세스할 수 있습니다.

    먼저 아래 apt 명령을 실행하여 데비안 서버에 ufw 방화벽 패키지를 설치합니다.

    sudo apt install ufw

    메시지가 표시되면 y를 입력하고 ENTER를 눌러 계속 진행합니다.

    ufw가 설치된 후 아래 명령을 실행하여 SSH 서비스를 열고 ufw 방화벽을 활성화합니다.

    sudo ufw allow OpenSSH
    sudo ufw enable

    ufw 방화벽 활성화 확인 메시지가 표시되면 y를 입력하고 ENTER를 누릅니다. 이제 ufw 방화벽이 시스템에서 실행 중이고 활성화되어 있어야 합니다.

    이제 아래 명령을 통해 ufw 방화벽 상태를 확인하십시오. Status: active와 같은 출력을 수신해야 합니다. 이는 ufw 방화벽 상태가 실행 중임을 의미합니다.

    sudo ufw status

    ufw 방화벽이 실행 중인 상태에서 다음으로 Wireguard 클라이언트 연결을 특정 네트워크 인터페이스로 라우팅하도록 구성합니다.

    이제 아래 명령을 실행하여 Wireguard 서버에서 기본 라우팅 테이블 인터페이스를 확인하십시오. 대부분 인터넷에 액세스하는 데 사용되는 인터페이스 또는 공용 IP 주소를 사용할 수 있는 인터페이스를 감지합니다.

    ip route list default

    다음과 같은 출력을 받게 됩니다. 이 예는 Wireguard 서버의 기본 라우팅 테이블인 인터페이스 eth0입니다. 그리고 이것은 인터넷에 액세스하는 데 사용되는 인터페이스입니다. 인터페이스 이름이 다를 수 있습니다.

    다음으로 아래의 nano 편집기 명령을 사용하여 Wireguard 서버 구성 파일 /etc/wireguard/wg0.conf을 엽니다.

    sudo nano /etc/wireguard/wg0.conf

    [Interface] 섹션에 다음 줄을 추가합니다.

    [Interface]
    ...
    ....
    PostUp = ufw route allow in on wg0 out on eth0
    PostUp = iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
    PostUp = ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
    PreDown = ufw route delete allow in on wg0 out on eth0
    PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
    PreDown = ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

    파일을 저장하고 완료되면 편집기를 종료합니다.

    • PostUp 매개변수는 Wirguard 서버가 VPN 터널을 시작할 때마다 실행됩니다.\n
    • PreDown 매개변수는 Wireguard 서버가 VPN 터널을 중지할 때마다 실행됩니다.\n
    • ufw route allow in on wg0 out on eth0 명령을 사용하면 wg0 인터페이스에서 들어오는 트래픽을 인터넷 인터페이스 eth0으로 전달할 수 있습니다.\n
    • iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE 명령은 가장을 활성화하고 wg0 인터페이스의 IPv4 트래픽을 다시 작성하여 Wireguard 서버의 직접 연결처럼 보이도록 합니다.\n
    • ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE 명령은 가장을 활성화하고 wg0 인터페이스에서 IPv46 트래픽을 다시 작성하여 Wireguard 서버에서 직접 연결된 것처럼 보이게 합니다.\n

    이제 아래 ufw 명령을 실행하여 클라이언트가 연결될 UDP 포트 51820을 엽니다.

    sudo ufw allow 51820/udp

    마지막으로 아래 명령을 실행하여 ufw 방화벽을 다시 로드하고 변경 사항을 적용합니다. 그런 다음 아래 명령을 통해 ufw 규칙 목록을 확인합니다.

    sudo ufw reload
    sudo ufw status

    이 스크린샷과 같은 출력을 받게 됩니다. Wireguard 서버가 ufw 방화벽에 추가된 클라이언트 연결에 사용할 UDP 포트 51820입니다.

    이제 포트 포워딩을 활성화하고 Wireguard 서버에서 방화벽을 구성했습니다. 이제 Wireguard 서버를 시작할 준비가 되었습니다.

    Wireguard 서버 시작

    이 단계에서는 Wireguard 서버를 시작하고 활성화합니다. 또한 Wireguard 서버를 확인하고 Wireguard 서비스에서 생성할 wg0 인터페이스를 확인합니다.

    아래 systemctl 명령 유틸리티를 실행하여 Wireguard 서비스를 시작하고 활성화합니다. [email 서비스는 Wireguard 서버에서 Wireguard 인터페이스 wg0을 생성하고 활성화합니다.

    sudo systemctl start 

    이제 아래 명령을 통해 Wireguard 서비스를 확인하십시오.

    sudo systemctl status 

    다음 스크린샷과 유사한 출력이 표시됩니다. Wireguard 서비스 [email 가 실행 중이며 활성화되어 있습니다. 이것은 또한 wg0 인터페이스가 생성되어 실행 중임을 의미합니다.

    아래 명령을 실행하여 Wireguard 서버에서 wg0 인터페이스를 확인하십시오.

    ip a show wg0

    다음과 같은 출력을 수신해야 합니다. Wireguard 인터페이스 wg0은 Wireguard 구성 파일 /etc/wireguard/wg0.conf에 설명된 대로 IP 주소 10.8.0.1을 가져옵니다.

    또한 아래와 같이 wg-quick 명령을 통해 Wireguard를 시작하고 중지할 수도 있습니다. wg-quick up 명령은 Wireguard 서버를 시작하고 wg-quick down은 Wireguard 서버를 중지합니다.

    sudo wg-quick up /etc/wireguard/wg0.conf
    sudo wg-quick down /etc/wireguard/wg0.conf

    Wireguard 서버가 실행 중인 상태에서 다음으로 클라이언트 시스템을 설정하고 Wireguard 서버에 연결합니다.

    클라이언트 시스템 설정 및 Wireguard 서버에 연결

    이 단계에서는 worguard-tools를 설치하고, 클라이언트에 대한 새 Wireguard 구성을 생성하고, Wireguard VPN 서버에 연결하고, 마지막으로 연결을 확인하고 클라이언트 시스템이 인터넷 및 로컬 VPN 네트워크에 연결할 수 있는지 확인하여 클라이언트 시스템을 설정합니다. .

    클라이언트 시스템에 wireguard-tools 패키지를 설치합니다. 이것은 Debian을 클라이언트로 사용하므로 APT 명령이 사용됩니다.

    sudo apt install wireguard-tools

    설치가 자동으로 시작됩니다.

    wireguard-tools가 설치된 후 아래의 nano 편집기 명령을 사용하여 새 구성 파일 /etc/wireguard/wg-client1.conf을 만듭니다.

    sudo nano /etc/wireguard/wg-client1.conf

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

    [Interface]
    # Define the IP address for the client - must be matched with wg0 on Wireguard Server
    Address = 10.8.0.2/24

    # specific DNS Server
    DNS = 1.1.1.1

    # Private key for the client - client1.key
    PrivateKey = KPI59QH0jwc9wkUsW5Byci9ojXhz1322QXK52fQCE3E=

    [Peer]
    # Public key of the Wireguard server - server.pub
    PublicKey = Qt6oRLtlfAR490lTNb2K8TlbpwADV1j8NX7D5HY38EM=

    # Allow all traffic to be routed via Wireguard VPN
    AllowedIPs = 0.0.0.0/0

    # Public IP address of the Wireguard Server
    Endpoint = SERVER-IP:51820

    # Sending Keepalive every 25 sec
    PersistentKeepalive = 25

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

    [Interface] 섹션에서 다음을 정의해야 합니다.

    • 클라이언트의 IP 주소는 Wireguard 서버의 서브넷과 일치해야 합니다. Wireguard 클라이언트는 이 예에서 IP 주소 10.8.0.2를 얻습니다.
    • 클라이언트의 DNS 서버를 지정합니다.\n
    • 생성한 클라이언트 개인 키 client1.key로 PrivateKey 매개변수를 변경합니다.

      [Peer] 섹션에서 다음을 추가해야 합니다.\n
    • Wireguard 서버 공개 키 server.pub를 PublicKey 매개변수로 설정합니다.\n
    • AllowedIPs를 지정하여 VPN 피어에 대한 액세스를 제한하거나 네트워크의 서브넷을 지정하거나 0.0.0.0/0을 입력하여 VPN을 통해 모든 트래픽을 터널링할 수 있습니다.\n
    • Wireguard 서버의 공용 IP 주소로 Endpoint 매개변수를 지정하거나 도메인 이름을 사용하십시오.\n

    클라이언트 구성이 생성된 후 아래 명령을 실행하여 클라이언트 컴퓨터에서 Wireguard를 시작합니다.

    wg-quick up wg-client1

    이 스크린샷과 유사한 출력을 수신해야 합니다. 새 Wireguard 인터페이스 wg-client1이 생성되고 클라이언트 시스템이 SERVER-IP:51820에서 실행되는 Wireguard 서버에 연결되어야 합니다.

    아래 명령을 실행하여 Wireguard 인터페이스 wg-client1을 확인합니다.

    ip a show wg-client1

    다음과 같은 출력을 수신해야 합니다. wg-client1 인터페이스는 Wireguard 서버 10.8.0.0/24 서브넷의 일부인 IP 주소 10.8.0.2로 작동합니다.

    wg show 명령을 통해 Wireguard 연결을 확인할 수도 있습니다.

    클라이언트 시스템에서 아래 wg show 명령을 실행하면 다음과 같은 출력이 표시됩니다.

    wg show

    적절한 Wireguard 서버에 연결되어 있으면 엔드포인트 섹션에 Wirguard 서버 IP 주소와 Wirguard 서버 공개 키 server.pub가 표시되어야 합니다.

    이제 Wireguard 서버로 이동하여 wg show 명령을 실행합니다.

    wg show

    다음과 유사한 출력을 수신해야 합니다. 엔드포인트 섹션에는 클라이언트 공용 IP 주소가 표시되고 피어 섹션에는 클라이언트 공개 키 client1.pub가 표시됩니다.

    마지막으로 아래 명령을 실행하여 클라이언트 시스템이 인터넷에 액세스하거나 Wireguard VPN의 내부 네트워크 서브넷에 액세스할 수 있는지 확인합니다.

    ping -c5 10.8.0.1
    ping -c5 1.1.1.1
    ping -c5 duckduckgo.com

    다음은 수신해야 하는 출력입니다.

    클라이언트 시스템은 IP 주소 10.8.0.1을 사용하여 Wireguard 서버에 연결할 수 있습니다.

    클라이언트 시스템은 인터넷에 액세스할 수 있습니다. 모든 트래픽은 Wireguard 서버 공용 IP 주소를 통해 라우팅됩니다.

    이제 클라이언트 시스템에서 Wrieguard를 중지하려면 아래의 wg-quick down 명령을 실행할 수 있습니다.

    wg-quick down wg-client1

    이와 같은 출력을 받게 됩니다. 또한 wg-client1 인터페이스는 클라이언트 시스템에서 사라집니다.

    이제 클라이언트 시스템에서 Wirguard VPN을 구성했습니다. 클라이언트 컴퓨터와 Wireguard 서버 간의 연결도 확인했습니다.

    결론

    이 자습서에서는 Debian 11 서버에 Wireguard VPN을 설치하고 구성했습니다. 또한 Debian 머신을 구성하고 Wireguard VPN 서버에 성공적으로 연결했습니다.

    자세히 설명하면 Wireguard VPN 패키지를 설치하고, 서버와 클라이언트 모두에 대한 키 쌍 공개 및 개인 키를 생성하고, VPN 트래픽을 특정 네트워크 인터페이스로 라우팅하도록 UFW 방화벽을 구성하고, /etc/sysctl.conf를 통해 포트 포워딩을 활성화했습니다. 파일.

    이를 염두에 두고 이제 클라이언트에 대한 다른 키 쌍을 생성하고 Wireguard 서버에서 피어 연결을 정의한 다음 클라이언트 시스템이 사용할 새 Wireguard 구성 파일을 생성하여 더 많은 클라이언트를 Wireguard VPN 서버에 추가할 수 있습니다. Wireguard에 대해 자세히 알아보려면 공식 Wireguard 문서를 방문하십시오.