Bagaimana cara membuat protokol foo hostname-aware?

10

Ini adalah pertanyaan kanonik tentang kesadaran hostname dan proksi.

Saya tahu bahwa beberapa protokol sadar hostname; itu adalah, ketika saya terhubung ke server HTTP www.example.comitu tahu saya ingin www.example.comlayanan HTTP, bukan www.example.net, meskipun mereka berada di alamat IP yang sama. Bagaimana saya bisa melakukan ini untuk protokol foo ?

(Catatan sementara: pertanyaan ini muncul sesuai dengan diskusi meta ini .)

MadHatter
sumber

Jawaban:

14

Untuk memahami apa yang terjadi, Anda perlu tahu sedikit tentang DNS.

Ketika klien ingin terhubung ke layanan pada host yang diberikan, ia mencari hostname melalui infrastruktur DNS lokalnya, dan menerima alamat IP sebagai tanggapan. Ini kemudian menghubungkan ke alamat IP itu, dan meminta layanan dengan cara yang ditentukan oleh procotol yang dibangun untuk diimplementasikan.

Dalam beberapa kasus, bagian dari procotol itu melibatkan pengiriman kedua nama host yang semula dicari, yang dalam hal ini dikirim ke server daripada infrastruktur DNS. Dalam hal HTTP, ini ditambahkan sebagai bagian dari HTTP / 1.1, dalam RFC 2616 ; dalam hal HTTPS, ini diterapkan sebagai Indikasi Nama Server (SNI) dalam RFC 4366 ; dan dalam hal FTP, ini ditambahkan oleh HOSTperintah, dalam RFC 7151 (tetapi lihat peringatan selanjutnya). Jika pengiriman kedua tidak terjadi, server tidak memiliki cara untuk mengetahui nama host yang diumpankan klien ke DNS lokal untuk mendapatkan alamat IP server.

Perhatikan bahwa dalam semua kasus perubahan pada protokol diperlukan untuk melakukan pengiriman kedua ini, dan dengan demikian membuat interaksi client-server-hostname-aware. Setelah protokol diubah, kode server harus diperbarui untuk mengimplementasikannya. Dan akhirnya, klien harus diperbarui untuk membicarakan protokol baru ke server. Langkah terakhir itu bisa sangat lambat; dalam hal SNI, Internet Explorer pada Windows XP tidak pernah menerapkannya, sehingga protokol tidak dapat diandalkan ketika masih ada sejumlah besar pengguna IE-on-XP di sekitar, dan perlu sekitar sepuluh tahun untuk cukup dari mereka untuk mati dan / atau mendapatkan peningkatan mutu yang dapat diterapkan oleh SNI.

Jadi itulah yang diperlukan untuk membuat protokol hostname-aware non-hostname-aware. Ini bukan pengaturan bendera sederhana atau perubahan konfigurasi. Kami memiliki beberapa jawaban spesifik protokol yang berhubungan dengan keadaan hubungan, dan kemungkinan langkah-langkah mitigasi, untuk protokol itu khususnya: untuk SSH (dan dengan demikian juga SFTP) dan untuk FTP (yang menunjukkan bahwa HOSTdukungan untuk FTP saat ini sedang dalam tambal sulam). -support fase, dan belum bisa diandalkan).

Jawaban singkatnya adalah jika protokol Anda saat ini tidak menerapkan kesadaran hostname, dengan dukungan yang baik di antara klien dan server, lupakan saja: itu bukan sesuatu yang dapat Anda lakukan.

MadHatter
sumber
6
Saya pikir saya akan marah jawaban ini dengan fakta bahwa beberapa protokol adalah untuk produk baru atau cukup lokal sehingga satu perusahaan akan mengendalikan semua contoh server dan klien. Dalam kasus tersebut, cukup menambahkan perintah atau paket hostname sangat sederhana dan sangat mudah diimplementasikan. Anda menggambarkan kesulitan dalam menambahkan fitur baru ke protokol yang ada yang sudah digunakan secara luas oleh banyak vendor.
JPhi1618
4
@ JPhi1618 Saya mendengar Anda, tetapi menurut saya "protokol" apa pun yang dibuat dan diimplementasikan oleh satu perusahaan, dan tidak tertanam dalam RFC, sama sekali bukan protokol; itu hanya keputusan rekayasa internal, dan saya tidak tertarik pada produk yang memiliki hak milik seperti itu. Seperti yang Anda tunjukkan, vendor dapat langsung mengubah hal-hal untuk mengimplementasikan kesadaran hostname jika itu yang dipilih; tapi karena tidak ada lain selain vendor bisa melakukan itu, saya tidak melihat bagaimana hal itu banyak menarik bagi OP.
MadHatter
Saya pikir pertanyaan yang relevan adalah apakah Anda merancang protokol baru, atau bertanya bagaimana cara mengubah protokol yang ada.
Barmar
Protokol berpemilik masih merupakan protokol.
Barmar
@Barmar itu mungkin bukan diskusi yang bagus untuk masuk ke sini. Pertanyaan ini adalah tentang mengubah protokol yang ada, dan seperti yang saya sebutkan sebelumnya, jika keputusan / protokol rekayasa hak milik bazhanya dapat diubah oleh pemiliknya dan satu-satunya implementor, maka satu-satunya cara untuk membuatnya sadar akan nama host adalah dengan menarik pemilik. Itu tidak membuat jawaban SF yang menarik, dan lebih lagi tidak (menurut saya) pada topik. " Bagaimana cara mendesain protokol yang menyadari nama host " adalah pertanyaan yang sama sekali berbeda, dan bukan pertanyaan yang ingin saya tanyakan.
MadHatter