GNU/Linux >> Belajar Linux >  >> Panels >> OpenVPN

Cara Mengatur WireGuard di Ubuntu 22.04

Pengantar

WireGuard adalah Virtual Private Network (VPN) ringan yang mendukung koneksi IPv4 dan IPv6. VPN memungkinkan Anda untuk melintasi jaringan yang tidak tepercaya seolah-olah Anda berada di jaringan pribadi. Ini memberi Anda kebebasan untuk mengakses internet dengan aman dan aman dari ponsel cerdas atau laptop Anda saat terhubung ke jaringan yang tidak tepercaya, seperti WiFi di hotel atau kedai kopi.

Enkripsi WireGuard bergantung pada kunci publik dan pribadi untuk rekan-rekan untuk membuat terowongan terenkripsi di antara mereka sendiri. Setiap versi WireGuard menggunakan rangkaian sandi kriptografi khusus untuk memastikan kesederhanaan, keamanan, dan kompatibilitas dengan rekan-rekan.

Sebagai perbandingan, perangkat lunak VPN lain seperti OpenVPN dan IPSec menggunakan Transport Layer Security (TLS) dan sertifikat untuk mengotentikasi dan membuat terowongan terenkripsi antar sistem. Versi TLS yang berbeda mencakup dukungan untuk ratusan rangkaian dan algoritme kriptografi yang berbeda, dan meskipun ini memungkinkan fleksibilitas yang besar untuk mendukung klien yang berbeda, ini juga membuat konfigurasi VPN yang menggunakan TLS lebih memakan waktu, kompleks, dan rawan kesalahan.

Dalam tutorial ini, Anda akan menyiapkan WireGuard di server Ubuntu 22.04, dan kemudian mengonfigurasi komputer lain untuk menghubungkannya sebagai rekan menggunakan koneksi IPv4 dan IPv6 (biasanya disebut sebagai dual stack koneksi). Anda juga akan mempelajari cara merutekan lalu lintas Internet rekan melalui server WireGuard dalam konfigurasi gateway, selain menggunakan VPN untuk terowongan peer-to-peer terenkripsi.

Untuk keperluan tutorial ini, kami akan mengonfigurasi sistem Ubuntu 22.04 lain sebagai rekan (juga disebut sebagai klien) ke Server WireGuard. Tutorial selanjutnya dalam seri ini akan menjelaskan cara menginstal dan menjalankan WireGuard di sistem dan perangkat Windows, macOS, Android, dan iOS.

Catatan: Jika Anda berencana untuk menyiapkan WireGuard di DigitalOcean Droplet, ketahuilah bahwa kami, seperti banyak penyedia hosting, mengenakan biaya untuk kelebihan bandwidth. Untuk alasan ini, harap perhatikan berapa banyak lalu lintas yang ditangani server Anda. Lihat halaman ini untuk info lebih lanjut.

Prasyarat

Untuk mengikuti tutorial ini, Anda memerlukan:

  • Satu server Ubuntu 22.04 dengan pengguna non-root Sudo dan firewall yang diaktifkan. Untuk mengatur ini, Anda dapat mengikuti tutorial Pengaturan Server Awal kami dengan Ubuntu 22.04. Kami akan menyebutnya sebagai Server WireGuard di seluruh panduan ini.
  • Anda memerlukan mesin klien yang akan Anda gunakan untuk terhubung ke Server WireGuard Anda. Dalam tutorial ini kita akan menyebut mesin ini sebagai WireGuard Peer . Untuk keperluan tutorial ini, Anda disarankan untuk menggunakan mesin lokal Anda sebagai WireGuard Peer, tetapi Anda dapat menggunakan server jarak jauh, atau ponsel sebagai klien jika Anda mau. Jika Anda menggunakan sistem jarak jauh, pastikan untuk mengikuti semua bagian opsional nanti dalam tutorial ini atau Anda dapat mengunci diri dari sistem.
  • Untuk menggunakan WireGuard dengan IPv6, Anda juga perlu memastikan bahwa server Anda dikonfigurasi untuk mendukung jenis lalu lintas tersebut. Jika Anda ingin mengaktifkan dukungan IPv6 dengan WireGuard dan menggunakan Droplet DigitalOcean, silakan merujuk ke halaman dokumentasi ini Cara Mengaktifkan IPv6 pada Droplets. Anda dapat menambahkan dukungan IPv6 saat membuat Droplet, atau setelahnya menggunakan petunjuk di halaman tersebut.

Langkah 1 — Memasang WireGuard dan Membuat Pasangan Kunci

Langkah pertama dalam tutorial ini adalah menginstal WireGuard di server Anda. Untuk memulai, perbarui indeks paket Server WireGuard Anda dan instal WireGuard menggunakan perintah berikut. Anda mungkin diminta untuk memberikan kata sandi pengguna sudo Anda jika ini adalah pertama kalinya Anda menggunakan sudo dalam sesi ini:

  1. sudo apt update
  2. sudo apt install wireguard

Sekarang setelah Anda menginstal WireGuard, langkah selanjutnya adalah membuat keypair privat dan publik untuk server. Anda akan menggunakan wg genkey bawaan dan wg pubkey perintah untuk membuat kunci, lalu tambahkan kunci pribadi ke file konfigurasi WireGuard.

Anda juga perlu mengubah izin pada kunci yang baru saja Anda buat menggunakan chmod perintah, karena secara default file dapat dibaca oleh pengguna mana pun di server Anda.

Buat kunci pribadi untuk WireGuard dan ubah izinnya menggunakan perintah berikut:

  1. wg genkey | sudo tee /etc/wireguard/private.key
  2. sudo chmod go= /etc/wireguard/private.key

sudo chmod go=... perintah menghapus izin apa pun pada file untuk pengguna dan grup selain pengguna root untuk memastikan bahwa hanya itu yang dapat mengakses kunci pribadi.

Anda akan menerima satu baris base64 keluaran yang disandikan, yang merupakan kunci pribadi. Salinan output juga disimpan di /etc/wireguard/private.key file untuk referensi di masa mendatang oleh tee bagian dari perintah. Catat dengan hati-hati kunci pribadi yang dihasilkan karena Anda harus menambahkannya ke file konfigurasi WireGuard nanti di bagian ini.

Langkah selanjutnya adalah membuat kunci publik yang sesuai, yang diturunkan dari kunci privat. Gunakan perintah berikut untuk membuat file kunci publik:

  1. sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key

Perintah ini terdiri dari tiga perintah individu yang dirantai bersama menggunakan | (pipa) operator:

  • sudo cat /etc/wireguard/private.key :perintah ini membaca file kunci pribadi dan mengeluarkannya ke aliran keluaran standar.
  • wg pubkey :perintah kedua mengambil output dari perintah pertama sebagai input standar dan memprosesnya untuk menghasilkan kunci publik.
  • sudo tee /etc/wireguard/public.key :perintah terakhir mengambil output dari perintah pembuatan kunci publik dan mengarahkannya ke file bernama /etc/wireguard/public.key .

Saat Anda menjalankan perintah, Anda akan kembali menerima satu baris base64 keluaran yang disandikan, yang merupakan kunci publik untuk Server WireGuard Anda. Salin di suatu tempat untuk referensi, karena Anda perlu mendistribusikan kunci publik ke rekan mana pun yang terhubung ke server.

Langkah 2 — Memilih Alamat IPv4 dan IPv6

Di bagian sebelumnya Anda menginstal WireGuard dan membuat pasangan kunci yang akan digunakan untuk mengenkripsi lalu lintas ke dan dari server. Di bagian ini, Anda akan membuat file konfigurasi untuk server, dan mengatur WireGuard untuk memulai secara otomatis saat server Anda reboot. Anda juga akan menentukan alamat IPv4 dan IPv6 pribadi untuk digunakan dengan Server WireGuard dan rekan Anda.

Jika Anda berencana untuk menggunakan alamat IPv4 dan IPv6, ikuti kedua bagian ini. Jika tidak, ikuti petunjuk di bagian yang sesuai untuk kebutuhan jaringan VPN Anda.

Langkah 2(a) — Memilih Rentang IPv4

Jika Anda menggunakan server WireGuard Anda dengan rekan-rekan IPv4, server memerlukan berbagai alamat IPv4 pribadi untuk digunakan untuk klien, dan untuk antarmuka terowongannya. Anda dapat memilih rentang alamat IP apa pun dari blok alamat yang dicadangkan berikut (jika Anda ingin mempelajari lebih lanjut tentang bagaimana blok ini dialokasikan, kunjungi spesifikasi RFC 1918):

  • 10.0.0.0 ke 10.255.255.255 (10/8 awalan)
  • 172.16.0.0 ke 172.31.255.255 (172.16/12 awalan)
  • 192.168.0.0 ke 192.168.255.255 (awalan 192.168/16)

Untuk keperluan tutorial ini kita akan menggunakan 10.8.0.0/24 sebagai blok alamat IP dari rentang pertama IP yang dicadangkan. Rentang ini akan memungkinkan hingga 255 koneksi peer yang berbeda, dan umumnya tidak boleh memiliki alamat yang tumpang tindih atau bertentangan dengan rentang IP pribadi lainnya. Jangan ragu untuk memilih rentang alamat yang sesuai dengan konfigurasi jaringan Anda jika rentang contoh ini tidak kompatibel dengan jaringan Anda.

Server WireGuard akan menggunakan satu alamat IP dari jangkauan untuk alamat IPv4 terowongan pribadinya. Kami akan menggunakan 10.8.0.1/24 di sini, tetapi alamat apa pun dalam kisaran 10.8.0.1 ke 10.8.0.255 dapat digunakan. Catat alamat IP yang Anda pilih jika Anda menggunakan sesuatu yang berbeda dari 10.8.0.1/24 . Anda akan menambahkan alamat IPv4 ini ke file konfigurasi yang Anda tentukan di Langkah 3 — Membuat Konfigurasi Server WireGuard.

Langkah 2(b) — Memilih Rentang IPv6

Jika Anda menggunakan WireGuard dengan IPv6, maka Anda perlu membuat awalan alamat unicast IPv6 lokal yang unik berdasarkan algoritme di RFC 4193. Alamat yang Anda gunakan dengan WireGuard akan dikaitkan dengan antarmuka terowongan virtual. Anda perlu menyelesaikan beberapa langkah untuk menghasilkan awalan IPv6 acak dan unik dalam fd00::/8 yang telah dicadangkan blok alamat IPv6 pribadi.

Menurut RFC, cara yang disarankan untuk mendapatkan awalan IPv6 yang unik adalah dengan menggabungkan waktu dengan nilai pengenal unik dari sistem seperti nomor seri atau ID perangkat. Nilai-nilai tersebut kemudian di-hash dan dipotong sehingga menghasilkan satu set bit yang dapat digunakan sebagai alamat unik dalam fd00::/8 pribadi yang dicadangkan. blok IP.

Untuk mulai membuat rentang IPv6 untuk Server WireGuard Anda, kumpulkan stempel waktu 64-bit menggunakan date utilitas dengan perintah berikut:

  1. date +%s%N

Anda akan menerima nomor seperti berikut, yaitu jumlah detik (%s di date perintah), dan nanodetik (%N ) sejak 1970-01-01 00:00:00 UTC digabungkan menjadi satu:

Output1650301699497770167

Catat nilainya di suatu tempat untuk digunakan nanti di bagian ini. Selanjutnya, salin machine-id nilai untuk server Anda dari /var/lib/dbus/machine-id mengajukan. Pengenal ini unik untuk sistem Anda dan tidak boleh berubah selama server ada.

  1. cat /var/lib/dbus/machine-id

Anda akan menerima output seperti berikut:

/var/lib/dbus/machine-id610cef4946ed46da8f71dba9d66c67fb

Sekarang Anda perlu menggabungkan stempel waktu dengan machine-id dan hash nilai yang dihasilkan menggunakan algoritma SHA-1. Perintah akan menggunakan format berikut:

printf <timestamp><machine-id> | sha1sum

Jalankan perintah yang menggantikan stempel waktu dan nilai identitas mesin Anda:

  1. printf 1650301699497770167610cef4946ed46da8f71dba9d66c67fb | sha1sum

Anda akan menerima nilai hash seperti berikut:

Output442adea1488d96388dae9ab816045b24609a6c18  -

Perhatikan bahwa output dari sha1sum perintah dalam heksadesimal, sehingga output menggunakan dua karakter untuk mewakili satu byte data. Misalnya 4f dan 26 dalam contoh output adalah dua byte pertama dari data hash.

Algoritme dalam RFC hanya membutuhkan 40 bit, atau 5 byte, dari keluaran hash yang paling tidak signifikan (tertinggal). Gunakan cut perintah untuk mencetak 5 byte terakhir yang dikodekan heksadesimal dari hash:

  1. printf 442adea1488d96388dae9ab816045b24609a6c18 | cut -c 31-

-c argumen memberitahu cut perintah untuk memilih hanya satu set karakter tertentu. 31- argumen memberitahu cut untuk mencetak semua karakter dari posisi 31 hingga akhir baris input.

Anda akan menerima output seperti berikut:

Output24609a6c18

Dalam contoh keluaran ini, himpunan byte adalah:24 60 9a 6c 18 .

Sekarang Anda dapat membuat awalan jaringan IPv6 unik Anda dengan menambahkan 5 byte yang telah Anda buat dengan fd awalan, memisahkan setiap 2 byte dengan : titik dua untuk keterbacaan. Karena setiap subnet di awalan unik Anda dapat menampung total 18.446.744.073.709.551.616 kemungkinan alamat IPv6, Anda dapat membatasi subnet ke ukuran standar /64 untuk kesederhanaan.

Menggunakan byte yang dihasilkan sebelumnya dengan /64 ukuran subnet awalan yang dihasilkan adalah sebagai berikut:

Unique Local IPv6 Address Prefixfd24:609a:6c18::/64

fd24:609a:6c18::/64 ini range adalah apa yang akan Anda gunakan untuk menetapkan alamat IP individual ke antarmuka terowongan WireGuard Anda di server dan rekan-rekan. Untuk mengalokasikan IP untuk server, tambahkan 1 setelah :: terakhir karakter. Alamat yang dihasilkan akan menjadi fd24:609a:6c18::1/64 . Peer dapat menggunakan IP apa pun dalam rentang tersebut, tetapi biasanya Anda akan menambah nilainya satu per satu setiap kali Anda menambahkan peer mis. fd24:609a:6c18::2/64 . Catat IP dan lanjutkan mengonfigurasi Server WireGuard di bagian selanjutnya dari tutorial ini.

Langkah 3 — Membuat Konfigurasi Server WireGuard

Sebelum membuat konfigurasi Server WireGuard Anda, Anda memerlukan informasi berikut:

  1. Pastikan Anda memiliki kunci pribadi yang tersedia dari Langkah 1 — Memasang WireGuard dan Membuat Pasangan Kunci.

  2. Jika Anda menggunakan WireGuard dengan IPv4, Anda memerlukan alamat IP yang Anda pilih untuk server di Langkah 2(a) — Memilih Rentang IPv4, yang dalam contoh ini adalah 10.8.0.1/24 .

  3. Jika Anda menggunakan WireGuard dengan IPv6, Anda memerlukan alamat IP untuk server yang Anda buat di Langkah 2(b) — Memilih Rentang IPv6. Dalam contoh ini IP adalah fd24:609a:6c18::1/64 .

Setelah Anda memiliki kunci pribadi dan alamat IP yang diperlukan, buat file konfigurasi baru menggunakan nano atau editor pilihan Anda dengan menjalankan perintah berikut:

  1. sudo nano /etc/wireguard/wg0.conf

Tambahkan baris berikut ke file, ganti kunci pribadi Anda sebagai pengganti base64_encoded_private_key_goes_here yang disorot nilai, dan alamat IP pada Address garis. Anda juga dapat mengubah ListenPort baris jika Anda ingin WireGuard tersedia di port yang berbeda:

/etc/wireguard/wg0.conf[Interface]
PrivateKey = base64_encoded_private_key_goes_here
Address = 10.8.0.1/24, fd24:609a:6c18::1/64
ListenPort = 51820
SaveConfig = true

SaveConfig baris memastikan bahwa ketika antarmuka WireGuard dimatikan, setiap perubahan akan disimpan ke file konfigurasi.

Simpan dan tutup /etc/wireguard/wg0.conf mengajukan. Jika Anda menggunakan nano , Anda dapat melakukannya dengan CTRL+X , lalu Y dan ENTER untuk mengkonfirmasi. Anda sekarang memiliki konfigurasi server awal yang dapat Anda bangun tergantung pada bagaimana Anda berencana menggunakan server VPN WireGuard Anda.

Langkah 4 — Menyesuaikan Konfigurasi Jaringan Server WireGuard

Jika Anda menggunakan WireGuard untuk menghubungkan rekan ke Server WireGuard untuk mengakses layanan di server saja , maka Anda tidak perlu menyelesaikan bagian ini. Jika Anda ingin merutekan lalu lintas Internet WireGuard Peer Anda melalui Server WireGuard, maka Anda perlu mengonfigurasi penerusan IP dengan mengikuti bagian tutorial ini.

Untuk mengkonfigurasi penerusan, buka /etc/sysctl.conf file menggunakan nano atau editor pilihan Anda:

  1. sudo nano /etc/sysctl.conf

Jika Anda menggunakan IPv4 dengan WireGuard, tambahkan baris berikut di bagian bawah file:

/etc/sysctl.conf
net.ipv4.ip_forward=1

Jika Anda menggunakan IPv6 dengan WireGuard, tambahkan baris ini di bagian bawah file:

/etc/sysctl.conf
net.ipv6.conf.all.forwarding=1

Jika Anda menggunakan IPv4 dan IPv6, pastikan Anda menyertakan kedua jalur tersebut. Simpan dan tutup file setelah Anda selesai.

Untuk membaca file dan memuat nilai baru untuk sesi terminal Anda saat ini, jalankan:

  1. sudo sysctl -p
Outputnet.ipv6.conf.all.forwarding = 1
net.ipv4.ip_forward = 1

Sekarang Server WireGuard Anda akan dapat meneruskan lalu lintas masuk dari perangkat ethernet VPN virtual ke perangkat lain di server, dan dari sana ke Internet publik. Menggunakan konfigurasi ini akan memungkinkan Anda untuk merutekan semua lalu lintas web dari WireGuard Peer Anda melalui alamat IP server Anda, dan alamat IP publik klien Anda akan disembunyikan secara efektif.

Namun, sebelum lalu lintas dapat dirutekan melalui server Anda dengan benar, Anda perlu mengonfigurasi beberapa aturan firewall. Aturan ini akan memastikan bahwa lalu lintas ke dan dari Server WireGuard dan Rekan Anda mengalir dengan benar.

Langkah 5 — Mengonfigurasi Firewall Server WireGuard

Di bagian ini Anda akan mengedit konfigurasi Server WireGuard untuk menambahkan aturan firewall yang akan memastikan lalu lintas ke dan dari server dan klien dirutekan dengan benar. Seperti bagian sebelumnya, lewati langkah ini jika Anda hanya menggunakan WireGuard VPN untuk koneksi mesin ke mesin untuk mengakses sumber daya yang dibatasi untuk VPN Anda.

Untuk mengizinkan lalu lintas VPN WireGuard melalui firewall Server, Anda harus mengaktifkan penyamaran, yang merupakan konsep iptables yang menyediakan terjemahan alamat jaringan dinamis (NAT) on-the-fly untuk merutekan koneksi klien dengan benar.

Pertama, temukan antarmuka jaringan publik dari Server WireGuard Anda menggunakan ip route sub-perintah:

  1. ip route list default

Antarmuka publik adalah string yang ditemukan dalam output perintah ini yang mengikuti kata "dev". Misalnya, hasil ini menunjukkan antarmuka bernama eth0 , yang disorot di bawah ini:

Outputdefault via 203.0.113.1 dev eth0 proto static

Catat nama perangkat Anda karena Anda akan menambahkannya ke iptables aturan di langkah berikutnya.

Untuk menambahkan aturan firewall ke Server WireGuard Anda, buka /etc/wireguard/wg0.conf file dengan nano atau editor pilihan Anda lagi.

  1. sudo nano /etc/wireguard/wg0.conf

Di bagian bawah file setelah SaveConfig = true baris, rekatkan baris berikut:

/etc/wireguard/wg0.conf. . .
PostUp = ufw route allow in on wg0 out on eth0
PostUp = iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
PostUp = ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
PreDown = ufw route delete allow in on wg0 out on eth0
PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
PreDown = ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

PostUp baris akan berjalan ketika Server WireGuard memulai terowongan VPN virtual. Dalam contoh di sini, itu akan menambahkan tiga ufw dan iptables aturan:

  • ufw route allow in on wg0 out on eth0 - Aturan ini akan mengizinkan penerusan lalu lintas IPv4 dan IPv6 yang masuk di wg0 Antarmuka VPN ke eth0 antarmuka jaringan di server. Ini bekerja bersama dengan net.ipv4.ip_forward dan net.ipv6.conf.all.forwarding nilai sysctl yang Anda konfigurasikan di bagian sebelumnya.
  • iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE - Aturan ini mengonfigurasi penyamaran, dan menulis ulang lalu lintas IPv4 yang masuk pada wg0 Antarmuka VPN untuk membuatnya tampak seperti berasal langsung dari alamat IPv4 publik Server WireGuard.
  • ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE - Aturan ini mengonfigurasi penyamaran, dan menulis ulang lalu lintas IPv6 yang masuk pada wg0 Antarmuka VPN untuk membuatnya tampak seperti berasal langsung dari alamat IPv6 publik WireGuard Server.

PreDown aturan berjalan ketika Server WireGuard menghentikan terowongan VPN virtual. Aturan ini adalah kebalikan dari PostUp aturan, dan berfungsi untuk membatalkan aturan penerusan dan penyamaran untuk antarmuka VPN saat VPN dihentikan.

Dalam kedua kasus tersebut, edit konfigurasi untuk menyertakan atau mengecualikan aturan IPv4 dan IPv6 yang sesuai untuk VPN Anda. Misalnya, jika Anda hanya menggunakan IPv4, maka Anda dapat mengecualikan baris dengan ip6tables perintah.

Sebaliknya, jika Anda hanya menggunakan IPv6, edit konfigurasi agar hanya menyertakan ip6tables perintah. ufw baris harus ada untuk setiap kombinasi jaringan IPv4 dan IPv6. Simpan dan tutup file setelah Anda selesai.

Bagian terakhir dari konfigurasi firewall di Server WireGuard Anda adalah mengizinkan lalu lintas ke dan dari port UDP WireGuard itu sendiri. Jika Anda tidak mengubah port di /etc/wireguard/wg0.conf server file, port yang akan Anda buka adalah 51820 . Jika Anda memilih port yang berbeda saat mengedit konfigurasi, pastikan untuk menggantinya dengan perintah UFW berikut.

Jika Anda lupa membuka port SSH saat mengikuti tutorial prasyarat, tambahkan juga di sini:

  1. sudo ufw allow 51820/udp
  2. sudo ufw allow OpenSSH

Catatan :Jika Anda menggunakan firewall lain atau telah menyesuaikan konfigurasi UFW Anda, Anda mungkin perlu menambahkan aturan firewall tambahan. Misalnya, jika Anda memutuskan untuk melakukan tunnel semua lalu lintas jaringan melalui koneksi VPN, Anda perlu memastikan bahwa port 53 lalu lintas diizinkan untuk permintaan DNS, dan port seperti 80 dan 443 untuk lalu lintas HTTP dan HTTPS masing-masing. Jika ada protokol lain yang Anda gunakan melalui VPN, Anda juga perlu menambahkan aturan untuk protokol tersebut.

Setelah menambahkan aturan tersebut, nonaktifkan dan aktifkan kembali UFW untuk memulai ulang dan memuat perubahan dari semua file yang telah Anda modifikasi:

  1. sudo ufw disable
  2. sudo ufw enable

Anda dapat mengonfirmasi aturan yang ada dengan menjalankan ufw status memerintah. Jalankan, dan Anda akan menerima output seperti berikut:

  1. sudo ufw status
OutputStatus: active

To                         Action      From
--                         ------      ----
51280/udp                  ALLOW       Anywhere                  
22/tcp                     ALLOW       Anywhere                  
51280/udp (v6)             ALLOW       Anywhere (v6)             
22/tcp (v6)                ALLOW       Anywhere (v6)

Server WireGuard Anda sekarang dikonfigurasi untuk menangani lalu lintas VPN dengan benar, termasuk penerusan dan penyamaran untuk rekan-rekan. Dengan aturan firewall yang berlaku, Anda dapat memulai layanan WireGuard itu sendiri untuk mendengarkan koneksi rekan.

Langkah 6 — Memulai Server WireGuard

WireGuard dapat dikonfigurasi untuk dijalankan sebagai systemd layanan menggunakan wg-quick bawaannya naskah. Meskipun Anda dapat secara manual menggunakan wg perintah untuk membuat terowongan setiap kali Anda ingin menggunakan VPN, melakukannya adalah proses manual yang menjadi berulang dan rawan kesalahan. Sebagai gantinya, Anda dapat menggunakan systemctl untuk mengelola terowongan dengan bantuan wg-quick naskah.

Menggunakan systemd service berarti Anda dapat mengonfigurasi WireGuard untuk memulai saat boot sehingga Anda dapat terhubung ke VPN kapan saja selama server berjalan. Untuk melakukannya, aktifkan wg-quick layanan untuk wg0 tunnel yang telah Anda tentukan dengan menambahkannya ke systemctl :

  1. sudo systemctl enable [email protected]

Perhatikan bahwa perintah menentukan nama terowongan wg0 nama perangkat sebagai bagian dari nama layanan. Nama ini dipetakan ke /etc/wireguard/wg0.conf berkas konfigurasi. Pendekatan penamaan ini berarti Anda dapat membuat terowongan VPN terpisah sebanyak yang Anda inginkan menggunakan server Anda.

Misalnya, Anda dapat memiliki perangkat terowongan dan nama prod dan file konfigurasinya adalah /etc/wireguard/prod.conf . Setiap konfigurasi terowongan dapat berisi pengaturan firewall IPv4, IPv6, dan klien yang berbeda. Dengan cara ini Anda dapat mendukung beberapa koneksi peer yang berbeda, masing-masing dengan alamat IP dan aturan perutean uniknya sendiri.

Sekarang mulai layanan:

  1. sudo systemctl start [email protected]

Periksa kembali apakah layanan WireGuard aktif dengan perintah berikut. Anda akan melihat active (running) dalam keluaran:

  1. sudo systemctl status [email protected]
Output● [email protected] - WireGuard via wg-quick(8) for wg0
     Loaded: loaded (/lib/systemd/system/[email protected]; enabled; vendor preset: enabled)
     Active: active (exited) since Mon 2022-04-18 17:22:13 UTC; 2s ago
       Docs: man:wg-quick(8)
             man:wg(8)
             https://www.wireguard.com/
             https://www.wireguard.com/quickstart/
             https://git.zx2c4.com/wireguard-tools/about/src/man/wg-quick.8
             https://git.zx2c4.com/wireguard-tools/about/src/man/wg.8
    Process: 98834 ExecStart=/usr/bin/wg-quick up wg0 (code=exited, status=0/SUCCESS)
   Main PID: 98834 (code=exited, status=0/SUCCESS)
        CPU: 193ms

Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] wg setconf wg0 /dev/fd/63
Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip -4 address add 10.8.0.1/24 dev wg0
Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip -6 address add fd24:609a:6c18::1/64 dev wg0
Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip link set mtu 1420 up dev wg0
Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ufw route allow in on wg0 out on ens3
Apr 18 17:22:13 thats-my-jam wg-quick[98890]: Rule added
Apr 18 17:22:13 thats-my-jam wg-quick[98890]: Rule added (v6)
Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] iptables -t nat -I POSTROUTING -o ens3 -j MASQUERADE
Apr 18 17:22:13 thats-my-jam wg-quick[98834]: [#] ip6tables -t nat -I POSTROUTING -o ens3 -j MASQUERADE
Apr 18 17:22:13 thats-my-jam systemd[1]: Finished WireGuard via wg-quick(8) for wg0.

Output menunjukkan ip perintah yang digunakan untuk membuat virtual wg0 perangkat dan menetapkan alamat IPv4 dan IPv6 yang Anda tambahkan ke file konfigurasi. Anda dapat menggunakan aturan ini untuk memecahkan masalah terowongan, atau dengan wg perintah itu sendiri jika Anda ingin mencoba mengonfigurasi antarmuka VPN secara manual.

Dengan server yang dikonfigurasi dan berjalan, langkah selanjutnya adalah mengonfigurasi mesin klien Anda sebagai WireGuard Peer dan menghubungkan ke Server WireGuard.

Langkah 7 — Mengonfigurasi Rekan WireGuard

Mengonfigurasi rekan WireGuard mirip dengan menyiapkan Server WireGuard. Setelah Anda menginstal perangkat lunak klien, Anda akan membuat pasangan kunci publik dan pribadi, memutuskan alamat IP atau alamat untuk peer, menentukan file konfigurasi untuk peer, dan kemudian memulai terowongan menggunakan wg-quick naskah.

Anda dapat menambahkan peer sebanyak yang Anda suka ke VPN Anda dengan membuat pasangan kunci dan konfigurasi menggunakan langkah-langkah berikut. Jika Anda menambahkan beberapa rekan ke VPN, pastikan untuk melacak alamat IP pribadi mereka untuk mencegah tabrakan.

Untuk mengkonfigurasi WireGuard Peer, pastikan Anda telah menginstal paket WireGuard menggunakan apt berikut perintah. Pada peer run WireGuard:

  1. sudo apt update
  2. sudo apt install wireguard

Membuat Pasangan Kunci Peer WireGuard

Selanjutnya, Anda harus membuat pasangan kunci pada peer menggunakan langkah yang sama seperti yang Anda gunakan di server. Dari mesin lokal atau server jarak jauh Anda yang akan berfungsi sebagai peer, lanjutkan dan buat kunci pribadi untuk peer menggunakan perintah berikut:

  1. wg genkey | sudo tee /etc/wireguard/private.key
  2. sudo chmod go= /etc/wireguard/private.key

Sekali lagi Anda akan menerima satu baris base64 keluaran yang disandikan, yang merupakan kunci pribadi. Salinan output juga disimpan di /etc/wireguard/private.key . Catat dengan hati-hati kunci pribadi yang dihasilkan karena Anda harus menambahkannya ke file konfigurasi WireGuard nanti di bagian ini.

Selanjutnya gunakan perintah berikut untuk membuat file kunci publik:

  1. sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key

Anda akan kembali menerima satu baris base64 keluaran yang disandikan, yang merupakan kunci publik untuk WireGuard Peer Anda. Salin di suatu tempat untuk referensi, karena Anda perlu mendistribusikan kunci publik ke Server WireGuard untuk membuat koneksi terenkripsi.

Membuat File Konfigurasi WireGuard Peer

Sekarang setelah Anda memiliki pasangan kunci, Anda dapat membuat file konfigurasi untuk rekan yang berisi semua informasi yang diperlukan untuk membuat koneksi ke Server WireGuard.

Anda memerlukan beberapa informasi untuk file konfigurasi:

  • base64 kunci pribadi yang disandikan yang Anda buat di peer.

  • Rentang alamat IPv4 dan IPv6 yang Anda tentukan di Server WireGuard.

  • base64 kunci publik yang disandikan dari Server WireGuard.

  • Alamat IP publik dan nomor port dari Server WireGuard. Biasanya ini akan menjadi alamat IPv4, tetapi jika server Anda memiliki alamat IPv6 dan mesin klien Anda memiliki koneksi IPv6 ke internet, Anda dapat menggunakan ini sebagai pengganti IPv4.

Dengan semua informasi ini, buka /etc/wireguard/wg0.conf baru file pada mesin WireGuard Peer menggunakan nano atau editor pilihan Anda:

  1. sudo nano /etc/wireguard/wg0.conf

Tambahkan baris berikut ke file, ganti berbagai data ke bagian yang disorot sesuai kebutuhan:

/etc/wireguard/wg0.conf[Interface]
PrivateKey = base64_encoded_peer_private_key_goes_here
Address = 10.8.0.2/24
Address = fd24:609a:6c18::2/64

[Peer]
PublicKey = U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE=
AllowedIPs = 10.8.0.0/24, fd24:609a:6c18::/64
Endpoint = 203.0.113.1:51820

Perhatikan bagaimana Address pertama baris menggunakan alamat IPv4 dari 10.8.0.0/24 subnet yang Anda pilih sebelumnya. Alamat IP ini bisa apa saja di subnet asalkan berbeda dengan IP server. Incrementing addresses by 1 each time you add a peer is generally the easiest way to allocate IPs.

Likewise, notice how the second Address line uses an IPv6 address from the subnet that you generated earlier, and increments the server’s address by one. Again, any IP in the range is valid if you decide to use a different address.

The other notable part of the file is the last AllowedIPs garis. These two IPv4 and IPv6 ranges instruct the peer to only send traffic over the VPN if the destination system has an IP address in either range. Using the AllowedIPs directive, you can restrict the VPN on the peer to only connect to other peers and services on the VPN, or you can configure the setting to tunnel all traffic over the VPN and use the WireGuard Server as a gateway.

If you are only using IPv4, then omit the trailing fd24:609a:6c18::/64 range (including the , comma). Conversely, if you are only using IPv6, then only include the fd24:609a:6c18::/64 prefix and leave out the 10.8.0.0/24 IPv4 range.

In both cases, if you would like to send all your peer’s traffic over the VPN and use the WireGuard Server as a gateway for all traffic, then you can use 0.0.0.0/0 , which represents the entire IPv4 address space, and ::/0 for the entire IPv6 address space.

(Optional) Configuring a Peer to Route All Traffic Over the Tunnel

If you have opted to route all of the peer’s traffic over the tunnel using the 0.0.0.0/0 or ::/0 routes and the peer is a remote system, then you will need to complete the steps in this section. If your peer is a local system then it is best to skip this section.

For remote peers that you access via SSH or some other protocol using a public IP address, you will need to add some extra rules to the peer’s wg0.conf mengajukan. These rules will ensure that you can still connect to the system from outside of the tunnel when it is connected. Otherwise, when the tunnel is established, all traffic that would normally be handled on the public network interface will not be routed correctly to bypass the wg0 tunnel interface, leading to an inaccessible remote system.

First, you’ll need to determine the IP address that the system uses as its default gateway. Run the following ip route perintah:

  1. ip route list table main default

You will receive output like the following:

Outputdefault via 203.0.113.1 dev eth0 proto static

Note the gateway’s highlighted IP address 203.0.113.1 for later use, and device eth0 . Your device name may be different. If so, substitute it in place of eth0 in the following commands.

Next find the public IP for the system by examining the device with the ip address show perintah:

  1. ip -brief address show eth0

You will receive output like the following:

Outputeth0             UP             203.0.113.5/20 10.20.30.40/16 2604:a880:400:d1::3d3:6001/64 fe80::68d5:beff:feff:974c/64

In this example output, the highlighted 203.0.113.5 IP (without the trailing /20 ) is the public address that is assigned to the eth0 device that you’ll need to add to the WireGuard configuration.

Now open the WireGuard Peer’s /etc/wireguard/wg0.conf file with nano or your preferred editor.

  1. sudo nano /etc/wireguard/wg0.conf

Before the [Peer] line, add the following 4 lines:

PostUp = ip rule add table 200 from 203.0.113.5
PostUp = ip route add table 200 default via 203.0.113.1
PreDown = ip rule delete table 200 from 203.0.113.5
PreDown = ip route delete table 200 default via 203.0.113.1

[Peer]
. . .

These lines will create a custom routing rule, and add a custom route to ensure that public traffic to the system uses the default gateway.

  • PostUp = ip rule add table 200 from 203.0.113.5 - This command creates a rule that checks for any routing entries in the table numbered 200 when the IP matches the system’s public 203.0.113.5 alamat.
  • PostUp = ip route add table 200 default via 203.0.113.1 - This command ensures that any traffic being processed by the 200 table will use the 203.0.113.1 gateway for routing, instead of the WireGuard interface.

The PreDown lines remove the custom rule and route when the tunnel is shutdown.

Note:The table number 200 is arbitrary when constructing these rules. You can use a value between 2 and 252, or you can use a custom name by adding a label to the /etc/iproute2/rt_tables file and then referring to the name instead of the numeric value.

For more information about how routing tables work in Linux visit the Routing Tables Section of the Guide to IP Layer Network Administration with Linux.

If you are routing all the peer’s traffic over the VPN, ensure that you have configured the correct sysctl and iptables rules on the WireGuard Server in Step 4 — Adjusting the WireGuard Server’s Network Configuration and Step 5 — Configuring the WireGuard Server’s Firewall.

(Optional) Configuring the WireGuard Peer’s DNS Resolvers

If you are using the WireGuard Server as a VPN gateway for all your peer’s traffic, you will need to add a line to the [Interface] section that specifies DNS resolvers. If you do not add this setting, then your DNS requests may not be secured by the VPN, or they might be revealed to your Internet Service Provider or other third parties.

If you are only using WireGuard to access resources on the VPN network or in a peer-to-peer configuration then you can skip this section.

To add DNS resolvers to your peer’s configuration, first determine which DNS servers your WireGuard Server is using. Run the following command on the WireGuard Server , substituting in your ethernet device name in place of eth0 if it is different from this example:

  1. resolvectl dns eth0

You should receive output like the following:

OutputLink 2 (eth0): 67.207.67.2 67.207.67.3 2001:4860:4860::8844 2001:4860:4860::8888

The IP addresses that are output are the DNS resolvers that the server is using. You can choose to use any or all of them, or only IPv4 or IPv6 depending on your needs. Make a note of the resolvers that you will use.

Next you will need to add your chosen resolvers to the WireGuard Peer’s configuration file. Back on the WireGuard Peer , open /etc/wireguard/wg0.conf file using nano or your preferred editor:

  1. sudo nano /etc/wireguard/wg0.conf

Before the [Peer] line, add the following:

DNS = 67.207.67.2 2001:4860:4860::8844

[Peer]
. . .

Again, depending on your preference or requirements for IPv4 and IPv6, you can edit the list according to your needs.

Once you are connected to the VPN in the following step, you can check that you are sending DNS queries over the VPN by using a site like DNS leak test.com.

You can also check that your peer is using the configured resolvers with the resolvectl dns command like you ran on the server. You should receive output like the following, showing the DNS resolvers that you configured for the VPN tunnel:

OutputGlobal: 67.207.67.2 67.207.67.3
. . .

With all of these DNS resolver settings in place, you are now ready to add the peer’s public key to the server, and then start the WireGuard tunnel on the peer.

Step 8 — Adding the Peer’s Public Key to the WireGuard Server

Before connecting the peer to the server, it is important to add the peer’s public key to the WireGuard Server. This step ensures that you will be able to connect to and route traffic over the VPN. Without completing this step the WireGuard server will not allow the peer to send or receive any traffic over the tunnel.

Ensure that you have a copy of the base64 encoded public key for the WireGuard Peer by running:

  1. sudo cat /etc/wireguard/public.key
OutputPeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=

Now log into the WireGuard server, and run the following command:

  1. sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,fd24:609a:6c18::2

Note that the allowed-ips portion of the command takes a comma separated list of IPv4 and IPv6 addresses. You can specify individual IPs if you would like to restrict the IP address that a peer can assign itself, or a range like in the example if your peers can use any IP address in the VPN range. Also note that no two peers can have the same allowed-ips setting.

If you would like to update the allowed-ips for an existing peer, you can run the same command again, but change the IP addresses. Multiple IP addresses are supported. For example, to change the WireGuard Peer that you just added to add an IP like 10.8.0.100 to the existing 10.8.0.2 and fd24:609a:6c18::2 IPs, you would run the following:

  1. sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= allowed-ips 10.8.0.2,10.8.0.100,fd24:609a:6c18::2

Once you have run the command to add the peer, check the status of the tunnel on the server using the wg perintah:

  1. sudo wg
Outputinterface: wg0
 public key: U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE=
 private key: (hidden)
 listening port: 51820

peer: PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=
 allowed ips: 10.8.0.2/32, fd24:609a:6c18::/128

Notice how the peer line shows the WireGuard Peer’s public key, and the IP addresses, or ranges of addresses that it is allowed to use to assign itself an IP.

Now that you have defined the peer’s connection parameters on the server, the next step is to start the tunnel on the peer.

Step 9 — Connecting the WireGuard Peer to the Tunnel

Now that your server and peer are both configured to support your choice of IPv4, IPv6, packet forwarding, and DNS resolution, it is time to connect the peer to the VPN tunnel.

Since you may only want the VPN to be on for certain use cases, we’ll use the wg-quick command to establish the connection manually. If you would like to automate starting the tunnel like you did on the server, follow those steps in Step 6 — Starting the WireGuard Server section instead of using the wq-quick perintah.

In case you are routing all traffic through the VPN and have set up DNS forwarding, you’ll need to install the resolvconf utility on the WireGuard Peer before you start the tunnel. Run the following command to set this up:

  1. sudo apt install resolvconf

To start the tunnel, run the following on the WireGuard Peer:

  1. sudo wg-quick up wg0

You will receive output like the following:

Output[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.8.0.2/24 dev wg0
[#] ip -6 address add fd24:609a:6c18::2/64 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] resolvconf -a tun.wg0 -m 0 -x

Notice the highlighted IPv4 and IPv6 addresses that you assigned to the peer.

If you set the AllowedIPs on the peer to 0.0.0.0/0 and ::/0 (or to use ranges other than the ones that you chose for the VPN), then your output will resemble the following:

Output[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.8.0.2/24 dev wg0
[#] ip -6 address add fd24:609a:6c18::2/64 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] resolvconf -a tun.wg0 -m 0 -x
[#] wg set wg0 fwmark 51820
[#] ip -6 route add ::/0 dev wg0 table 51820
[#] ip -6 rule add not fwmark 51820 table 51820
[#] ip -6 rule add table main suppress_prefixlength 0
[#] ip6tables-restore -n
[#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820
[#] ip -4 rule add not fwmark 51820 table 51820
[#] ip -4 rule add table main suppress_prefixlength 0
[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
[#] iptables-restore -n

In this example, notice the highlighted routes that the command added, which correspond to the AllowedIPs in the peer configuration.

You can check the status of the tunnel on the peer using the wg perintah:

  1. sudo wg
Outputinterface: wg0
 public key: PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=
 private key: (hidden)
 listening port: 49338
 fwmark: 0xca6c

peer: U9uE2kb/nrrzsEU58GD3pKFU3TLYDMCbetIsnV8eeFE=
 endpoint: 203.0.113.1:51820
 allowed ips: 10.8.0.0/24, fd24:609a:6c18::/64
 latest handshake: 1 second ago
 transfer: 6.50 KiB received, 15.41 KiB sent

You can also check the status on the server again, and you will receive similar output.

Verify that your peer is using the VPN by using the ip route and ip -6 route perintah. If you are using the VPN as a gateway for all your Internet traffic, check which interface will be used for traffic destined to CloudFlare’s 1.1.1.1 and 2606:4700:4700::1111 DNS resolvers.

If you are only using WireGuard to access resources on the VPN, substitute a valid IPv4 or IPv6 address like the gateway itself into these commands. For example 10.8.0.1 or fd24:609a:6c18::1 .

  1. ip route get 1.1.1.1
Output1.1.1.1 dev wg0 table 51820 src 10.8.0.2 uid 1000
   cache

Notice the wg0 device is used and the IPv4 address 10.8.0.2 that you assigned to the peer. Likewise, if you are using IPv6, run the following:

  1. ip -6 route get 2606:4700:4700::1111
Output2606:4700:4700::1111 from :: dev wg0 table 51820 src fd24:609a:6c18::2 metric 1024 pref medium

Again note the wg0 interface, and the IPv6 address fd24:609a:6c18::2 that you assigned to the peer.

If your peer has a browser installed, you can also visit ipleak.net and ipv6-test.com to confirm that your peer is routing its traffic over the VPN.

Once you are ready to disconnect from the VPN on the peer, use the wg-quick perintah:

  1. sudo wg-quick down wg0

You will receive output like the following indicating that the VPN tunnel is shut down:

Output[#] ip link delete dev wg0
[#] resolvconf -d tun.wg0 -f

If you set the AllowedIPs on the peer to 0.0.0.0/0 and ::/0 (or to use ranges other than the ones that you chose for the VPN), then your output will resemble the following:

Output[#] ip rule delete table 200 from 203.0.113.5
[#] ip route delete table 200 default via 203.0.113.1
[#] ip -4 rule delete table 51820
[#] ip -4 rule delete table main suppress_prefixlength 0
[#] ip -6 rule delete table 51820
[#] ip -6 rule delete table main suppress_prefixlength 0
[#] ip link delete dev wg0
[#] resolvconf -d tun.wg0 -f
[#] iptables-restore -n
[#] ip6tables-restore -n

To reconnect to the VPN, run the wg-quick up wg0 command again on the peer. If you would like to completely remove a peer’s configuration from the WireGuard Server, you can run the following command, being sure to substitute the correct public key for the peer that you want to remove:

  1. sudo wg set wg0 peer PeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg= remove

Typically you will only need to remove a peer configuration if the peer no longer exists, or if its encryption keys are compromised or changed. Otherwise it is better to leave the configuration in place so that the peer can reconnect to the VPN without requiring that you add its key and allowed-ips each time.

Kesimpulan

In this tutorial you installed the WireGuard package and tools on both the server and client Ubuntu 22.04 systems. You set up firewall rules for WireGuard, and configured kernel settings to allow packet forwarding using the sysctl command on the server. You learned how to generate private and public WireGuard encryption keys, and how to configure the server and peer (or peers) to connect to each other.

If your network uses IPv6, you also learned how to generate a unique local address range to use with peer connections. Finally, you learned how to limit which traffic should go over the VPN by restricting the network prefixes that the peer can use, as well as how to use the WireGuard Server as a VPN gateway to handle all Internet traffic for peers.

If you would like to learn more about WireGuard, including how to configure more advanced tunnels, or use WireGuard with containers, visit the official WireGuard documentation.


OpenVPN
  1. Cara Mengatur VPN WireGuard di Ubuntu 20.04

  2. Cara Mengatur VPN WireGuard di Ubuntu (Panduan Langkah-demi-Langkah)

  3. Cara Mengatur dan Mengonfigurasi Otoritas Sertifikat Di Ubuntu 22.04

  1. Cara Mengatur Server LAMP Ubuntu/Debian

  2. Cara Mengatur Server dan Klien NFS di Ubuntu 20.04

  3. Cara Mengatur Server TeamSpeak di Ubuntu 16.04

  1. Cara Mengatur &Menginstal Server Proxy Squid di Ubuntu 18.04

  2. Cara Mengatur Nginx sebagai Proxy Terbalik di Ubuntu 20.04

  3. Ubuntu – Bagaimana Cara Mengatur Ip Statis Di Ubuntu?