WireGuard jako standardowy VPN tylko dla systemu Linux

Witam

Jak od paru dni korzystam z powodzeniem z WireGuard VPN to postanowieniem pokazać jak zaprzęgnąć
go do pracy jak standardowy VPN, jako tunel pokazał już @DBanaszewski :wink:

potrzebujemy do tego jakiś serwer KVM + jakiś system niestety puki co tylko Linux lub BSD
ale ja pokarzę dla pary Linux - Linux


Instalacja Serwera WireGuard

Czyli na początku musimy zaktualizować system na KVM

dla systemów Ubuntu Serwer wszystkie komendy dla konta root:

apt update && apt upgrade 

potem instalujemy potrzebne nam pakiety:

apt install software-properties-common python-software-properties
add-apt-repository ppa:wireguard/wireguard
apt update
apt install wireguard-tools wireguard-dkms

zatwierdzamy jak jest coś do zatwierdzenia

przechodzimy teraz do właściwej konfiguracji a więc idziemy do katalogu

cd /etc/wireguard

tam wykonujemy następujące komendy generujemy potrzebne nam klucze

umask 077
wg genkey | tee privatekey | wg pubkey > publickey

potem musimy te klucze zapisać bo będą potrzebne w dalszej części konfiguracji

cat privatekey
cat publickey

najlepiej zapisać żeby nie zginęły

teraz edytujemy plik wg0.config

nano wg0.conf

i dodajemy następującą zawartość

[Interface]
Address = 10.168.3.1/24
SaveConfig = true
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o IFACE -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o IFACE -j MASQUERADE
ListenPort = 51820
PrivateKey = klucz serwera

[Peer]
PublicKey = klucz klienta
AllowedIPs = 10.168.3.2/32

tu gdzie jest IFACE Ty wpisujesz swój interfejs
klucz klienta - będzie w sekcji gdzie będziemy instalować ustawienia dla klienta


Instalacja WireGuard u klienta

Jako że posiadam Arch Linux to komendy będą ale tego Linux’a

aktualizacja systemu

pacman -Syu 

teraz instalujemy potrzebne paczki

pacman -S wireguard-tools wireguard-dkms

teraz tworzymy klucze przechodząc do

cd /etc/wireguard

a następnie

umask 077
wg genkey | tee privatekey | wg pubkey > publickey

edytujemy klucze

cat privatekey
cat publickey

zapisujemy i uzupełniamy na serwerze w privatekey

przechodzimy do edycji wg0.conf

nano wg0.conf

i dodajemy następującą zawartość

[Interface]
Address = 10.168.3.2/24
PostUp = echo nameserver dns | resolvconf -a tun.%i -m 0 -x
PostDown = resolvconf -d tun.%i
ListenPort = 51820
PrivateKey = klucz klienta

[Peer]
PublicKey = klucz serwera
AllowedIPs = 0.0.0.0/0
Endpoint = ip publiczne serwera:51820

tu gdzie jest dns wpisujesz dns z jakiego chcesz korzystać

To by było na tyle jeśli chodzi o konfigurację po stronie serwera i klienta

Ważne dla systemów Ubuntu pochodnych instalacja dla klienta jest taka sama jak dla serwera :wink:

No to teraz wypadało by wszystko odpalić a mianowicie

na serwerze

systemctl start wg-quick@wg0.service

żeby po jakimkolwiek reboot serwer WireGuard wystartował sam

systemctl enable wg-quick@wg0.service

teraz sprawdzamy czy na serwerze działa poprawnie

systemctl status wg-quick@wg0.service

jeśli zobaczymy

● wg-quick@wg0.service - WireGuard via wg-quick(8) for wg0
   Loaded: loaded (/lib/systemd/system/wg-quick@.service; enabled; vendor preset: enabled)
   Active: active (exited) since sob 2018-11-17 19:01:49 CET; 1 day 15h ago
     Docs: man:wg-quick(8)
           man:wg(8)
           https://www.wireguard.com/
           https://www.wireguard.com/quickstart/
           https://git.zx2c4.com/WireGuard/about/src/tools/man/wg-quick.8
           https://git.zx2c4.com/WireGuard/about/src/tools/man/wg.8
 Main PID: 712 (code=exited, status=0/SUCCESS)

lis 17 19:01:49 ip229 systemd[1]: Starting WireGuard via wg-quick(8) for wg0...
lis 17 19:01:49 ip229 wg-quick[712]: [#] ip link add wg0 type wireguard
lis 17 19:01:49 ip229 wg-quick[712]: [#] wg setconf wg0 /dev/fd/63
lis 17 19:01:49 ip229 wg-quick[712]: [#] ip address add 10.168.3.1/24 dev wg0
lis 17 19:01:49 ip229 wg-quick[712]: [#] ip link set mtu 1420 dev wg0
lis 17 19:01:49 ip229 wg-quick[712]: [#] ip link set wg0 up
lis 17 19:01:49 ip229 wg-quick[712]: [#] iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
lis 17 19:01:49 ip229 systemd[1]: Started WireGuard via wg-quick(8) for wg0.

znaczy że wszystko działa poprawnie

teraz jak chcemy u klienta żeby WireGuard startował sam po reboot

wykonujemy takie same komendy jak na serwerze

u mnie wygląda to tak

● wg-quick@wg0.service - WireGuard via wg-quick(8) for wg0
   Loaded: loaded (/usr/lib/systemd/system/wg-quick@.service; enabled; vendor preset: disabled)
   Active: active (exited) since Mon 2018-11-19 10:47:52 CET; 3s ago
     Docs: man:wg-quick(8)
           man:wg(8)
           https://www.wireguard.com/
           https://www.wireguard.com/quickstart/
           https://git.zx2c4.com/WireGuard/about/src/tools/man/wg-quick.8
           https://git.zx2c4.com/WireGuard/about/src/tools/man/wg.8
  Process: 32478 ExecStop=/usr/bin/wg-quick down wg0 (code=exited, status=0/SUCCESS)
  Process: 32542 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=0/SUCCESS)
 Main PID: 32542 (code=exited, status=0/SUCCESS)

lis 19 10:47:52 arch-bspwm wg-quick[32542]: [#] wg setconf wg0 /dev/fd/63
lis 19 10:47:52 arch-bspwm wg-quick[32542]: [#] ip address add 10.168.3.2/24 dev wg0
lis 19 10:47:52 arch-bspwm wg-quick[32542]: [#] ip link set mtu 1420 dev wg0
lis 19 10:47:52 arch-bspwm wg-quick[32542]: [#] ip link set wg0 up
lis 19 10:47:52 arch-bspwm wg-quick[32542]: [#] wg set wg0 fwmark 51820
lis 19 10:47:52 arch-bspwm wg-quick[32542]: [#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820
lis 19 10:47:52 arch-bspwm wg-quick[32542]: [#] ip -4 rule add not fwmark 51820 table 51820
lis 19 10:47:52 arch-bspwm wg-quick[32542]: [#] ip -4 rule add table main suppress_prefixlength 0
lis 19 10:47:52 arch-bspwm wg-quick[32542]: [#] echo nameserver 1.0.0.1 | resolvconf -a tun.wg0 -m 0 -x

no chyba że ktoś nie chce żeby WireGuard starował u klienta samoczynnie to wystarczy

wg-quick up wg0

a jak chcemy wyłączyć vpn

wg-quick down wg0

Teraz w prosty sposób możemy sprawdzić czy WireGuard działa na serwerze jak i u klienta

na serwerze

wg show 

interface: wg0
  public key: klucz serwera
  private key: (hidden)
  listening port: 51820

peer: klucz klienta
  endpoint: ip klienta:51820
  allowed ips: 10.168.3.2/32
  latest handshake: 17 seconds ago
  transfer: 40.45 KiB received, 39.16 KiB sent

u klienta

wg show   

interface: wg0
  public key: klucz klienta
  private key: (hidden)
  listening port: 51820
  fwmark: 0xca6c

peer: klucz serwera
  endpoint: ip publiczne serwera:51820
  allowed ips: 0.0.0.0/0
  latest handshake: 16 seconds ago
  transfer: 2.50 MiB received, 870.43 KiB sent

a żeby zobaczyć jeszcze w necie przechodzimy na:

http://whatismyip.network/proxy-check-tool-detect-how-isp-transparent/

jeśli zobaczymy IP serwera KVM

i coś takiego

A Proxy, VPN IP or TOR exit Node was detected.
Your real IP address is hidden.
For more info, leave a comment below.

to jest wszystko ok.


Czym się posiłkowałem w pisaniu poradnika

https://www.wireguard.com/install/

https://research.kudelskisecurity.com/2017/06/07/installing-wireguard-the-modern-vpn/


A tu testy VPN


mały dodatek z poglądowymi przykładami i bardziej szczegółowym opisem…


Od siebie dodam że jest szybszy od OpenVPN z którego korzystałem bez przerwy od ponad 2 lat :wink:

Pozdrawiam i życzę miłego korzystania :smiley:

4lajki

Dwa błędy się wtargnęły :wink:

tutaj powinno być nano

tutaj powinno być wireguard-tools

A co do poradnika to przydatny :slight_smile:

no jeszcze parę znalazłem literówek :smiley:

1lajk

To i ja znajdę pare literówek :slight_smile:

edytować*

Hm, może lepiej tam gdzie jest IFACE - wpisujemy swój interfejs, bardziej oficjalniej i lepiej wygląda :wink:

wypadałoby*

WireGuard* (x2)

WireGuard działa*

Jest jeszcze trochę błędów z interpunkcją, ale myślę że tu nie ma co poprawiać :wink:
Błędów w komendach nie znalazłem, ale poradnik przydatny.

:+1:

1lajk

Postąpiłem zgodnie z instrukcją instalacji, utworzyłem plik wg0.conf oraz uzupełniłem wygenerowane klucze w wyznaczone miejsca.
Uruchomiłem serwer oraz klienta, sprawdziłem status połączenia z wg show, port, adresy oraz latest handshake - pobierana poprawnie. Problem polega na braku transferu ze strony klienta do serwera VPN. (port 5182 dodałem do whitelisty UDP oraz iptables przed uruchomieniem wyczyściłem).

nigdy nie bawiłem się z whitelist UDP więc nie powiem czemu nie działa :slight_smile:
u mnie komunikacja jest w obie strony bez problemu…
a wszystko co jest w poradniku to robiłem u siebie ( tylko nie kombinowałem nic z whitelist )
a co do portu to może coś już wykorzystuje?
acz nie wiem czy coś może pracować jeszcze na porcie 5182

Udało się, łącze działa poprawnie, mam jeszcze pytanie, ponieważ, kiedy używam clienta, (na drugim serwerze VPS) to połączenie przez IP PUBLIC Clienta jest zrywane i niedostępne. Pytanie brzmi, w jaki sposób mogę utworzyć blackdora który pozwoli mi na połączenie do Clienta przez jego publiczny adres (aby odpowiadał na ping oraz połączenie ssh)?

Dokładnie nie łapę o co Tobie chodzi :wink:
Ale z tego co widzę ( acz się domyślam ) to postawiłeś VPN:
VPS > VPS
Nie testowałem tego bo nie mam potrzeby puki co łączyć się do swojej sieci domowej która robi za Clienta a co do VPS na którym jest WG VPN to łączę się bez problemu czy to przez IP publiczne czy przez IP tunelowe i to po SSH
U mnie to połączenia działa cały czas client > serwer
z racji że cały czas siedzę na VPN ( z pewnych względów )

@MTGmati jak chciałeś mieć tylko tunel to trzeba było wykorzystać

tunelowanie działa poprawnie bo sprawdzałem zanim postawiłem 100% VPN :wink:


A więcej szczegółów może znajdziesz na:

https://www.wireguard.com/

Tak z tym też nie mam problemu, połączenie pomiędzy Clientem a VPNem lub JA -> VPN działa, pytanie brzmi jak mogę uzyskać dostęp do klienta nie przez połączenie LAN tylko JA -> VPS(Client)

To znaczy u mnie jest tak

JA ( client ) --> > VPS ( VPN serwer )  // tak u mnie wygląda

nie łączyłem dwóch VPS bo i po co ( jeden VPS spełnia jedną rolę / drugi VPS spełnia inną rołę )


no chyba że nie łapę ( bo akurat nad czymś innym pracuję ) i myśli mam rozbiegane ( czasu brak )

nie testowałem ma robić jako VPN i robi…

no na to to może znajdziesz odpowiedź niżej :wink:

mały dodatek na końcu poradnika…

1lajk