Untuk semua artikel yang memberikan tautan ke repositori dotfiles saya di GitHub, saat ini sedang dalam proses perbaikan sehingga tidak dapat diakses. Mohon maaf atas ketidaknyamanan ini. (bandithijo, 2019/03/14) ●

Konfigurasi DNSCrypt di Arch Linux

Ditulis: 2018/08/22 Diperbaharui: 2019/06/27
Arch Linux Security Tips

بسم الله الرحمن الرحيم

banner

Pendahuluan

DNSCrypt ? Apa itu ?

Dokumentasi ini tidak ditulis untuk menjelaskan pertanyaan-pertanyaan tersebut. Mungkin teman-teman bisa mencari-cari literatur sendiri untuk jawaban dari pertanyaan di atas, yaa. Seperti di sini.

Permasalahan

Kesulitan dalam mengakses beberapa portal informasi membuat saya gerah. Pasalnya saya kehilangan beberapa bahan bacaan dan sumber informasi yang bagus sekali dari internet berskala global. Di sisi lain, saya pun setuju dengan adanya pemblokiran-pemblokiran ini. Agar informasi yang tidak semestinya dilihat oleh kelompok umur yang belum dewasa secara psikologis tidak melihat konten tersebut dengan mudah dan gamblang. Terlebih lagi untuk teman-teman yang sudah memiliki anak. Akan sangat diuntungkan oleh kebijakan ini. Toh, kita yang orang dewasa sudah pada pintar-pintar mencari jalan menuju roma.

Baiklah, saya tidak ingin menuliskan panjang lebar tentang issue ini. Apabila kalian membaca post ini, mungkin masalah yang kita hadapi sama, mas bro !

Instalasi

Kita perlu memasang paket yang bernama dnscrypt-proxy.

$ sudo pacman -S dnscrypt-proxy

Konfigurasi

Setelah kita berhasil memasang paket dnscrypt-proxy, tahap selanjutnya tentu saja mengkonfigurasi. Jujur saja, untuk saya, bagian ini agak susah-susah gampang. Bukan susah dalam artian sulit, namun lebih ke tricky. Karena dalam beberapa kasus, cara A terbukti berhasil di saya, namun belum tentu dengan di sistem kalian.

Pada dokumentasi ini saya langsung saja akan menggunakan cara yang berhasil saya terapkan pada sistem saya.

Sekenario pada dokumentasi ini adalah, kita akan mengkonfigurasi dnscrypt-proxy terlebih dahulu, selanjutnya kita akan mengkonfigurasi /etc/resolv.conf agar tidak ter-generate oleh NetworkManager.

Konfigurasi DNSCrypt

Setelah kita memasang paket dnscrypt-proxy, akan terdapat dua service yang disediakan, yang kita hanya bisa memilih salah satu dari keduanya untuk kita enable-kan1.

Kedua service tersebut adalah :

  1. dnscrypt-proxy.service
  2. dnscrypt-proxy.socket

Pada dokumentasi ini saya akan menggunakan .socket karena sudah terbukti terkonfigurasi dengan baik pada sistem saya. Karena saat saya menggunakan .service, saya sudah meng-enable kan service agar dapat dijalankan saat proses sistem dimulai, namun ternyata tidak dijalankan. Karena keterbatasan ilmu, saya memutuskan untuk mencoba menggunakan .socket dan berjalan sesuai harapan.

Lahkah-lahkahnya sebagai berikut :

  1. Edit file /etc/dnscrypt-proxy/dnscrypt-proxy.toml.1
    $ sudo vim /etc/dnscrypt-proxy/dnscrypt-proxy.toml
    

    Cari pada baris yang bertuliskan listen_addresses, value yang ada pada kurung kotak, berupa ip address dan port, kita kosongkan. Sehingga akan berbentuk seperti ini.1

    ...
    listen_addresses = [ ]
    ...
    

    Simpan dan exit.

  2. Konfigurasi socket agar aktif saat proses booting.
    $ sudo systemctl enable dnscrypt-proxy.socket
    
    Created symlink /etc/systemd/system/sockets.target.wants/dnscrypt-proxy.socket → /usr/lib/systemd/system/dnscrypt-proxy.socket
    

    Jalankan socket.

    $ sudo systemctl start dnscrypt-proxy.socket
    

    Cek status socket, apakah sudah active (running) atau inactive.

    $ sudo systemctl status dnscrypt-proxy.socket
    
     ● dnscrypt-proxy.socket - DNSCrypt-proxy socket
       Loaded: loaded (/usr/lib/systemd/system/dnscrypt-proxy.socket; enabled; vendor preset: disabled)
       Active: active (running) since Wed 2018-08-22 09:12:01 WITA; 4h 33min ago
         Docs: https://github.com/jedisct1/dnscrypt-proxy/wiki
       Listen: 127.0.0.1:53 (Stream)
               127.0.0.1:53 (Datagram)
               [::1]:53 (Stream)
               [::1]:53 (Datagram)
        Tasks: 0 (limit: 4915)
       Memory: 40.0K
       CGroup: /system.slice/dnscrypt-proxy.socket
    
       Aug 22 09:12:01 BanditHijo-X260 systemd[1]: dnscrypt-proxy.socket: TCP_DEFER_ACCEPT failed: Protocol not available
       Aug 22 09:12:01 BanditHijo-X260 systemd[1]: dnscrypt-proxy.socket: TCP_NODELAY failed: Protocol not available
       Aug 22 09:12:01 BanditHijo-X260 systemd[1]: Listening on DNSCrypt-proxy socket.

    Apabila terlihat status dnscrypt-proxy.socket sudah active (running), artinya service sudah berjalan dengan baik.

    Kalau kita menggunakan socket secara otomatis akan mengaktifkan juga service-nya.

    Tapi, dnscrypt-proxy.serivce ini akan berjalan setelah kita merestart network atau sistem operasi.

Kalau sudah seperti di atas, artinya service yang kita perlukan sudah berjalan dengan baik.

Sekarang lanjut ke konfigurasi nameserver pada /etc/resolv.conf.

Konfigurasi resolv.conf

Mengapa kita perlu mengkonfigurasi file /etc/resolv.conf ?

Untuk teman-teman yang menggunakan ISP (Internet Service Provider) seperti IndiH0ME, biasanya konfigurai router yang dilakukan oleh ISP akan memaksa kita untuk menggunakan nameserver 192.168.0.1 atau IP address tertentu seperti:

nameserver 118.98.44.100
nameserver 118.98.44.10
nameserver fe80::1%wls3

Hal ini menyebabkan setiap kita mengganti nameserver tersebut, misal mengganti manjadi DNS Google (nameserver 8.8.8.8) maka akan tetap terganti ke nameserver 192.168.0.1 setelah sistem sleep/restart. Sehingga sifatnya tidak dapat permanen.

Yang jadi permasalahan adalah, untuk dapat menggunakan dnscrypt-proxy service, kita harus menggunakan nameserver 127.0.0.1. Kita memang dapat mengganti nameserver ini secara manual, namun tentu saja saya malas untuk mengganti setiap kali akan mengguanakan dnscrypt-proxy service.

Saya mendapati banyak cara untuk membuat value dari nameserver yang terdapat di dalam file /etc/resolv.conf tidak dapat berubah / ter-regenerate secara otomatis. Namun, saya hanya akan menuliskan cara yang saya gunakan. Saya juga belum tahu ini cara yang mudah atau tidak. Apabila teman-teman punya cara yang lebih baik, mungkin bisa menambahkan di kolom komentar.

Cara ini saya beri nama, “Membuat nameserver static dengan dhcpcd.service”.

Saya menganggap teman-teman yang ingin menggunakan cara ini, setuju untuk menggunakan service dhcpcd. Karena diluar sana, ada teman-teman yang tidak menggunakan dhcpcd untuk mengatur layanan jaringan pada sistem operasi mereka.

Oke kita lanjutkan.

Cara ini memerlukan bantuan dari service bernama dhcpcd.service.

Service ini dibawa oleh paket dhcpcd. Biasanya paket ini sudah ada di dalam distribusi yang kita gunakan.

Coba cek apakah servicenya sudah jalan atau belum.

$ sudo systemctl status dhcpcd.service
● dhcpcd.service - dhcpcd on all interfaces
   Loaded: loaded (/usr/lib/systemd/system/dhcpcd.service; enabled; vendor preset: disabled)
   Active: active (running) since Sun 2019-05-26 09:59:07 WITA; 1h 59min ago
  Process: 412 ExecStart=/usr/bin/dhcpcd -q -b (code=exited, status=0/SUCCESS)
 Main PID: 480 (dhcpcd)
    Tasks: 1 (limit: 4624)
   Memory: 2.2M
   CGroup: /system.slice/dhcpcd.service
           └─480 /usr/bin/dhcpcd -q -b

Kalau sudah jalan akan seperti di atas tampilannya.

Kalau belum, silahkan di jalankan terlebih dahulu.

$ sudo systemctl start dhcpcd.service

Cek lagi statusnya, apakah sudah active running.

Kalau sudah, saatnya kita menambahkan konfigurasi static dns. menggunakan dhcpcd.

Langkah-langkahnya sebagai berikut:

  1. Edit file /etc/dhcpcd.conf.2,3
    $ sudo vim /etc/dhcpcd.conf
    

    Tambahkan pada baris paling bawah.

    static domain_name_servers=127.0.0.1
    

    Save dan exit.

Kemudian restart serivce dari dhcpcd.service.

$ sudo systemctl restart dhcpcd.service

Untuk memastikan nameserver berubah menjadi static, coba restart serivice dari NetworkManager.service terlebih dahulu.

$ sudo systemctl restart NetworkManager.service`

Kemudian coba lakukan pengecekan isi dari file /etc/resolv.conf.

$ cat /etc/resolv.conf

Apakah nameserver sudah berubah menjadi nameserver 127.0.0.1 ?

Kalau belum, tunggu sekitar 2-3 menit. Sambil melakukan restart terhadap kedua service di atas.

Berikut adalah tampilan file /etc/resolv.conf.

Sebelum restart.

# Generated by NetworkManager
nameserver 118.98.44.100
nameserver 118.98.44.10
nameserver fe80::1%wls3

Sesudah restart.

# Generated by resolvconf
nameserver 127.0.0.1
[ i ] Informasi

Untuk merestart jaringan, kita tidak perlu restart system. Cukup merestart service-nya saja, seperti contoh di atas.

Namun apabila merasa frustasi, ya boleh lah restart. Hihihi

Hasilnya

Apabila kedua langkah di atas sudah kita lakukan, sekarang tinggal melakukan pengujian.

$ ping -c 5 reddit.com

Apabila berhasil.

PING reddit.com (151.101.1.140) 56(84) bytes of data.
64 bytes from 151.101.1.140 (151.101.1.140): icmp_seq=1 ttl=55 time=32.3 ms
64 bytes from 151.101.1.140 (151.101.1.140): icmp_seq=2 ttl=55 time=32.6 ms
64 bytes from 151.101.1.140 (151.101.1.140): icmp_seq=3 ttl=55 time=32.7 ms
64 bytes from 151.101.1.140 (151.101.1.140): icmp_seq=4 ttl=55 time=32.10 ms
64 bytes from 151.101.1.140 (151.101.1.140): icmp_seq=5 ttl=55 time=32.4 ms

--- reddit.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 10ms
rtt min/avg/max/mdev = 32.330/32.623/32.977/0.278 ms

Apabila gagal.

PING internetpositif.uzone.id (36.86.63.185) 56(84) bytes of data.
64 bytes from 36.86.63.185: icmp_seq=1 ttl=245 time=30.2 ms
64 bytes from 36.86.63.185: icmp_seq=2 ttl=245 time=30.8 ms
64 bytes from 36.86.63.185: icmp_seq=3 ttl=245 time=31.6 ms
64 bytes from 36.86.63.185: icmp_seq=4 ttl=245 time=29.6 ms
64 bytes from 36.86.63.185: icmp_seq=5 ttl=245 time=29.7 ms

--- internetpositif.uzone.id ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 9ms
rtt min/avg/max/mdev = 29.596/30.352/31.551/0.755 ms

Sekarang buka browser favorite kalian, dan buka halaman www.reddit.com.

Kesimpulan

Yang dibutuhkan untuk dapat mennggunakan dnscrypt-proxy adalah :

  1. Service dnscrypt-proxy yang sudah running
  2. nameserver 127.0.0.1 pada /etc/resolv.conf

Referensi

  1. wiki.archlinux.org/index.php/DNSCrypt
    Diakses tanggal: 2018/09/22

  2. wiki.archlinux.org/index.php/Domain_name_resolution#Use_resolv.conf.head
    Diakses tanggal: 2018/09/22

  3. superuser.com/questions/442096/change-default-dns-server-in-arch-linux
    Diakses tanggal: 2018/09/22

  4. github.com/jedisct1/dnscrypt-proxy
    Diakses tanggal: 2018/09/22

Penulis

logo_author

BanditHijo adalah nama pena saya – meminjam istilah keren dari para penulis. Teman-teman menyebut saya sebagai GNU/Linux Enthusiast. Saya memang gemar mengutak-atik sistem operasi ini. Bukan karena hobi tapi karena saya perlu untuk menggunakannya. Hehe.

- Rizqi Nur Assyaufi