8.17. wg-quick 서비스를 사용하여 Wire>-< 클라이언트 구성

/etc/wireguard/ 디렉토리에 구성 파일을 생성하여 Wire>-< 클라이언트를 구성할 수 있습니다. 이 방법을 사용하여 NetworkManager와 독립적으로 서비스를 구성합니다.

이 절차에서는 다음 설정을 가정합니다.

  • 클라이언트:

    • Private key: aPUcp5vHz8yMLrzk8SsDyYnV33IhE/k20e52iKJFV0A=
    • 터널 IPv4 주소: 192.0.2.2/24
    • 터널 IPv6 주소: 2001:db8:1::2/32
  • 서버:

    • 공개 키: UtjqCJ57DeAscYKRfp7cFGiQqdONRn69u249Fa4O6BE=
    • 터널 IPv4 주소: 192.0.2.1/24
    • 터널 IPv6 주소: 2001:db8:1::1/32

사전 요구 사항

  • 서버와 클라이언트 모두에 대해 공개 및 개인 키를 생성했습니다.
  • 다음 정보를 알고 있습니다.

    • 클라이언트의 개인 키
    • 클라이언트의 고정 터널 IP 주소 및 서브넷 마스크
    • 서버의 공개 키
    • 서버의 고정 터널 IP 주소 및 서브넷 마스크

절차

  1. wireguard-tools 패키지를 설치합니다.

    # dnf install wireguard-tools
  2. 다음 콘텐츠로 /etc/wireguard/wg0.conf 파일을 만듭니다.

    [Interface]
    Address = 192.0.2.2/24, 2001:db8:1::2/32
    PrivateKey = aPUcp5vHz8yMLrzk8SsDyYnV33IhE/k20e52iKJFV0A=
    
    [Peer]
    PublicKey = UtjqCJ57DeAscYKRfp7cFGiQqdONRn69u249Fa4O6BE=
    AllowedIPs = 192.0.2.1, 2001:db8:1::1
    Endpoint = server.example.com:51820
    PersistentKeepalive = 20
    • [Interface] 섹션은 클라이언트의 인터페이스의 WireECDHE 설정에 대해 설명합니다.

      • address: 클라이언트의 터널 IP 주소 쉼표로 구분된 목록입니다.
      • privateKey: 클라이언트의 개인 키입니다.
    • [Peer] 섹션은 서버의 설정을 설명합니다.

      • publickey: 서버의 공개 키입니다.
      • AllowedIPs: 이 클라이언트에 데이터를 보낼 수 있는 IP 주소입니다. 예를 들어 매개 변수를 다음과 같이 설정합니다.

        • 서버만 이 클라이언트와 통신할 수 있도록 하는 서버의 IP 주소입니다. 위 예제의 값은 이 시나리오를 구성합니다.
        • 0.0.0.0/0 ::/0 은 모든 원격 IPv4 및 IPv6 주소가 이 클라이언트와 통신할 수 있도록 허용합니다. 이 설정을 사용하여 모든 트래픽을 터널을 통해 라우팅하고 WireGuard 서버를 기본 게이트웨이로 사용합니다.
      • 끝점: 호스트 이름 또는 IP 주소와 서버의 포트를 설정합니다. 클라이언트는 이 정보를 사용하여 연결을 설정합니다.
      • 선택적 persistent-keepalive 매개변수는 WireECDHE가 서버에 keepalive 패킷을 보내는 간격(초)을 정의합니다. NAT(네트워크 주소 변환)가 있는 네트워크에서 클라이언트를 사용하거나 방화벽이 비활성 시간이 지난 후 UDP 연결을 닫는 경우 이 매개변수를 설정합니다.
  3. WireGuard 연결을 활성화하고 시작합니다.

    # systemctl enable --now wg-quick@wg0

    systemd 인스턴스 이름은 .conf 접미사가 없는 /etc/wireguard/ 디렉토리의 구성 파일 이름과 일치해야 합니다. 또한 서비스는 가상 네트워크 인터페이스에 이 이름을 사용합니다.

검증

  1. 서버의 IP 주소를 ping합니다.

    # ping 192.0.2.1
    # ping6 2001:db8:1::1
  2. wg0 장치의 인터페이스 구성을 표시합니다.

    # wg show wg0
    interface: wg0
      public key: bnwfQcC8/g2i4vvEqcRUM2e6Hi3Nskk6G9t4r26nFVM=
      private key: (hidden)
      listening port: 51820
    
    peer: UtjqCJ57DeAscYKRfp7cFGiQqdONRn69u249Fa4O6BE=
      endpoint: server.example.com:51820
      allowed ips: 192.0.2.1/32, 2001:db8:1::1/128
      latest handshake: 1 minute, 41 seconds ago
      transfer: 824 B received, 1.01 KiB sent
      persistent keepalive: every 20 seconds

    출력에 개인 키를 표시하려면 WG_HIDE_KEYS=never wg show wg0 명령을 사용합니다.

    출력에는 이미 VPN 터널을 통해 트래픽을 보낸 경우 최신 핸드셰이크전송 항목만 포함됩니다.

  3. wg0 장치의 IP 구성을 표시합니다.

    # ip address show wg0
    10: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
        link/none
        inet 192.0.2.2/24 scope global wg0
           valid_lft forever preferred_lft forever
        inet6 2001:db8:1::2/32__ scope global
           valid_lft forever preferred_lft forever

추가 리소스

  • wg(8) 매뉴얼 페이지
  • wg-quick(8) 매뉴얼 페이지