systemd-networkd를 사용하여 WireGuard 서버 설정

Linux 시스템의 클라이언트측 구성에 대해 알아보려면 확인하십시오.

WireGuard는 Linux 커널 5.6(2020년 3월 29일 출시) 이상에 내장된 매우 간단하고 빠르고 현대적인 VPN입니다. SSH 모델을 모방하고 VPN 피어가 서로의 공개 키를 알아야 합니다. 이 게시물과 관계없이 https://www.wireguard.com을 읽는 것이 좋습니다.

WireGuard의 경우 한 가지 흥미로운 측면이 있습니다. '서버'라는 개념이 없고 설계에 따라 배포되며 블록체인이 관련되지 않습니다. 블록체인 애호가들은 이것이 놀랍지만 분산 소프트웨어가 블록체인보다 오래 전에 발명되었다는 사실을 발견했을 것입니다 😅. 각 피어는 서로를 알고 있고(예: 공개 키, IP) 서로 연결되어 있다고 가정하고 다른 피어에 연결할 수 있습니다. '서버'는 오히려 특정 피어에서 기대할 수 있는 동작입니다. 일반적으로 '서버' 피어에서 예상되는 3가지 핵심 사항이 있습니다.
  • 피어가 공개적으로 사용 가능하므로 SNAT 뒤에 있는 경우에도 다른 피어가 연결할 수 있습니다.
  • 피어는 프록시 역할을 하고 다른 피어를 단일 네트워크에 연결할 수 있습니다.
  • 피어는 인터넷에 대한 게이트웨이 역할을 할 수 있습니다.

  • Linux 시스템에서 WireGuard를 구성하는 방법에는 여러 가지가 있습니다. 내가 가장 좋아하는 것은 네트워크와 네트워크 장치를 모두 관리하는 시스템 서비스인 systemd-networkd을 사용하는 것입니다. systemd 제품군의 일부로 배포되므로 설치했을 가능성이 높으며 v237부터 WireGuard를 지원합니다. 추가 소프트웨어가 필요하지 않기 때문에 Linux 서버에 적합합니다.

    예를 들어 다음 VPN 네트워크를 설정하려고 합니다.


    옵션



    회로망10.0.0.0/24
    섬기는 사람10.0.0.1
    피어 A10.0.0.20
    피어 B10.0.0.30

    가장 먼저 할 일은 WireGuard 터널용 가상 네트워크 장치를 설정하는 것입니다. 이는 /etc/systemd/network/ 디렉토리에 생성되어야 하는 systemd.netdev(5) 단위를 통해 달성할 수 있습니다. WireGuard 네트워크 장치는 여러 가지 사항에 대해 알아야 합니다.
  • 새 연결을 수락할 포트입니다.
  • 서버의 개인 키입니다.
  • 알려진 피어 및 해당 공개 키의 목록입니다.

  • 일부/etc/systemd/network/wg0.netdev는 다음과 같습니다.

    [NetDev]
    Name=wg0
    Kind=wireguard
    Description=wg0 - wireguard tunnel
    
    [WireGuard]
    ListenPort=51820
    PrivateKeyFile=/etc/systemd/network/wg0.key
    
    [WireGuardPeer]
    AllowedIPs=10.0.0.20/32
    PublicKey=9vzzasvYciJLmhjrt9Aj9aQYe1gnUxI44ShVLQPrDQA=
    
    [WireGuardPeer]
    AllowedIPs=10.0.0.30/32
    PublicKey=9vzzasvYciJLmhjrt9Aj9aQYe1gnUxI44ShVLQPrDQA=
    

    /etc/systemd/network/wg0.key의 내용은 $ wg genkey 명령을 호출하여 생성할 수 있으며 systemd-network 사용자가 읽을 수 있어야 합니다. 여기서 주목할만한 점은 $ wg genkey는 노트북에서도 어디서나 실행할 수 있으며 서버에 추가 소프트웨어를 설치할 필요가 없다는 것입니다.

    다음으로 할 일은 systemd.network(5) 장치를 사용하여 네트워크를 설정하는 것입니다. 네트워크의 목적은 네트워크 장치에 적절한 IP 주소를 할당하고 적절한 경로를 설정하는 것입니다.

    일부/etc/systemd/network/wg0.network는 다음과 같이 보일 수 있습니다.

    [Match]
    Name=wg0
    
    [Network]
    Address=10.0.0.1/24
    IPMasquerade=both
    


    참고할 사항이 몇 가지 있습니다.
  • /24 네트워크 마스크가 사용되기 때문에 systemd-networkd는 전체 네트워크가 WireGuard 터널을 통해 라우팅되도록 경로를 자동으로 추가합니다. 해당 마스크가 없으면 시스템에서 라우팅을 적절하게 구성하는 것은 사용자에게 달려 있습니다.
  • IPMasquerade 설정은 서버가 인터넷에 대한 게이트웨이로 사용될 것으로 예상되는 경우에만 필요합니다. 이 옵션이 없으면 사용자가 방화벽을 적절하게 구성해야 합니다.

  • 네트워크 장치와 네트워크가 모두 구성된 경우 남은 유일한 단계는 최신 구성을 연결하고 적용하기 위해 실행$ networkctl reload하는 것입니다.

    좋은 웹페이지 즐겨찾기