Oma VPN VPS-il WireGuardiga: seadistus samm-sammult

02 May 2026 Autor: Roman Sokolov

Käivita serveris ühe käsuga (kontrolli enne skripti sisu allpool):

curl -sSL https://cp.lv/scripts/svoj-vpn-wireguard.sh | sudo bash

…või wgetiga:

wget -qO- https://cp.lv/scripts/svoj-vpn-wireguard.sh | sudo bash

Skripti sisu svoj-vpn-wireguard.sh:

#!/usr/bin/env bash
# Your own WireGuard VPN: server plus the first client (Ubuntu/Debian)
set -euo pipefail

WG_DIR=/etc/wireguard
SERVER_IP=$(curl -s ifconfig.me)
WAN_IF=$(ip route list default | awk '{print $5; exit}')

# 1. Install
sudo apt update && sudo apt install -y wireguard wireguard-tools qrencode

# 2. Server and client keys
cd "$WG_DIR"
umask 077
wg genkey | sudo tee server_private.key | wg pubkey | sudo tee server_public.key
wg genkey | sudo tee client_private.key | wg pubkey | sudo tee client_public.key
SRV_PRIV=$(sudo cat server_private.key)
SRV_PUB=$(sudo cat server_public.key)
CLI_PRIV=$(sudo cat client_private.key)
CLI_PUB=$(sudo cat client_public.key)

# 3. Server config (variables are expanded)
sudo tee "$WG_DIR/wg0.conf" > /dev/null << EOF
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = ${SRV_PRIV}
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ${WAN_IF} -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ${WAN_IF} -j MASQUERADE

[Peer]
PublicKey = ${CLI_PUB}
AllowedIPs = 10.8.0.2/32
EOF

# 4. Enable IP forwarding
echo "net.ipv4.ip_forward = 1" | sudo tee /etc/sysctl.d/99-wireguard.conf
sudo sysctl -p /etc/sysctl.d/99-wireguard.conf

# 5. Client config
sudo tee "$WG_DIR/client.conf" > /dev/null << EOF
[Interface]
PrivateKey = ${CLI_PRIV}
Address = 10.8.0.2/24
DNS = 1.1.1.1

[Peer]
PublicKey = ${SRV_PUB}
Endpoint = ${SERVER_IP}:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
EOF

# 6. Firewall and start
sudo ufw allow 51820/udp || true
sudo systemctl enable --now wg-quick@wg0
sudo qrencode -t ansiutf8 < "$WG_DIR/client.conf"
echo "Done: the VPN is up, client config is at $WG_DIR/client.conf"

Oma VPN WireGuardiga saab püsti panna 15 minutiga: paigaldada pakett, genereerida võtmepaar, kirjeldada serveris liides wg0, lülitada sisse IP-edastus ja lisada klient. Allpool on täielik käskude jada Ubuntu/Debiani jaoks mis tahes VPS-il.

Miks just WireGuard

WireGuard on sisse ehitatud Linuxi tuuma, kasutab kaasaegset krüptograafiat (Curve25519, ChaCha20) ja töötab OpenVPN-ist kiiremini, kuigi koodi on kordades vähem. Konfiguratsioon on kaks lühikest faili. Isikliku VPN-i jaoks on sellest enam kui küll.

Miinimumnõuded: VPS 1 vCPU ja 512 MB RAM-iga, avalik IPv4, root-ligipääs. VPN-i jaoks sobib iga soodne pakett — krüpteerimine protsessorit peaaegu ei koorma.

1. samm. Paigaldamine

apt update && apt upgrade -y
apt install -y wireguard wireguard-tools

2. samm. Serveri võtmete genereerimine

cd /etc/wireguard
umask 077
wg genkey | tee server_private.key | wg pubkey > server_public.key
cat server_private.key
cat server_public.key

umask 077 kaitseb privaatvõtit teiste kasutajate eest. Salvestage mõlemad väärtused — need lähevad konfiguratsioonis vaja.

3. samm. Serveri konfiguratsioon

Tuvastage välimine võrguliides:

ip route list default

Tavaliselt on see eth0 või ens3. Avage /etc/wireguard/wg0.conf redaktoris (sudo nano /etc/wireguard/wg0.conf) ja lisage sisu:

[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = <server_private.key>
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

Või looge fail tervikuna ühe käsuga — kopeerige ja kleepige konsooli (jutumärgid 'EOF' hoiavad kohatäited muutumatuna):

sudo tee /etc/wireguard/wg0.conf > /dev/null << 'EOF'
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = <server_private.key>
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
EOF

Asendage eth0 oma liidese nimega ja lisage serveri privaatvõti.

4. samm. IP-edastuse sisselülitamine

Ilma selleta ei suuna server klientide liiklust internetti:

echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/99-wireguard.conf
sysctl -p /etc/sysctl.d/99-wireguard.conf

5. samm. Kliendi võtmed ja konfiguratsioon

Genereerige kliendile võtmepaar:

wg genkey | tee client_private.key | wg pubkey > client_public.key

Avage kliendiseadmes fail client.conf redaktoris (nano client.conf) ja lisage sisu:

[Interface]
PrivateKey = <client_private.key>
Address = 10.8.0.2/24
DNS = 1.1.1.1

[Peer]
PublicKey = <server_public.key>
Endpoint = <teie_VPS_IP>:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

Või kirjutage fail tervikuna ühe käsuga (jutumärgid 'EOF' jätavad kohatäited muutumatuks):

tee client.conf > /dev/null << 'EOF'
[Interface]
PrivateKey = <client_private.key>
Address = 10.8.0.2/24
DNS = 1.1.1.1

[Peer]
PublicKey = <server_public.key>
Endpoint = <teie_VPS_IP>:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
EOF

AllowedIPs = 0.0.0.0/0 suunab kogu liikluse läbi VPN-i. PersistentKeepalive = 25 hoiab ühenduse NAT-i taga elus.

6. samm. Kliendi registreerimine serveris

Lisage faili /etc/wireguard/wg0.conf lõppu:

[Peer]
PublicKey = <client_public.key>
AllowedIPs = 10.8.0.2/32

7. samm. Käivitamine

systemctl enable --now wg-quick@wg0
systemctl status wg-quick@wg0
wg show

Avage port tulemüüris (kui kasutate ufw-d):

ufw allow 51820/udp

Kliendi ühendamine

Telefonis on mugav konfiguratsioon importida QR-koodiga:

apt install -y qrencode
qrencode -t ansiutf8 < client.conf

Skaneerige kood WireGuardi rakenduses — ühendus luuakse automaatselt.

Kontroll

Pärast ühendumist kontrollige välist IP-d:

curl ifconfig.me

Tagastuma peab teie VPS-i IP. Kui ei tagasta, kontrollige IP-edastust ja MASQUERADE-reeglit.

Mitme kliendi lisamine

Iga seade vajab oma võtmepaari ja oma IP-d alamvõrgust. Genereerige teisele kliendile võtmed:

cd /etc/wireguard
wg genkey | tee client2_private.key | wg pubkey > client2_public.key

Lisage faili /etc/wireguard/wg0.conf uus plokk:

[Peer]
PublicKey = <client2_public.key>
AllowedIPs = 10.8.0.3/32

Rakendage muudatused olemasolevaid ühendusi katkestamata:

wg syncconf wg0 <(wg-quick strip wg0)

Nii loetakse konfiguratsioon lennult uuesti sisse ja aktiivsed partnerid ei kuku ära.

Varundamine ja taastamine

Kõik VPN-i seaded on kaustas /etc/wireguard. Salvestage need turvalisse kohta:

tar czf wireguard-backup.tar.gz /etc/wireguard

Uuele serverile kolides pakkige arhiiv lahti, paigaldage wireguard-tools ja käivitage wg-quick@wg0 — klientidel pole vaja midagi muuta, kui serveri IP jäi samaks.

Kontroll pärast taaskäivitust

Veenduge, et liides tõuseb automaatselt:

reboot
# pärast sisselogimist
wg show
systemctl is-enabled wg-quick@wg0

Vastus enabled kinnitab automaatkäivitust. Kui liides ei tõusnud, vaadake journalctl -u wg-quick@wg0.

Liidese turvalisus

Serveri privaatvõti on kõige tundlikum fail. Kontrollige õigusi:

chmod 600 /etc/wireguard/*.key /etc/wireguard/wg0.conf

Ärge saatke privaatvõtmeid krüpteerimata kanalite kaudu ja genereerige igale seadmele eraldi paar — nii ei paljasta ühe kliendi kompromiteerimine ülejäänuid.

Korduma kippuvad küsimused

Mitu seadet saab ühendada? Nii palju kui vaja. Iga seadme jaoks lisage eraldi [Peer] plokk unikaalse AllowedIPs väärtusega (10.8.0.3/32, 10.8.0.4/32 jne).

Kas WireGuard töötab ainult UDP-portidel? Jah, WireGuard kasutab ainult UDP-d. Veenduge, et sideoperaator ja tulemüür valitud porti ei blokeeri.

Kuidas parandada DNS-i privaatsust? Määrake kliendis DNS = 1.1.1.1 või püstitage samale VPS-ile oma resolver.

Kas porti 51820 saab muuta? Jah, muutke serveri konfiguratsioonis ListenPort ja klientidel Endpoint ning avage tulemüüris uus port.

Kas VPN vajab eraldi serverit? Eraldi VPS isoleerib VPN-i muudest ülesannetest ja lihtsustab ligipääsu haldamist. Isiklikuks kasutuseks piisab kõige kergemast paketist.


Valmis oma VPN-i püstitama? Võtke VPS turvalisuse ja VPN-i jaoks või tavaline VPS-i rent. Pole aega seadistamiseks — aitab Serverite haldus.

Roman Sokolov