WireGuard jako standardowy VPN tylko dla systemu Linux

Poradniki społeczności
LinGruby
LinGruby Pionier

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

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

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

https://lvlup.rok.ovh/t/pochwal-sie-jakie-masz-lacze-neta/650/#134


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

https://github.com/pirate/wireguard-docs


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

Pozdrawiam i życzę miłego korzystania :-D

anon40709621
anon40709621

Dwa błędy się wtargnęły ;)

LinGruby:

namo wg0.conf tutaj powinno być nano

LinGruby:

apt install wireguard-tols

LinGruby:

pacman -S wireguard-tols

tutaj powinno być wireguard-tools

A co do poradnika to przydatny :)

LinGruby
LinGruby Pionier

no jeszcze parę znalazłem literówek :-D

IceMelt
IceMelt

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

LinGruby:

teraz musimy edytujemy plik wg0.config

edytować*

LinGruby:

gdzie tu gdzie jest IFACE Ty wpisujesz swoj interfejs

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

LinGruby:

wypadało by

wypadałoby*

LinGruby:

WireGurd

WireGuard* (x2)

LinGruby:

dział

WireGuard działa*

LinGruby:

teraz jak chcemy u klienta coby WireGuard startował sam po reboot

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

👍

MTGmati
MTGmati

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

LinGruby
LinGruby Pionier

MTGmati:

(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 :-) 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

MTGmati
MTGmati

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

LinGruby
LinGruby Pionier

Dokładnie nie łapę o co Tobie chodzi ;-) 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ć

https://lvlup.rok.ovh/t/uzycie-wireguard-do-zabezpieczenia-ruchu-mysql-i-nie-tylko-pomiedzy-2-vps-kvm/8102

tunelowanie działa poprawnie bo sprawdzałem zanim postawiłem 100% VPN ;-)


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

undefined

https://www.wireguard.com/

MTGmati
MTGmati

LinGruby:

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

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)

LinGruby
LinGruby Pionier

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 )

LinGruby
LinGruby Pionier

MTGmati:

a istnieje możliwość wykluczenia portu/ów z tunelowania?

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

no na to to może znajdziesz odpowiedź niżej ;-)

LinGruby:

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

|128x128

https://www.wireguard.com/

LinGruby
LinGruby Pionier

mały dodatek na końcu poradnika...

Axerr
Axerr

LinGruby:

puki

póki*

musicgames_tv
musicgames_tv