Naik Sepeda

Menurut beberapa sumber yang saya baca di Internet, kebanyakan anak umur 5-6 tahun (kadang kurang) sudah bisa diajari naik sepeda tanpa roda pembantu (training wheels). Tapi tidak semua anak bisa dan tidak semua anak mau diajari. Ini sekedar cerita bagaimana mengajari Jonathan yang agak telat, baru bisa bersepeda tanpa roda pembantu di usia 8 tahun.

Waktu saya baca di Internet, banyak juga orang tua yang bingung: anaknya sudah berusia X tahun (dengan X lebih dari 6), tapi belum bisa naik sepeda, perlukah dipaksa belajar? jawabannya pun beraneka ragam, ada yang bilang ini penting, dan ada yang bilang tidak penting. Tapi ada beberapa hal yang disetujui hampir semua orang:

  • Sepeda merupakan alat transportasi yang praktis, misalnya untuk dalam kampus atau tempat wisata tertentu
  • Bisa naik sepeda akan membantu nanti kalau mau naik motor, dan bahkan ketika naik mobil (belajar memperhatikan jalan dan lalu lintas)

Sejak umur 6 tahun itu sebenarnya Jonathan sudah dicoba untuk naik sepeda tanpa roda pembantu, tapi masih gagal. Masalah utama Jonathan adalah: tidak punya keinginan untuk bisa naik sepeda biasa. Di berbagai forum yang saya baca juga sama, masalah utama adalah: anaknya tidak mau belajar. Selalu ada alasan: panas, pengen pipis, jatuh sedikit bilang sakit lalu minta berhenti, dsb. Setelah dicoba beberapa kali akhirnya saya menyerah. Tahun berikutnya dicoba lagi, hasilnya masih sama, jadi saya menyerah lagi.

Di tahun sebelumnya saya juga pernah menunjukkan beberapa video Youtube tentang belajar naik sepeda. Tapi itupun masih tidak bisa diikuti. Sebagai catatan, tidak semua metode bisa dicoba karena alasan teknis:

  • banyak metode yang butuh tempat dengan karakteristik tertentu. Misalnya: tempat yang cukup landai tapi agak menurun dan luas
  • sebagian menyarankan melepas pedal sepeda, sedangkan tidak semua sepeda bisa mudah dilepas

Terpikir juga: mungkin sepedanya sudah terlalu kecil, jadi kami ganti sepeda, tapi tetap tidak berhasil.

Sekarang sedang masa liburan Jonathan, jadi tanggal 5 Juni lalu kami memutuskan untuk mencoba lagi. Hari pertama dan kedua masih sama: tidak ada niat belajar dan dalam 10 menit Jonathan sudah menyerah. Akhirnya saya suruh sendiri cari video belajar naik sepeda di Youtube yang menurutnya paling gampang.

Alfred Pennyworth: Why do we fall sir? So that we can learn to pick ourselves up

Setelah Jonathan mencari-cari beberapa video, dia ingin mencoba-coba yang dia lihat, tapi masih gagal juga. Akhirnya salah satu cara yang agak berbahaya dicoba: didorong oleh saya sampai kecepatan yang agak tinggi, lalu saya lepaskan agar dikayuh sendiri. Ini sebenarnya berisiko karena kalau belum bisa seimbang, jatuhnya bisa lumayan keras di aspal. Tapi ternyata Jonathan bisa mengayuh beberapa kayuhan. Dan setelah diulangi lagi: beberapa kayuhan lagi bisa. Sepanjang pagi itu saya terus mendorong dia. Walau sudah bisa mengayuh, dia sudah merasa capek setelah 15 menit latihan dan minta berhenti.

Esok harinya, tanggal 9, saya masih meneruskan mendorong. Tapi Jonathan akhirnya kepikiran berlari sedikit di atas sepeda, lalu pas sepeda mulai jalan, dia bisa mengayuh sampai beberapa meter. Ini titik di mana saya anggap dia sudah bisa: tidak dibantu mulainya, bisa mengayuh, bisa berhenti sendiri.

Setelah itu pelajaran masih terus berlanjut: dia harus bisa lebih lama lagi menyeimbangkan diri, tidak hanya beberapa kayuhan. Setelah beberapa hari, akhirnya keseimbangannya sudah lebih bagus. Sekarang semangatnya tinggi sekali untuk naik sepeda sendiri. Sekarang setelah bisa, dia menganggap naik sepeda itu fun, bahkan ketika gerimis pun ingin latihan. Kemarin Jonathan sudah bisa keliling kompleks rumah tidak saya temani.

Senang rasanya akhirnya berhasil mengajari Jonathan. Walau masih khawatir juga kalau dia akan jatuh. Sepupunya yang sudah bisa naik sepeda pernah jatuh dan harus dijahit lalu trauma belum mau naik sepeda lagi. Sebagai hadiah saya pergi bersama Jonathan membelikan sepeda baru, saya juga sekalian membeli sepeda lipat supaya bisa masuk mobil jika ingin dibawa ke tempat wisata yang tidak ada penyewaan sepedanya.

Dari pengalaman mengajari Jonathan, kesimpulan saya: Tiap anak tidak sama, harus ditunggu niatnya dan kemampuannya naik sepeda. Tapi bukan berarti harus ditunggu dengan pasif, menurut saya tetap harus dicoba sambil diberi semangat. Kalau sudah dicoba beberapa kali dan tidak ada kemajuan, mungkin memang belum saatnya dan perlu dicoba lagi beberapa bulan ke depan.

Reverse Engineering Aplikasi iOS

Sudah lama saya menuliskan tentang reverse engineering Android tapi sampai saat ini belum menuliskan untuk iOS. Tulisan ini akan memperkenalkan cara reverse engineering aplikasi iOS dengan berbagai pendekatan. Tujuan utamanya di sini adalah untuk pentesting. Reversing untuk tujuan lain (misalnya Tweak development) sebagian akan sama, tapi masih butuh usaha dan tool ekstra dan hanya akan saya bahas sekilas.

Mesin macOS dan XCode

Memiliki mesin macOS akan sangat membantu dalam reverse engineering. Mesin ini bisa fisik asli dari Apple (Macbook, MacMini atau yang lain), mesin tidak resmi (Hackintosh), atau bahkan Virtual Machine. Pengunaan utamanya adalah untuk menjalankan Xcode terbaru dan iTunes.

Sebenarnya ini tidak 100% wajib, karena kebanyakan tool bisa berjalan di OS Lain. Misalnya di Linux saya memakai libimobiledevice untuk menginstall IPA, membaca log dari device, dsb. Tapi biasanya jika ada iOS baru, berbagai tool di luar OS X akan berhenti bekerja sampai beberapa hari atau bulan, menunggu developernya memahami apa yang diubah Apple dan bagaimana memperbaikinya.

Device iOS dan Simulator

Di dunia Android, kita bisa menjalankan hampir semua APK Android di Emulator kecuali beberapa yang butuh akses hardware tertentu. Emulator Android mengemulasikan keseluruhan hardware dan bisa menjalankan APK meskipun APK tersebut memakai kode biner ARM/ARM64.

Tapi saat ini tidak ada emulator iOS yang bisa diakses umum dengan mudah. Hanya ada satu perusahaan bernama Correlium yang menyediakan emulator dan inipun saat ini clientnya masih sangat dibatasi. Masih lebih mudah dan murah membeli iPhone bekas daripada mendapatkan akses ke Correlium.

Apple hanya menyediakan simulator untuk x86, artinya kita harus mengcompile khusus source code kita supaya jalan di simulator yang disediakan. Jika kita mendownload IPA dari App Store, binarynya pasti ARM/ARM64/ARM64e dan tidak akan jalan di simulator.

Jadi jika kita ingin melakukan analisis dinamik, maka kita perlu hardware iOS tergantung aplikasinya mungkin akan butuh iPhone atau iPad. Beberpa aplikasi bisa juga berjalan di iPod Touch (tapi aplikasi banking yang butuh verifikasi SMS sering kali tidak mau jalan di iPod Touch).

Ketika membeli hardware iPhone/iPad bekas, harap diperhatikan versi iOS yang masih didukung dan kira-kira masih akan didukung atau tidak dalam waktu dekat ini. Contoh: saya membeli iPhone 5S baru sekitar 5 tahun yang lalu dan hardware ini masih bisa dipakai sampai sekarang (mendukung iOS 12), tapi kemungkinan besar tidak akan disupport lagi akhir tahun ini (kemungkinan tidak akan mendukung iOS 13). Update setelah WWDC: iPhone 5S tidak termasuk dalam device yang bisa memakai iOS 13, minimum adalah iPhone 6S.

Ketika tulisan ini dibuat (Mei 2019), jika ingin membeli iPhone, hardware minimal yang saya sarankan adalah iPhone 7 Plus. Alasannya:

  • Versi baru ponsel ini masih dijual oleh Apple
  • Harga second hand benda ini mulai reasonable
  • Prosessornya A10, sama seperti yang dipakai iPod Touch generasi 7 yang baru saja diluncurkan
  • versi 7 Plus memiliki RAM 3 GB (versi 7 saja tanpa plus, hanya 2 GB) jadi kemungkinan akan bisa dipakai untuk beberapa iOS mendatang

Jika dana terbatas belilah iPhone 6S yang bisa dipakai setidaknya setahun lagi. Jika ingin lebih jauh lagi, menurut saya iPhone XR merupakan pilihan yang baik:

  • Harganya cukup jauh di bawah iPhone XS
  • Sudah memakai A12, bisa belajar Pointer Authentication

Tapi tentu saja jika ada dananya, silakan saja beli iPhone terbaru dan termahal.

File IPA

Jika di Android kita memakai file APK untuk instalasinya, maka di iOS kita memakai format IPA. Seperti APK, format IPA ini sebenarnya juga hanya file berformat zip yang di dalamnya berisi resource (gambar, suara, dsb) dan program. Tapi tentu saja walau sama-sama file ZIP, keduanya tidak kompatibel karena isinya benar-benar berbeda.

Khusus untuk format PNG, Apple memakai optimasi khusus sehingga perlu dikonversi kembali. Di OS X ini bisa dilakukan dengan pngcrush. Perlu dicatat pngcrush di OS lain tidak memiliki opsi yang sama, jadi gunakan tool lain untuk mengembalikan PNG agar bisa dilihat. Ini hanya contoh kecil mengapa memiliki hardware macOS plus XCode bisa memudahkan proses RE.

Tanda tangan digital dan Enkripsi

Setiap aplikasi yang berjalan di iOS harus ditandatangani secara digital. Selain itu setiap aplikasi dari App Store dienkrip (memakai DRM Fair Play) dan hanya bisa dipakai di account tertentu. Artinya saya tidak bisa mendownload file IPA dari app store dengan account saya dan langsung ditransfer ke iPhone orang lain.

Jika ingin disebarkan ke orang lain, sebuah program perlu didekrip. Proses dekripsi butuh iPhone/iPad yang sudah dijailbreak. Saat ini belum ada yang berhasil mengekstrasi key dari account, jadi sebuah hardware wajib dimiliki. Program yang dienkrip tidak bisa direverse engineer. Bisa saja dipaksa dibuka di disassembler, tapi instruksinya tidak masuk akal.

Dalam proses pentesting kadang client meminta kita testing dari app store dan kadang dari developer. Proses enkripsi ini dilakukan oleh Apple di server apple, jadi aplikasi yang belum diupload ke App Store masih dalam kondisi tidak terenkripsi. Jika kita dibolehkan meminta dari developer, maka akan lebih mudah melakukan reversing tanpa perlu hardware untuk mendekrip.

Jailbreak

Saat ini jailbreak sangat penting untuk security researcher iOS. Tidak semua versi iOS bisa dijailbreak dan pada semua versi iOS beberapa tahun terakhir kita tidak bisa dengan mudah downgrade ke versi sebelumnya. Satu-satunya cara untuk pindah ke sebuah versi tertentu adalah jika kita punya yang namanya SHSH blob untuk versi tersebut yang spesifik untuk device kita. Di ponsel dengan CPU A12, proses ini lebih kompleks lagi.

Jadi jika kita membeli ponsel dengan software terbaru dan belum ada jailbreaknya, tidak ada yang bisa kita lakukan selain menunggu sampai ada yang menjailbreak. Selagi menunggu, kita bisa menyimpan blob SHSH untuk versi berikutnya. Jadi misalnya kita ada di versi 12.3 (belum ada jailbreak) dan sudah ada versi 13 (belum ada jailbreak juga), kita bisa menyimpan blob untuk versi 13. Nanti misalnya ada jailbreak untuk versi 13 kita bisa upgrade ke versi tersebut.

Biasanya ketika ada jailbreak untuk versi tertentu (misalnya 13), dan Apple sudah merilis vesi lebih baru (misalnya 13.1) maka “signing window” akan ditutup, artinya kita tidak bisa lagi upgrade ke versi 13 tapi harus langsung ke 13.1. SHSH blob hanya bisa dipakai di device yang sudah dijailbreak karena perlu akses root untuk set nonce.

Ini berbeda dengan sebagian device Android yang mengijinkan unlocked bootloader. Pada device Android dengan unlocked bootloader, kita bisa me-root ponsel kita dengan sangat mudah. Di Android APK dari playstore juga tidak dienkripsi (hanya ditandatangi digital) jadi rooting juga tidak wajib dilakukan.

Perlu diperhatikan: banyak website menyesatkan yang menyatakan bisa jailbreak iOS terbaru. Informasi terkini dan valid mengenai berbagai device dan versi iOS yang bisa dijailbreak serta tool untuk jailbreaknya bisa dilihat di:

https://www.reddit.com/r/jailbreak/wiki/escapeplan/guides/jailbreakcharts

Setelah jailbreak, tool yang bisa digunakan untuk mendekrip aplikasi adalah Clutch (iOS versi lama), bfinject (iOS 11) dan CrackerXI (iOS 12).

Developer Account

Untuk device yang tidak dijailbreak, semua aplikasi yang diinstall harus ditandangani digital. Dulunya kita perlu memiliki developer account (99 USD/tahun) untuk bisa menjalankan aplikasi apapun di device kita. Ini termasuk juga aplikasi/IPA yang sudah didekrip tetap perlu ditandatangani agar berjalan di device kita.

Tapi sekarang sudah ada kelonggaran: kita bisa menandatangani gratis tapi hanya berlaku 7 hari. Artinya setelah 7 hari, aplikasi tersebut tidak bisa berjalan, kita harus menandatangani (sign) dan menginstall lagi tiap 7 hari. Maksimum dalam satu waktu kita bisa menginstall 3 aplikasi dengan account gratis ini dan maksimum hanya 2 device per Apple ID. Proses reinstall ini butuh waktu dan butuh komputer. Saat ini cara termudah instalasi tanpa developer account dan tanpa jailbreak adalah dengan Cydia Impactor.

Untuk proyek jangka pendek dan untuk testing, account gratis ini sudah cukup. Tapi jika kita perlu sering melakukan ini, developer account akan sangat membantu. Tanpa developer account, beberapa hal cukup mengesalkan, misalnya:

  • Cydia Impactor sering tidak jalan di iOS terbaru (harus menunggu rilis terbaru),
  • Kita perlu membuat password iCloud spesifik untuk Cydia Impactor (dan kadang password ini expire, harus diset ulang)
  • Cydia impactor ini tidak mengingat password (harus ketik ulang atau copy paste)
  • Jika instalasi gagal, harus memasukkan ulang password
  • Jika ada banyak pekerjaan pentest, batas jumlah aplikasi akan terlampaui

Jika ponsel sudah dijailbreak, kita bisa memakai Reprovision yang berjalan di ponsel dan otomatis menandatangani ulang aplikasi tiap 7 hari. Tapi tentunya batasan jumlah aplikasi tetap berlaku.

Karena hasil dari testing iOS ini sudah jauh lebih besar dari harga developer account per tahun, saya memilih memakai developer account. Selain itu accountnya bisa saya pakai untuk development.

Membuat Aplikasi iOS

Mengenal cara sebuah aplikasi dibuat akan sangat membantu dalam proses reverse engineering. Khusus untuk pentesting, kadang developer meminta saran pada kita bagaimana memperbaiki sesuatu. Terkadang memberikan link saja sudah cukup, tapi di kasus tertentu sebuah solusi tidak bisa dipakai dan kita akan dipandang sebagai pentester yang baik jika kita bisa memberi saran perbaikannya.

Aplikasi iOS dulunya hanya ditulis dengan Objective C. Objective-C masih merupakan bahasa utama yang dipakai di seluruh sistem operasi, sama seperti Java di Android. Seluruh API utama masih menggunakan Objective C. Selain itu sekarang Apple mendukung bahasa Swift.

Sebuah aplikasi iOS akan dikompilasi menjadi format MachO. Format ini berbeda dengan ELF (Linux) dan PE (Windows) sehingga tool yang dipakaipun berbeda. Program bawaan XCode adalah otool yang bisa dipakai untuk men-dump file MachO (seperti objdump di Linux). Selain itu ada jtool yang fungsinya lebih banyak.

Saya sangat menyarankan reverser iOS memahami minimal C dan Objective C. Jika memahami Swift akan lebih baik lagi karena aplikasi modern sekarang ditulis menggunakan Swift. Cobalah membuat aplikasi Objective-C sederhana, lalu reverse engineer aplikasinya.

Sekarang ada banyak teknologi yang bisa dipakai untuk mengembangkan aplikasi iOS misalnya:

  • Cordova dan teknologi lain berbasis HTML
  • Unity (berbasis C#)
  • RubyMotion (Ruby)

Saya akan mengasumsikan aplikasi yang akan direverse engineer menggunakan Objective C atau Swift. Jika menggunakan bahasa lain, maka pelajarilah teknologi tersebut (di luar scope artikel ini). Ketika belajar Objective-C jangan lupa belajar teknik tingkat lanjut seperti Method Swizzling yang bisa dipakai untuk runtime patching sebuah method/class Objective C.

Assembly ARM64

iPhone versi awal memakai Thumb/ARM32, tapi saat ini semua device iOS terbaru memakai instruction set ARM64 jadi jika Anda belum pernah belajar ARM 32 bit bisa langsung skip ke ARM64. Secara teori jika kita memakai decompiler kita tidak perlu memahami level assembly, tapi kenyataanya:

  • Decompiler sering salah atau tidak lengkap hasil dekompilasinya
  • Beberapa aplikasi menggunakan proteksi yang menyulitkan decompiler
  • Untuk patching, kita tetap perlu paham assembly

Jadi saran saya: pelajarilah dasar assembly ARM64. Semakin dalam eksplorasi yang dilakukan, pengetahuan ARM64 yang dibutuhkan juga semakin banyak.

Untuk memulai belajar ARM, saya menyarankan website https://azeria-labs.com/. Websitenya sangat lengkap dan berfokus pada ARM secara umum (tidak spesifik ke teknologi untuk iOS).

Contoh dekompilasi dengan Ghidra

Langkah-langkah reverse engineering

Secara umum langkah-langkah reverse engineering Aplikasi iOS adalah sebagai berikut:

  • Dapatkan versi aplikasi yang tidak terenkripsi (langkah wajib). Bisa dari developernya atau dari dekrip aplikasinya
  • Opsional: gunakan class-dump untuk mendapatkan gambaran aplikasi
  • Bongkar aplikasinya dengan disassembler/decompiler
  • Opsional: lakukan dynamic reverse engineering dengan Frida atau Cycript
  • Opsional: lakukan patching aplikasi jika ada jailbreak detection

Langkah pertama sudah jelas, dan langkah-langkah berikutnya pada dasarnya adalah memakai berbagai tool.

Class-dump

Tool class-dump dapat digunakan untuk menghasilkan header objective-c dari binary Mach-O. Berbagai decompiler seperti Hopper, IDA Pro dan juga Ghidra bisa mengekstrak informasi ini secara otomatis, tapi class dump ini masih berguna karena:

  • Prosesnya cepat
  • Setelah mendapatkan header kita bisa dengan cepat melihat-lihat nama fungsi yang ada

Disassembler/Decompiler

Baik jtool maupun otool bisa mendisassemble file MachO, tapi untuk file yang berukuran besar proses membaca assembly memakan waktu lama. Biasanya sama memakai gabungan decompiler dan disassembler untuk memahami sebuah program.

Ghidra tools gratis dari NSA

Dulu satu-satunya decompiler untuk iOS adalah IDA Pro yang harganya mahal. Sekarang ini ada opsi gratis: Ghidra (pernah saya bahas di sini) dan ada opsi yang harganya relatif murah: Hopper. Kualitas dekompilasi Ghidra lebih bagus dan bisa berjalan cross platform, sementara tampilan Hopper lebih menarik.

Frida dan Cycript

Seringkali reversing statik sulit dilakukan dan modifikasi dinamik lebih cepat untuk memahami sebuah aplikasi. Ada dua tool yang berguna untuk ini: Frida dan Cycript. Untuk saat ini saya lebih menyarankan Frida karena masih dipelihara terus.

Frida bisa dijalankan di ponsel yang sudah dijailbreak (bisa meng-hook semua aplikasi) atau pada satu aplikasi di ponsel yang tidak dijailbreak. Untuk yang sudah dijailbreak, langkahnya lebih sederhana. Untuk yang belum dijailbreak:

  • Ekstrak IPA-nya (harus sudah didekrip)
  • Edit binarynya agar meload Frida (misalnya dengan insert_dylib)
  • Masukkan shared library Frida ke dalam aplikasi

Aplikasi kemudian perlu dijalankan dalam mode debug, karena tanpa ini beberapa fungsionalitas Frida tidak akan berjalan. Setelah frida berjalan, kita bisa menulis skrip dalam javascript untuk menginspeksi atau mengubah jalannya program.

Binary Patching

Jika jailbreak detection dilakukan di satu method terpisah (misalnya: isJailBroken) maka ini biasanya bisa diintercept oleh Frida dan tinggal diganti agar mengembalikan falses (“return 0”). Tapi kadang deteksi jailbreak dilakukan sambil melakukan hal lain. Kelemahan frida adalah: kita hanya bisa menambah/mengubah sesuatu di awal/akhir fungsi, jadi dalam kasus tertentu kita masih butuh melakukan patching.

Tidak ada yang istimewa dalam patching file MachO. Asalkan kita bisa mengerti ARM64, kita bisa mempatch opcode seperti biasa dengan hex editor.

Tweaks

Jika kita memakai iOS yang dijailbreak, maka kita bisa menginstall Tweaks. Tweaks ini pada dasarnya adalah shared library (dylib) yang akan diinjeksikan oleh daemon jailbreak ke proses target. Ada tweak tertentu yang bisa membantu proses reverse engineering/pentesting, misalnya ssl-kill-switch 2 untuk mendisable SSL Pinning.

Kita juga bisa membuat sendiri Tweaks untuk iOS dengan menggunakan Xcode, tapi biasanya tweaks dibuat menggunakan Theos. Kelebihan Theos dibandingkan Xcode adalah tersedianya SDK dengan private headers, yang berisi interface fungsi-fungsi yang tidak publik.

Penutup

Artikel ini masih merupakan perkenalan dan baru menyentuh hal-hal dasar reversing aplikasi iOS. Seperti bisa dilihat bahwa untuk terjun ke reversing iOS secara nyaman dibutuhkan uang yang lumayan (untuk membeli hardware macOS dan iPhone) atau waktu yang cukup banyak (setup Hackintosh).

Beberapa aplikasi dan game terkenal memakai berbagai teknik yang membuat reverse engineering iOS menjadi cukup sulit. Karena tingkat kesulitannya. para hacker game iOS bisa mendapatkan uang cukup banyak dari hacking berbagai game dan aplikasi iOS (contohnya developer ini).

MAIX GO: AIOT Board

Di jaman Artificial Intelligence (AI) dan Internert of Things (IOT), ada beberapa perusahaan yang berusaha menggabungkan keduanya menjadi AIOT (Artificial Intelligence of Things). Salah satunya adalah Sipeed dari China. Perusahaan ini mengembangkan teknologinya berdasarkan instruction set RISC-V (baca: Risk Five) yang sifatnya terbuka. Jika saat ini Intel dan ARM masih menguasai dunia, di masa depan ada kemungkinan RISC-V yang akan jaya.

Sipeed sudah membuat cukup banyak produk, baik chip SOC dengan neural accelerator maupun board-board pendukungnya. Salah satu produk mereka adalah MAIX GO. MAIX GO ini memakai SOC Kendryte K210 dengan instruction set RISC-V 64 Bit dan memiliki accelerator untuk Fast Fourier Transform dan CNN (Convolutional Neural Network). Dengan adanya accelerator tersebut, SOC ini sangat cocok untuk memproses gambar dan suara. Menurut dokumentasinya, jika ukuran model kita kecil (<5.9 Mb fixed point 8-16 bit) maka pemrosesan image real time bisa dilakukan (~30 fps).

Saya memesan board MAIX GO ini ketika ada kampanye Indiegogo bulan November tahun lalu. Paket yang saya ambil seharga 45 USD dengan ongkir 5 USD ke Thailand dengan isi sebagai berikut:

  • 1 x MAIX GO (termasuk batere)
  • 1 x M12 OV2640 Camera
  • 1 x 2.8 inch QVGA LCD
  • 1 x MAIX GO simple case
  • 1 x MAIX R6+1 Microphone Array
  • 1 x MAIX Binocular Camera

Bendanya sebenarnya sudah saya terima sejak akhir Januari dan sudah langsung saya susun, tapi karena beberapa kesulitan awal, baru saya teruskan lagi ngopreknya sekarang. Isi paket utama MAIX GO lengkap: termasuk juga batere (biasanya sulit mengirimkan ini) dan juga obeng kecil serta kabel USB ke USB-C.

Sekarang benda ini sudah tersedia umum dan bisa dibeli di seeed studio atau Aliexpress (tapi lebih mahal). Harga MAIX GO tanpa Microphone Array dan Binocular Camera adalah 40.9 USD. Microphone Array bisa dibeli terpisah seharga 11.9 USD dan Binocular Camera bisa dibeli seharga 13.9 USD. Jadi harga total paket yang sama dengan yang saya pilih waktu crowdfunding adalah: 66.7 USD (belum termasuk ongkir).

Masalah pertama dengan hardware ini adalah pada interface serialnya. Benda ini dikenali sebagai serial port, tapi koneksinya tidak stabil (kadang bisa kadang nggak). Ternyata setelah membaca dan mengikuti diskusi telegram, masalahnya adalah pada chip STM32 yang dipakai sebagai interface serial, dan bagian ini perlu diupdate.

The problem is that OS X doesn’t let non-kernel drivers capture HID devices except through the HID APIs (for security reasons – helping prevent keyloggers etc). The CMSIS-DAP python server supplied by mbed libusb which implements it’s own HID layer and accesses the underlying USB stack at a lower level than HID – which Windows and Linux allow, but OS X does not.
The solution is update the firmware of cmsis-dap for maixgo to openec, and then OSX could recognize it.
You need a stlink, and use https://github.com/pavelrevak/pystlink/blob/master/README.md to flash the openec firmware. The openec firmware download URL is: https://github.com/rgwan/open-ec/releases, download and program the firmware flash-zero.bin, re-connect the USB cable of maix-go, and OSX will show new serial port. Use homebrew, install lsusb, and use lsusb command to check whether it work

Diskusi telegram

Masalah pertama untuk mengupdate: saya perlu membongkar lagi board yang sudah saya susun susah payah mengikuti instruksi Instruksi di youtube. Perlu mengikuti Youtube karena tidak ada instruksinya di dalam paket yang disertakan ataupun di websitenya. Tidak mudah juga menebak bagaimana menyusunnya karena tidak jelas juga orientasi LCD-nya harus dicolok ke arah mana (tidak ada labelnya).

Masalah berikutnya: saya harus mencari ST-LINK yang saya miliki. Karena sedang ada kesibukan lain, saya mengurungkan niat dan hampir melupakan board ini. Kemarin teman saya ada yang menanyakan apakah saya sudah mencoba board ini dan baru ingat lagi untuk mencoba. Akhirnya saya mulai membongkar lagi board ini malam ini.

Saya tidak tahu apakah board baru sudah memakai firmware yang baru atau masih harus diupdate manual. Jika masih perlu update manual, maka jangan lupa beli hardware ST-LINK-nya juga. Harga ST-LINK cukup murah dan terpakai juga untuk development STM8 dan STM32, jadi saran saya sih beli saja satu. Sebagai catatan: harga ST-LINK di Aliexpress lebih murah.

Setelah dibongkar ternyata posisi lubang pin untuk memprogram ulang STM32 sulit dijangkau. Tadinya mau saya solder pin header sementara lalu dilepas lagi, tapi ternyata spacing pin headernya juga tidak standar (standar di sini maksud saya seperti Arduino/Raspberry Pi). Tepatnya lagi: beberapa pin header di board ini standar 2.54mm, sebagian lagi tidak. Akhirnya saya memakai kabel dupont yang sudah ada headernya dan ditahan dengan tangan.

Kemudian ada masalah lain: sistem power board ini semuanya terhubung. Jika board ini dimatikan dan saya colok ST-LINK ke pin programming standard (3.3V, GND, DIO dan CLK) maka board ini akan berusaha menyala dan tidak berhasil karena dayanya tidak cukup. Jadi untuk memprogramnya benda ini perlu sambil diberi power via USB juga.

Setelah beberapa kali mencoba akhirnya berhasil juga mengupdate STM32-nya. Untungnya ini hanya perlu dilakukan sekali, jadi saya pastikan booting masih bisa dilakukan, dan setelah itu saya susun lagi boardnya.

Setelah berhasil mengupdate, saya berusaha memflash chip utama dengan Flasher versi Windows. Hasilnya: gagal. Padahal software Windows ini disarankan dan dilink dari website utamanya.

Akhirnya flashing berhasil dilakukan dengan skrip Python kflash.py. Saya mencoba Maixpy versi terbaru. Ini merupakan firmware Python untuk MAIX yang menurut saya sangat mudah digunakan.

Setelah sampai di prompt Python, semua berjalan cukup lancar. Saya mencoba-coba berbagai skrip contoh yang ada di:

https://github.com/sipeed/MaixPy_scripts

dan hampir semuanya berjalan lancar. Jangan lupa untuk deteksi wajah, ada data yang perlu diflash terpisah (sesuai komentar skripnya). Kualitas kamera yang diberikan biasa saja.

Board MAIX Go ini memiliki ESP8285 untuk koneksi WIFI, tapi saya baru mencoba scan access point. Saya belum mencoba seberapa bagus streaming kamera ke WIFI. Perlu dicatat bahwa tidak semua board seri MAIX memiliki WIFI (misalnya MAIX Bit tidak memiliki chip WIFI).

Selain dengan Python, benda ini juga bisa diprogram dengan menggunakan C/C++ tapi inipun belum saya coba. Sejauh ini Python sudah cukup untuk banyak eksperimen. Pemrograman C/C++ bisa dilakukan dari command line ataupun menggunakan IDE Arduino (ada dokumentasi Maixduino di website sipeed tapi isinya masih sangat minim).

Sayangnya dua benda ekstra yaitu Microphone Array dan Binocular Camera belum sempat saya test. Melepas ulang modul kamera dari boardnya cukup sulit (ada beberapa baut yang perlu dilepas) sedangkan hanya ada 1 konektor kamera. Konektor mic array ada di dalam board dan sulit dihubungkan juga. Selain itu saat ini saya belum kepikiran proyek khusus yang memakai benda tersebut.

Ada satu lagi komplain mengenai benda ini yaitu mengenai speakernya. Ada bunyi statik yang selalu ada setiap waktu, dan kadang lebih parah ketika dicolok ke USB. Ternyata ini katanya normal dan jika tidak ingin suara ini, kita harus melepas kabelnya dengan solder. Ini satu-satunya bagian yang memakai kabel dan tidak memakai pin header.

Penutup

Di atas kertas kemampuan K210 sangat bagus, bahkan untuk hal-hal di luar AI dan harganya juga murah. Ada versi board dengan SOC yang sama (K210) MAIX Bit dengan kamera dan LCD hanya 20.9 USD (atau boardnya saja 12.9 USD). Tapi ada banyak hal juga yang agak menghambat chip ini:

  • Instruction set RISC-V belum terlalu dikenal, supportnya belum matang seperti ARM/Intel
  • Chip ini bersaing dengan berbagai SOC ARM yang sekarang juga mulai menyertakan accelerator untuk AI (walau harganya tak semurah K210)
  • Guide berbahasa inggris masih jarang (kebanyakan berbahasa mandarin)

Saat ini menurut saya MAIX masih belum cukup matang untuk Anda yang ingin “langsung jalan”. Namun demikian group Sipeed sangat aktif, github mereka juga masih sangat aktif, jadi sepertinya masa depan benda ini (dan produk sejenis dari Sipeed) cukup cerah.

Serba-serbi VPN

VPN itu apa sih? Virtual Private Network adalah teknologi untuk membuat serangkaian perangkat terhubung ke jaringan virtual yang sama. Jadi seolah-olah berbagai device tergabung di satu jaringan. Di posting ini saya akan membahas VPN dari sudut pandang user, sampai kalau ingin membuat VPN sendiri.

VPN banyak digunakan di dunia corporate atau enterprise. Penggunaan yang umum adalah untuk menghubungkan berbagai kantor regional dengan kantor lain atau dengan kantor pusat. VPN juga dipakai oleh remote worker untuk mengakses resource kantor (server, printer, dsb) yang tidak bisa diakses dari umum. Dengan koneksi VPN, komputer rumah atau laptop masuk ke jaringan perusahaan. Jika browsing via VPN maka , seolah-olah kita mengakses internet dari perusahaan tersebut.

Sumber: wikipedia

Beberapa bank juga menggunakan koneksi VPN untuk partnernya, jadi berbagai perusahaan yang ingin mengakses sistem bank harus lewat VPN. Ini hanya layer keamanan tambahan, selain itu masih digunakan password dan juga token.

VPN juga bisa digunakan untuk berinternet lewat server orang lain. Sebenarnya prinsipnya sama dengan sebelumnya: kita bergabung di jaringan privat dan dari situ mengakses internet. Tujuannya memakai VPN biasanya:

  • Membypass blokir
  • Mendapatkan konten tertentu, misalnya daftar film Netflix di Thailand dan USA sangat berbeda
  • Menyembunyikan IP, misalnya untuk wartawan yang takut dipersekusi

Di VPN seperti ini kita hanya numpang lewat untuk internet saja. Ini tidak beda (dari sisi security) seperti numpang WIFI di tempat publik atau rumah orang: pemilik access point bisa mengakses traffic tertentu (kata kuncinya di sini adalah: tertentu). Akan saya jelaskan lebih lanjut di artikel ini.

Koneksi Lewat VPN seperti numpang WIFI di sebuah tempat

Siapa penyedia layanan VPN ini? untuk perusahaan ya mereka sendiri. Selain itu ada penyedia VPN, baik yang gratis maupun berbayar. Kita juga bisa menyewa sendiri VPS (Virtual Private Server) atau dedicated server, biayanya tidak jauh beda dengan VPN berbayar.

Keamanan Aplikasi Gratis

Ada berbagai catatan dalam keamanan VPN gratis. Pertama adalah keamanan aplikasi itu sendiri, terlepas dari aplikasi VPN atau bukan, sebuah aplikasi bisa melakukan banyak hal di ponsel kita tanpa kita sadari.

Di OS Android yang lama, sebuah aplikasi bisa dengan mudah mendapatkan isi phone book, imei, dsb. Bahkan di Android ataupun iOS terbaru pun jika pengguna memencet “YES” untuk berbagai permission, maka aplikasi tetap bisa mendapatkan banyak informasi dari ponsel Anda.

Bahkan jika tidak mendapatkan informasi apapun, sebuah aplikasi bisa menjalankan coin miner di ponsel Anda. Artinya ponsel Anda akan dipakai untuk mendapatkan uang dari berbagai cryptocurrency. Efek buruk menjalankan coin miner terus menerus adalah: HP jadi panas dan akan mengurangi masa hidup batere ponsel Anda.

Tentunya aplikasi apapun juga bisa menampilkan iklan. Ini adalah salah satu sumber pendapatan VPN gratis. Cara dengan iklan ini walaupun menyebalkan tapi masih lebih baik daripada mencuri data.

Secara umum: menginstall aplikasi tidak dikenal bisa berbahaya. Jika Anda bukan orang teknis: jangan menginstall aplikasi dari luar Play Store atau App Store. Aplikasi dari app store dan play store sudah diverifikasi dan biasanya aman (walau kadang ada juga yang lolos).

Untuk aplikasi atau game dari luar app store, risikonya cukup besar. Semakin tua versi sistem operasi Anda, semakin berbahaya. Jika aplikasi mendapatkan akses “root”, maka aplikasi tersebut bisa melakukan apa saja. Termasuk juga mengganti semua aplikasi Anda (termasuk banking) dengan aplikasi lain yang ada backdoornya.

Jadi sekali lagi: sebuah aplikasi bisa berbahaya, baik itu aplikasi VPN ataupun bukan jika sumbernya tidak jelas.

Keamanan VPN

Khusus untuk aplikasi VPN, ada tambahan bahwa aplikasi tersebut bisa memonitor data yang keluar dan masuk. Dalam hal ini kemampuan sebuah aplikasi VPN untuk memonitor dan memodifikasi data tidak beda dengan access point WIFI yang Anda pakai di publik.

Sekarang ke bagian yang saya sebutkan di atas mengenai traffic tertentu yang bisa diakses oleh VPN atau penyedia WIFI gratis. Sebagai pemilik access point WIFI di rumah saya, saya bisa:

  • mengetahui koneksi ke server mana saja
  • memonitor traffic tertentu
  • mengarahkan koneksi dari satu server ke server lain
  • mengganti isi koneksi yang tidak terenkripsi

Perlu dicatat bahwa ada koneksi ke server yang terenkripsi dan tidak terenkripsi. K0neksi yang tidak dienkripsi bisa dimodifikasi. Ini seperti menulis pesan dengan kartu pos, semua bisa membacanya dan mencoret/mengubah isinya.

Apakah koneksi terenkripsi aman? Tergantung aplikasinya. Koneksi terenkripsi seperti memakai amplop untuk mengirim pesan. Tentunya bisa saja seseorang di tengah untuk membongkar amplopnya dan menggantinya dengan amplop baru. (Catatan teknis: sebenarnya tidak semudah itu, kita perlu menginstall root certificate di ponsel).

Sebuah aplikasi yang tidak aman akan menerima “amplop” dari siapa saja asalkan pesannya masih dalam amplop. Tapi aplikasi yang memakai SSL Pinning akan memeriksa detail dan cap di amplop tersebut dan tidak akan mau melakukan koneksi jika amplopnya berbeda.

Perlu dicatat juga: defaultnya jika kita mengetik alamat saja: bni.co.id, maka defaultnya akan memakai koneksi tidak terenkripsi, lalu kita diforward ke koneksi yang terenkripsi.

Beberapa situs mengijinkan koneksi HTTP lalu memforward ke koneksi HTTPS. Contohnya ketika kita mengetik bni.co.id, maka

Tapi beberapa tidak, misalnya jika kita mencoba ibank.klikbca.com maka koneksi tidak bisa dilakukan. Tapi koneksi awal ini bisa menimbulkan masalah: koneksi yang tidak terenkripsi ini bisa dimodifikasi, misalnya jadi Location: https://bni.co.id.bank-negara-indonesia-secure-connection.com/ dengan bank-negara-indonesia-secure-connection.com adalah server saya.

Jadi ketika mengetik pertama kali secara manual, ada risiko bisa terarahkan ke server lain. Tapi jika koneksinya dilakukan langsung dengan aplikasi ebanking maka ini lebih aman. Karena:

  • alamat sudah di-hardcode ke URL HTTPS
  • Umumnya aplikasi bank sudah mengimplementasikan SSL Pinning (setidaknya yang saya cek)

Secara umum, mengganti SSL sebuah koneksi langsung akan ditolak oleh kebanyakan aplikasi (ini ditolak di level library SSL). Jika ingin agar koneksinya diterima, kita bisa menginstall root certificate. Dengan menginstall root certificate, kebanyakan aplikasi (yang tidak memakai SSL Pinning) akan bisa dimonitor.

Bagaimana memeriksa jika kita menginstall Root Certificate? dari menu ini di Android. Jika Anda menemukan list ini tidak kosong, dan Anda tidak pernah menginstallnya, tandanya ada sesuatu yang tidak beres (Android akan memberi peringatan network monitoring)

Di dalam gambar berikut saya menginstall beberapa certificate saya sendiri dan dari sebuah aplikasi yang saya pakai.

Atau ini di iOS (di About: Certificate Trus Settings)

Saya sudah mengecek beberapa aplikasi perbankan seperti: BCA, Mandiri, BRI, BNI, semuanya sudah memakai SSL Pinning. Jadi secara umum: memakai VPN gratis yang didownload dari play store aman untuk transaksi banking melalui aplikasi banking.

Aplikasi VPN bisa mencatat beberapa hal mengenai browsing Anda meskipun tidak bisa melihat semua traffic:

  • Bisa tahu Anda mengunjungi situs tertentu (terutama jika situs tersebut hanya punya 1 IP)
  • Bisa tahu besarnya data yang lewat (jadi bisa tahu apakah kira-kira Anda mengupload sesuatu atau sekedar mendownload/browsing)
  • Bisa tahu kapan Anda mengakses situs-situs tersebut

Data-data tersebut (beserta IMEI, dsb) bisa dijual ke pihak lain.

Ada satu lagi bahaya aplikasi VPN, ini pernah ketahuan di aplikasi HolaVPN. Perlu diketahui bahwa informasi mengalir dua arah: dari komputer/ponsel ke provider VPN dan sebaliknya. Sebuah aplikasi VPN bisa saja menjual bandwith Anda. Artinya: pengguna layanan VPN lain bisa saja dilewatkan trafficnya melalui ponsel/komputer Anda. Jika ternyata isi trafficnya illegal (misalnya pornografi anak), Anda bisa kena masalah.

Aplikasi Hola VPN pernah tertangkap menjual bandwidth

VPN untuk mengamankan Wifi Publik

VPN yang tidak bisa dipercaya sama bahayanya dengan WIFI publik. VPN yang bisa dipercaya, bisa menambah keamanan ketika memakai WIFI publik. Dengan VPN, seluruh traffic keluar sampai ke server VPN terenkripsi, dan artinya pemilik WIFI publik tidak bisa menguping.

Memakai VPN akan membuat pemilik WIFI publik tidak bisa melihat/memodifikasi traffic jaringan kita

Sekali lagi: dalam kasus ini yang bisa menguping adalah provider VPN. Jadi pilih provider yang terpercaya, atau setup sendiri server VPN Anda.

Mensetup VPN Sendiri

Sulitkah mensetup VPN sendiri? sebenarnya tidak asalkan punya dasar teknis administrasi Linux/Windows. Ada beberapa skrip di Internet yang bisa dijalankan untuk mengotomasi ini. Contoh yang cukup terkenal adalah openvpn road warrior. Cukup butuh semenit untuk membuat sebuah server dedicated ataupun VPS dengan skrip ini:

https://github.com/Nyr/openvpn-install

Skrip tersebut ditujukan untuk mensetup server OpenVPN dan menghasilkan file ovpn yang siap dipakai dari berbagai OS (Linux, Windows, OS X, iOS dan Android). Cara memakai file ovpn yang dihasilkan skrip: copy file tersebut ke device Anda, install software OpenVPN (bisa dicari di app store/play store), lalu buka filenya dan tekan “connect”.

OpenVPN dengan server sendiri

Tentunya ini bukan satu-satunya cara mensetup VPN. Ada banyak software VPN lain, contohnya di blog ini saya pernah membahas cara setup software tinc. Secara umum setup berbagai software VPN cukup memakan waktu.

Dulu saya pernah juga memberikan layanan VPN + Hack supaya bisa menginstall aplikasi secara tidak resmi di Blackberry 10 via OTA (tapi layanannya sudah saya tutup). Ini memakai Openswan dengan skrip custom. Videonya masih ada:


Bagaimana dengan biayanya? Sebuah server dedicated bisa didapatkan dengan harga mulai 10an USD. VPS bisa didapatkan dengan harga mulai 1 USD. Dengan 5 USD kita bisa mendapatkan VPS DigitalOcean yang berlokasi di Singapore yang cukup cepat diakses dari Indonesia. Tentunya satu server (baik dedicated maupun VPS) bisa dipakai beberapa orang, jadi biayanya bisa lebih rendah lagi

DNS alternatif

Sebenarnya jika hanya ingin mengatasi blokir internet, DNS alternatif bisa digunakan. Contohnya yang mudah adalah 1.1.1.1 dari Cloudflare.

Prinsip pemblokiran sebuah situs adalah seperti ini:

  • Ketika akan melakukan koneksi ke facebook.com, kita perlu IPnya, ini ditanyakan ke DNS
  • DNS akan memeriksa apakah ada di daftar blokir, jika ya, maka redirect ke internet positif
  • Jika aman, makan DNS akan memberikan IP yang benar.

Jadi untuk mengatasinya ada beberapa cara:

  • Menggunakan server DNS alternatif. Tapi kadang port 53 diblok ke server lain, sehingga kita hanya bisa memakai DNS milik ISP
  • Memakai DNS over HTTPS (memakai port 443). Ini mudah memakai DNS Cloudflare: https://1.1.1.1/ (silakan download aplikasi yang tersedia di website tersebut)
  • Mengedit sendiri file hosts dan memasukkan kombinasi host name dan IP address secara manual. File ini ada di /etc/hosts (Linux/BSD), di /etc/private/hosts (OS X), atau %SYSTEMROOT%\System32\Drivers\etc\hosts (Windows)

Membuat Software VPN Sendiri

Mensetup dan memakai software VPN tidak membuat Anda jadi ahli dalam soal VPN. Jika ingin benar-benar paham, cobalah membuat software VPN sendiri dengan API yang disediakan oleh berbagai sistem operasi.

Mengapa membuat VPN ini latihan yang bagus:

  • Anda jadi mengerti pemrosesan paket jaringan
  • Anda jadi mengerti bagaimana mengimplementasikan enkripsi paket jaringan
  • Bisa paham jika ingin mengevaluasi security sebuah aplikasi VPN

Software provider VPN akan membuat jalur terenkripsi dari sebuah komputer ke komputer lain. Untuk membuat software VPN sendiri, kita perlu pemahaman yang cukup baik mengenai networking sampai ke level paket jaringan.

Di tahap awal, kita bisa membuat VPN yang tidak terenkripsi sama sekali . Kemudian kita bisa menambah enkripsi sederhana, lalu yang lebih rumit.

Pertama agar software ini bisa menerima dan meneruskan paket jarigan, maka kita perlu membuat sebuah network interface baru untuk menerima dan mengirim paket data. Biasanya ada dua jenis network interface: level paket di layer 3 (Internet Protocol/IP atau protokol lain) dan layer 2 (ethernet frame)

Setelah interface VPN bisa digunakan, kita perlu memberitahu berbagai program agar memakai interface tersebut untuk mengirim dan menerima data. Ini bisa dilakukan dengan mengubah default route agar melalui interface tersebut. Perlu dicatat: program yang memiliki privilege tinggi bisa membypass VPN dengan langsung memakai network interface tertentu.

Ada banyak ide yang bisa dan sudah banyak yang diimplementasikan yang bisa dilakukan dengan mengintersepsi network:

  • Membuat ad blocker berbasis VPN
  • Membuat network sniffer (Contoh yang sudah ada di play store: Packet capture)
  • Membuat protokol VPN yang jika disniff seolah-olah hanya saling mengirimkan gambar (padahal ada datanya di dalam gambar tersebut dengan steganografi).

Dengan membuat sendiri software VPN kita bisa terbebas dari spyware yang mungkin ada di software seperti kasus Onavo dari Facebook.

Network interface virtual: TUN dan TAP

Untuk sistem operasi Linux, ada dua network jenis network adapter virtual TUN dan TAP yang bisa dibuat. Bedanya dengan network interface fisik adalah: jika ada paket jaringan masuk ke interface ini, maka paket tersebut tidak dikirimkan ke hardware, tapi ke sebuah program yang bisa kita buat sendiri (user space program). Program ini yang perlu kita buat yang akan memproses tiap paket jaringan yang lewat.

TUN (Tunel Network) bekerja di layer 3 sedangkan TAP bekerja di layer 2. Dalam kebanyakan aplikasi kita cuma butuh TUN saja karena hanya butuh melewatkan paket network, tidak perlu memproses level ethernet frame.

Untuk mengakses tunnel device ini kita bisa menggunakan API tertentu atau dengan ioctl. Tutorial contohnya bisa dibaca di sini:

Windows tidak memiliki API sederhanya untuk user mode networking. Network driver di Windows perlu diimplementasikan dengan NDIS dan ini cukup kompleks plus butuh code signing yang cukup repot dan mahal. Untungnya sudah ada yang membuatkan driver TUN dan TAP . Kita bisa memakai kedua driver ini (OpenVPN, Tinc, dan berbagai software lain memakai pendekatan ini).

VPN API di Android

Di Android kita tidak bisa dengan mudah membuat interface network ini. Jika kita ingin membuat service VPN baru, kita perlu menggunakan API VPN Service. API ini sebenarnya hanya membungkus interface TUN dan sekaligus mensetup default route agar lewat VPN. Dengan API ini, program kita perlu membaca raw packet, mengenkrip paket tersebut, lalu meneruskannya.

Untuk parsing paket IP, Android tidak menyediakan API-nya. Dalam kasus tertentu kita bisa parsing sendiri header IP-nya (misalnya sekedar membaca destination IP dan port). Untuk kasus kompleks kita perlu library stack IP. Contoh kasus kompleks misalnya jika kita ingin menangani stream SSL lalu mendekrip stream tersebut.

Kebanyakan aplikasi VPN yang saya periksa menggunakan native library untuk parsing dan processing paket jaringan (tidak diparse di Java). Jika ingin mempelajari bagaimana membuat aplikasi VPN sendiri, ada banyak proyek open source Android yang bisa dilihat, misalnya:

https://github.com/M66B/NetGuard

VPN API di iOS dan macOS

Apple menyediakan beberapa API untuk VPN. Secara high level kita bisa memakai protokol VPN yang sudah ada dan sekedar membuat aplikasi untuk mengendalikan koneksinya (misalnya membuat layar login yang lebih bagus atau terkoneksi ke sistem billing). Secara low level, kita bisa membuat protokol kita sendiri

https://developer.apple.com/documentation/networkextension

Untuk memakai ini di iOS kita perlu memakai Network Extension Entitlement, tadinya memakai ini di iOS butuh ijin khusus dari Apple, tapi sekarang sudah tidak perlu lagi. Contoh penggunaan API sudah disediakan Apple di:

https://github.com/ios-sample-code/SimpleTunnel

Penutup

VPN adalah nama sebuah teknologi yang sebenarnya cakupannya cukup luas, tapi sekarang banyak dipersempit jadi sekedar: mengakses internet lewat komputer orang lain. Lalu mulai ada banyak informasi tidak benar berdasarkan penyederhanaan ini.

Semoga informasi yang di tulisan ini bisa memperluas wawasan Anda mengenai VPN. Mungkin ada juga yang jadi ingin mengimplementasikan protokol VPN sendiri.

Saya tidak menyarankan layanan VPN tertentu, karena takut salah:

  • Kadang ada layanan super populer (dulu Hola) yang ternyata kemudian ketahuan tidak aman
  • Ada layanan VPN yang sekarang aman, tapi nanti bisa saja berubah total, entah karena tekanan bisnis atau dibeli pihak lain

Jika butuh VPN:

  • untuk sekedar keamanan pribadi (misalnya ketika memakai WIFI publik) setuplah VPN sendiri
  • Jika ingin mengamankan diri dari pihak berwajib atau orang jahat pakailah TOR anonymity network
  • Jika ingin mengakses konten dari negara lain: silakan pakai layanan berbayar

Kesan Pertama Nvidia Jetson Nano

Posting ini merupakan review awal Jetson Nano. Sebuah single boad computer dari Nvidia dengan built in GPU. Sejak bulan Maret lalu saya memesan (preorder) Jetson Nano ketika diumumkan. Sayangnya ada masalah dengan fulfillment-nya sehingga baru dikirim akhir April dan sampai beberapa hari yang lalu. Sebagai permintaan maaf karena masalah tersebut SeeedStudio memberikan Micro SD Card 16 GB dan adaptor 5V 2.5 A gratis.

Jetson Nano adalah development board dari Nvidia yang relatif murah (99 USD). Memang ini lebih mahal dari board lain seperti Raspberry Pi, tapi board ini sudah memiliki GPU built in (128-Core Maxwell GPU). Sebagai informasi sebelumnya Nvidia sudah merilis beberapa board seri Jetson lain dengan GPU tapi harganya sampai ratusan USD.

Hal penting yang perlu diperhatikan: micro SD 16 GB tidak akan cukup. Untuk sistem minimum saja memang cukup, tapi ketika sudah mendownload dan mengcompile beberapa library, spacenya tidak cukup lagi. Saran saya minimal pakailah SD Card 32 GB.

Proses setup Jetson Nano ini butuh kesabaran:

  • Download SD Card Image berukuran 5 GB (puluhan menit hingga beberapa jam, tergantung koneksi internet Anda)
  • Unzip filenya butuh beberapa menit
  • Write image ke SD Card butuh beberapa menit
  • Proses boot pertama butuh beberapa menit juga.

Proses boot awal harus dilakukan dengan koneksi HDMI ke monitor dan juga butuh keyboard (plus mouse akan lebih bagus lagi). Proses untuk setup awal (menyetujui license dsb) dilakukan melalui GUI. Setelah itu kita bisa mengakses board ini via SSH. Setelah proses awal selesai, kita perlu mengupdate sistem operasinya (berbasis ubuntu).

Berikutnya jika ingin mencoba beberapa demo dari Nvidia, kita bisa mendownload jetson-inference. Proses cloningnya repositorynya cepat, tapi ketika kita berusaha membuild programnya, akan ada proses download beberapa ratus megabyte lagi.

Jika kita ingin menginstall library lain seperti OpenCV terbaru (yang built versi 3.3) maka kita perlu compile sendiri. Ada yang memberikan petunjuk di internet, tapi banyak yang hang/stuck ketika membuild. Ada yang menyarankan untuk menggunakan DC connector dengan power 4A agar tidak stuck, tapi dari pengalaman saya: build dengan single core (tidak memakai -j4) sudah cukup agar tidak hang, walau akhirnya proses buildnya jadi lama sekali.

Perlu dicatat juga bahwa di kernel standar bawaan, zram tidak terinstall. Biasanya 4GB ini sudah cukup, tapi dalam kasus tertentu swap file masih dibutuhkan (defaultnya tidak ada swap file/partition). Jika program kompleks Anda crash karena kehabisan memori, coba compile ulang kernel (source sudah dirilis di website Nvidia) untuk mengaktifkan fitur ZRAM, atau buat swap file/partition di sdcard.

Testing

Selain mencoba demo dari Nvidia, saya mencoba beberapa aplikasi lain. Percobaan awal memakai FaceKit untuk face detection performancenya cukup baik (~400 FPS ketika tidak ada wajah dan turun ke ~30 fps jika ada beberapa wajah).

Saya juga iseng mencoba prototype C1 Form Reader karya teman saya Rizki Wicaksono. Skrip Python yang dibuat memakai tensorflow dengan model yang sudah ditrain di desktop. Saya tidak pelu mengkonversi modelnya, langsung bisa dipakai di Jetson Nano memakai GPU yang ada di device tersebut. Hanya saja skripnya perlu sedikit disesuaikan agar bisa jalan dengan OpenCV yang terinstall di device.

Contoh hasilnya seperti gambar di bawah ini. Harap dicatat bahwa ini masih prototype, jadi tidak selalu bisa membaca form dengan benar.

Jetson Nano vs Board lain

Saat ini sudah ada beberapa solusi AI lain untuk embedded device. Kelebihan Jetson Nano dibandingkan dengan beberapa solusi lain adalah:

  • CPU + GPU terintegrasi (tidak seperti Intel Movidius atau Neural Accelerator lain berbasis USB yang perlu dicolok ke Raspberry Pi atau board lain)
  • Built in Ethernet gigabit (bisa dihubungkan ke network camera dengan mudah)
  • RAM 4 GB, cukup besar untuk banyak keperluan (Raspberry Pi hanya 1 GB RAM-nya, Google Edge TPU Dev Board versi saat ini juga cuma 1 GB RAMnya)
  • Semua framework secara teori bisa berjalan, tidak perlu versi khusus (tidak seperti Edge TPU dari Google yang hanya bisa TF LIte dan perlu model khusus dengan kompilasi cloud)

Penutup

Saya baru beberapa hari memakai board ini dan belum menemui masalah berarti. Suhu maksimum yang saya perhatikan masih kurang dari 55 derajat celcius ketika sedang bekerja sangat berat.

Mengingat benda ini baru dirilis 2 bulan, supportnya sudah sangat baik. Sejauh ini tampaknya benda ini sangat menjanjikan dan dapat diaplikasikan di banyak kasus yang butuh solusi portabel atau butuh pemakaian daya rendah.

Masih banyak hal yang belum saya coba di device ini, misalnya ada mode 5W sehingga lebih hemat energi (tapi performancenya turun). Jetson Nano mendukung kamera Raspberry Pi (versi 2) dan juga kamera USB (keduanya belum saya coba).

Server rumah dengan IP publik

Sebagian orang ingin menghosting sendiri berbagai hal di rumah (atau kantor kecil), baik itu web, email, maupun layanan lain. Biasanya koneksi ISP tidak akan memberikan IP publik yang statik tanpa membayar ekstra (biasanya mahal), jadi biasanya banyak trik digunakan supaya server rumah bisa diakses dari luar.

Sebagai catatan sebelum menggunakan trik yang ada di sini: pertimbangkan memakai VPS atau dedicated server. Membuat server di rumah punya banyak kelemahan jika ANda tidak mengerti apa yang Anda lakukan:

  • Koneksi internet dan pasokan listirk di rumah biasanya kurang reliable dibanding data center
  • Jika salah konfigurasi, hacker bisa lebih mudah masuk ke jaringan rumah
  • Mengkonfigurasi semuanya sendiri cukup melelahkan/membuang banyak waktu

Dynamic DNS

Beberapa layanan tertentu seperti web cukup memakai dynamic DNS dan tidak perlu server eksternal tambahan. Artinya sebuah nama domain selalu diupdate IP-nya dengan IP terbaru saat ini. Untuk mengupdate ini bisa digunakan berbagai layanan Dynamic DNS dan server di rumah perlu diinstall software untuk mengupdate pemetaan nama ke IP.

Gambarannya kira-kira seperti ini:

Masalah dengan pendekatan ini adalah: akan ada jeda ketika ada update nama ke IP. Jeda ini karena DNS server akan mengcache informasi IP. TTL terkecil yang bisa diset biasanya 30 detik dan berbagai layanan DNS biasanya mengeset waktu minimumnya 1 menit. Jadi ketika ada pergantian IP, sekitar 1 menit kemudian kita baru bisa mengakses nama tersebut dengan IP baru.

Masalah lainnya adalah: layanan tertentu tidak akan berjalan dengan baik menggunakan pendekatan ini:

  • ISP kadang memblok port tertentu (saat ini ISP saya di sini memblok incoming connection ke port 80 dan 443), tidak bisa menjalankan web server di rumah dengan port standar
  • Andaikan tidak diblok, beberapa layanan seperti email tidak suka dengan IP dinamik (kadang IP masuk ke daftar spam list)

SSH Forwarding

Solusi ini dan berikutnya akan butuh sebuah server VPS. Kalau butuh VPS, kenapa tidak dihosting di VPS saja sekalian? ada beberapa alasan mengapa kita ingin hosting di rumah dengan menggunakan IP VPS:

  • Mungkin VPS-nya kurang powerful (VPS termurah hanya sekitar 5 USD, tapi disk dan RAM-nya kurang besar)
  • Kita ingin data tetap ada di rumah/kantor karena berbagai alasan. Alasannya bisa mengenai privasi, mengenai kemudahan update data/program, dsb.

Jika keperluannya hanya sederhana, SSH Forwarding bisa dilakukan. Saya pernah menjelaskan teknik ini di artikel saya yang lain mengenai SSH. Ini merupakan cara sederhana karena:

  • Tidak perlu setup sesuatu yang kompleks di server (cukup akses SSH yang biasanya memang sudah aktif), hanya perlu mensetup konfigurasi agar Remote Port Forwarding diijinkan
  • Tidak perlu setup sesuatu di client, cukup perlu SSH Client saja.

Satu VPS juga bisa dikoneksikan dengan beberapa server rumah. Mungkin server yang satu untuk web server, dan server yang lain untuk keperluan backup atau email. Atau bisa juga beberapa domain ditangani oleh satu VPS dan diforwarde (dengan apache/nginx atau yang lain) sesuai dengan domainnya.

Intinya adalah: dari server di rumah, kita melakukan SSH ke VPS. Koneksi ke port tertentu ke VPS akan diforward ke server di rumah. Kelemahan SSH forwarding adalah: dari sisi server di rumah semua incoming IP dianggap dari localhost.

Contohnya: pengunjung web dari Belanda, akan melakukan koneksi VPS server tersebut (misalnya di Singapura) lalu koneksinya di forward ke server rumah (misalnya di Indonesia). Di web server di Indonesia, terlihat koneksinya dilakukan dari IP localhost. Jaid bukan dari Belanda ataupun dari Singapura.

Masalah lain SSH adalah: koneksinya bisa putus. Di Linux program autossh bisa dipakai untuk menjaga agar koneksi tetap hidup. Di Windows kita bisa memakai SSH Client dari BitVise yang bisa melakukan auto reconnect.

VPN + DNAT

Ada banyak solusi VPN yang bisa dipakai. Salah satunya yang pernah saya bahas adalah dengan tinc. Bahkan VPN dengan SSH juga bisa dilakukan (dengan menggunakan tunnel device). Dengan VPN, sebuah VPS akan memiliki 2 network interface, satu yang menghadap publik, dan satu yang menghadap ke client VPN (dalam hal ini server di rumah).

Dengan menggunakan DNAT kita bisa mengarahkan agar paket yang diterima di server akan diforward ke client VPN. Perhatikan bahwa ada banyak cara melakukan forwarding ini. tergantung setting firewall dan cara forwardingnya, maka ada dua kemungkinan:

  • Source IP koneksi bisa berasal dari IP VPN server publik (biasanya bukan ini yang diharapkan)
  • Source IP koneksi bisa dari client yang melakukan koneksi ke VPS

Saat ini ada banyak jenis firewall, tergantung OS yang dipakai (iptables, nftables, ipfw, dsb), jadi saya tidak akan membahas detail settingnya, tapi hanya beberapa hal saja yang penting diperhatikan ketika mensetup ini:

  • Pastikan IP forwarding diaktifkan di VPS
  • Pastikan bahwa firewall rule paket dari IP publik berhasil diterima dan diteruskan ke VPN (bisa dicek dengan menggunakan tcpdump -i INTERFACEVPN)
  • Di sisi server rumah: pastikan koneksi yang datang memiliki source address yang benar
  • Ketika server rumah membalas paket yang datang, pastikan koneksi harus lewat VPN lagi (jangan salah membalas langsung lewat IP rumah)

Penutup

Artikel ini tidak membahas detail tiap perintah dan setting yang diperlukan untuk mengimplementasikan masing-masing solusi. Silakan dicari lagi detailnya dengan berbagai kata kunci yang dipelajari di sini (misalnya: Dynamic DNS, Remote Port Forwarding, DNAT dsb). Artikel ini sekedar memberikan pemahaman saja, bukan tutorial.

Salah satu pertanyaan yang paling tidak saya sukai adalah mengenai jaringan komputer. Untuk bisa menjawab suatu pertanyaan, biasanya saya perlu bertanya banyak hal mengenai konfigurasi jaringan saat ini, software yang dipakai dsb. Menanyakan hal semacam ini butuh waktu yang biasanya sangat lama. Setelah itu ada masalah: versi kernel, versi software dsb. Belum lagi jika ada masalah ISP memblokir sesuatu. Semuanya ini bisa dicari sendiri di Internet.

Semoga informasi ini berguna, dan sekali lagi mohon jangan bertanya detail cara melakukan setup semuanya. Silakan digoogling sendiri detailnya.

VPN dengan Tinc

Saat ini ada banyak sekali solusi VPN yang tersedia dengan segala kelebihan dan keterbatasannya. Beberapa contoh solusi yang populer dan gratis adalah OpenVPN, strongSwan, WireGuard, berbagai implementasi PPTP, tinc, dan VPN via SSH. Posting ini akan membahas mengenai tinc yang memiliki fitur mesh networking.

Beberapa perbedaan dari berbagai solusi VPN ini adalah:

  • Support platformnya. Contoh: saat ini wireguard tidak memiliki client di Windows, jadi kalau Anda memakai Windows, ini jelas tidak akan dipertimbangkan.
  • Kemudahan instalasinya (contoh: VPN melalui SSH cukup rumit setupnya, terutama di Windows)
  • Kecepatannya (ini biasanya hanya jika Anda memakai link dengan kecepatan tinggi) dan CPU usagenya (jika memiliki komputer dengan spesifikasi rendah)
  • Keamanannya, walau secara praktis serangan terhadap berbagai protokol VPN ini jarang/sulit dilakukan kecuali pada protokol kuno seperti PPTP.

Selain berbagai perbedaan teknis, pertimbangan lain memilih VPN adalah: apakah protokol VPN tertentu atau port tertentu diblok oleh ISP. Contohnya di ISP saya saat ini VPN dengan PPTP diblok, jadi harus menggunakan yang lain.

Karena ada begitu banyak software VPN, maka saya tidak akan membandingkan semuanya dan hanya akan membahas tinc saja di posting ini. Pengetahuan di atas sekedar untuk memberitahu bahwa tinc mungkin bukan solusi terbaik di berbagai skenario.

Seperti saya singgung di atas Kelebihan tinc adalah kemampuannya membuat mesh network. Mungkin ada yang bertanya-tanya: maksudnya mesh networking seperti apa sih? Maksudnya adalah sebuah node bisa terkoneksi ke node lain tanpa melalui hierarki tertentu dan sifatnya dinamik.

Semua VPN bisa kita gunakan untuk membuat konfigurasi seperti ini: ada server dan banyak client.

Dengan tinc kita bisa membuat konfigurasi seperti gambar berikut.

Garis yang saya gambarkan ini sekedar menunjukkan bahwa ada setting agar suatu node melakukan koneksi ke node tertentu. Dalam praktiknya: setelah kita mengkonfigurasi ini, kita bisa melakukan koneksi dari satu node ke node manapun.

Contoh konfigurasi di atas kira-kira seperti ini:

  • Ada 2 VPS (Node 1 dan Node 4) dengan IP Publik
  • Node 2 dan 3 diset bisa melakukan koneksi ke node 1 (IP node i ini publik jadi mudah setting ini)
  • Node 5 dan 6 diset bisa melakukan koneksi ke node 4
  • Node 7 (mungkin ini sebuah virtual machine di Node 6) diset untuk melakukan koneksi melalui Node 6

Tentunya konfigurasi jaringannya bisa seperti apa saja: intinya sebuah node bisa dikoneksikan ke satu atau lebih node lain (contohnya bisa saja dibuat setting bahwa Node 2 bisa terkoneksi langsung ke Node 3).

Setelah setting ini selesai, koneksi dari node manapun ke manapun bisa dilakukan seolah-olah semuanya ada di jaringan yang sama. Jadi node 7 ke node 2 bisa langsung dilakukan.

Bagaimana jika kita ingin menambah node baru? misalnya ingin menambah VM di node 6, sehingga ada Node 8 yang terkoneksi ke node 5, apakah kita perlu susah payah mengubah semua konfigurasi? Jawabannya: tidak, kita cukup menambahkan di node 6 bahwa ada node bernama Node 8 dengan public key tertentu, dan di Node 8 perlu diberi public key Node 6 supaya bisa tahu bahwa Node 6 ini adalah node yang valid.

Kehebatan tinc adalah jika kita menambahkan Node 8 yang terkoneksi ke Node 6, maka Node 7 dan 8 bisa berkomunikasi langsung di jaringan lokal, tidak melalui VPS. Bahkan bisa juga kita mengkonfigurasi agar Node 2 dan 3 juga melakukan koneksi ke dua VPN bukan cuma 1 (ke Node 1 dan Node 4). Jika Node 1 down, otomatis route lain akan diambil (lewat Node 4).

Atau jika masih sulit dibayangkan. Anggap saja semua node tersebut seolah terhubung ke sebuah switch virtual (atau hub, tergantung modenya di konfigurasi tinc). Karena terhubung ke switch maka semua seolah berada di jaringan yang sama.

Konfigurasi di Linux

Untuk menkonfigurasi sebuah node, yang perlu dilakukan:

  • membuat sebuah direktori dengan nama jaringan yang kita inginkan
  • membuat file tinc.conf di direktori itu
  • membuat private dan public key untuk host kita
  • mengcopy public key host lain yang ingin kita hubungi
  • mengkonfigurasi interface jaringan

Bagian terakhir (konfigurasi interface jaringan) ini yang berbeda di tiap OS. Kita bisa memakai skrip atau mensetup manual.

Tentunya sebelum mulai, kita perlu menginstall tinc. Gunakan software package manager yang sesuai untuk OS masing-masing atau gunakan installer untuk Windows. Di ubuntu/debian:

apt-get install tinc

Saya contohkan jaringan kecil pertama, dengan node1 ada di eksternal (punya IP publik), sedangkan yang lain IP-nya private. Saya beri nama jaringan ini: jaringanku. Bayangkan saja nama jaringan ini seperti nama sebuah switch dalam ilustrasi sebelumnya.

Untuk contoh ini host eksternal saya beri nama “serverku” dan host internal “komputerku“. Sekarang kita konfigurasi serverku:

Buat direktori baru:

sudo mkdir -p /etc/tinc/jaringanku/hosts

Buat file tinc.conf (pathnya: /etc/tinc/jaringaku/tinc.conf). Isinya:

Name = serverku
AddressFamily = ipv4
Interface = tun0

Buat file /etc/tinc/jaringanku/hosts/serverku dengan isi:

Address = alamat_ip_publik_serverku
Subnet = 10.0.0.1/32

Artinya IP server ini dalam jaringaku adalah 10.0.0.1, tentunya ini bisa diganti dengan IP private manapun. Saya sendiri sudah memakai IP 192.168 di jaringan rumah saya, jadi saya memakai 10.x.x.x untuk tinc.

Lalu buat private/public key untuk server ini, tekan saja enter untuk berbagai pertanyaan defaultnya

 tincd -n jaringanku -K4096

Sekarang kita butuh skrip untuk mengeset IP ketika jaringan up dan menghapus IP ketika jaringan down.

Buat: /etc/tinc/jaringanku/tinc-up dengan isi:

#!/bin/sh
ifconfig $INTERFACE 10.0.0.1 netmask 255.255.255.0

Catatan: sebenarnya cara yang lebih modern adalah menggunakan perintah “ip addr add”. Tapi cara ini masih kurang cross platform (tidak jalan di BSD dsb). Jadi saya masih lebih suka memakai ifconfig.

Dan /etc/tinc/jaringanku/tinc-up

#!/bin/sh
ifconfig $INTERFACE down

Jangan lupa diset modenya agar bisa dieksekusi:

sudo chmod +x /etc/tinc/jaringanku/tinc-*

Sekarang untuk komputerku (yang ipnya private) langkahnya sangat mirip. Hanya saja di sini ada konfigurasi agar koneksi dilakukan dari host ini ke server publik (tidak bisa sebaliknya karena server publik tidak bisa melakukan koneksi ke jaringan internal).

sudo mkdir -p /etc/tinc/jaringanku/hosts

Isi tinc.conf disesuaikan: namanya dan ada ConnectTo

Name = komputerku
AddressFamily = ipv4
Interface = tun0
ConnectTo = serverku

Sekarang buat file /etc/tinc/jaringanku/hosts/komputerku dengan isi:

Subnet = 10.0.0.2/32

Cukup itu saja, kita akan memberi alamat 10.0.0.2 ke komputerku. Buat juga key untuk node ini

 tincd -n jaringanku -K4096

Isi /etc/tinc/jaringanku/tinc-down sama dengan serverku, tapi isi tinc-up sedikit berbeda (IP-nya disesuaikan)

#!/bin/sh
ifconfig $INTERFACE 10.0.0.2 netmask 255.255.255.0

Nah sekarang langkah penting: setiap kali 2 node terhubung langsung, kedua node tersebut perlu tahu key satu sama lain. Jadi intinya:

  • Copy isi /etc/tinc/jaringaku/hosts/serverku di server ke
    /etc/tinc/jaringaku/hosts/serverku di komputerku
  • Copy isi /etc/tinc/jaringaku/hosts/komputerku ke
    /etc/tinc/jaringaku/hosts/komputerku di server

Jadi misalnya kita mau menambah laptop (misalnya namanya: laptopku yang akan dipakai jalan-jalan dengan IP yang berbeda-beda), settingnya sama dengan komputerku. Kita cukup perlu copy key laptopku ke serverku dan isi key serverku ke laptop dan dari laptop kita bisa konek ke komputerku.

Dalam kasus itu kita tidak perlu mengcopy key komputerku ke laptop, walau boleh saja kalau mau. Misalnya supaya gampang, semua isi file hosts dicopy ke sebuah hosting atau dropbox dan tiap kali setup komputer baru, semua file-file di copy ke /etc/tinc/jaringaku/hosts/. Isinya hanya public key yang tidak rahasia, yang rahasia adalah private keynya.

Nah sekarang saatnya testing. Di server dan komputer jalankan:

 tincd -D -d4 -n jaringanku

Jika semua beres, dari server kita bisa ping ke 10.0.0.2 (ke komputer) dan dari komputer kita bisa ping ke 10.0.0.1 (ke server). Jika semua lancar, kita bisa men-kill tincd dan membuatnya permanen. Supaya permanen, di sistem yang memakai systemd kita bisa menggunakan ini:

systemctl enable [email protected]
systemctl start [email protected]

Setting di Windows

Sebenarnya konfigurasinya sama saja dengan Linux. Yang berbeda adalah instalasinya dan lokasi direktorinya. Supaya tidak terlalu panjang artikelnya, silakan lihatpetunjuk instalasi di : https://www.tinc-vpn.org/examples/windows-install/

Lokasi direktori konfigurasi ada di: C:\Program Files (x86)\tinc (pada Windows 64 bit) atau C:\Program Files\tinc (Windows 32 bit). Buat direktori: “jaringanku” di dalam direktori tersebut (butuh hak admin, seperti halnya di Linux butuh root).

Untuk konfigurasi IP: kita tidak memakai skrip up dan down, IP di setting manual melalui GUI. Cara testingnya sama:

 tincd -D -d4 -n jaringanku

Dan jika sudah OK, untuk membuat permanen (diinstall sebagai service).

 tincd -n jaringanku

Jika ingin merestart, mendisable, atau menghapus service ini, maka bisa dilakukan melalui GUI Services di Windows. Atau jika menguasai PowerShell ini juga bisa dilakukan via PowerShell

Berikutnya

Setting tinc yang saya jelaskan hanya supaya kedua host terkoneksi dengan ip internal. Setelah itu kita bisa mensetup banyak hal lain, tapi tidak akan dibahas di sini. Contohnya yang bisa disetting:

  • Jika kita ingin membagi koneksi internet server ke client (supaya client bisa browsing web dengan IP server seperti koneksi VPN pada umumnya) kita bisa memakai IP masquarading atau menginstall proxy server di server.
  • Jika kita ingin server di rumah kita diakses dari luar, kita bisa memakai DNAT (atau SSH remote port forwarding).

Sebagai penutup: mengetahui berbagai teknologi VPN bisa sangat berguna dan bisa dipakai untuk menyelesaikan masalah sesuai kebutuhan kita.