WireGuard jako standardowy VPN tylko dla systemu Linux


#1

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


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:


#2

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

tutaj powinno być nano

tutaj powinno być wireguard-tools

A co do poradnika to przydatny :slight_smile:


#3

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


#4

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:


#5

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


#6

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


#7

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)?


#8

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/


#9

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)[Public IP]
obraz


#10

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 )