WireGuard jako standardowy VPN tylko dla systemu Linux

Witam

Jak od prawie dwóch miesięcy korzystam z powodzeniem z WireGuard VPN to postanowieniem pokazać jak zaprzęgnąć
go do pracy jak standardowy VPN :wink:

potrzebujemy do tego jakiś serwer KVM + jakiś system niestety póki co tylko Linux lub BSD
ale ja pokażę 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

Installation - WireGuard

Installing WireGuard, the Modern VPN – Kudelski Security Research


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:

1 polubienie

Witam, jestem początkujacy w linuksie, z OpenVPN sobie poradziłem, ale nie moge poradzic z WG, dodałem repo, zainstalowałem paczke, ake gdy wpisuje cd /etc/wireguard dostaje komunikat
bash: cd: /etc/wireguard: Brak dostępu
nie wiem czego to moze byc przyczyna
Pozdrawiam

taka przyczyna jaka dostałeś odpowiedź…
czyli albo będziesz albo robił przez sudo lub su
acz wspomniałem na początku:

co prawda wspomniałem tylko na początku co do serwera, ale sądziłem że to logiczne że przy reszcie też…
tym bardziej że użytkownik stricte nie ma dostępu do /etc/wiregurard/ więc logiczne jw. przez sudo lub su

Uściślijcie panowie, bo nie mam pewności (ani WireGuard):
/etc/wireguard jest katalogiem i user nie ma do niego dostępu, czy … jest plikiem i dlatego komenda cd zwraca błąd?

uściślam:

screenshot.248

┌─┤root at arch-bspwm├─╼ ~
└╼ »  cd /etc/wireguard                                                                                                              ┤0├  ┤587├  ┤11 mar 2020 14:40:34├
┌─┤root at arch-bspwm├─╼ /etc/wireguard
└╼ »  ls                                                                                                                             ┤0├  ┤588├  ┤11 mar 2020 14:40:44├
privatekey  publickey  wg0.conf
┌─┤root at arch-bspwm├─╼ /etc/wireguard
└╼ »                                                                                                                                 ┤0├  ┤589├  ┤11 mar 2020 14:41:40├

a jak robił to wszystko z konta użytkownika to dostał taki komunikat :wink:

┌─┤lingruby at arch-bspwm├─╼ ~
└╼ »  cd /etc/wiregard                                                                                                               ┤0├  ┤446├  ┤11 mar 2020 14:37:27├
cd: nie ma takiego pliku ani katalogu: /etc/wiregard
┌─┤lingruby at arch-bspwm├─╼ ~
└╼ »                                                                                                                                 ┤1├  ┤447├  ┤11 mar 2020 14:37:42├
1 polubienie

Pliki wewnątrz mają ‘standardowe’ uprawnienia i mogą być czytane przez wszystkich. Pokaż jeszcze uprawnienia samego katalogu:

$ ls -ld /etc/wireguard

ale tu nie chodzi o czytanie tylko o to że jako user nie mógł tam wejść i generować kluczy i zapisać konfiguracji, to co co pokazałem co tam jest to po całym zabiegu…


a co do uprawnień proszę:

┌─┤lingruby at arch-bspwm├─╼ ~
└╼ »  ls -ld /etc/wireguard                                                                                                          ┤0├  ┤449├  ┤11 mar 2020 15:22:27├
drwxr-xr-x 2 root root 4096 śro 04-03-2020 204105 /etc/wireguard
┌─┤lingruby at arch-bspwm├─╼ ~
└╼ »                                                                                                                                 ┤0├  ┤449├  ┤11 mar 2020 15:24:53├

i jakie uprawnienia ma katalog to akurat nie ma związku z poradnikiem…

wspomniałem jw. jako root komendy :wink:

Czyli /etc/wireguard ma 755, więc wszyscy mają do niego dostęp. Dlaczego zatem, komenda cd /etc/wireguard daje komunikat błędu o braku dostępu? Chyba, że użytkownik zmajstrował jakąś literówkę, albo u niego ten katalog ma inne uprawnienia.
@pazdzioch, sprawdź to.
@LinGruby, nie piję do poradnika, tylko do komunikatu błędu.

@azja ja nic nie majstrowałem a mam tak samo jak pokazałem, i to w czym popełnił błąd podałem mu w odpowiedzi dość wyczerpująco…
a wnikanie co i jak w kwestii uprawnień nie ma sensu…
wszystko co znajduje się stricte w /etc/... ma takie same uprawnienia że użytkownik nie ma dostępu więc po co drążyć temat…

Do większości katalogów i plików zawartych w /etc user (również ten najzwyklejszy, bez admina, czyli uprawnień do użycia sudo) ma dostęp ‘read’ (pliki i katalogi) / ‘execute’ (katalogi).

1 polubienie

no to powodzenia z edycją/pracą w /etc/... na koncie użytkownika bez uprawnień…

mnie bez sudo lub su jakoś to nie wychodzi…

OK, poddaję się. Pozwolę sobie tylko na koniec i bezczelnie, jako podejrzany o ignoranctwo, zauważyć, że:

  1. 755 do katalogu pozwala każdemu do niego wejść i przeczytać listę zawartych w nim plików;
  2. Komenda cd powoduje przejście do katalogu, zazwyczaj innego niż bieżący;
  3. Dlaczego nie mogę wejść (wejść, nie edytować zawartość) do katalogu (pkt.2), skoro mogę (pkt.1)?

Idę zrobić coś pożytecznego i racjonalnego.