Cara menggunakan DNS / Nama Host atau Cara lain untuk menyelesaikan ke IP tertentu: Port

51

Ini adalah Pertanyaan Canonical tentang resolusi DNS / Hostnames ke IP / Port

Contoh 1

Saya menjalankan server web pada port 80 dan yang lain pada port 87. Saya ingin menggunakan DNS sehingga www.example.com masuk ke port 87. Bagaimana saya bisa melakukannya hanya dengan DNS?

Contoh 2

Saya menjalankan layanan di server saya pada port non-standar. Bagaimana saya bisa membuat klien terhubung ke port non-standar ini secara otomatis? Bisakah saya menggunakan DNS? Apakah ada dukungan khusus aplikasi di mana DNS dapat menunjukkan IP dan Port?

Contoh 3

Apakah beberapa protokol aplikasi secara khusus mendukung kesadaran nama host, dan memungkinkan tindakan khusus diambil berdasarkan informasi ini? Apakah ada pertanyaan lain tentang Kesalahan Server yang mencakup sebagian dari ini?

Commandeering:Pertanyaan ini pada awalnya menanyakan tentang menjalankan IIS dan Apache pada server yang sama, tetapi konsep yang sama dapat diterapkan pada perangkat lunak server yang menerima koneksi dari klien. Jawaban di bawah ini menjelaskan masalah teknis dan solusi penggunaan DNS dan dukungan protokol aplikasi untuk menetapkan nomor port yang akan disambungkan klien.

Tomasz Smykowski
sumber
Mengenai contoh tiga, pembaca mungkin juga ingin memeriksa pertanyaan kanonik kami tentang membuat protokol arbitrer sadar-nama .
MadHatter mendukung Monica

Jawaban:

34

Anda tidak dapat menggunakan DNS untuk menunjuk ke port (kecuali klien mendukung catatan SRV, kebanyakan tidak).

Situs web dan Protokol dengan Header Host

Anda harus meletakkan beberapa metode front-end untuk melakukan ini. Biasanya Anda akan menggunakan server web ujung depan atau perangkat lunak proxy khusus untuk meneruskan koneksi dari port 80 ke port! 80 berdasarkan nama server yang diminta di header. Beberapa firewall juga dapat maju berdasarkan header host juga.

Catatan SRV

Beberapa klien mendukung pencarian catatan SRV yang menunjukkan nama host dan nomor port server untuk layanan yang ditentukan (yaitu pengguna menentukan "example.com", klien mencari catatan SRV dan mendapatkan "server101.example.com" pada port "255 "; kemudian terhubung dengan itu). Beberapa klien juga menerapkan ini di tempat yang tidak diperlukan (ponsel cerdas saya yang terakhir akan mencari catatan SRV saat membuat akun email baru misalnya).

Sayangnya dukungan untuk catatan SRV sangat jarang. Hanya beberapa protokol penting yang mengamanatkan dukungannya (Jabber / XMPP, Kerberos, LDAP, SIP) dan tidak setiap klien mendukungnya bahkan ketika diamanatkan.

Chris S
sumber
15

Ketika Anda mengetik http://www.domain.com ke browser Anda, dipahami bahwa port HTTP pada 80. Oleh karena itu, tidak ada cara langsung untuk mengarahkan www.domain.com ke port 87 jika Anda sudah memiliki layanan berjalan pada port itu di IIS.

Yang sedang berkata, ada beberapa "solusi".

  • Cukup gunakan http://www.domain.com:87/ - ini akan terhubung ke port 87 (apache) di server Anda.
  • Anda dapat mengatur pengalihan, sehingga http://www.domain.com/apache akan meneruskan (atau proksi, jika Anda ingin menjadi mewah) ke www.domain.com:87.
  • Anda dapat mengatur "VirtualHost" sehingga www.domain2.com akan tetap ada di port 80, dibagikan dengan www.domain.com. Anda tidak dapat mengatur ini tanpa memodifikasi IIS.

Sam benar, DNS agnostik ketika datang ke port. Segala macam pengalihan port terjadi oleh layanan yang berjalan pada port itu. Karena itu Anda perlu melakukan sesuatu dengan IIS untuk mewujudkan hal ini, jika Anda tidak punya pilihan selain meninggalkannya di port 80.

Saya juga sudah mengatasi situasi Anda dengan menggunakan mod_proxy di Apache, tidak yakin apakah ada cara untuk melakukan ini dengan IIS.

Dave Drager
sumber
Ok, jadi bagaimana cara mengatur proxy pada IIS?
Tomasz Smykowski
2
Jika IIS7, Anda dapat menggunakan Aplikasi Permintaan Routing (ARR).
Scott Forsyth - MVP
1
Scott, apakah Anda memiliki tautan yang bagus untuk dokumentasi tentang ARR?
Jacques
12

Saya khawatir nama domain hanya dapat dikaitkan dengan alamat IP dan bukan porta.

Sebagian besar server web misalnya (Apache, IIS, dll.) Memungkinkan Anda memiliki dua domain yang di-host pada alamat IP yang sama dengan menggunakan fakta bahwa permintaan web berisi bidang header-host yang mengidentifikasi domain dalam permintaan itu sendiri.

Jika Anda mengatakan apa server web yang Anda gunakan, saya yakin orang-orang dapat mengarahkan Anda ke dokumentasi yang relevan untuk mengatur server Anda seperti yang Anda inginkan.

Phil
sumber
Itulah intinya. Saya menggunakan dua server web yang berbeda.
Omar Abid
12

Secara teknis Anda dapat menggunakan catatan SRV pada server DNS sebagaimana didefinisikan dalam RFC 2782 untuk memberi tahu browser server mana yang menangani http pada port mana untuk domain (sub-):

_http._tcp.www.example.com.  IN      SRV 0    5      80   www.example.com.
_http._tcp.www2.example.com. IN      SRV 0    5      87   www.example.com.

Ini bekerja dengan baik untuk banyak protokol / layanan, terutama di mana penggunaan catatan SRV sudah ditentukan dalam spesifikasi protokol.

Namun seperti yang dinyatakan " Hall of Shame " ini, sebagian besar browser / klien web tidak mendukung ini (untuk HTTP). Juga lihat mengapa-do-browser-not-use-srv-records .

Kesepakatannya pada dasarnya, bahwa SRV tidak termasuk dalam protokol http sebagai suatu keharusan sehingga setiap browser yang mengimplementasikannya menyelesaikan URL secara berbeda dari browser yang tidak.

Jadi, Anda hanya boleh menggunakan ini sebagai beberapa penyeimbangan beban opsional, di mana tidak relevan server mana yang dipilih dalam hal konten. "Opsional" karena tidak akan menyeimbangkan banyak beban jika hanya sedikit klien yang menerapkan ini.

JonnyJD
sumber
6

DNS tidak memiliki kemampuan untuk mengalihkan ke Port tertentu, semua DNS peduli adalah resolusi alamat IP dari sebuah nama, dan sebaliknya.

Beberapa layanan, seperti penyedia Dynamic IP DNS, seperti NO-IP menyediakan layanan yang dapat membantu Anda melakukan sesuatu yang serupa untuk mendapatkan pemblokiran bulat IP di layanan DNS rumah.

Sam Cogan
sumber
Beberapa pendaftar (GoDaddy) menawarkan penerusan domain melalui server yang diparkir. Anda bisa mencobanya, tapi ini sedikit omong kosong. Sebagai alternatif, Anda bisa menulis web browser Anda sendiri yang terlihat sampai SRV catatan, dan kemudian mencoba untuk meyakinkan dunia untuk menggunakannya :)
Jason Antman
6

Untuk menggunakan layanan (TBT) apa pun pada port non-standar dan tidak menulis port di URI, semua orang dapat menggunakan catatan SRV, yang didefinisikan dalam RFC 2782.

_http._tcp.www.example.com. IN      SRV 0    5      87   www.example.com.

Semua http-host lain di zona masih akan dilayani pada port default 80

Malas Badger
sumber
3
+1 untuk menunjukkan bahwa beberapa pernyataan di bawah ini tidak benar, sejauh specnya - DNS benar - benar dapat menunjukkan port layanan melalui catatan SRV. Tetapi juga mengasumsikan klien tahu untuk meminta catatan SRV terlebih dahulu.
mcauth
2

Cara paling sederhana adalah menggunakan proxy terbalik dan mengaturnya sebagai proxy web Anda. Anda dapat mengkonfigurasi nginxatau apacheuntuk itu. Saya pada dasarnya memiliki masalah yang sama di masa lalu dan membuat alat untuk mencapai konfigurasi seperti itu dengan cara yang sederhana. Ergo: https://github.com/cristianoliveira/ergo

Saya telah menggunakan ini dan pada dasarnya, bekerja seperti pesona :)

Cristian Oliveira
sumber
0

Satu pendekatan untuk menyebarkan dua server web pada host yang sama adalah meminta keduanya mendengarkan pada port 80 pada dua alamat IPv6 yang berbeda. IPv6 secara resmi menentukan bahwa Anda dapat menetapkan dua alamat ke sebuah antarmuka, dan ada cukup alamat IPv6 yang dapat Anda lakukan tanpa kehabisan alamat.

Ini adalah bukti di masa depan, dan kedua domain Anda masing-masing dapat memiliki catatan AAAA yang menunjuk ke alamat IP yang berbeda, sehingga domain tersebut berakhir di server web yang berbeda.

Jika Anda memiliki satu alamat IPv4 juga, Anda dapat menggunakan port 80 pada alamat IPv4 untuk menjalankan proxy terbalik. Dengan begitu, klien khusus IPv4 dapat mengakses kedua server web Anda. Pendekatan proxy terbalik bahkan berfungsi jika beberapa server web berada di host yang sama dengan proxy terbalik dan beberapa server web berada di host lain.

Dalam pengaturan seperti itu example.orgbisa memiliki alamat 192.0.2.1dan 2001:db8::1sementara example.netmemiliki alamat 192.0.2.1dan 2001:db8::2.

kasperd
sumber