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:
- sudo apt update
- 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:
- wg genkey | sudo tee /etc/wireguard/private.key
- 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:
- 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
ke10.255.255.255
(10/8 awalan)172.16.0.0
ke172.31.255.255
(172.16/12 awalan)192.168.0.0
ke192.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:
- 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.
- 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:
- 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:
- 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:
-
Pastikan Anda memiliki kunci pribadi yang tersedia dari Langkah 1 — Memasang WireGuard dan Membuat Pasangan Kunci.
-
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
. -
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:
- 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:
- sudo nano /etc/sysctl.conf
Jika Anda menggunakan IPv4 dengan WireGuard, tambahkan baris berikut di bagian bawah file:
/etc/sysctl.confnet.ipv4.ip_forward=1
Jika Anda menggunakan IPv6 dengan WireGuard, tambahkan baris ini di bagian bawah file:
/etc/sysctl.confnet.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:
- 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:
- 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.
- 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 diwg0
Antarmuka VPN keeth0
antarmuka jaringan di server. Ini bekerja bersama dengannet.ipv4.ip_forward
dannet.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 padawg0
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 padawg0
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:
- sudo ufw allow 51820/udp
- 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:
- sudo ufw disable
- sudo ufw enable
Anda dapat mengonfirmasi aturan yang ada dengan menjalankan ufw status
memerintah. Jalankan, dan Anda akan menerima output seperti berikut:
- 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
:
- 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:
- sudo systemctl start [email protected]
Periksa kembali apakah layanan WireGuard aktif dengan perintah berikut. Anda akan melihat active (running)
dalam keluaran:
- 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:
- sudo apt update
- 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:
- wg genkey | sudo tee /etc/wireguard/private.key
- 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:
- 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:
- 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:
- 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:
- 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.
- 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 numbered200
when the IP matches the system’s public203.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 the200
table will use the203.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:
- 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:
- 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:
- sudo cat /etc/wireguard/public.key
OutputPeURxj4Q75RaVhBKkRTpNsBPiPSGb5oQijgJsTa29hg=
Now log into the WireGuard server, and run the following command:
- 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:
- 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:
- 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:
- sudo apt install resolvconf
To start the tunnel, run the following on the WireGuard Peer:
- 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:
- 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
.
- 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:
- 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:
- 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:
- 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.