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.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).
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.
Dodaj komentarz