Peningkatan WireGuard di Fly.io
- Fly.io mengubah kontainer menjadi VM lalu menjalankannya di hardware di seluruh dunia dengan memanfaatkan kekuatan Firecracker.
- Mereka banyak menggunakan WireGuard, dan kini ini menjadi bagian dari API pelanggan.
- Setiap kali menjalankan CLI
flyctl, sistem membuat stack TCP/IP dan berkomunikasi langsung dengan Fly Machines menggunakan alamat IPv6 yang unik.
- Pendekatan ini memiliki kelebihan dan kekurangan, dan ada beberapa peningkatan yang telah dilakukan.
Kondisi sebelumnya
- Server "gateway" yang tersebar di seluruh dunia menerima koneksi WireGuard dan bertugas menghubungkannya ke jaringan privat yang sesuai.
- Setiap kali
flyctl dijalankan, sistem membuat atau menyambungkan proses agen di background.
- Agen membuat konfigurasi peer WireGuard baru melalui GraphQL API.
- API mengirim konfigurasi peer ke gateway yang sesuai melalui sistem messaging NATS.
- Di gateway, layanan
wggwd menerima konfigurasi tersebut, menyimpannya ke database SQLite, lalu menambahkannya ke kernel.
- API merespons permintaan GraphQL dengan mengirimkan konfigurasi, lalu
flyctl terhubung ke peer WireGuard.
- NATS memang cepat, tetapi tidak menjamin pengiriman dan tidak membersihkan peer lama yang tertinggal di gateway.
Cara yang lebih baik
- Penyimpanan peer WireGuard tidak memerlukan database yang rumit.
- Sistem diubah agar gateway mengambil konfigurasi dari API saat dibutuhkan.
- Peer hanya ditambahkan ke kernel saat klien ingin terhubung, dan bisa dihapus saat tidak lagi diperlukan.
Memungkinkan peer WireGuard JIT
- Antarmuka konfigurasi WireGuard di kernel Linux menggunakan Netlink.
- Paket permintaan koneksi WireGuard dapat diidentifikasi dan dicegat dengan filter BPF dan packet socket.
- WireGuard tidak memiliki konsep "klien" dan "server"; ini adalah protokol point-to-point.
- Saat
flyctl mengirim paket UDP ke gateway, itu adalah handshake initiation.
- Koneksi masuk dapat ditangkap dengan menggunakan filter BPF.
- Karena berbasis kerangka protokol Noise, permintaan harus didekripsi untuk diidentifikasi.
- Dengan membuat event feed, sistem bisa mendapatkan kunci publik dari semua pengguna yang mencoba terhubung ke gateway.
- Setiap kali terlihat peer baru, informasi peer tersebut diambil dan dipasang melalui permintaan ke HTTP API internal.
Meluncurkan app dalam hitungan menit
- Di Fly.io, app dapat dideploy dengan cepat dan langsung mendapatkan peer WireGuard JIT sendiri.
Melihat grafik
- Setelah sistem ini dijalankan selama beberapa minggu, jumlah peer WireGuard lama yang tertinggal di gateway berkurang drastis.
- Gateway mempertahankan state yang lebih sedikit dan konfigurasi peer menjadi lebih cepat.
- Mereka membagikan hasil yang berhasil pada hari perpindahan melalui chart Grafana.
Opini GN⁺
- Peningkatan WireGuard di Fly.io adalah contoh bagus bagaimana performa dan stabilitas jaringan bisa ditingkatkan secara signifikan.
- Pendekatan ini dapat membantu memperkuat pengelolaan trafik jaringan dan keamanan, terutama pada layanan berbasis cloud.
- Proyek lain dengan fungsi serupa antara lain Tailscale dan ZeroTier, yang juga menawarkan alternatif VPN bagi pengguna pribadi maupun perusahaan.
- Saat mengadopsi WireGuard, perlu mempertimbangkan konfigurasi jaringan, kebijakan keamanan, kompatibilitas, dan hal-hal serupa.
- Keuntungan dari pilihan teknologi ini adalah performa yang cepat dan konfigurasi yang sederhana, tetapi integrasi dengan infrastruktur yang sudah ada atau aspek pengelolaannya bisa menjadi tantangan.
1 komentar
Komentar Hacker News