Saya cukup baru dalam administrasi jaringan dan karena itu saya senang telah berhasil membuat catatan DNS.
Sekarang saya agak bingung, karena saya ingin memiliki URL ini:
http://www.example.org:8080/fetch/characters/
benar-benar dijangkau oleh ini
http://www.example.org/fetch/characters/
Jadi pengguna dapat mencapai layanan pada port 8080 tanpa harus mengatur port secara eksplisit.
Bagaimana saya bisa melakukan ini? Apakah saya memerlukan beberapa aplikasi khusus di server saya? Atau hal-hal pengalihan yang diterapkan untuk permintaan?
networking
domain-name-system
http
request
xetra11
sumber
sumber
Jawaban:
Catatan DNS tidak dapat mengarah ke port (dengan beberapa pengecualian kasus khusus yang tidak berlaku di sini).
Jika Anda memiliki layanan web mendengarkan pada port 8080 dan ingin mencapainya tanpa menentukan port ini, Anda memiliki 3 opsi:
:8080
bagian di bilah alamat mereka setelah pengalihan.sumber
Server web mendengarkan port TCP 80 secara default. Jika Anda tidak ingin mengetikkan nomor port di URL secara eksplisit, Anda memiliki beberapa opsi:
Anda dapat mengkonfigurasi ulang server web Anda untuk menggunakan port 80, bukan port 8080. Ini disarankan untuk server web seperti nginx atau Apache tetapi tidak untuk server web seperti Gunicorn. Opsi ini juga tidak selalu memungkinkan karena port itu mungkin sudah digunakan oleh server web yang berbeda.
Juga, ketika server Anda berada di belakang gateway NAT, itu tidak memiliki alamat IP publik dan kombinasi dari alamat NAT publik dan port 80 mungkin sudah diteruskan ke server web yang berbeda.
Anda dapat meletakkan server proxy terbalik di depan server web Anda yang menerima lalu lintas pada port TCP 80 dan mengirimkannya ke server web Anda pada port TCP 8080. Ini juga akan berfungsi jika port 80 sudah digunakan. Sederhananya server proxy terbalik di depan kedua server web, membuat keduanya mendengarkan port selain 80.
Untuk memberikan bantuan yang lebih baik dan lebih terperinci tentang opsi mana yang terbaik dan batasan dll, kami perlu tahu lebih banyak tentang pengaturan Anda. Semoga penjelasan ini sudah mengklarifikasi hal-hal sedikit.
sumber
Jawaban sederhana, terkait dengan tingkat pertanyaan
Mengabaikan penggunaan DNS yang eksotis, dan juga membalikkan pencarian DNS (tidak relevan dengan pertanyaan), hampir semua penggunaan DNS adalah dalam bentuk:
Setelah klien menghubungi server, server itu sendiri akan mengambil alih dan sistem DNS keluar dari gambar.
Artinya, sistem DNS tidak perlu menyediakan informasi port, dan hampir tidak pernah melakukannya. Jadi meskipun tujuan dari pertanyaan itu valid, dan sering dilakukan, sebenarnya bukan sistem DNS yang melakukannya. Itu sebabnya Anda tidak bisa menyelesaikannya :)
Idenya adalah bahwa sekali klien Anda dapat menemukan mesin atau server tertentu yang ia cari, tergantung pada mesin itu untuk mendengarkan port apa pun yang dipilihnya, dan menerima / menolak / merespons protokol apa pun pada port apa pun yang dikonfigurasi.
Misalnya, layanan web HTTP biasanya disediakan pada port 80. Itu berarti bahwa setelah klien mengetahui IP mesin, dapat berasumsi bahwa mengirim pesan ke port 80 akan menghasilkan pesan yang dibaca / direspon oleh layanan web mesin tersebut. Tetapi tidak harus seperti itu. Jika server dikonfigurasi untuk mendengarkan permintaan masuk web pada port 9000, setiap klien yang dapat mencapai port 9000 akan dapat mencapai layanan webnya. Jika server berada di belakang proxy / NAT / router yang mengalihkan port 10000 ke port 9000, dan klien mengirimkan permintaan web pada port 10000, server akan menerimanya pada port 9000 dan merespons juga.
Redirect / pemetaan dalam server web
Anda bertanya tentang pemetaan redirect atau menulis ulang dalam komentar. Ini adalah fungsi yang dapat dilakukan server web. Pada dasarnya, Anda dapat mengonfigurasi server web (atau sebagian besar / banyak server web) untuk mengelola cara menangani URL yang diterimanya dalam permintaan. Jadi itu dapat secara internal memodifikasi URL pada tanda terima untuk membuat URL yang berbeda ditangani dengan cara yang sama, atau memperbaiki kesalahan ketik umum (pemetaan), atau itu benar-benar dapat merespons untuk memberi tahu klien sendiri untuk meminta kedua kalinya, menggunakan beberapa URL yang berbeda, pengganti, (redirect).
Ini memiliki kegunaan mereka, dan pada prinsipnya dapat menangani kasus penggunaan Anda, tetapi mereka tidak terdengar seperti solusi "tepat" untuk Anda, karena alasan ini:
Namun jika Anda ingin pengalihan "cerdas", di mana hanya kueri tertentu yang dialihkan ke 8080, ini mungkin cara yang harus ditempuh, karena pengalihan dapat menyertakan logika untuk memutuskan URL mana yang harus diarahkan, sedangkan pemetaan pelabuhan (di bawah) akan memetakan semuanya .
Cara melakukannya dengan benar
Jawaban untuk pertanyaan Anda adalah, Anda ingin server web untuk menanggapi permintaan web yang dikirim klien ke port default (80/443), tetapi yang sebenarnya diterima server pada port 8080.
Itu berarti, seperti yang Anda lihat, Anda memerlukan sesuatu di antaranya memetakan port antara klien dan server . Dengan begitu, klien mengirim pada port 80 (port default yang digunakan oleh browser web), tetapi sebenarnya diterima pada port 8080 oleh server web. Tentu saja Anda harus mengkonfigurasi server web untuk mendengarkan pada port 8080, karena ini bukan standar, tetapi mudah dan server web mana pun harus dapat menentukan port pendengarnya.
Cara paling umum untuk melakukan ini adalah di dalam router / firewall, melalui pemetaan port.
Secara sederhana, untuk melakukan ini, router diberi aturan, bahwa apa pun yang diterima yang memiliki IP tujuan dan port tujuan = 80, harus diteruskan ke LAN dengan port tujuan diubah menjadi 8080 sebagai gantinya. Baik server web maupun klien tidak akan menyadari perubahan (100% ditangani oleh router), sehingga 100% transparan untuk keduanya. Klien tidak akan memiliki ": 8080" di URL-nya dan tidak perlu mengarahkan ulang apa pun, karena ia menanyakan port 80, dan server web dapat mengabaikan port 80 dan hanya mendengarkan 8080, karena ia tidak pernah mendapatkan permintaan pada port 80 .
Jika Anda menginginkan cara yang sederhana dan langsung, mirip dengan apa yang akan dilakukan "DNS untuk port", ini mungkin setara dengan apa yang Anda minta dalam pertanyaan Anda.
sumber
Kamu tidak bisa
Maksud saya, secara teknis ini bisa dilakukan. DNS terkenal karena bisa mengirimkan nama domain dan mendapatkan alamat IP. Namun, saya telah mempelajari protokol DNS sedikit, dan benar-benar DNS secara teknis mampu bertindak sebagai mekanisme permintaan / respons untuk lebih dari sekedar nama domain dan alamat IP. Salah satu pendekatan yang mungkin adalah dengan menggunakan catatan sumber daya DNS yang bukan tipe A atau AAAA yang khas, seperti catatan TXT (yang secara teknis hanya teks, dan dapat digunakan untuk apa saja) atau mungkin catatan SRV, atau lainnya jenis catatan sumber daya yang lebih baru yang Anda pilih.
Jika Anda membuat perangkat lunak Anda sendiri (baik klien maupun server), mungkin tidak ada alasan teknis untuk tidak melakukan hal seperti itu, kecuali tahu bahwa beberapa orang menggunakan perusahaan hosting DNS dan membatasi mereka untuk hanya menggunakan tipe catatan tertentu. Sangat disayangkan, karena orang yang menjalankan server DNS mereka sendiri tentu saja memiliki fleksibilitas yang cukup untuk hal-hal seperti itu.
Namun, jika Anda tidak membuat protokol jaringan sendiri (misalnya, jika Anda ingin menggunakan HTTP), Anda kemungkinan akan menghadapi masalah besar, yaitu perangkat lunak yang ada tidak akan menggunakan solusi khusus Anda, kecuali jika Anda menggunakan solusi yang sudah ada. Itu akan menjadi penghalang. Bukan ketidakmungkinan teknis. Hambatan sosial: Dapatkah Anda meyakinkan semua orang untuk melakukan sesuatu dengan cara Anda?
Sekarang saya telah menjelaskan mengapa Anda tidak dapat melakukan itu, saya mungkin punya solusi untuk apa yang Anda cari. Pertama, mari kita lihat mengapa kita memiliki alamat dan port IP.
Alamat dan port IP melakukan hal yang berbeda. Tujuan dari alamat IP adalah untuk memenuhi tujuan Layers 2 dan 3 dari OSI Model komunikasi jaringan. Tujuan dari alamat IP adalah untuk mengidentifikasi komputer lalu lintas mana yang seharusnya pergi. Fakta bahwa kita mungkin menggunakan nomor port untuk tujuan itu, dengan meminta firewall / router menyelidiki nomor port untuk melakukan NAPT (Network Address Port-based Translation, juga kadang-kadang disebut PNAT atau hanya NAT), adalah teknik baru yang memanfaatkan sumber daya (informasi), tetapi bukan bagian dari desain aslinya. Jika kita menjauh dari "penyalahgunaan" nomor port ini sebentar, dan mempertimbangkan desain aslinya, kita mungkin dapat menemukan solusi yang lebih mudah. Dengan desain Internet, mesin dimaksudkan untuk ditemukan menggunakan alamat IP.
Inti dari "nomor port", yang digunakan oleh TCP dan UDP dan beberapa alternatif, adalah untuk dapat melacak setiap percakapan. Ini membantu mengatur komunikasi dengan menjalankan program. Jadi, jika sebuah mesin menerima lalu lintas pada port TCP 80, mesin akan tahu bahwa lalu lintas jaringan dimaksudkan untuk digunakan oleh program yang merupakan server web. Jika browser web mengunduh banyak gambar secara bersamaan, kombinasi angka "port sumber" dan nomor "port tujuan" dapat melacak data mana yang dimaksudkan untuk grafik mana, sehingga percakapan simultan itu dapat terjadi tanpa mencampurkan data.
Sekarang, tebakan saya adalah Anda memiliki akses ke server DNS, dan sepertinya Anda berpikir bahwa administrasi DNS akan lebih nyaman untuk dapat menangani beberapa lalu lintas perutean sedikit lebih. Tetapi DNS tampaknya tidak dapat membantu Anda mendapatkan nomor port. Apa yang bisa kau lakukan?
Pertimbangkan IPv6. IPv6 memungkinkan Anda memiliki lebih banyak alamat IP. Selain itu, tidak seperti beberapa implementasi IPv4, perangkat yang menggunakan IPv6 biasanya dapat dengan mudah mendukung beberapa alamat IPv6 yang aktif secara bersamaan. Jadi, jika Anda ingin memiliki tiga protokol jaringan yang berbeda di satu komputer, Anda bisa menetapkan setidaknya tiga alamat IPv6 yang berbeda untuk komputer yang sama. Dan kemudian Anda bisa melakukan apa pun perutean yang Anda sukai dengan alamat IPv6 tersebut.
Kemudian, Anda dapat menggunakan tipe catatan sumber daya AAAA untuk menetapkan nama ke alamat IPv6 itu, yang desain jaringan Anda dapat diperlakukan sebagai didedikasikan secara efektif untuk layanan khusus pada komputer tertentu yang Anda inginkan.
Wallah, Anda sekarang memiliki DNS yang secara efektif menunjuk ke bagian dari perangkat lunak, dan mencapai tujuan itu tanpa perlu mencoba mengandalkan pembuatan titik DNS ke nomor port, yang tidak berfungsi dengan baik hanya karena fungsi itu kebetulan tidak umum didukung.
Kemungkinan keberatan:
Dan jika Anda merasa terjebak dengan IPv4 dan berpikir bahwa IPv6 entah bagaimana tidak didukung, saya akan mendorong Anda untuk mencoba mengatasi masalah itu. Masalah itu mungkin akan lebih mudah untuk diperbaiki (mungkin menggunakan semacam tunneling), dan mungkin akan berakhir menjadi perbaikan yang lebih bermanfaat setelah Anda menerapkannya.
sumber