Krótko o Wireguard VPN

Ale co to jest VPN?

"Virtual Private Network (VPN), wirtualna sieć prywatna – tunel, przez który płynie ruch w ramach sieci prywatnej pomiędzy klientami końcowymi za pośrednictwem publicznej sieci (takiej jak Internet) w taki sposób, że węzły tej sieci są przezroczyste dla przesyłanych w ten sposób pakietów. Można opcjonalnie kompresować lub szyfrować przesyłane dane w celu zapewnienia lepszej jakości lub większego poziomu bezpieczeństwa."

"stare" protokoły VPN:

  • IPSec L2TP (1999)
  • pptp (1999)

Protokoły "industry standard":

  • IPSec + IKE/IKEv2 (1995 - 1998/2006)
  • OpenVPN (2001)

Nowy gracz na rynku:

  • Wireguard (2015)

WireGuard:

 

Bardzo prosty, ale jednocześnie szybki i bezpieczny.

Prosty?

Około 4000 linijek kodu. Łatwy do audytowania.

Szybki?

Bardzo prosty?

# wg genkey |tee privatekey |wg pubkey > publickey
# ip link add dev wg0 type wireguard

# ip address add dev wg0 10.0.0.1/24

# wg set wg0 private-key ./privatekey peer PEER-PUBKEY allowed-ips 10.0.0.2/32 endpoint  <PEER_IP>:51820

# ip link set wg0 up

Bepieczny?

  •     ChaCha20
  •     Curve25519
  •     BLAKE2s
  •     SipHash24
  •     HKDF

CryptoKey routing

WireGuard łączy dozwolone adresy IP hosta z jego kluczem publicznym i na tej podstawie decyduje o routingu.

CryptoKey routing

WireGuard łączy dozwolone adresy IP hosta z jego kluczem publicznym i na tej podstawie decyduje o routingu.

pakiet wychodzący:

  1. Mam pakiet dla 10.0.0.2, który to host? OK, to jest Ziutek!
  2. Zaszyfruj pakiet IP kluczem publicznym Ziutka.
  3. Jaki jest adres Ziutka? OK, to jest 10.11.12.13:51820 -> wyślij zaszyfrowany pakiet na ten adres (uzywając UDP).

CryptoKey routing

WireGuard łączy dozwolone adresy IP hosta z jego kluczem publicznym i na tej podstawie decyduje o routingu.

pakiet przychodzący:

  1. O kurczę! Dostałem pakiet od 10.11.12.13:7344.
  2. Pakiet udało się rozszyfrować kluczem Ziutka!
  3. Odszyfrowany pakiet pochodzi od 10.0.0.2 co jest dozwolonym IP Ziutka, przekazuję pakiet dalej.

A jakieś wady?

  • Nie jest gotowy.
  • Brak klientów i wbudowanego wsparcia.
  • Brak dynamicznych adresów.
  • Brak wsparcia dla innej autentykacji.

Gdzie się przydaje?

  • Małe routerki (moc obliczeniowa!)
  • Połączenia między DC/systemami
  • site2site
  • Access VPN dla telefonów, laptopów itp.

Przykład.

Dwie lokalizacje, każda z NAT od ISP oraz zmienny adres IP.

Serwer pośredniczący / koncentrator VPN ze stałym, publicznym adresem IP.

Wymaganie: site2site VPN.

Przykład.

Konfiguracja interfejsu:

iface wg0 inet static
  address 172.1.1.1/24
  pre-up ip link add $IFACE type wireguard
  pre-up wg setconf $IFACE /etc/wireguard/$IFACE.conf
  post-up ip route add 10.33.0.0/16 dev wg0
  post-up ip route add 10.34.0.0/16 dev wg0
  post-down ip link del $IFACE

Pytania?

 

(Dziękuję)