Server sifatida WireGuard va Raspberry Pi bilan oddiy VPN o'rnatish

Chunki WireGuard qismiga aylanadi Yaqinlashib kelayotgan Linux yadrosi 5.6-dan, men ushbu VPN-ni o'zim bilan qanday qilib eng yaxshi integratsiya qilishni ko'rishga qaror qildim. Raspberry Pi-da LTE router/kirish nuqtasi.

uskunalar

  • Raspberry Pi 3 LTE moduli va umumiy IP manzili bilan. Bu erda VPN serveri bo'ladi (bundan keyin matnda u deyiladi). chekka yuruvchi)
  • Barcha aloqalar uchun VPN-dan foydalanishi kerak bo'lgan Android telefoni
  • Faqat tarmoq ichida VPN-dan foydalanishi kerak bo'lgan Linux noutbuki

VPN-ga ulangan har bir qurilma boshqa barcha qurilmalarga ulanishi kerak. Misol uchun, agar ikkala qurilma VPN tarmog'ining bir qismi bo'lsa, telefon noutbukdagi veb-serverga ulanishi kerak. Agar sozlash juda oddiy bo'lib chiqsa, siz ish stolini VPN-ga (Ethernet orqali) ulash haqida o'ylashingiz mumkin.

Simli va simsiz ulanishlar vaqt o'tishi bilan kamroq va kamroq xavfsiz bo'lib borayotganini hisobga olsak (maqsadli hujumlar, KRACK WPA2 yorilish hujumi ΠΈ WPA3 ga qarshi Dragon Blood hujumi), Men WireGuard'dan barcha qurilmalarim uchun, ular qanday muhitda bo'lishidan qat'i nazar, foydalanishni jiddiy o'ylayapman.

Dasturiy ta'minotni o'rnatish

WireGuard taqdim etadi oldindan kompilyatsiya qilingan paketlar ko'pgina Linux, Windows va macOS distributivlari uchun. Android va iOS ilovalari ilovalar kataloglari orqali yetkaziladi.

Menda so'nggi Fedora Linux 31 bor va o'rnatishdan oldin qo'llanmani o'qishga dangasa bo'ldim. Faqat paketlarni topdim wireguard-tools, ularni o'rnatdi va keyin nima uchun hech narsa ishlamayotganini tushuna olmadi. Keyingi tekshiruv menda paket o'rnatilmaganligini ko'rsatdi wireguard-dkms (tarmoq drayveri bilan), lekin u mening tarqatishim omborida emas edi.

Agar men ko'rsatmalarni o'qiganimda, to'g'ri qadamlarni qo'ygan bo'lardim:

$ sudo dnf copr enable jdoss/wireguard
$ sudo dnf install wireguard-dkms wireguard-tools

Menda Raspberry Pi-da Raspbian Buster tarqatish o'rnatilgan, u erda allaqachon paket mavjud wireguard, uni o'rnating:

$ sudo apt install wireguard

Android telefonimda dasturni o'rnatdim WireGuardVPN rasmiy Google App Store katalogidan.

Kalitlarni o'rnatish

Tengdoshlarning autentifikatsiyasi uchun Wireguard VPN tengdoshlarini autentifikatsiya qilish uchun oddiy shaxsiy/ommaviy kalit sxemasidan foydalanadi. Quyidagi buyruq yordamida VPN kalitlarini osongina yaratishingiz mumkin:

$ wg genkey | tee wg-laptop-private.key |  wg pubkey > wg-laptop-public.key
$ wg genkey | tee wg-server-private.key |  wg pubkey > wg-server-public.key
$ wg genkey | tee wg-mobile-private.key |  wg pubkey > wg-mobile-public.key

Bu bizga uchta kalit juftligini (oltita fayl) beradi. Biz konfiguratsiyadagi fayllarga murojaat qilmaymiz, lekin tarkibni bu yerga ko'chiring: har bir kalit base64-da bitta qatordan iborat.

VPN serveri uchun konfiguratsiya faylini yaratish (Raspberry Pi)

Konfiguratsiya juda oddiy, men quyidagi faylni yaratdim /etc/wireguard/wg0.conf:

[Interface]
Address = 10.200.200.1/24
ListenPort = 51820
PrivateKey = <copy private key from wg-server-private.key>
PostUp   = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o wwan0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o wwan0 -j MASQUERADE

[Peer]
# laptop
PublicKey = <copy public key from wg-laptop-public.key>
AllowedIPs = 10.200.200.2/32

[Peer]
# mobile phone
PublicKey = <copy public key from wg-mobile-public.key>
AllowedIPs = 10.200.200.3/32

Bir nechta eslatma:

  • Tegishli joylarda siz kalitlar bilan fayllardan qatorlarni kiritishingiz kerak
  • Mening VPN ichki tarmoqdan foydalanmoqda 10.200.200.0/24
  • Jamoalar uchun PostUp/PostDown Menda wwan0 tashqi tarmoq interfeysi bor, sizda boshqacha bo'lishi mumkin (masalan, eth0)

VPN tarmog'i quyidagi buyruq bilan osongina ko'tariladi:

$ sudo wg-quick up wg0

Bitta kichik tafsilot: men foydalangan DNS server sifatida dnsmasq tarmoq interfeysiga ulangan br0, Men qurilmalarni ham qo'shdim wg0 ruxsat etilgan qurilmalar ro'yxatiga. Dnsmasq-da bu konfiguratsiya fayliga yangi tarmoq interfeysi qatorini qo'shish orqali amalga oshiriladi /etc/dnsmasq.conf, masalan:

interface=br0
interface=wg0

Bundan tashqari, men UDP tinglash portiga (51280) trafikka ruxsat berish uchun iptable qoidasini qo'shdim:

$ sudo iptables -I INPUT -p udp --dport 51820 -j ACCEPT

Endi hamma narsa ishlayapti, biz VPN tunnelini avtomatik ishga tushirishni sozlashimiz mumkin:

$ sudo systemctl enable [email protected]

Laptopda mijoz konfiguratsiyasi

Noutbukda konfiguratsiya faylini yarating /etc/wireguard/wg0.conf bir xil sozlamalar bilan:

[Interface]
Address = 10.200.200.2/24
PrivateKey = <copy private key from wg-laptop-private.key>

[Peer]
PublicKey = <copy public key from wg-server-public.key>
AllowedIPs = 10.200.200.0/24
Endpoint = edgewalker:51820

Remarks:

  • Edgewalker o'rniga umumiy IP yoki VPN server xostini ko'rsatishingiz kerak
  • Sozlash orqali AllowedIPs haqida 10.200.200.0/24, biz faqat ichki tarmoqqa kirish uchun VPN dan foydalanamiz. Boshqa barcha IP manzillar/serverlar uchun trafik β€œoddiy” ochiq kanallar orqali o'tishda davom etadi. Shuningdek, u noutbukda oldindan tuzilgan DNS serveridan foydalanadi.

Sinov va avtomatik ishga tushirish uchun biz bir xil buyruqlardan foydalanamiz wg-quick ΠΈ systemd:

$ sudo wg-quick up wg0
$ sudo systemctl enable [email protected]

Android telefonida mijozni sozlash

Android telefoni uchun biz juda o'xshash konfiguratsiya faylini yaratamiz (uni chaqiraylik mobile.conf):

[Interface]
Address = 10.200.200.3/24
PrivateKey = <copy private key from wg-mobile-private.key>
DNS = 10.200.200.1
        
[Peer]
PublicKey = <copy public key from wg-server-public.key>
AllowedIPs = 0.0.0.0/0
Endpoint = edgewalker:51820

Noutbukdagi konfiguratsiyadan farqli o'laroq, telefon bizning VPN serverimizdan DNS server sifatida foydalanishi kerak (liniya DNS), shuningdek, barcha trafikni VPN tunnelidan o'tkazing (AllowedIPs = 0.0.0.0/0).

Faylni mobil qurilmangizga nusxalash oβ€˜rniga, uni QR kodiga aylantirishingiz mumkin:

$ sudo apt install qrencode
$ qrencode -t ansiutf8 < mobile.conf

QR kodi konsolga ASCII sifatida chiqariladi. Uni Android VPN ilovasidan skanerlash mumkin va avtomatik ravishda VPN tunnelini o'rnatadi.

xulosa

WireGuard-ni sozlash OpenVPN bilan solishtirganda shunchaki sehrli.

Manba: www.habr.com

a Izoh qo'shish