
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 {{Kernel-based_Virtual_Machine|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 {{WireGuard|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.conf
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/32
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).
{{WireGuard|WireGuarda}} uruchamiamy poleceniem
wg-quick up wg0
Zatrzymujemy analogicznie:
wg-quick down wg0
Lub, dodajemy do autostartu:
sudo systemctl enable wg-quick@wg0.service
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.
Tak w sumie, to w jaki sposób zabezpieczasz VPN przed nieporządanym dostępem?
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.