WireGuard jako standardowy VPN tylko dla systemu Linux

LinGruby | 2020-03-06 08:01:30 UTC | #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 ;-)

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://forum.lvlup.pro/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 | 2018-11-23 20:56:55 UTC | #2

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

[quote=”LinGruby, post:1, topic:9020”]
namo wg0.conf
[/quote]
tutaj powinno być nano

[quote=”LinGruby, post:1, topic:9020”]
apt install wireguard-tols
[/quote]

[quote=”LinGruby, post:1, topic:9020”]
pacman -S wireguard-tols
[/quote]

tutaj powinno być wireguard-tools

A co do poradnika to przydatny :)


LinGruby | 2018-11-23 21:15:40 UTC | #3

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


IceMelt | 2018-11-23 21:55:12 UTC | #4

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

[quote=”LinGruby, post:1, topic:9020”]
teraz musimy edytujemy plik wg0.config
[/quote]

edytować*

[quote=”LinGruby, post:1, topic:9020”]
gdzie tu gdzie jest IFACE Ty wpisujesz swoj interfejs
[/quote]

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

[quote=”LinGruby, post:1, topic:9020”]
wypadało by
[/quote]

wypadałoby*

[quote=”LinGruby, post:1, topic:9020”]
WireGurd
[/quote]

WireGuard* (x2)

[quote=”LinGruby, post:1, topic:9020”]
dział
[/quote]

WireGuard działa*

[quote=”LinGruby, post:1, topic:9020”]
teraz jak chcemy u klienta coby WireGuard startował sam po reboot
[/quote]

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.

:+1:


MTGmati | 2018-12-10 17:58:30 UTC | #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).


LinGruby | 2018-12-10 18:16:17 UTC | #6

[quote=”MTGmati, post:5, topic:9020”]
(port 5182 dodałem do whitelisty UDP oraz iptables przed uruchomieniem wyczyściłem).
[/quote]

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 | 2018-12-11 12:52:26 UTC | #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)?


LinGruby | 2018-12-11 21:14:54 UTC | #8

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://forum.lvlup.pro/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:

https://www.wireguard.com/


MTGmati | 2018-12-14 04:55:29 UTC | #9

[quote=”LinGruby, post:8, topic:9020”]
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
[/quote]

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 | 2018-12-12 01:18:48 UTC | #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 )


LinGruby | 2018-12-13 09:00:03 UTC | #12

[quote=”MTGmati, post:11, topic:9020”]
a istnieje możliwość wykluczenia portu/ów z tunelowania?
[/quote]

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

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

[quote=”LinGruby, post:8, topic:9020”]
A więcej szczegółów może znajdziesz na:

|128x128

https://www.wireguard.com/
[/quote]


LinGruby | 2020-03-06 08:04:30 UTC | #13

mały dodatek na końcu poradnika…


Axerr | 2022-03-02 09:19:31 UTC | #15

[quote=”LinGruby, post:1, topic:9020”]
puki
[/quote]

póki*


musicgames_tv | 2022-04-26 12:18:44 UTC | #16

Gut