VPN WIFI Access Point

VPN WIFI Access Point menggunakan Raspberry Pi model B+ yang berfungsi membentuk komunikasi tunnel dengan VPN Gateway di Cloud

Penggunaan Internet terus mengalami peningkatan dan sudah menjadi kebutuhan primer bagi sebagian masyarakat. Kegiatan seperti mengirim pesan instan, berbelanja sampai ke transaksi keuangan sudah bisa dilakukan melalui Internet.

Kebutuhan diatas mendorong meningkatnya ketersediaan atas akses Internet mulai dari WIFI publik yang bebas biaya sampai dengan akses yang diperoleh melalui jaringan selular.

Keamanan atas akses tersebut telah menjadi perhatian belakangan ini dimana terdapat beberapa kasus adanya kegiatan pencegatan data atau data interception yang dilakukan oleh pihak yang tidak berwenang. Hal ini kerap terjadi di WIFI umum yang secara sengaja disediakan oleh pihak yang bertujuan melakukan perbuatan jahat seperti mencuri username, password dan data sensitif lainnya.

Dalam artikel sederhana ini kita akan membahas tentang penggunaan VPN untuk meminimalisir risiko diatas. Selain itu kita juga akan membahas bagaimana memanfaatkan Raspberry Pi sebagai WIFI Access Point yang membentuk tunnel komunikasi ke Cloud VPN Gateway.

Latar Belakang

Mengakses Internet secara aman melalui WIFI publik telah menjadi tantangan yang menarik. Bahkan akses yang disediakan oleh internet perumahan atau residential Internet access dan juga penyedia layanan data selular pun tidak luput dari kendala dan risiko. Berikut beberapa kendala dan risiko yang umum kita hadapi:

  1. Pencegatan data / data interception yang beberapa kali ditemukan di WIFI publik
  2. Beberapa IP internet perumahan yang telah diblokir oleh penyedia resources seperti playstation network, google dan lainnya karena pernah digunakan oleh peretas atau malware untuk menyerang. Berhubung pengelolaan IP ini bersifat dinamis, tidak jarang pengguna biasa mendapatkan IP yang telah diblokir sehingga mengalami kendala saat mengakses resource-resource tersebut.
  3. Penyedia data selular kerap kali menyusupkan iklan atau Ads Injection ke akses Internet yang kita gunakan. Proses injeksi dilakukan dengan mengikutsertakan script dalam response messages yang diterima oleh pengguna. Selain mengganggu, teknik ini juga berpotensi membahayakan keamanan perangkat pengguna.

Salah satu cara untuk meminimalisir kendala dan risiko diatas adalah dengan menggunakan Virtual Private Network (VPN) dimana koneksi pengguna terlebih dahulu dienkapsulasi dalam bentuk tunnel, dikirim menuju VPN Gateway dan kemudian diteruskan ke tujuan akhir yaitu resource Internet yang ingin diakses.

Proses enkapsulasi ini dilindungi dengan enkripsi asimetris menggunakan teknik Public Key Infrastructure (PKI) guna mempersulit pencegatan data. Pencegat komunikasi sulit mendekripsi Informasi yang dikirim melalui tunnel karena kunci (public key) yang digunakan untuk mengenkripsi tidak bisa digunakan untuk mendekripsi. Proses dekripsi hanya bisa dilakukan menggunakan private key dimana key tersebut tidak pernah dipertukarkan antar pengguna dan VPN Gateway sehingga jauh dari jangkauan pencegat.

Dengan konsep tunneling, pengguna tidak mengakses resource Internet secara langsung melainkan melalui VPN Gateway. Apabila VPN Gateway tersebut dioperasikan di cloud yang terpercaya maka kecil kemungkinan resources di Internet melakukan pemblokiran terhadap IP VPN Gateway. Oleh karenannya kendala akses yang umum ditemukan saat menggunakan Internet perumahan dapat diatasi.

Penyedia data seluler juga sulit untuk menyusupi iklan karena komunikasi pengguna ke VPN Gateway telah dienkripsi dan juga dilindungi dengan pengecekan integritas data (data integrity).

Pada kesempatan ini kita akan membuat VPN WIFI Access Point menggunakan Raspberry PI Model B+. Perangkat ini difungsikan sebagai Access Point yang akan membangun tunnel dengan VPN Gateway di Cloud. Request atau permintaan akses ke resource di Internet dari pengguna yang bergabung atau joint ke akses point ini akan secara otomatis diteruskan ke VPN Gateway. Selanjutnya VPN Gateway dengan mengatasnamakan pengguna meneruskan akses ke resource tersebut dan mengirim hasil responsenya kembali ke pengguna.

Secara garis besar, berikut ilustrasi pelaksanaaan proses pengamanan komunikasi antar pengguna, VPN Gateway dan resource Internet.

Certificate Authority (CA) memiliki peranan penting dalam pengamanan komunikasi ini dan salah satu sistem sentral yang perlu dilindungi. Tugas utama CA adalah menandatangani (signing) sertifikat digital milik kedua belah pihak yang berkomunikasi. Pengguna yang diwakilkan oleh raspberry pi harus memastikan bahwa komunikasi tunnel dibentuk dengan VPN Gateway yang sebenarnya dan bukan VPN Gateway yang dibuat oleh pencegat (interceptor). Cara yang digunakan oleh raspberry pi adalah dengan memastikan sertifikat digital yang disajikan oleh VPN Gateway telah ditandatangani oleh CA yang dipercaya oleh raspberry pi. Hal serupa juga dilakukan oleh VPN Gateway untuk memastikan rapberry pi yang memulai komunikasi pembentukan tunnel merupakan pihak yang resmi (not impersonating) dan terpercaya.

Salah satu metode untuk meminimalisir serangan terhadap CA agar tidak disalahgunakan oleh pihak yang tidak berwenang adalah dengan memisahkan CA dari jalur komunikasi umum (out of band). CA selalu dalam kondisi offline dan hanya aktif saat melakukan signing atau revoke sertifikat digital.

Raspberry pi Model B+ secara default memiliki satu interface ethernet dan WIFI. Dengan tambahan ekternal WIFI card, kita bisa mengimplementasikan WIFI VPN Access Point dalam dua model skenario.

Salah satu skenarionya adalah menghubungkan Raspberry pi langsung ke broadband modem menggunakan ethernet. Pengguna yang terhubung ke LAN yang sama dapat mengarahkan default gateway nya ke Raspberry pi agar seluruh koneksi diteruskan ke VPN Gateway.

Skenario berikutnya adalah menghubungkan raspberry pi dengan MIFI modem menggunakan interface internal WIFI. Pengguna bisa bergabung ke Access Point yang dijalankan oleh raspberry pi melalui eksternal WIFI card atau bisa juga tersambung melalui interface ethernet. Model implementasi seperti ini membuat VPN WIFI Access Point menjadi lebih mudah dibawa dan digunakan dimanapun. Apabila koneksi ke WIFI umum dibutuhkan untuk tersambung ke Internet, internal WIFI interface dapat diarahkan untuk terasosiasi dengan access point tersebut. Cukup mengubah dan menyesuaikan konfigurasi yang tersimpan di file wpa_supplicant.conf

Berkut adalah ilustrasi model implementasi yang bisa kita terapkan.

Persiapan

Berikut perangkat dan sistem yang harus disiapkan terlebih dahulu:

  1. VM instance di Cloud dengan Sistem Operasi Ubuntu 18.04 dan aplikasi OpenVPN yang akan berfungsi sebagai VPN gateway
  2. Stand-alone VM dengan Sistem Operasi Ubuntu 18.04 yang akan berfungsi sebagai Certificate Authority (CA) server. Sistem ini bisa diinstal dan dioperasikan di lokal komputer.
  3. Raspberry 3 Model B+ dengan Sistem Operasi RASPBIAN STRETCH LITE yang berfungsi sebagai VPN client dan sekaligus sebagai Access Point untuk menjembatani koneksi pengguna ke jalur atau tunnel VPN.
  4. Eksternal WIFI card yang akan digunakan oleh raspberry pi sebagai Access Point. Dalam artikel ini kita menggunakan WIFI card TP-Link TL-WN722N ver 1.1. WIFI card ALFA AWUS036NH juga menarik untuk digunakan sebagai alternatif karena mudah untuk diperoleh.

1.Menyiapkan instance VPN Gateway di Cloud

Layanan cloud seperti google, amazon, digitalocean dan sejenisnya memberikan pilihan lokasi datacenter di beberapa negara untuk menjalankan VM instance. Pilih dan tempatkan VPN Gateway instance di datacenter yang berada di negara terdekat dengan Indonesia agar koneksi VPN dari client (Raspberry) lebih efisien dan cepat. Ikuti panduan pembuatan dan instalasi VM instance Ubuntu 18.04 yang disediakan oleh penyedia cloud sebelum melangkah ke proses selanjutnya.

NOTE: Pastikan fitur IP forwarding diaktifkan saat pembuatan Compute Engine VM Instance apabila menggunakan google cloud karena fitur tersebut tidak bisa diubah apabila instance telah terbentuk. Fungsi IP forwarding dibutuhkan agar request dari Raspberry pi ke Internet melalui VPN tunnel dapat diteruskan oleh VPN Gateway.

Perlu diketahui bahwa software OpenVPN yang kita gunakan sebagai VPN Gateway mengimplementasikan Transport Layer Security (TLS) protocol menggunakan library OpenSSL.

Setelah VM instance siap dan telah mendapatkan alamat IP publik, ikuti langkah berikut untuk mempersiapkan VPN Gateway dengan openVPN

a. Update Sistem Operasi dan instal OpenVPN

sudo apt update
sudo apt upgrade
sudo apt install openvpn

b. Aktifkan firewall ufw agar instance VPN Gateway kita dapat meminimalisir serangan dari pihak yang tidak berwenang. Pastikan layanan SSH diperbolehkan untuk diakses dari eksternal dan layanan tersebut hanya menerapkan public key authentication.

sudo ufw allow OpenSSH
sudo ufw enable

c. Pastikan ufw telah aktif dengan perintah berikut

sudo ufw status numbered

2.Menyiapkan Certificate Authority (CA) server

Siapkan VM instance untuk CA server dengan Sistem Operasi Ubuntu 18.04 di lokal komputer. Setelah itu lakukan langkah berikut untuk membangun fungsi CA.

a. Update Sistem Operasi dan instal OpenVPN

sudo apt update
sudo apt upgrade
sudo apt install openvpn

b. Download dan ekstrak EasyRSA

wget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.5/EasyRSA-nix-3.0.5.tgz
cd ~
tar xvf EasyRSA-nix-3.0.5.tgz

3.Menyiapkan Raspberry 3 Model B+

siapkan raspberry pi model B+ dengan tambahan wireless card. Disarankan menggunakan raspbian stretch lite

a. Update raspberry pi raspbian OS

sudo apt update
sudo apt upgrade

b. Pastikan setting seperti Wifi Country, Timezone, Locale dan lain sebagainya telah disesuaikan dengan lokasi kita saat ini. Selain itu pastikan SSH telah diaktifkan dan login diset hanya menggunakan public/private key agar lebih aman. Panduan lengkap cara mengkonfigurasi raspberry pi dapat di lihat di dokumentasi raspberry

c. Install OpenVPN

sudo apt install openvpn

d. Install hostapd, dnsmasq dan UFW

sudo apt install hostapd dnsmasq ufw

e. Reboot Raspberry pi karena sering terjadi kendala saat menambah rule firewall menggunakan ufw apabila instalasi ufw belum diakhiri dengan system restart.

f. Aktifkan firewall ufw agar raspberry pi dapat meminimalisir serangan dari pihak yang tidak berwenang. Pastikan layanan SSH diperbolehkan untuk diakses dari eksternal dan layanan tersebut hanya menerapkan public key authentication.

sudo ufw allow SSH
sudo ufw enable

kemudian cek untuk memastikan ufw telah aktif

sudo ufw status numbered

Video berikut ini memperjelas proses eksekusi dari serangkaian perintah diatas.

Konfigurasi

Konfigurasi CA Server

Seperti yang telah dijelaskan sebelumnya, CA server bertanggung jawab untuk melakukan signing terhadap Public Key VPN Gateway dan juga VPN client yang dalam artikel ini merupakan Raspberry Pi 3 Model B+. Hasil atau wujud dari proses signing ini adalah digital certificate yang telah di-sign yang akan digunakan oleh dua entitas (VPN Gateway dan VPN Client) sebagai identitas.

Seyogyanya tugas CA hanya melakukan signing dan juga pembatalan atau revoke digital certificate apabila diperlukan. Pembatalan terhadap suatu digital certificate dilakukan apabila private key terkait hilang atau jatuh ke tangan pihak yang tidak berwenang.

Pada pembahasan ini fungsi CA tidak hanya melakukan hal diatas namun juga membuat Public/Private key pairs untuk setiap entitas yang akan berkomunikasi melalui OpenVPN. Dalam hal ini, key pairs untuk OpenVPN server dan OpenVPN client akan dibuat dan sekaligus ditandatangani / sign oleh server CA yang sama. Alasannya adalah untuk mempersingkat dan mempermudah pembahasan.

Umumnya setiap entitas bertanggung jawab untuk membuat key pairsnya masing-masing dan kemudian mengirim Certificate Signing Request (CSR) ke CA server. Setelah itu CA server melakukan signing dan memberikan digital certificate ke entitas yang bersangkutan.

Lakukan langkah berikut untuk mengkonfigurasi CA server agar dapat melakukan signing:

a. Navigasi ke direktori EasyRSA dan kemudian copy file vars.eample dengan nama vars

cd ~/EasyRSA-3.0.5/
cp vars.example vars

b. Kemudian edit file vars untuk menyesuaikan Informasi Identitas CA yang diinginkan seperti mengubah Informasi berikut ini.

set_var EASYRSA_REQ_COUNTRY     "ID"
set_var EASYRSA_REQ_PROVINCE    "DKI Jakarta"
set_var EASYRSA_REQ_CITY        "Jakarta"
set_var EASYRSA_REQ_ORG "SecLab Indonesia"
set_var EASYRSA_REQ_EMAIL       "adinanta@seclab.id"
set_var EASYRSA_REQ_OU          "Cyber Security"

c. Setelah itu inisiasi Public Key Infrastructure (PKI) di server CA menggunakan script easyrsa. Proses ini akan membuat struktur direktori yang akan menyimpan file-file yang dihasilkan oleh CA server

./easyrsa init-pki

d. Langkah terakhir adalah membangun CA server menggunakan konfigurasi diatas.

./easyrsa build-ca nopass

Video berikut ini memperjelas proses eksekusi dari serangkaian perintah diatas.

Untuk memastikan Informasi digital certificate telah sesuai dan private key CA telah terbentuk dari proses inisiasi dan pembangunan / build diatas, gunakan perintah berikut.

cd ~/EasyRSA-3.0.5/pki/
openssl x509 -text -noout -in ca.crt

Informasi certificate akan muncul seperti berikut ini

adinanta@ca-server:~/EasyRSA-3.0.5/pki$ openssl x509 -text -noout -in ca.crt
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            8d:8a:41:d3:61:a2:9d:7e
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: CN = kucing-garong CA
        Validity
            Not Before: Sep 24 07:10:27 2018 GMT
            Not After : Sep 21 07:10:27 2028 GMT
        Subject: CN = kucing-garong CA
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:e0:c1:42:55:34:4f:43:27:3f:49:13:b2:99:a2:
                    87:c1:9f:98:cf:90:80:d0:86:b7:22:ce:7f:16:77:
                    69:d1:ba:b9:77:48:62:73:0f:0e:c9:91:4f:48:23:
                    3a:2c:3e:b9:ad:e7:08:14:70:0f:76:65:0f:f0:a7:
                    ee:bd:a4:ad:9e:bd:a0:a3:cc:64:81:e9:77:6f:9b:
                    c2:a6:11:50:be:dd:41:6d:1d:8c:68:fa:4b:42:c7:
                    61:7a:b9:15:c9:04:24:02:fe:4a:59:25:cf:89:3f:
                    2d:88:78:fc:48:48:c7:70:40:58:63:ae:1f:84:b9:
                    3d:ae:9c:54:4a:7b:89:7f:e3:61:a3:bc:80:df:b0:
                    e0:0f:b7:35:39:be:5c:64:56:37:86:67:1c:08:cb:
                    e7:ae:a2:44:35:28:c4:34:98:ea:35:8b:38:6a:19:
                    58:22:ed:14:b8:5a:6d:f9:d4:e1:00:3f:dd:6e:e6:
                    f4:58:65:7d:e9:bf:68:2c:72:e3:de:5e:db:b5:6b:
                    58:f5:1b:ec:4a:59:a8:0e:22:d1:f1:7d:f0:ff:88:
                    c8:2e:fb:9c:37:3b:45:3b:e9:80:de:93:5b:01:3a:
                    c5:06:96:49:70:b5:0b:c1:e4:4c:72:3f:be:ae:3f:
                    76:08:e0:2f:4f:0b:34:50:1b:ae:28:94:61:9a:56:
                    d8:39
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Key Identifier: 
                81:F5:97:C9:FA:70:0B:2E:90:AC:E1:37:FE:07:F8:AC:CC:17:0E:F6
            X509v3 Authority Key Identifier: 
                keyid:81:F5:97:C9:FA:70:0B:2E:90:AC:E1:37:FE:07:F8:AC:CC:17:0E:F6
                DirName:/CN=kucing-garong CA
                serial:8D:8A:41:D3:61:A2:9D:7E

            X509v3 Basic Constraints: 
                CA:TRUE
            X509v3 Key Usage: 
                Certificate Sign, CRL Sign
    Signature Algorithm: sha256WithRSAEncryption
         b3:86:0f:d5:5d:7c:1a:4d:7a:ce:87:bd:13:b2:21:64:ff:cb:
         ab:e1:c2:1d:89:e0:6c:f9:fe:9a:a7:b6:43:94:98:32:fa:b8:
         74:1b:e9:0a:ed:23:6d:29:86:61:e3:9c:1b:91:18:a8:92:cd:
         45:cc:2d:e6:35:e2:23:b5:a1:85:bb:3a:b7:14:26:3f:cf:82:
         30:8c:19:b5:27:3c:54:83:e0:1e:15:f9:b7:9e:f5:ba:fa:ad:
         a3:d9:fe:da:aa:ce:9f:98:29:f7:06:75:4f:1e:c8:a1:94:ca:
         9f:ad:81:92:7f:44:d4:90:da:19:18:fa:d0:b4:5e:78:ad:c3:
         6f:eb:ac:1b:48:b3:d7:da:67:32:21:65:b1:8b:16:2c:92:4b:
         28:37:1d:af:5a:d0:40:2b:86:a3:f0:e2:fe:b6:07:40:b1:37:
         28:dc:4f:90:c8:e6:85:78:8f:39:8e:47:60:de:8b:a1:19:c5:
         ff:4d:7c:09:1b:d2:39:ee:a7:aa:60:fd:8b:b0:7b:1c:00:3e:
         16:c8:e8:4b:50:ba:ef:70:22:a0:3c:a7:74:c9:8c:98:bd:b4:
         68:30:67:20:b4:f6:de:83:c7:ab:04:e0:3c:f8:bc:21:b0:92:
         5b:0b:52:85:f2:19:ab:97:41:8f:4d:8d:24:85:03:a6:58:0e:
         68:0a:e2:5b

Membuat key pair untuk VPN Gateway

Umumnya pembuatan key pair dilakukan di masing-masing entitas sistem. Misalnya keypair (Public & Private key) untuk VPN gatewat dibuat / generated di Sistem Operasi (OS) milik VPN Gateway. Begitu juga dengan keypair untuk VPN client dibuat di OS terkait dimana dalam artikel ini merupakan Raspberry Pi Model B+. Namun seperti pembahasan sebelumnya, semua pembuatan key dilakukan di server CA agar lebih ringkas dan mudah mengelola seluruh keypairs yang digunakan oleh VPN.

Lakukan langkah berikut di CA server untuk membuat public dan private key VPN Gateway:

a. Navigasi ke direktori EasyRSA

cd ~/EasyRSA-3.0.5/

b. Eksekusi perintah easyrsa diikuti dengan argument common Name milik VPN Gatewat dan kemudian diakhiri dengan argument nopass. Common Name bisa menggunakan nama apa saja dan perlu diperhatikan dan disesuaikan saat mengkonfigurasi OpenVPN. Dalam contoh ini kita menggunakan buaya-darat-vpn sebagai common name. Argument nopass artinya private key tidak diproteksi dengan password agar kita tidak perlu mengetik password setiap kali service OpenVPN restart.

./easyrsa gen-req buaya-darat-vpn nopass

Video berikut memperjelas proses eksekusi dari serangkaian perintah diatas.

Kemudian pastikan Private key dan Certificate Signing Request VPN Gateway telah terbentuk dengan perintah berikut:

a. Navigasi ke direktori private dan pastikan terdapat file {vpn-common-name}.key. Dalam contoh ini terdapat file dengan nama buaya-darat-vpn.key

cd ~/EasyRSA-3.0.5/pki/private
ls

b. Navigasi ke direktori req dan kemudian decode Informasi yang ada di Certificate Signing Request file menggunakan program openssl.

cd ~/EasyRSA-3.0.5/pki/reqs
openssl req -in buaya-darat-vpn.req -noout -text

Periksa Informasi certificate signing request yang ditampilkan oleh openssl untuk memastikan common name dan parameter enkripsi lainnya sesuai dengan yang diinginkan

adinanta@ca-server:~/EasyRSA-3.0.5/pki/reqs$ openssl req -in buaya-darat-vpn.req -noout -text
Certificate Request:
    Data:
        Version: 1 (0x0)
        Subject: CN = buaya-darat-vpn
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:a1:7f:47:91:40:7c:bc:fc:0c:40:68:df:89:97:
                    db:0f:18:34:98:b4:07:c1:2a:d5:ed:d5:cf:1b:3d:
                    ae:c5:cf:d1:28:4f:34:70:f7:0d:01:14:76:60:d4:
                    e9:b5:3b:e1:34:c7:56:50:60:15:63:b2:28:de:d8:
                    a4:26:c7:ab:70:ef:a8:c3:4e:1b:68:fd:01:ac:50:
                    6d:f6:b9:aa:d5:3a:3a:30:9b:8d:6e:e8:ec:9a:9f:
                    b7:2a:f7:6b:81:44:21:c9:a6:7a:a3:74:bb:28:64:
                    78:03:bd:cf:07:68:89:10:f5:f4:07:10:75:18:76:
                    f7:5f:c6:6f:6d:c5:f2:d5:92:b8:5a:9c:e3:b3:3b:
                    24:2c:f1:79:e1:9d:f3:93:0e:7e:67:c7:70:a6:d4:
                    5f:8f:9b:5b:5a:04:e6:e3:a6:ba:6a:fb:58:94:8e:
                    76:2d:45:8a:3b:43:f8:b1:a1:ab:c9:19:7c:eb:e8:
                    b1:b9:2d:a4:4b:f1:99:34:5e:7c:e2:82:b1:95:fa:
                    d7:cc:e6:8e:ba:0e:6b:e6:80:15:d2:3f:ba:22:9f:
                    68:27:38:fe:11:e0:f8:81:dd:6a:25:d8:b8:d0:12:
                    8a:4c:d1:38:d4:40:ad:fc:02:86:82:2f:b1:11:ed:
                    6e:34:c2:5b:e7:8d:0c:aa:b7:38:2d:5b:65:a1:d7:
                    fa:77
                Exponent: 65537 (0x10001)
        Attributes:
            a0:00
    Signature Algorithm: sha256WithRSAEncryption
         10:18:c3:89:95:39:dd:60:cc:01:b3:e3:01:4a:89:d1:15:1e:
         b1:f8:df:8f:05:45:b1:77:37:c4:ce:e2:2e:9d:0d:84:64:39:
         bb:09:81:ee:9d:b3:c5:dd:93:6e:02:65:61:50:fa:09:05:ea:
         c8:a6:e5:d7:42:1d:b9:6f:4e:5a:c7:df:bb:d1:f3:2b:c2:f7:
         b1:29:19:e1:0b:63:54:4c:81:18:3f:00:e4:33:04:1b:af:5d:
         fe:5d:9b:95:70:76:9e:54:08:d6:ef:f2:09:d6:ff:64:51:79:
         1f:14:24:6a:cc:72:a0:c8:5c:6d:5a:f5:8f:a2:e1:8d:4a:0e:
         53:98:7e:f4:2e:5d:cb:4d:5a:9d:f3:99:63:0c:c8:7f:63:0f:
         7e:9a:53:3c:96:64:86:a5:f3:1b:19:e7:bd:be:95:0f:97:4d:
         b0:e8:ca:3c:c6:f8:92:c9:7f:ce:e1:fb:af:d1:37:12:90:09:
         59:6e:3f:c4:e3:d7:d6:04:82:7b:80:3b:67:1a:a7:90:5e:39:
         3e:04:42:8c:3b:70:c6:2b:dc:ed:15:5a:41:65:d3:af:26:86:
         aa:3e:47:99:b1:92:5b:76:fb:2e:78:42:7c:6c:ff:bf:be:46:
         22:0a:cb:3d:d8:3f:0e:5b:c5:9c:39:16:cf:06:72:2a:b8:c7:
         6f:6a:1c:5c

Sign Certificate Request milik VPN Gateway

Proses selanjutnya adalah melakukan signing ke Certificate Signing Request milik VPN Gateway. Lakukan langkah berikut di CA server.

a. Navigasi ke direktori easyrsa dan pastikan file Certificate Signing Request milik VPN Gateway ada di direktori yang telah kita buat / generate pada langkah sebelumnya.

cd ~/EasyRSA-3.0.5/
ls pki/reqs/

b. Jalankan proses signing menggunakan script easyrsa dengan argument sign-req diikuti dengan argument server dan diakhiri dengan common name VPN Gateway yaitu buaya-darat-vpn.

./easyrsa sign-req server buaya-darat-vpn

Kemudian ketik yes untuk mengkonfirmasi proses signing. Output atau certificate yang telah ditandatangani oleh CA disimpan dalam direktory ~/EasyRSA-3.0.5/pki/issued.

Video berikut memperjelas proses eksekusi dari serangkaian perintah diatas.

Membuat Diffie-Hellman

Sebelum konfigurasi selanjutnya dimulai, kita perlu membuat Diffie-Hellman key yang akan digunakan oleh VPN Gateway dan VPN client (Raspberry pi) saat pertukaran key dijalankan.

Masih di CA Server, lakukan langkah berikut.

a. Navigasi ke direktory easyrsa dan buat Diffie-Hellman key

cd ~/EasyRSA-3.0.5/
./easyrsa gen-dh

b. Kemudian buat HMAC signature untuk memperkuat TLS integrity VPN Gateway kita

openvpn --genkey --secret ta.key

File dh.pem dan ta.key yang merupakan keluaran dari perintah diatas dapat dilihat di direktory EasyRSA-3.0.5.

Konfigurasi VPN Gateway

Proses selanjutnya adalah mengunggah / upload file-file yang telah dibuat sebelumnya di CA Server ke instance VPN Gateway yang ada di cloud. Berikut ini adalah file-file yang perlu di unggah:

  1. Private key milik VPN Gateway
  2. Certificate milik VPN Gateway yang telah di-signing oleh CA server
  3. Certificate milik CA server
  4. Diffie-Hellman file
  5. HMAC signature file

Lakukan serangkaian perintah berikut dari CA server untuk mengunggah beberapa file diatas ke instance VPN Gateway.

NOTE: Sesuaikan alamat IP atau Fully Qualifed Domain Name (FQDN) instance VPN Gateway cloud yang digunakan saat mengikuti proses dibawah ini

a. Navigasi ke home direktori kemudian buat direktori untuk menampung file-file diatas dan kompress menggunakan tar

cd ~/
mkdir crypt-files
cd crypt-files

cp ~/EasyRSA-3.0.5/pki/private/buaya-darat-vpn.key .
cp ~/EasyRSA-3.0.5/pki/issued/buaya-darat-vpn.crt .
cp ~/EasyRSA-3.0.5/pki/ca.crt .
cp ~/EasyRSA-3.0.5/pki/dh.pem .
cp ~/EasyRSA-3.0.5/ta.key .

cd ..
tar -czf crypt-files.tar.gz crypt-files/

b. Kemudian Secure Copy (SCP) file crypt-files.tar.gz yang baru saja terbentuk ke instance VPN gateway di cloud.

scp crypt-files.tar.gz adinanta@buaya-darat-vpn.harryadinanta.com:/home/adinanta/crypt-files.tar.gz

Apabila secure copy berjalan dengan baik maka file crypt-files.tar.gz telah tersedia di instance VPN gateway dan siap digunakan untuk mengkonfigurasi OpenVPN agar VPN Gateway bisa menerima koneksi dan membuat tunnel dengan Raspberry pi.

Lakukan langkah berikut di Instance VPN Gateway di cloud.

a. Uncompress file crypt-files.tar.gz

cd ~/
tar -xzf crypt-files.tar.gz 

b. Copy semua files ke direktori /etc/openvpn

cd ~/crypt-files
sudo cp buaya-darat-vpn.crt /etc/openvpn/
sudo cp buaya-darat-vpn.key /etc/openvpn/
sudo cp ca.crt /etc/openvpn/
sudo cp dh.pem /etc/openvpn/
sudo cp ta.key /etc/openvpn/

c. Copy contoh konfigurasi openvpn ke direktori /etc/openvpn. Kita akan menggunakan konfigurasi ini sebagai baseline

sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
sudo gzip -d /etc/openvpn/server.conf.gz

d. Buka dan edit file /etc/openvpn/server.conf

sudo nano /etc/openvpn/server.conf

kemudian tambahkan atau aktifkan konfigurasi dibawah ini

port 443
proto tcp
cert buaya-darat-vpn.crt
key buaya-darat-vpn.key
dh dh.pem
tls-auth ta.key 0
key-direction 0
auth SHA256
user nobody
group nogroup
explicit-exit-notify 0

e. Setelah itu kita akan membuat konfigurasi dimana Raspberry pi akan selalu menggunakan VPN tunnel setiap saat ingin mengakses Internet. Seperti tujuan awal kita yaitu memastikan akses Internet melalui Raspberry akan terlebih dahulu dienkripsi dan dikirim ke VPN Gateway. Akses tersebut kemudian diteruskan ke tujuan akhir di Internet. Buka kembali file /etc/openvpn/server.conf dan tambahkan atau aktifkan konfigurasi dibawah ini

push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8
push "dhcp-option DNS 8.8.4.4

f. Ganti nama file server.conf dengan buaya-darat-vpn.conf karena kita telah menggunakan nama tersebut sebagai VPN Gateway kita.

sudo mv /etc/openvpn/server.conf /etc/openvpn/buaya-darat-vpn.conf

g. Langkah selanjutnya adalah memastikan VPN Gateway melakukan forwarding atas request yang dikirim oleh Raspberry pi dan kemudian menyampaikan kembali hasil dari request tersebut. Edit file /etc/sysctl.conf untuk mengaktifkan ip forwarding

sudo nano /etc/sysctl.conf

kemudian aktifkan konfigurasi ip forwarding

net.ipv4.ip_forward=1

dan ketik perintah berikut untuk memastikan konfigurasi ip forwarding telah efektif

sudo sysctl -p

h. VPN Gateway harus menerapkan Network Address Translation (NAT) untuk menerjemahkan alamat IP internal yang digunakan oleh Raspberry pi ke alamat external (IP Public) yang tersedia agar dapat mengakses resources di Internet.

Teknik translation yang kita pilih adalah dynamic address translation atau umum dikenal dengan masquerading karena Raspberry pi hanya membutuhkan akses outgoing ke Internet dan tidak menyediakan layanan masuk atau incoming service.

Penerapan NAT dilakukan melalui aplikasi UFW firewall yang telah kita install sebelumnya dibagian persiapan. Sebelum menetapkan NAT, kita harus terlebih dahulu mengidentifikasi interface yang digunakan oleh VPN Gateway untuk meneruskan request ke Internet. Berikut perintah untuk melihat interface yang digunakan

ip route | grep default

Interface dapat diidentifikasi setelah frasa dev.

i. Kenali interface yang digunakan dan kemudian tambahkan konfigurasi berikut ke file /etc/ufw/before.rules pada baris atas setelah comment

*nat
:POSTROUTING ACCEPT [0:0] 
# route traffic dari raspberry pi ke interface ens4 (ganti sesuai dengan interface yang diidentifikasi sebelumnya)
-A POSTROUTING -s 10.8.0.0/8 -o ens4 -j MASQUERADE
COMMIT

j. Langkah selanjutnya setelah konfigurasi UFW rule diatas tersimpan adalah memastikan UFW secara default memperbolehkan forwarded data untuk lewat.

sudo nano /etc/default/ufw

dan pastikan parameter berikut diset seperti berikut

DEFAULT_FORWARD_POLICY="ACCEPT"

k. Rule UFW firewall VPN Gateway perlu ditambahkan agar komunikasi melalui VPN diperbolehkan. Rule ini dapat ditambahkan dengan perintah berikut

sudo ufw allow 443/tcp 
sudo ufw disable
sudo ufw enable

Menjalankan layanan / service VPN Gateway

a. Mulai openvpn

sudo systemctl start openvpn@buaya-darat-vpn

b. Cek layanan VPN Gateway

sudo systemctl status openvpn@buaya-darat-vpn
ip addr show tun0

c. Auto start

sudo systemctl enable openvpn@buaya-darat-vpn

Membuat KeyPair untuk Raspberry pi

Lakukan langkah berikut di CA Server untuk membuat keypair untuk raspberry pi.

a. Buat direktori

mkdir -p ~/vpn-client-config/keys

b. Buat keypair

cd ~/EasyRSA-3.0.5/
./easyrsa gen-req raspberry-pi nopass

c. Copy private key untuk Raspberry pi ke direktori ~/vpn-client-config/keys

cp ~/EasyRSA-3.0.5/pki/private/raspberry-pi.key ~/vpn-client-config/keys/

d. Sign public key milik raspberry pi menggunakan CA

cd ~/EasyRSA-3.0.5
./easyrsa sign-req client raspberry-pi

e. Copy signed certificate ke direktori ~/vpn-client-config/keys

cp ~/EasyRSA-3.0.5/pki/issued/raspberry-pi.crt ~/vpn-client-config/keys/

f. Copy ca.crt dan ta.key ke direktori ~/vpn-client-config/keys

cp ~/EasyRSA-3.0.5/pki/ca.crt ~/vpn-client-config/keys/
cp ~/EasyRSA-3.0.5/ta.key ~/vpn-client-config/keys/

Script untuk membentuk konfigurasi VPN Client

Masih di CA Server, lakukan langkah berikut. Cukup sekali

a. Buat direktori files dibawah vpn-client-config untuk menyimpan konfigurasi utuh setiap VPN client yang akan terkoneksi dengan VPN Gateway.

mkdir -p ~/vpn-client-config/files

b. Copy contoh konfigurasi untuk OpenVPN client ke direktori ~/vpn-client-config

cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/vpn-client-config/base.conf

NOTE:Sesuaikan nilai parameter remote buaya-darat-vpn.harryadinanta.com dengan Fully Qualifed Domain Name (FQDN) instance VPN Gateway cloud yang digunakan saat mengikuti proses dibawah ini

c. Buka file base.conf dan edit atau tambahkan Informasi berikut

remote buaya-darat-vpn.harryadinanta.com 443
proto tcp
user nobody
group nogroup
cipher AES-256-CBC
auth SHA256
key-direction 1

d. uncomment konfigurasi berikut karena kita akan memasukan certificate dan private key raspberry menggunakan script.

#ca ca.crt
#cert client.crt
#key client.key

e. Masih di file base.conf, sertakan beberapa perintah berikut

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

f. Buat file dengan nama buat_konfig.sh di direktori ~/vpn-client-config

nano ~/vpn-client-config/buat_konfig.sh

dan kemudian isi dengan program bash berikut

#!/bin/bash

# First argument: Client identifier

KEY_DIR=~/vpn-client-config/keys
OUTPUT_DIR=~/vpn-client-config/files
BASE_CONFIG=~/vpn-client-config/base.conf

cat ${BASE_CONFIG} \
    <(echo -e '<ca>') \
    ${KEY_DIR}/ca.crt \
    <(echo -e '</ca>\n<cert>') \
    ${KEY_DIR}/${1}.crt \
    <(echo -e '</cert>\n<key>') \
    ${KEY_DIR}/${1}.key \
    <(echo -e '</key>\n<tls-auth>') \
    ${KEY_DIR}/ta.key \
    <(echo -e '</tls-auth>') \
    > ${OUTPUT_DIR}/${1}.ovpn

g. Set executable permission ke file buat_konfig.sh agar dapat dieksekusi melalui terminal

cd ~/vpn-client-config
chmod +x buat_konfig.sh

Membuat file konfigurasi VPN untuk raspberry pi

a. Mulai pembuatan konfigurasi dengan mengeksekusi script buat_konfig diikuti dengan nama keypair yang kita buat sebelumnya. Dalam hal ini nama keypair yang kita gunakan adalah raspberry-pi

cd ~/vpn-client-config/
./buat_konfig.sh raspberry-pi

b. Apabila telah selesai maka kita bisa mendapatkan file konfigurasi utuh VPN dalam direktori files. File dengan ekstensi *.ovpn ini akan digunakan oleh raspberry pi untuk tersambung ke VPN Gateway.

ls ~/vpn-client-config/files/

Konfigurasi Raspberry pi

Selanjutnya adalah membuat raspberry pi sebagai Access Point (AP) yang secara otomatis membentuk komunikasi tunnel ke VPN Gateway segera setelah mendapatkan akses ke Internet. Seperti yang telah dibahas pada bagian pendahuluan, raspberry pi bisa mendapatkan akses ini melalui interface ethernet atau melalui interface internal wifi yang terasosiasi dengan Access Point yang menyediakan Internet.

Kita akan membuat konfigurasi dimana raspberry pi akan secara otomatis menyesuaikan dan menggunakan koneksi internet manapun baik yang terkoneksi melalui ethernet atau wifi. Ilustrasi berikut menggambarkan interface yang tersedia di raspberry pi diikuti dengan penjelasan konfigurasi yang akan kita berikan ke masing-masing interface.

Interface Fungsi Konfigurasi
wlan0 Koneksi ke Internet melalui access point eksternal DHCP, file wpa_supplicant-wlan0.conf menyimpan nama SSID dan kredensial yang digunakan untuk tersabung ke access point
ethernet0 Koneksi ke Internet melalui kabel eternet Static IP, default gateway diset ke IP broadband modem
wlan1 Sebagai Access Point (AP) yang menyambungkan pengguna ke raspberry pi Static IP, default gateway tidak diset karena interface ini tidak digunakan untuk menuju Internet

Proses konfigurasi dimulai dengan mendefinisikan alamat IP untuk interface yang menggunakan IP statis dan kemudian memastikan raspberry pi bisa membuat tunnel ke VPN Gateway. Kondisi yang kita gunakan saat ini adalah interface ethernet eth0 terkoneksi langsung ke modem broadband dan IP gateway yang digunakan merupakan alamat IP modem tersebut.

Apabila koneksi Internet saat dilakukannya konfigurasi ini menggunakan WIFI maka dahulukan untuk mengkonfigurasi Access Point dengan mengikuti panduan dibawah ini.

Lakukan langkah berikut dari raspberry pi secara berurutan

NOTE: Sesuaikan static routers dengan alamat IP modem yang digunakan oleh koneksi ethernet saat ini. Sesuaikan juga domain_name_servers dengan alamat ip DNS yang digunakan atau direkomendasikan oleh ISP

Set IP statis

Pada bagian ini kita akan mendefinisikan alamat IP statis di interface ethernet eth0 dan wlan1

a. Sambungkan wireless card eksternal dan pastikan raspberry telah mendeteksi card tersebut

lsusb
iwconfig

b. Apabila raspberry telah memiliki dua wireless card, buka dan edit file /etc/dhcpcd.conf

sudo nano /etc/dhcpcd.conf

dan kemudian edit atau tambahkan informasi berikut.

interface eth0
static ip_address=192.168.100.247/24
static routers=192.168.100.35
static domain_name_servers=8.8.8.8

interface wlan1
static ip_address=192.168.4.1/24

Raspberry VPN Client

Sebelum melangkah ke konfingurasi selanjutnya, pastikan raspberry pi bisa secara manual membuat tunnel ke VPN Gateway.

a. Copy file raspberry-pi.ovpn dari CA Server ke raspberry pi dan rename dengan ekstensi *.conf

scp raspberry-pi.ovpn pi@192.168.100.247:/home/pi/raspberry-pi.conf

b. Test koneksi ke VPN Gateway

sudo openvpn raspberry-pi.conf

c. Biarkan koneksi VPN berjalan dan buka terminal baru ke raspberry pi. Pastikan interface tun0 telah sukses dibuat

pi@raspberrypi:~ $ ifconfig tun0
tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1500
        inet 10.8.0.6  netmask 255.255.255.255  destination 10.8.0.5
        inet6 fe80::b9f1:70ed:3545:3753  prefixlen 64  scopeid 0x20<link>
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 100  (UNSPEC)
        RX packets 3  bytes 386 (386.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 6  bytes 354 (354.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

pi@raspberrypi:~ $ 

d. Putuskan koneksi VPN apabila komunikasi ke VPN Gateway telah sukses dan atur agar koneksi VPN aktif secara otomatis saat system boot.

sudo cp raspberry-pi.conf /etc/openvpn/
sudo systemctl enable openvpn@raspberry-pi

DHCP server

Langkah berikutnya adalah menetapkan konfigurasi DHCP server. Layanan DHCP dibutuhkan agar pengguna yang bergabung ke Access Point (AP) raspberry pi bisa mendapatkan alamat IP dan pengaturan lainnya secara otomatis. Kita menggunakan dnsmasq untuk penyediaan layanan DHCP.

Lakukan langkah berikut di raspberry pi.

a. Backup file /etc/dnsmasq.conf yang merupakan file default yang disediakan oleh dnsmasq dengan nama file yang berbeda. Kita akan menggunakan file baru dengan nama file aslinya

sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.backup

selanjutnya buat file baru dengan nama dnsmasq.conf

sudo nano /etc/dnsmasq.conf

kemudian masukan konfigurasi berikut

interface=wlan1
dhcp-option=6,8.8.8.8
dhcp-range=192.168.4.100,192.168.4.120,255.255.255.0,24h

dengan konfigurasi ini, raspberry pi akan memberikan alamat IP ke pengguna dari mulai 192.168.4.100 sampai dengan 192.168.4.120. Dengan rentang ini maksimum 20 pengguna yang dapat bergabung ke raspberry pi access point secara bersamaan.

b. Set agar fungsi DHCP aktif secara otomatis setiap system reboot

sudo systemctl start dnsmasq

Access Point (AP)

Langkah selanjutnya adalah menetapkan konfigurasi utama agar raspberry pi dapat memberikan layanan Access Point (AP) ke pengguna. Software yang kita gunakan untuk layanan ini adalah hostapd. Namun sebelum memulai, rename file konfigurasi wpa_supplicant.conf menjadi wpa_supplicant-wlan0.conf. File ini digunakan oleh raspberry pi sebagai WIFI client untuk bergabung ke Access Point lain.

Penggantian nama file perlu dilakukan karena file default tidak menyertakan nama interface wireless secara spesifik sehingga konfigurasi yang ada pada file tersebut berlaku untuk semua interface wireless. Kondisi ini akan membuat fungsi Access Point (AP) yang menggunakan interface wlan1 terganggu karena pada dasarnya Access Point tidak bisa menjadi WIFI Client secara bersamaan. Tentu konsep ini tidak berlaku apabila kita membahas tentang wireless bridge.

Seperti yang telah dibahas pada bagian pendahuluan, raspberry pi juga dikonfigurasi agar bisa terkoneksi ke MIFI untuk mendapatkan akses ke Internet. Oleh karenanya interface wlan0 digunakan untuk kepentingan tersebut sementara interface wlan1 digunakan untuk melayani Access Point (AP).

Lakukan langkah berikut agar raspberry pi bergabung ke MIFI secara otomatis menggunakan interface wlan0 apabila MIFI dalam jangkauan sinyal. Sesuaikan SSID dan password psk dengan konfigurasi yang digunakan MIFI.

a. Rename file wpa_supplicant.conf

sudo mv /etc/wpa_supplicant/wpa_supplicant.conf /etc/wpa_supplicant/wpa_supplicant-wlan0.conf 

kemudian tambahkan konfigurasi dibawah ini ke wpa_spplicant-wlan0.conf. Sesuaikan nama SSID dan password psk dengan

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=ID

network={
    ssid="Luke-Skywalker"
    psk="p@ssw0rd"
}

b. Untuk memastikan konfigurasi wpa_spplicant-wlan0.conf berfungsi dengan benar, hidupkan MIFI kemudian pastikan wlan0 telah terasosiasi dengan ESSID:"Luke-Skywalker

pi@raspberrypi:~ $ iwconfig
eth0      no wireless extensions.

tun0      no wireless extensions.

lo        no wireless extensions.

wlan1     IEEE 802.11  Mode:Master  Tx-Power=20 dBm   
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Power Management:off
          
wlan0     IEEE 802.11  ESSID:"Luke-Skywalker"  
          Mode:Managed  Frequency:2.462 GHz  Access Point: 94:0E:6B:38:6C:75   
          Bit Rate=65 Mb/s   Tx-Power=31 dBm   
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Power Management:on
          Link Quality=70/70  Signal level=-33 dBm  
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

pi@raspberrypi:~ $ 

Apabila telah berhasil, lakukan langkah berikut untuk mengkonfigurasi raspberry pi untuk menyediakan layanan Access Point melalui interface wlan1.

NOTE: Sesuaikan parameter ssid dan wpa_passphrase dengan nama dan password yang diinginkan. Gunakan password yang kompleks (tidak menggunakan password dibawah) untuk melindungi Access Point dari akses yang tidak berwenang.

a. Buat file konfigurasi dengan nama hostapd.conf

sudo nano /etc/hostapd/hostapd.conf

b. Masukan konfigurasi berikut

interface=wlan1
driver=nl80211
ssid=KeledaiTua
hw_mode=g
channel=7
wmm_enabled=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=p@ssw0rd
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

c. Pastikan layanan hostapd menggunakan konfigurasi diatas dengan mengedit file /etc/default/hostapd

sudo nano /etc/default/hostapd

dan set parameter DEAMON_CONF dengan nilai berikut

DAEMON_CONF="/etc/hostapd/hostapd.conf"

d. Aktifkan Access Point (AP) dengan perintah

sudo systemctl start hostapd

e. Tetapkan agar fungsi Access Point aktif secara otomatis setiap system reboot

sudo systemctl enable hostapd

Routing, Forwarding dan Firewall

Packet data dan request dari pengguna yang sampai ke Access Point (AP) harus dapat diteruskan ke VPN Gateway agar request tersebut bisa sampai ke tujuan akhir (resource internet).

Ikuti langkah berikut untuk:

  • mengaktifkan ip forwarding
  • menetapkan UFW firewall agar membolehkan forwarded packet untuk lewat
  • memastikan UFW firewall melakukan NAT atau masquerade terhadap setiap packet yang berasal dari pengguna Access Point ke alamat IP internal yang digunakan oleh VPN tunnel
  • memastikan UFW membolehkan packet DHCP untuk lewat.

a. Edit file /etc/sysctl.conf untuk mengaktifkan ip forwarding

sudo nano /etc/sysctl.conf

kemudian aktifkan konfigurasi ip forwarding

net.ipv4.ip_forward=1

dan ketik perintah berikut untuk memastikan konfigurasi ip forwarding telah efektif

sudo sysctl -p

b. Langkah selanjutnya adalah memastikan UFW secara default memperbolehkan forwarded data untuk lewat.

sudo nano /etc/default/ufw

dan pastikan parameter berikut diset seperti berikut

DEFAULT_FORWARD_POLICY="ACCEPT"

c. Route traffic dari raspberry access point (AP) ke VPN tunnel menuju VPN Gateway untuk kemudian diteruskan ke Internet. Buka file /etc/ufw/before.rules

sudo nano /etc/ufw/before.rules

kemudian tambahkan konfigurasi berikut

*nat
:POSTROUTING ACCEPT [0:0] 
-A POSTROUTING -s 192.168.4.0/24 -o tun0 -j MASQUERADE
COMMIT

# konfigurasi yang memperbolehkan dhcp client untuk request DHCP
-A ufw-before-input -p udp --sport 67 --dport 68 -j ACCEPT
-A ufw-before-input -p udp --sport 68 --dport 67 -j ACCEPT

dua rule UFW dibutuhkan agar packet DHCP bisa sampai ke pengguna Access Point (AP).


© 2018. All rights reserved. SecLab Indonesia.

Powered by Hydejack v8.1.1