1. Pendahuluan
Dalam aplikasi mobile atau lintas platform, HTTPDNS sering digunakan untuk menghindari masalah seperti pembajakan DNS lokal dan polusi cache. Namun, tidak semua pustaka jaringan menyediakan antarmuka DNS Hook untuk integrasi. Koneksi IP langsung adalah solusi alternatif untuk skenario di mana Anda hanya dapat memodifikasi detail permintaan. Pertama, ambil hasil resolusi dari HTTPDNS. Kemudian, tulis ulang URL untuk menggunakan alamat IP langsung. Pastikan jabat tangan TLS dan perutean tetap menggunakan nama domain asli.
Sebagai contoh, https://www.example.com menjadi https://1.2.3.4, tetapi header permintaan tetap mempertahankan Host: www.example.com.
Topik ini berfokus pada skenario tipikal yang memerlukan koneksi IP langsung. Ini menjelaskan kondisi, masalah umum, dan solusi untuk membantu Anda memahami prinsip dasar pendekatan ini.
2. Kapan menggunakan koneksi IP langsung
Tentukan tingkat kontrol yang Anda miliki atas pustaka jaringan Anda untuk memutuskan apakah akan mengaktifkan koneksi IP langsung:
Memiliki DNS Hook atau Antarmuka Pemetaan Host-IP: Pustaka seperti OkHttp, libcurl, dan HarmonyOS Network Kit memungkinkan Anda menyuntikkan hasil HTTPDNS langsung ke antarmuka DNS. Anda kemudian dapat membuat permintaan menggunakan nama domain. Metode ini kompatibel dengan HTTPS, Server Name Indication (SNI), cookie, dan penggunaan kembali koneksi tanpa perubahan tambahan.
Tidak Memiliki DNS Hook, Tetapi Memiliki Kontrol API Permintaan: Jika pustaka jaringan tidak memungkinkan Anda mengganti DNS tetapi memungkinkan Anda menulis ulang detail seperti URL, header permintaan, kebijakan sertifikat, atau pengalihan, Anda dapat menggunakan koneksi IP langsung. Prosesnya melibatkan pengambilan alamat IP dari HTTPDNS, menulis ulang URL dengan alamat IP, dan menambahkan penanganan yang diperlukan untuk Host, sertifikat, proxy, dan cookie.
Sepenuhnya Tertutup: Jika pustaka jaringan tidak memiliki DNS Hook dan tidak ada titik kontrol API, seperti beberapa kernel WebView, koneksi IP langsung tidak memungkinkan. Sebaliknya, pertimbangkan untuk menggunakan SDK, DNS over HTTPS (DoH), proxy lokal, atau fitur spesifik vendor.
Singkatnya, untuk pustaka jaringan "semi-terbuka" yang tidak mendukung DNS Hook, Anda dapat menggunakan koneksi IP langsung untuk berintegrasi dengan HTTPDNS.
Cara H5 Berintegrasi dengan HTTPDNS: Saat JavaScript berjalan di browser, ia mengikuti Fetch Standard. Standar tersebut menetapkan bahwa Host adalah nama header terlarang. Oleh karena itu, untuk permintaan yang dibuat melalui API seperti XMLHttpRequest dan fetch(), skrip tidak dapat mengubah Host. Ini berarti Anda tidak dapat menggunakan koneksi IP langsung untuk berintegrasi dengan HTTPDNS. Dalam skenario ini, Anda harus mengandalkan lingkungan runtime, seperti WebView, CEF, atau Electron, untuk melakukan penanganan ini di lapisan host. Atau, gunakan proxy lokal atau solusi DoH.
3. Masalah dan solusi
Bagian ini pertama-tama memperkenalkan konsep jaringan terkait interaksi klien-server. Kemudian, menjelaskan masalah yang muncul dari penggunaan koneksi IP langsung dan solusinya.
3.1 Konsep terkait semantik nama domain
Server Name Indication (SNI): SNI adalah ekstensi protokol Transport Layer Security (TLS). Klien memberi tahu server nama domain target selama jabat tangan. Ini memungkinkan server memilih sertifikat dan host virtual yang benar. SNI sangat penting dalam skenario IP bersama atau multitenancy. Misalnya, ketika node CDN melayani beberapa nama domain, SNI memastikan bahwa sertifikat HTTPS yang benar dikembalikan. Ini mengonfirmasi legitimasi dan keamanan koneksi.
Validasi Sertifikat CN/SAN: Selama jabat tangan TLS, klien secara ketat memvalidasi sertifikat HTTPS yang dikembalikan oleh server. Pustaka jaringan biasanya mengekstrak nama domain target dari URL. Ini menggunakan nama domain ini sebagai Common Name (CN) atau Subject Alternative Name (SAN) yang diharapkan. Kemudian, ia mengurai CN/SAN aktual dari sertifikat untuk perbandingan. Jika tidak cocok, koneksi ditolak atau dianggap sebagai koneksi tidak tepercaya dan tidak aman.
Header Host: Sejak HTTP/1.1, header Host adalah bidang wajib. Ini digunakan untuk membedakan situs target ketika beberapa situs di-host pada alamat IP dan port yang sama. Untuk server, ini adalah dasar utama bagi host virtual atau reverse proxy untuk merutekan permintaan dengan akurat. Untuk lapisan tengah, kunci cache, kebijakan otentikasi, dan aturan pembatasan laju sering kali didefinisikan pada level Host. Manajemen cookie sisi klien juga bergantung pada Host untuk isolasi domain. Jika Host dikonfigurasi dengan salah, status logon mungkin ditulis ke domain IP atau gagal digunakan kembali.
3.2 Masalah yang diperkenalkan oleh koneksi IP langsung
Seperti yang ditunjukkan pada gambar berikut, URL permintaan asli klien adalah https://www.example.com. Karena pustaka jaringan tidak menyediakan DNS Hook, Anda harus menulis ulang URL menjadi https://1.2.3.4 untuk menerapkan hasil resolusi DNS dari HTTPDNS. Ketika URL ditulis ulang untuk koneksi IP langsung, masalah berikut terjadi selama interaksi antara klien dan layanan target:

Server Mengembalikan Sertifikat HTTPS Abnormal: Ketika nilai SNI yang diekstraksi oleh pustaka jaringan dari URL berubah dari
www.example.commenjadi1.2.3.4, server target tidak dapat menemukan sertifikat yang cocok. Itu hanya dapat mengembalikan sertifikat HTTPS default, yang menyebabkan jabat tangan gagal.Klien Gagal Validasi Sertifikat HTTPS: Pustaka jaringan mengurai CN/SAN yang diharapkan sebagai
1.2.3.4bukanwww.example.com. Karena CN/SAN dalam sertifikat, sepertiwww.example.comatau*.example.com, tidak cocok dengan alamat IP, validasi TLS gagal dan jabat tangan tidak dapat diselesaikan.Server Tidak Dapat Merutekan ke Layanan yang Dituju: Perangkat lunak server web seperti
Nginx,Apache, danserver weblainnya mendukung host virtual. Fitur ini memungkinkan berbagai situs untuk diterapkan pada server fisik dan port yang sama. Permintaan dirutekan ke situs yang benar berdasarkan headerHost. Saat klien mengekstrak Host yang diharapkan dari URL, Host tersebut berubah dariwww.example.commenjadi1.2.3.4. Hal ini menyebabkan server tidak dapat menemukan layanan yang sesuai dan mengembalikan kode status404.Manajemen Cookie Sisi Klien Gagal: Pustaka jaringan klien biasanya menyimpan
Cookiesberdasarkan headerHost. Ia mengikatCookieke alamat IP spesifik1.2.3.4bukan nama domainwww.example.com. Ini mencegah penggunaan kembaliCookiesdi bawah domain asli. Karena hasil resolusi untuk nama domain yang sama sering beralih ke alamat IP yang berbeda setelah cache kedaluwarsa,Cookieshanya dapat diikat ke alamat IP masing-masing. Ini mengarah pada hilangnya status logon dan ketidakmampuan untuk berbagi sesi. Ini juga dapat menyebabkan kegagalan kebijakan keamanan.Koneksi Klien Tidak Dapat Digunakan Kembali: Pustaka jaringan modern umumnya mendukung penggunaan kembali koneksi HTTP berdasarkan Host untuk mengurangi overhead jabat tangan TCP dan meningkatkan efisiensi respons. Saat Anda beralih ke koneksi IP langsung, granularitas penggunaan kembali berubah dari nama domain
www.example.commenjadi alamat IP1.2.3.4. Koneksi yang ada tidak dapat dibagikan antara alamat IP yang berbeda, yang menciptakan overhead jabat tangan tambahan.
3.3 Solusi untuk masalah koneksi IP langsung
Masalah yang dijelaskan sebelumnya terjadi karena koneksi IP langsung menggunakan alamat IP yang diselesaikan oleh HTTPDNS. Untuk menyelesaikan masalah ini, Anda harus secara manual memulihkan informasi nama domain untuk SNI, validasi sertifikat, dan header Host HTTP. Ini memastikan tumpukan jaringan terus bekerja berdasarkan semantik nama domain.
Secara Manual Atur SNI: Panggil konfigurasi TLS/SNI atau API SocketFactory yang diekspos oleh pustaka jaringan untuk menulis nama domain asli ke dalam ekstensi SNI.
Secara Manual Atur CN/SAN untuk Validasi: Gunakan API validasi sertifikat yang disediakan oleh pustaka jaringan, seperti
HostnameVerifier. Secara eksplisit lewati nama domain asli selama fase validasi TLS untuk memastikan perbandingan CN/SAN benar.Secara Manual Atur Header Host: Gunakan API yang disediakan oleh pustaka jaringan untuk secara eksplisit mengatur
Host: [nama domain asli]. Ini mencegah alamat IP ditulis ke header Host secara default.CatatanProxy HTTP mengikuti absolute-form dari HTTP/1.1 (untuk informasi lebih lanjut, lihat origin-form). Baris permintaan membawa URL lengkap. Ketika URL ditulis ulang menjadi alamat IP, proxy sering kali memperlakukan IP ini sebagai host nyata. Bahkan mungkin membuang header
Hostyang ditetapkan oleh klien saat mengirim permintaan ke server asal. Ini dapat menyebabkan server asal mengembalikan kesalahan 404, kesalahan sertifikat, atau menolak permintaan. Dalam kebanyakan kasus, nonaktifkan HTTPDNS dalam lingkungan proxy.
Pustaka jaringan yang berbeda mengekstrak SNI, domain validasi sertifikat, dan header Host dari URL dengan cara yang berbeda. API untuk memulihkan informasi domain ini juga bervariasi. Anda perlu menentukan solusi koneksi IP langsung berdasarkan pustaka jaringan tertentu. Berikut adalah solusi adaptasi koneksi IP langsung yang disediakan oleh HTTPDNS:
Android
HttpURLConnection: MenggunakanHostnameVerifier/SSLSocketFactoryuntuk menimpa logika verifikasi TLS dan metodesetRequestPropertyuntuk secara eksplisit mengatur headerHost. Untuk informasi lebih lanjut, lihat Praktik Terbaik Menggunakan HTTPDNS dengan HttpURLConnection di Android.iOS
NSURLSession: DiURLSession:task:didReceiveChallenge:, lampirkan nama domain untuk validasi sertifikat, dan atur headerHostsaat membangun permintaan. Untuk informasi lebih lanjut, lihat Menggunakan HTTPDNS dalam Skenario Asli di iOS.Unity
HttpWebRequest: GunakanServicePointManager.ServerCertificateValidationCallbackuntuk menentukan validasi nama domain, dan gunakanrequest.Host = nama domain asliuntuk menulis ulang header Host. Untuk informasi lebih lanjut, lihat Praktik Terbaik Kerangka Kerja Unity.
Untuk solusi stack jaringan lainnya atau koneksi IP langsung, silakan hubungi Dukungan Teknis.
4. Kesimpulan
Koneksi IP langsung adalah solusi perbaikan untuk skenario di mana Anda tidak dapat menyesuaikan DNS. Kuncinya adalah mencatat nama domain asli. Anda juga harus memastikan bahwa semantik nama domain digunakan untuk tiga area utama: validasi sertifikat, SNI, dan header Host. Dengan mengikuti prinsip-prinsip ini, Anda dapat menggunakan hasil resolusi dari HTTPDNS dengan aman bahkan di pustaka jaringan semi-terbuka.