2 poin oleh GN⁺ 2024-07-02 | 1 komentar | Bagikan ke WhatsApp
  • Doggo adalah klien baris perintah yang menampilkan hasil kueri DNS dalam warna berbeda dan format tabel, dengan tujuan menghasilkan output yang mudah dibaca manusia di terminal
  • Untuk lingkungan otomatisasi, output JSON dapat digunakan, dan pengukuran waktu respons serta mode debug juga berguna untuk analisis masalah
  • Berbagai protokol transport seperti DNS over HTTPS, TLS, QUIC, TCP, UDP, dan DNSCrypt dapat ditangani dalam satu alat
  • Mendukung fitur EDNS seperti EDNS Client Subnet, NSID, DNS Cookies, EDNS Padding, Extended DNS Errors, serta pemrosesan glue record
  • Berjalan di Linux, macOS, Windows, FreeBSD, dan NetBSD, serta menyediakan antarmuka web dan pelengkapan shell sehingga dapat digunakan baik dari CLI lokal maupun browser

Kueri DNS yang mudah dibaca di terminal

  • Doggo memosisikan diri sebagai klien DNS baris perintah untuk manusia
  • Output bawaan menggunakan warna berbeda dan format berbasis tabel, sehingga respons DNS mudah dipindai dengan cepat
  • Jika diperlukan untuk scripting atau parsing, output JSON dapat digunakan
  • Menyediakan mode debug dan pengukuran waktu respons, sehingga bukan hanya hasil kueri tetapi juga proses kerjanya dapat diperiksa

Protokol dan data DNS yang didukung

  • Mendukung berbagai protokol transport DNS
    • DNS over HTTPS
    • DNS over TLS
    • DNS over QUIC
    • DNS over TCP
    • DNS over UDP
    • DNSCrypt
  • Juga mencakup banyak fitur terkait EDNS
    • Respons sadar lokasi melalui EDNS Client Subnet(ECS)
    • Name Server Identifier(NSID)
    • DNS Cookies
    • EDNS Padding
    • Extended DNS Errors(EDE)
  • Dapat memproses glue record dan data DNS tambahan pada additional section
  • Internationalized Domain Names(IDN) mendukung konversi punycode otomatis
  • Juga dapat menangani reverse DNS lookup serta berbagai flag DNS seperti AA, AD, CD, dan DO

Konfigurasi, resolver, dan lingkungan eksekusi

  • Pengaturan ndots dan search dapat digunakan dari resolv.conf atau argumen baris perintah
  • Beberapa resolver dapat ditentukan, dan strategi kueri juga dapat disesuaikan pengguna
  • Mendukung IPv4 dan IPv6
  • Menyediakan antarmuka web di doggo.mrkaran.dev
  • Menyediakan pelengkapan shell untuk zsh dan fish
  • Platform yang didukung adalah Linux, macOS, Windows, FreeBSD, dan NetBSD

1 komentar

 
GN⁺ 2024-07-02
Komentar Hacker News
  • Terlihat sangat keren. Bisa berbagi lebih banyak tentang alasan membuatnya, keputusan desain, dan konteks di baliknya?

    • Saya membuatnya sebagai proyek sampingan untuk belajar sekaligus hobi. Pada 2021, saat banyak menangani klaster K8s, saya mengetahui ndots, lalu ingin membuat klien DNS yang mudah digunakan dan tidak mengalami perilaku tak terduga karena lingkungan host
      Saya membuatnya dengan Go yang paling sering saya pakai, dan karena tidak ingin menambah dependensi eksternal jika tidak benar-benar perlu, saya tidak memakai framework CLI. Saya terutama suka bagian saat membuat utilitas kecil help.go untuk merender teks bantuan dengan warna dan format
      Seiring waktu, ada juga kontribusi eksternal yang bagus, terutama @jedisct1 yang menambahkan dukungan DNSCrypt, dan itu sangat berarti. Rilis v1.0 terus tertunda lebih dari setahun karena hidup, proyek lain, dan sedikit kebiasaan menunda, lalu baru minggu lalu saya menetapkan tenggat dan memaksanya selesai
      Tulisan terkait ndots: https://mrkaran.dev/posts/ndots-kubernetes/
  • Pemilihan namanya bagus sekali. Anak anjing (doggo) suka menggali (dig)

    • Baru tahu hari ini ternyata ada juga dog. Mungkin itu juga salah ketik dig yang cukup umum
  • Senang juga ada image Docker. Akan bagus jika dokumentasinya menambahkan opsi --rm untuk pembersihan setelah dijalankan dan -t untuk warna
    docker run --rm -it ghcr.io/mr-karan/doggo:latest mrkaran.dev MX

    • Penasaran, apakah benar ada alasan yang sepadan untuk bersusah payah membuat kontainer Docker untuk utilitas DNS CLI yang tanpa dependensi?
  • Mungkin ini pertanyaan agak bodoh, tapi kenapa output-nya semuanya muncul dua kali?
    Jika menjalankan doggo google.com, A record yang sama muncul masing-masing dari 127.0.2.2:53 dan 127.0.2.3:53, dan doggo news.ycombinator.com juga menampilkan hasil dari dua nameserver

    • Sepertinya output ditampilkan sekali untuk setiap nameserver yang dikonfigurasi. Meski jarang, keduanya memang bisa saja memberi jawaban berbeda
    • Saya mencobanya di server AdGuard DNS saya dan hanya muncul satu entri. Sepertinya ini terkait konfigurasi nameserver
      Bisa direproduksi dengan menentukan nameserver kustom seperti @1.1.1.1? doggo google.com --short hanya mengembalikan satu 142.250.185.238
  • Akan sangat bagus jika alat ini mendukung jenis kueri yang setara dengan ANY

  • Proyek yang keren. Saya mengetahuinya tahun lalu saat mengembangkan x-cmd pkg, dan saat itu versi terbarunya 0.5.7, tetapi sekarang sudah 1.0.2 jadi sepertinya perlu pembaruan versi
    Ada juga video demo: https://x-cmd.com/pkg/doggo

  • Mengingatkan pada https://github.com/ogham/dog

    • Menurut README GitHub doggo, proyek ini sepenuhnya terinspirasi oleh dog yang ditulis dengan Rust, dan karena dia tidak tahu Rust tetapi ingin menambahkan fitur, ini dijadikan kesempatan bagus untuk menulis klien DNS dari nol dengan Go
      Jadi namanya juga menjadi dog + go => doggo
    • Sayangnya, dog tampaknya tidak lagi dipelihara
  • Apakah ada alasan mengapa banyak alat seperti ini ditulis dengan Go? Apakah karena standard library-nya, atau cuma kebetulan?

    • Go pada dasarnya biasanya menghasilkan binary hasil kompilasi statis. Tidak ada runtime, interpreter, atau dependensi
      Sulit mengatakan hal yang sama untuk Python, Java, JavaScript, C#, dan lainnya
    • Mungkin juga karena alasan budaya. Go sangat banyak terekspos di ranah DevOps/infrastruktur cloud
      Banyak alat seperti k8s atau Terraform beserta provider-nya ditulis dengan Go, dan untuk membuat alat internal, popularitasnya cukup bersaing dengan Python
    • Dalam kasus ini, sepertinya pembuatnya memang sudah mengenal Go sehingga memakainya
      Menurut README, proyek ini terinspirasi dari dog yang ditulis dengan Rust, dan karena dia tidak tahu Rust tetapi ingin menambahkan fitur, dia akhirnya menulis sendiri klien DNS dengan Go. Karena itu pula namanya dog + go => doggo
      https://github.com/ogham/dog
    • Go membuat pekerjaan selesai, dan hasilnya cenderung bertahan lama ke depan
    • Jelas juga karena namanya bisa dibuat jadi permainan kata
  • Apakah ini terkait dengan Dog? Fungsinya terlihat hampir sama
    Keduanya mengharuskan jenis kueri tertentu untuk dijalankan (A, AAAA, dll.), jadi kenapa tidak menjadikan kueri semua record sebagai default? Setidaknya saat mengueri satu domain, sepertinya itu masuk akal
    https://github.com/mr-karan/doggo

    • Yang dimaksud semua record di sini tepatnya apa? dig secara default hanya menampilkan A record, dan saya juga mempertahankan perilaku yang sama
      Apakah maksudnya semua jenis record yang mungkin, atau beberapa yang umum seperti MX, AAAA, A, CNAME, TXT?
  • Selamat atas rilis 1.0. doggo sudah menjadi alat DNS utama saya selama beberapa waktu, dan saya sangat menyukainya