Instalacja WireGuard na Ubuntu 19.10

Po kilku latach korzystania z VPS na OpenVZ u ViPower.pl – nadszedł czas na zmiany. Po pierwsze, zmiana usługodawcy – i tutaj padło na OVH.pl. Po drugie, postanowiłem zmienić system wirtualizacji na KVM. Po trzecie, w związku z przenosinami, chciałem zmienić dystrybucję z CentOS na Ubuntu. A po czwarte i ostatnie, skoro już wszystko konfigurowałem od zera, naszło mnie na zmianę OpenVPN na {WireGuard, o którym czytałem sporo dobrego.

Konfiguracja i instalacja WireGuarda to czysta poezja. W przeciwieństwie do OpenVPN nie było żadnych kombinacji i komplikacji. Tym bardziej, że w moim przypadku tunel działa zarówno w celu przekierowywania całego ruchu przez serwer, jak i tworzenia sieci wewnętrznej. Jedyne problemy, na jakie napotkałem, dotyczyły wyłącznie konfiguracji firewalla i przekierowywania przez niego ruchu. Wszystkie opisy, jakie znajdywałem, nie rozwiązywały mojego problemu. Pomocny okazał się mój wpis sprzed lat z konfiguracji OpenVPN i te same reguły dla iptables.

Instalacja WireGuard

sudo add-apt-repository ppa:wireguard/wireguard
sudo apt update
sudo apt install wireguard

Dajemy dziać się magii ;).

Konfiguracja serwera WireGuard

Bardzo ważna rzecz, na samym początku to włączenie przekierowywania ruchu w samym systemie.

nano /etc/sysctl.conf

I „odhaszowanie” linii

net.ipv4.ip_forward=1

Tworzymy konfig WireGuarda i klucze

cd /etc/wireguard
umask 077
sudo wg genkey > private-key
sudo wg pubkey > public-key < private-key
nano wg0.confCode language: PHP (php)

Ostatnia komenda utworzy nam plik konfiguracyjny wg0.conf. Jego zawartość w moim przypadku prezentuje się następująco:

[Interface]
Address = 10.0.0.1/24
PostUp = iptables -t nat -A POSTROUTING -o ens3 -j SNAT --to-source 123.456.789.1; iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source 123.456.789.1; iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT; iptables -A FORWARD -s 10.0.0.0/24 -j ACCEPT; iptables -A FORWARD -j REJECT; iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o ens3; iptables -t nat -A POSTROUTING -j SNAT --to-source 123.456.789.1
PostDown = iptables -t nat -D POSTROUTING -o ens3 -j SNAT --to-source 123.456.789.1; iptables -t nat -D POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source 123.456.789.1; iptables -D FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT; iptables -D FORWARD -s 10.0.0.0/24 -j ACCEPT; iptables -D FORWARD -j REJECT; iptables -t nat -D POSTROUTING -s 10.0.0.0/24 -o ens3; iptables -t nat -D POSTROUTING -j SNAT --to-source 123.456.789.1
ListenPort = 443
PrivateKey = #wygenerowany prywatny klucz serwera z private-key
#konfiguracja pierwszego klienta
[Peer]
PublicKey = #wygenerowany publiczny klucz klienta nr 1
AllowedIPs = 10.0.0.2/32
#konfiguracja drugiego klienta
[Peer]
PublicKey = #wygenerowany publiczny klucz klienta nr 2
AllowedIPs = 10.0.0.3/32Code language: PHP (php)

Oczywiście IP 123.456.789.1 zamieniamy IP naszego serwera. Należy pamiętać również o odblokowaniu na firewallu portu nasłuchu. W przeciwieństwie do OpenVPN WireGuard nasłuchuje na portach UDP, a nie TCP. Ja korzystam z portu 443, by uniknąć sytuacji zablokowanego dostępu w sieciach publicznych (bezpłatne WiFi).

WireGuarda uruchamiamy poleceniem

wg-quick up wg0

Zatrzymujemy analogicznie:

wg-quick down wg0

Lub, dodajemy do autostartu:

sudo systemctl enable wg-quick@wg0.serviceCode language: CSS (css)

Sprawdzenie stanu działania usługi, za pomocą polecenia wg. Wynik:

interface: wg0
public key: klucz publiczny serwera
private key: (hidden)
listening port: 443
peer: klucz publiczny peera 2
endpoint: IP:port
allowed ips: 10.0.0.3/32
latest handshake: 3 days, 3 hours, 37 minutes, 48 seconds ago
transfer: 1.45 MiB received, 8.09 MiB sent
peer: klucz publiczny peera 1
allowed ips: 10.0.0.2/32

Konfiguracja peera

[Interface]
PrivateKey = #klucz prywatny peera 1
Address = 10.0.0.2/32
[Peer]
PublicKey = #klucz publiczny serwera
AllowedIPs = 0.0.0.0/0 #dzięki temu przekierowywany jest cały ruch przez serwer
Endpoint = adres IP serwera:443
PersistentKeepalive = 25

Tyle :) powinno działać wszystko. W razie pytań zapraszam do dyskusji.


Komentarze

2 odpowiedzi na „Instalacja WireGuard na Ubuntu 19.10”

  1. Tak w sumie, to w jaki sposób zabezpieczasz VPN przed nieporządanym dostępem?

    1. Jeśli pytasz o WireGuard to on ma autoryzację za pomocą kluczy. Każdy klient i serwer musi mieć wygenerowaną parę kluczy (prywatny i publiczny). Serwer w konfiguracji musi mieć swój klucz prywatny i publiczny peera. Analogicznie – peer ma prywatny klucz swój i publiczny serwera.

      Możnaby to porównać do loginu i hasła. Albo autoryzacji za pomocą kluczy przez SSH.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *