Menyediakan VPN mudah dengan WireGuard dan Raspberry Pi sebagai pelayan

Kerana WireGuard akan menjadi sebahagian daripada kernel Linux 5.6 yang akan datang, saya memutuskan untuk melihat cara terbaik untuk mengintegrasikan VPN ini dengan saya Penghala LTE/titik akses pada Raspberry Pi.

ΠžΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅

  • Raspberry Pi 3 dengan modul LTE dan alamat IP awam. Akan ada pelayan VPN di sini (selepas ini dalam teks ia dipanggil edgewalker)
  • Telefon Android yang mesti menggunakan VPN untuk semua komunikasi
  • Komputer riba Linux yang sepatutnya hanya menggunakan VPN dalam rangkaian

Setiap peranti yang bersambung ke VPN mesti boleh menyambung ke semua peranti lain. Sebagai contoh, telefon sepatutnya boleh menyambung ke pelayan web pada komputer riba jika kedua-dua peranti adalah sebahagian daripada rangkaian VPN. Jika persediaan ternyata agak mudah, maka anda boleh memikirkan tentang menyambungkan desktop ke VPN (melalui Ethernet).

Memandangkan sambungan berwayar dan wayarles menjadi semakin kurang selamat dari semasa ke semasa (serangan yang disasarkan, Serangan retak KRACK WPA2 ΠΈ Serangan Dragonblood terhadap WPA3), Saya serius mempertimbangkan untuk menggunakan WireGuard untuk semua peranti saya, tidak kira dalam persekitaran yang mana ia berada.

Pemasangan perisian

WireGuard menyediakan pakej yang telah disusun sebelumnya untuk kebanyakan pengedaran Linux, Windows dan macOS. Apl Android dan iOS dihantar melalui direktori aplikasi.

Saya mempunyai Fedora Linux 31 yang terkini, dan saya terlalu malas untuk membaca manual sebelum memasang. Baru jumpa pakej wireguard-tools, memasangnya, dan kemudian tidak dapat mengetahui sebab tiada apa yang berfungsi. Siasatan lanjut mendedahkan bahawa saya tidak memasang pakej tersebut wireguard-dkms (dengan pemacu rangkaian), tetapi ia tidak ada dalam repositori pengedaran saya.

Jika saya telah membaca arahan, saya akan mengambil langkah yang betul:

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

Saya mempunyai pengedaran Raspbian Buster yang dipasang pada Raspberry Pi saya, sudah ada pakej di sana wireguard, pasangkannya:

$ sudo apt install wireguard

Pada telefon Android saya, saya memasang aplikasi itu VPN WireGuard daripada katalog rasmi Google App Store.

Pemasangan kunci

Untuk pengesahan rakan sebaya, Wireguard menggunakan skim kunci peribadi/awam yang mudah untuk mengesahkan rakan sebaya VPN. Anda boleh membuat kunci VPN dengan mudah menggunakan arahan berikut:

$ 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

Ini memberi kita tiga pasangan kunci (enam fail). Kami tidak akan merujuk kepada fail dalam konfigurasi, tetapi menyalin kandungan di sini: setiap kunci adalah satu baris dalam base64.

Mencipta fail konfigurasi untuk pelayan VPN (Raspberry Pi)

Konfigurasinya agak mudah, saya mencipta fail berikut /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

Beberapa nota:

  • Di tempat yang sesuai anda perlu memasukkan baris dari fail dengan kekunci
  • VPN saya menggunakan jalur dalaman 10.200.200.0/24
  • Untuk pasukan PostUp/PostDown Saya mempunyai antara muka rangkaian luaran wwan0, anda mungkin mempunyai antara muka yang berbeza (contohnya, eth0)

Rangkaian VPN mudah dibangkitkan dengan arahan berikut:

$ sudo wg-quick up wg0

Satu butiran kecil: sebagai pelayan DNS yang saya gunakan dnsmasq terikat pada antara muka rangkaian br0, saya turut menambah peranti wg0 ke senarai peranti yang dibenarkan. Dalam dnsmasq ini dilakukan dengan menambah baris antara muka rangkaian baharu pada fail konfigurasi /etc/dnsmasq.conf, sebagai contoh:

interface=br0
interface=wg0

Selain itu, saya menambah peraturan iptable untuk membenarkan trafik ke port mendengar UDP (51280):

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

Kini setelah semuanya berfungsi, kami boleh menyediakan pelancaran automatik terowong VPN:

$ sudo systemctl enable [email protected]

Konfigurasi pelanggan pada komputer riba

Buat fail konfigurasi pada komputer riba /etc/wireguard/wg0.conf dengan tetapan yang sama:

[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

Nota:

  • Daripada edgewalker anda perlu menentukan IP awam atau hos pelayan VPN
  • Dengan menetapkan AllowedIPs pada 10.200.200.0/24, kami hanya menggunakan VPN untuk mengakses rangkaian dalaman. Trafik ke semua alamat/pelayan IP lain akan terus melalui saluran terbuka "biasa". Ia juga akan menggunakan pelayan DNS prakonfigurasi pada komputer riba.

Untuk ujian dan pelancaran automatik kami menggunakan arahan yang sama wg-quick ΠΈ systemd:

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

Menyediakan pelanggan pada telefon Android

Untuk telefon Android, kami mencipta fail konfigurasi yang hampir serupa (mari namakannya 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

Tidak seperti konfigurasi pada komputer riba, telefon mesti menggunakan pelayan VPN kami sebagai pelayan DNS (line DNS), dan juga melepasi semua trafik melalui terowong VPN (AllowedIPs = 0.0.0.0/0).

Daripada menyalin fail ke peranti mudah alih anda, anda boleh menukarnya kepada kod QR:

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

Kod QR akan dikeluarkan ke konsol sebagai ASCII. Ia boleh diimbas daripada apl VPN Android dan akan menyediakan terowong VPN secara automatik.

Output

Menyediakan WireGuard adalah ajaib berbanding OpenVPN.

Sumber: www.habr.com

Tambah komen