Data DNS saya hanya bisa menunjuk ke alamat IP. Bagaimana cara saya mencapai port?

10

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?

xetra11
sumber
4
Browser secara default tidak mengakses port 8080. Apakah itu kesalahan dalam mengetik pertanyaan?
Džuris
kesalahpahaman tentang apa itu dns dan apa fungsinya.
CONvid19
@ Džuris Na itu adalah kesalahan saya berpikir 8080 adalah default http bukan 80
xetra11

Jawaban:

32

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:

  • Jadikan itu benar-benar mendengarkan pada port 80 (atau 443 dengan https).
  • Konfigurasikan apa pun yang sudah mendengarkan pada port 80 untuk meneruskan permintaan ke layanan Anda pada port 8080 (reverse proxy).
  • Jika Anda bisa hidup dengan pengalihan, gunakan ini alih-alih proxy, tetapi kemudian klien Anda akan melihat :8080bagian di bilah alamat mereka setelah pengalihan.
Sven
sumber
10
Bagaimana jika kita dapat menggunakan catatan SRV dan menentukan port untuk layanan ... Browser yang sangat buruk tidak menggunakan ini.
Jacob Evans
4
@JacobEvans: Catatan SRV untuk semuanya adalah impian lama saya. Itu akan membuat segalanya jauh lebih mudah (kecuali untuk admin firewall yang sekarang bisa memblokir semuanya kecuali 80 dan 443)
Sven
Catatan SRV bekerja sangat baik untuk beberapa layanan, seperti XMPP ... tapi sayangnya tidak terlalu banyak (dan tidak HTTP pasti)
Josh
Opsi 4: port forward dengan firewall
Joel Coel
10

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.

Tommiie
sumber
Saya sudah memiliki info yang saya butuhkan! Saya telah salah mengira port web default 80 untuk 8080
xetra11
7

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:

  1. Klien mengirimkan nama domain (sepenuhnya memenuhi syarat atau sebaliknya) ke server DNS
  2. Server DNS mengembalikan informasi domain dari catatannya. Biasanya informasi kunci yang diminta adalah alamat IP untuk berkomunikasi dengan web / email pada domain itu, atau alamat IP server DNS lain yang lebih mampu memberikan informasi itu.

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:

  1. Saya tidak berpikir pemetaan akan membantu sama sekali . Pemetaan hampir benar-benar internal untuk server web, ia mengatakan "memperlakukan ini URL seolah-olah itu bahwa URL". Misalnya, Anda dapat menggunakan pemetaan URL server web untuk memungkinkan pengguna melakukan kueri forum menggunakan URL yang sangat lama, lama dan saat ini (untuk kenyamanan pengguna) menggunakan " https://example.com/index.php?area-=forum&topic = 2 ", juga" https://example.com/forum.php?topic=2 "dan juga" https://forum.example.com?topic=2", dan hanya menangani ini satu kali, dengan memetakan dua yang pertama ke URL ketiga secara internal, sebagai langkah pertama dalam menangani permintaan. Karena target ini memengaruhi jalur kueri bukan IP / port, pemetaan tidak banyak digunakan untuk manajemen pelabuhan, dan dalam kasus Anda, klien tidak pernah benar-benar menanyakan 8080 sama sekali.
  2. Pengalihan akan berfungsi, tetapi mungkin bukan yang Anda inginkan . Pengalihan di server web bergantung pada server web yang sebenarnya menerima permintaan (karena ini adalah fungsi internal server web). Jadi server web harus mendengarkan pada port 80 pula untuk mendapatkan permintaan asli, agar dapat menanggapi dengan redirect / peta. Itu juga harus mendengarkan pada port 8080. Secara fungsional, itu akan memerlukan aturan redirect untuk harus memberitahu port permintaan klien 80, untuk meminta lagi menggunakan URL ": 8080", yang tidak terdengar seperti apa yang Anda inginkan melakukan. Pengguna juga akan melihat URL baru dengan ": 8080" di dalamnya, sedangkan sepertinya Anda menginginkannya menjadi "transparan" dan tidak ditampilkan.
  3. Pengalihan juga hanya akan berfungsi untuk mengarahkan ulang port standar (80 atau 443) - Anda tidak bisa mengarahkan ulang port 2000 ke 8080, karena klien tidak akan meminta pada 2000 secara default, di tempat pertama, jadi itu tidak akan pernah pergi ke server web, bahkan jika sedang mendengarkan pada tahun 2000. Ini mungkin tidak menjadi masalah bagi Anda.

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.

Stilez
sumber
Saya sering mendengar tentang pemetaan pengalihan atau penulisan ulang? apakah solusi ini juga?
xetra11
Mereka adalah pengubah yang masuk dalam server web, dalam memproses perintah klien. Jadi jika server web mendukungnya, Anda dapat secara otomatis menanggapi pertanyaan apa pun pada port 80, dengan HTTP redirect ke URL yang sama pada port 8080 - lagipula, HTTP / 80 -> HTTPS / 443 redirect adalah hal yang sama. Tetapi harus dapat menerima permintaan terlebih dahulu, sehingga tidak akan berfungsi pada port yang tidak dikonfigurasi untuk didengarkan, dan klien mungkin melihat: 8080 URL yang dimodifikasi. Melakukannya melalui pemetaan port membuatnya 100% tidak terlihat oleh klien, karena mereka hanya pernah menggunakan port 80 (8080 hanya 100% internal saja)
Stilez
Saya telah menambahkan bagian "Redirect / pemetaan dalam server web" dan memperluas bagian terakhir, untuk mencakup pertanyaan Anda secara lebih rinci. Saya harap mereka membantu!
Stilez
3

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.

TOOGAM
sumber
IPv6 selalu baik untuk didukung, tetapi tidak akan membantu jika karena alasan tertentu Anda sekarang diizinkan untuk menggunakan port 80 (atau 443).
Paŭlo Ebermann
Ini benar, tetapi jika DNS berhasil menyampaikan nomor port, itu juga tidak akan bekerja di sekitar firewall yang memblokir lalu lintas pada nomor port tertentu. Selain itu, penjelasan saya tentang cara menggunakan IPv6 benar-benar hanya sebagian dari jawaban, dan saya yakin bagian sebelumnya dari jawaban saya menjawab pertanyaan itu.
TOOGAM