Siapkan VPN sederhana dengan WireGuard dan Raspberry Pi sebagai server

Karena WireGuard akan menjadi bagian dari kernel Linux 5.6 di masa depan, saya memutuskan untuk melihat cara terbaik untuk mengintegrasikan VPN ini dengan router / titik akses LTE saya di Raspberry Pi .

Peralatan


  • Raspberry Pi 3 dengan modul LTE dan alamat IP publik. Akan ada server VPN (selanjutnya disebut sebagai edgewalker )
  • Ponsel Android yang harus menggunakan VPN untuk semua komunikasi
  • Laptop Linux yang seharusnya menggunakan VPN hanya di dalam jaringan

Setiap perangkat yang terhubung ke VPN harus dapat terhubung ke semua perangkat lain. Misalnya, telepon harus dapat terhubung ke server web pada laptop jika kedua perangkat tersebut merupakan bagian dari VPN. Jika pengaturannya cukup sederhana, maka Anda dapat berpikir tentang menghubungkan ke VPN dan desktop (via Ethernet).

Mengingat bahwa koneksi kabel dan nirkabel menjadi semakin tidak aman dari waktu ke waktu ( serangan yang ditargetkan , serangan KRACK pada peretasan WPA2, dan serangan Dragonblood terhadap WPA3 ), saya serius mempertimbangkan menggunakan WireGuard untuk semua perangkat saya, terlepas dari lingkungan tempat mereka bekerja.

Instalasi perangkat lunak


WireGuard menyediakan paket yang telah dikompilasi untuk sebagian besar distribusi Linux, Windows, dan macOS. Aplikasi Android dan iOS dikirimkan melalui direktori aplikasi.

Saya memiliki Fedora Linux 31 terbaru, dan sebelum menginstal saya terlalu malas untuk membaca manual. Saya baru saja menemukan paket-paket itu wireguard-tools, memasangnya, dan kemudian saya tidak mengerti mengapa tidak ada yang berfungsi. Penelitian lebih lanjut menunjukkan bahwa saya tidak memiliki paket yang diinstal wireguard-dkms(dengan driver jaringan), dan itu tidak ada dalam repositori distribusi saya.

Jika saya membaca instruksi, saya akan mengambil langkah yang benar:

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

Saya memiliki kit distribusi Raspbian Buster yang diinstal pada Raspberry Pi, sudah ada paket di sana wireguard, instal:

$ sudo apt install wireguard

Di ponsel Android, saya menginstal aplikasi VPN WireGuard dari direktori Google App Store resmi.

Instalasi Kunci


Untuk otentikasi host, Wireguard menggunakan skema kunci privat / publik sederhana untuk mengautentikasi host VPN. Anda dapat dengan mudah membuat kunci VPN dengan perintah 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 file). Kami tidak akan merujuk ke file di konfigurasi, tetapi menyalin konten di sini: setiap kunci adalah satu baris di base64.

Membuat file konfigurasi untuk server VPN (Raspberry Pi)


Konfigurasi ini cukup sederhana, saya membuat file 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 komentar:

  • Di tempat yang tepat Anda perlu menyisipkan baris dari file dengan kunci
  • VPN saya menggunakan rentang internal 10.200.200.0/24
  • Untuk perintah PostUp/ PostDownsaya memiliki antarmuka jaringan eksternal wwan0, Anda mungkin memiliki yang lain (misalnya, eth0)

Jaringan VPN mudah diangkat oleh perintah berikut:

$ sudo wg-quick up wg0

Satu detail kecil: sebagai server DNS yang saya gunakan dnsmasqdengan pengikatan ke antarmuka jaringan br0, saya juga menambahkan perangkat wg0ke daftar perangkat yang diizinkan. Dalam dnsmasq, ini dilakukan dengan menambahkan baris baru dengan antarmuka jaringan ke file konfigurasi /etc/dnsmasq.conf, misalnya:

interface=br0
interface=wg0

Selain itu, saya menambahkan aturan iptable untuk mengizinkan lalu lintas ke port UDP yang mendengarkan (51280):

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

Sekarang semuanya berfungsi, kita dapat mengatur terowongan VPN untuk memulai secara otomatis:

$ sudo systemctl enable wg-quick@wg0.service

Konfigurasi klien di laptop


Di laptop, buat file konfigurasi /etc/wireguard/wg0.confdengan pengaturan 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

Catatan:

  • Alih-alih edgewalker, Anda perlu menentukan IP publik atau host dari server VPN
  • Dengan menyetel AllowedIPske 10.200.200.0/24, kami menggunakan VPN hanya untuk mengakses jaringan internal. Lalu lintas ke semua alamat IP / server lain akan terus melalui saluran terbuka "normal". Server DNS yang telah dikonfigurasikan pada laptop juga akan digunakan.

Untuk pengujian dan mulai otomatis, kami menggunakan perintah yang sama wg-quickdan systemd:

$ sudo wg-quick up wg0
$ sudo systemctl enable wg-quick@wg0.service

Menyiapkan klien di ponsel Android


Untuk ponsel Android, buat file konfigurasi yang sangat mirip (sebut saja 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

Berbeda dengan konfigurasi pada laptop, telepon harus menggunakan server VPN kami sebagai server DNS (string DNS), dan juga melewati semua lalu lintas melalui terowongan VPN ( AllowedIPs = 0.0.0.0/0).

Alih-alih menyalin file ke perangkat seluler Anda, Anda dapat mengubahnya menjadi kode QR:

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

Kode QR akan ditampilkan ke konsol sebagai ASCII. Anda dapat memindai dari aplikasi Android VPN dan secara otomatis mengkonfigurasi terowongan VPN.

Kesimpulan


Menyiapkan WireGuard hanya ajaib dibandingkan dengan OpenVPN.

Source: https://habr.com/ru/post/undefined/


All Articles