Kā izveidot WireGuard VPN serveri uz VPS
Šī pamācība parāda, kā uz VPS ar Ubuntu 22.04 vai 24.04 uzstādīt savu WireGuard VPN serveri. Tā domāta izstrādātājiem un adminiem, kam vajadzīgs ātrs privāts tunelis attālinātai piekļuvei, drošai publiskā Wi-Fi lietošanai vai fiksētai IP adresei iekšējo servisu sasniegšanai. Beigās tev būs strādājošs serveris, viens gatavs klients un QR kods, ko noskenēt ar telefonu.
Kāpēc WireGuard
WireGuard šodien ir saprātīgā noklusējuma izvēle pašam savam VPN. Iemesli ir praktiski:
- Maza kodu bāze. Kodols ir aptuveni 4000 rindu. OpenVPN kopā ar tā TLS steku ir par vairākām kārtām lielāks, un uzbrukuma virsma aug līdz ar koda apjomu.
- Moderna kriptogrāfija, nekas nav jāizvēlas. Šifrēšanai ChaCha20-Poly1305 un atslēgu apmaiņai Curve25519 ir fiksēti. Nav šifru komplektu, ko var nokonfigurēt nepareizi.
- Realizācija kodolā. WireGuard ir Linux kodolā kopš versijas 5.6, tāpēc pat neliels VPS dzen trafiku gandrīz pilnā porta ātrumā ar zemu CPU slodzi.
- Minimāla konfigurācija. Strādājoša konfigurācija ir ap desmit rindām, un pārslēgšanās starp Wi-Fi un mobilajiem datiem notiek nemanāmi, jo sesijas ir piesaistītas atslēgām, nevis avota adresēm.
Kompromiss: WireGuard nav lietotāju pārvaldības un dinamiska adrešu pūla. Katrs klients ir atslēgu pāris plus statiska tuneļa IP adrese, ko piešķir tu pats. Vienam adminam un dažām ierīcēm tā ir priekšrocība, nevis ierobežojums.
Instalē WireGuard un ģenerē atslēgas
Visas komandas zemāk izpildi kā root. Instalē rīkus:
apt update apt install -y wireguard qrencode
Ģenerē atslēgu pāri serverim un vienu pirmajam klientam. umask nodrošina, ka privātās atslēgas nav lasāmas visiem:
cd /etc/wireguard umask 077 wg genkey | tee server.key | wg pubkey > server.pub wg genkey | tee client1.key | wg pubkey > client1.pub
Privātā atslēga nekad nepamet mašīnu, kurai tā pieder. Stingrā izvietojumā klienta atslēgu ģenerētu uz pašas klienta ierīces; pirmajai uzstādīšanai to darīt uz servera ir pieņemami, tikai izdzēs client1.key pēc konfigurācijas importēšanas telefonā.
Servera konfigurācija
Izveido /etc/wireguard/wg0.conf. Aizstāj abus aizvietotājus ar īsto server.key un client1.pub saturu:
[Interface] Address = 10.8.0.1/24 ListenPort = 51820 PrivateKey = SERVER_PRIVATE_KEY PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE [Peer] # client1, telefons PublicKey = CLIENT1_PUBLIC_KEY AllowedIPs = 10.8.0.2/32
PostUp rinda pārvērš VPS par NAT vārteju: paketes, kas ienāk no tuneļa, iziet caur publisko interfeisu ar servera IP adresi. Daudzos sistēmas attēlos publiskais interfeiss saucas ens3 vai enp1s0, nevis eth0. Pārbaudi to un pielāgo abas rindas:
ip route | grep default
NAT neko nedara bez IP pārsūtīšanas, kas Ubuntu pēc noklusējuma ir izslēgta. Ieslēdz to pastāvīgi:
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/99-wireguard.conf sysctl --system
Visbeidzot aizsargā konfigurāciju, jo tā satur privāto atslēgu:
chmod 600 /etc/wireguard/wg0.conf
Klienta konfigurācija un QR kods telefonam
Izveido client1.conf tajā pašā direktorijā. Šis fails nonāks klienta ierīcē, tāpēc tajā ir klienta privātā atslēga un servera publiskā atslēga:
[Interface] PrivateKey = CLIENT1_PRIVATE_KEY Address = 10.8.0.2/24 DNS = 1.1.1.1 [Peer] PublicKey = SERVER_PUBLIC_KEY Endpoint = YOUR_VPS_IP:51820 AllowedIPs = 0.0.0.0/0 PersistentKeepalive = 25
AllowedIPs = 0.0.0.0/0 maršrutē visu klienta trafiku caur VPN. Ja gribi sasniegt tikai servera iekšējo tīklu, tā vietā norādi konkrētus apakštīklus, piemēram 10.8.0.0/24. PersistentKeepalive uztur NAT ierakstu dzīvu mobilajos tīklos.
Telefonam instalē oficiālo WireGuard lietotni no App Store vai Google Play un attēlo konfigurāciju kā QR kodu tieši terminālī:
qrencode -t ansiutf8 < client1.conf
Lietotnē izvēlies Add tunnel, tad Scan from QR code. Failu pārsūtīšana nav vajadzīga.
Ugunsmūris un palaišana
Ja lieto ufw, atver WireGuard portu un atļauj pārsūtīto trafiku no tuneļa uz internetu:
ufw allow 51820/udp ufw route allow in on wg0 out on eth0 ufw reload
Palaid tuneli un ieslēdz to pie sistēmas starta:
systemctl enable --now wg-quick@wg0 wg show
wg show parāda pīru; lauks latest handshake parādās, tiklīdz telefons pieslēdzas. No klienta pārbaudi ceļu no gala līdz galam:
- ping 10.8.0.1 apstiprina pašu tuneli
- jebkura what-is-my-ip lapa tagad parādīs VPS adresi, kas apstiprina NAT
Lai pievienotu vēl klientus, atkārto atslēgu ģenerēšanu, izvēlies nākamo brīvo adresi (10.8.0.3/32 un tā tālāk), pievieno jaunu [Peer] bloku failā wg0.conf un izpildi systemctl restart wg-quick@wg0, vai pievieno pīru uzreiz ar wg set wg0 peer PUBKEY allowed-ips 10.8.0.3/32.
Jauda un kad nodot tālāk
WireGuard ir viegls. Katrs pīrs aizņem dažus kilobaitus stāvokļa, un kodols šifrē lēti, tāpēc VPS ar 1 vCPU un 2 GB RAM ērti apkalpo desmitiem vienlaicīgu klientu. Reālais šaurās vietas punkts ir tīkla ports, nevis procesors, un tipisks attālinātā darba trafiks to pat netuvina piesātinājumam.
Šai uzstādīšanai der jebkurš no mūsu VPS plāniem; katram ir sava publiskā IPv4 adrese mūsu pašu tīklā AS58269, kas ir tieši tas, kas VPN galapunktam vajadzīgs. Ja uzdevums ir savienot veselus birojus, nevis atsevišķas ierīces, īstais darbs kļūst atslēgu izplatīšana, monitorings un rezervēšana; tādam gadījumam piedāvājam pārvaldītu VPN starp birojiem, kur tuneļus uzturam un uzraugām mēs, bet maršrutēšanu kontrolē tu.
Turpini lasīt
Gatavs sākt?
Palaid dažās minūtēs vai aprunājies ar inženieri par piemērotāko risinājumu.