DNS kaydım yalnızca bir IP adresini gösterebilir. Bir limana nasıl ulaşabilirim?


10

Ağ yönetimi için oldukça yeniyim ve bu nedenle başarıyla bir DNS kaydı oluşturduğum için heyecanlıyım.

Şimdi biraz kafam karıştı, çünkü bu URL'ye sahip olmak istiyorum:

http://www.example.org:8080/fetch/characters/

aslında buna ulaşıldı

http://www.example.org/fetch/characters/

Böylece kullanıcılar, bağlantı noktasını açıkça ayarlamak zorunda kalmadan 8080 numaralı bağlantı noktasındaki hizmete erişebilir.

Bunu nasıl yapabilirim? Sunucumda özel bir uygulamaya ihtiyacım var mı? Veya isteklere uygulanacak yönlendirme öğeleri var mı?


4
Tarayıcı varsayılan olarak 8080 numaralı bağlantı noktasına erişmez. Bu, soru yazarken bir hata mıdır?
Džuris

dns'in ne olduğu ve ne yaptığı hakkında yanlış anlama.
18:23

@ Džuris Na 8080 80 yerine http varsayılan olduğunu düşünüyorum benim bir hataydı
xetra11

Yanıtlar:


32

DNS kayıtları bağlantı noktalarını gösteremez (burada geçerli olmayan birkaç özel durum istisnasıyla).

Bir web hizmetiniz varsa 8080 numaralı bağlantı noktasını dinleyin ve bu bağlantı noktasını belirtmeden erişmek istiyorsanız, 3 seçeneğiniz vardır:

  • 80 numaralı bağlantı noktasını (veya https ile 443) dinlemesini sağlayın.
  • 8080 numaralı bağlantı noktasında (ters proxy) hizmetinize istekleri iletmek için 80 numaralı bağlantı noktasında dinleyen her şeyi yapılandırın.
  • Bir yönlendirmeyle yaşayabiliyorsanız, proxy yerine bunu kullanın, ancak istemcileriniz :8080yönlendirmeden sonra parçayı adres çubuklarında görür .

10
SRV kayıtlarını kullanabilir ve hizmetler için bağlantı noktaları belirleyebilirsek ... Çok kötü tarayıcılar bunu kullanmaz.
Jacob Evans

4
@JacobEvans: Her şey için SRV kayıtları benim eski bir hayalim. İşleri çok daha kolay hale getirecek (şimdi 80 ve 443 hariç her şeyi engelleyebilen güvenlik duvarı yöneticileri hariç)
Sven

SRV kayıtları , XMPP gibi bazı hizmetler için çok iyi çalışıyor ... ama ne yazık ki çok fazla değil (ve kesin olarak HTTP değil)
Josh

Seçenek 4: Bir güvenlik duvarı tarafından ileriye doğru bağlantı noktası
Joel Coel

10

Web sunucuları varsayılan olarak 80 numaralı TCP bağlantı noktasını dinler. URL'ye bağlantı noktası numarasını açıkça yazmak istemiyorsanız, birkaç seçeneğiniz vardır:

  • Web sunucunuzu 8080 numaralı bağlantı noktası yerine 80 numaralı bağlantı noktasını kullanacak şekilde yeniden yapılandırabilirsiniz. Bu, nginx veya Apache gibi web sunucuları için önerilir, ancak Gunicorn gibi web sunucuları için önerilmez. Bu bağlantı noktası her zaman mümkün değildir, çünkü bu bağlantı noktası farklı bir web sunucusu tarafından zaten kullanılıyor olabilir.

    Ayrıca, sunucunuz bir NAT ağ geçidinin arkasındaysa, genel IP adresine sahip değildir ve bu genel NAT adresi ile bağlantı noktası 80'in kombinasyonu zaten farklı bir web sunucusuna yönlendirilmiş olabilir.

  • 80 numaralı TCP bağlantı noktasındaki trafiği kabul eden ve 8080 numaralı TCP bağlantı noktasındaki web sunucunuza gönderen web sunucunuzun önüne bir ters proxy sunucusu koyabilirsiniz. Bu, 80 numaralı bağlantı noktası zaten kullanımdaysa da çalışır. Ters proxy sunucusunu her iki web sunucusunun önüne koyun, böylece her ikisi de 80'den farklı bağlantı noktalarını dinler.

Hangi seçeneğin en iyi olabileceği ve sınırlamalar vb. Konusunda daha iyi ve daha ayrıntılı yardım sağlamak için kurulumunuz hakkında daha fazla bilgi sahibi olmamız gerekir. Umarım bu açıklama zaten işleri biraz açıklığa kavuşturmuştur.


İhtiyacım olan bilgiler zaten var! 8080 için varsayılan web bağlantı noktası 80'i
yanıldım

7

Soru seviyesi ile ilgili basit cevap

DNS'in egzotik kullanımlarını ve ayrıca DNS aramasını tersine çevirerek (soru ile ilgili değildir), neredeyse tüm DNS kullanımı şu şekildedir:

  1. İstemci bir DNS sunucusuna etki alanı adı (tam olarak nitelenmiş veya başka şekilde) gönderir
  2. DNS sunucusu kayıtlarından etki alanı bilgilerini döndürür. Genellikle istenen temel bilgiler ya o etki alanındaki web / e-posta ile iletişim kurmak için kullanılan IP adresidir ya da bu bilgileri daha iyi sağlayabilen başka bir DNS sunucusunun IP adresidir.

İstemci sunucuyla bağlantı kurduktan sonra, sunucunun kendisi devralınır ve DNS sistemi resimden çıkar.

Bunun anlamı, DNS sisteminin bağlantı noktası bilgilerini sağlaması gerekmez ve neredeyse hiç sağlamaz. Bu nedenle, sorunun amacı geçerli ve sık sık yapılsa da, aslında bunu yapan DNS sistemi değildir. Bu yüzden çalışamazsın :)

Fikir, müşterinizin aradığı makineyi veya sunucuyu bulabilmesi durumunda, seçtiği herhangi bir portu dinlemek ve yapılandırılmış portlardaki herhangi bir protokolü kabul etmek / reddetmek / yanıtlamak o makineye bağlıdır.

Örneğin, HTTP web hizmetleri genellikle bağlantı noktası 80'de sağlanır. Bu, istemci bir makine IP'si tanıdığında, bağlantı noktası 80'e bir mesaj göndermenin, söz konusu mesajın o makinenin web hizmeti tarafından okunmasına / yanıtlanmasına neden olacağını varsayabilir. Ama böyle olmak zorunda değil. Sunucu, 9000 numaralı bağlantı noktasında web'den gelen istekleri dinleyecek şekilde yapılandırılmışsa, 9000 numaralı bağlantı noktasına erişebilen herhangi bir istemci kendi web hizmetine erişebilir. Sunucu, 10000 numaralı bağlantı noktasını 9000 numaralı bağlantı noktasına yönlendiren bir proxy / NAT / yönlendiricinin arkasındaysa ve istemci 10000 numaralı bağlantı noktasında bir web isteği gönderirse, sunucu bunu 9000 numaralı bağlantı noktasında alır ve yanıt verir.

Web sunucusunda yönlendirme / eşleme

Bir yönlendirmede yeniden yönlendirme veya yeniden yazma hakkında soru sordunuz. Bunlar bir web sunucusunun yapabileceği işlevlerdir. Temel olarak, web sunucusunu (veya çoğu / birçok web sunucusunu) bir istekte aldığı URL'yi nasıl işleyeceğini yönetecek şekilde yapılandırabilirsiniz. Bu nedenle, farklı URL'lerin aynı şekilde ele alınmasını sağlamak için makbuzdaki URL'yi dahili olarak değiştirebilir veya ortak yazım hatalarını (eşleme) düzeltebilir veya gerçekte, istemciye farklı, yeni bir URL kullanarak ikinci kez sormasını söyleyebilir. (yönlendirme).

Bunların kullanımları vardır ve prensip olarak kullanım durumunuzu halledebilirler, ancak bu nedenlerden dolayı sizin için "doğru" çözüm gibi görünmüyorlar:

  1. Haritalamanın hiç yardımcı olacağını düşünmüyorum . Haritalama web sunucusuna neredeyse tamamen iç, o "ele alırız bu öyle sanki URL'yi o URL". Örneğin, bir kullanıcının " https://example.com/index.php?area-=forum&topic " adresini kullanarak çok eski, eski ve geçerli URL'leri (kullanıcı rahatlığı için) kullanarak bir forumu sorgulamasına izin vermek için web sunucusu URL eşlemesini kullanabilirsiniz. = 2 ", ayrıca" https://example.com/forum.php?topic=2 "ve ayrıca" https://forum.example.com?topic=2"sorgusunu kullanın ve sorguyu işlemenin ilk adımı olarak bunların ilk ikisini dahili olarak üçüncü URL'ye eşleyerek bunu bir kez ele alın. Bu hedefler IP / bağlantı noktasını değil sorgu yolunu etkilediğinden eşleme, port yönetimi ve sizin durumunuzda, müşteri aslında 8080'i hiç sorgulamaz.
  2. Yönlendirme işe yarayabilir, ancak istediğiniz şey olmayabilir . Web sunucusundaki yeniden yönlendirme, sorguyu gerçekten alan web sunucusuna bağlıdır (çünkü bunlar web sunucusunun dahili işlevleridir). Bu nedenle web sunucusunun, yönlendirme / haritaya yanıt vermek için orijinal sorguyu almak için yine de 80 numaralı bağlantı noktasını dinlemesi gerekir. Ayrıca, 8080 numaralı bağlantı noktasını da dinlemesi gerekir. İşlevsel olarak, herhangi bir istemci 80 numaralı bağlantı noktasını sorgulamak, "istediğiniz" gibi görünmeyen ": 8080" URL'sini kullanarak yeniden sorgulamak için bir yönlendirme kuralı gerekir. yapmak. Kullanıcı ayrıca içinde ": 8080" bulunan yeni URL'yi görürken, "şeffaf" ve gösterilmemesini istediğiniz gibi görünür.
  3. Ayrıca yeniden yönlendirme yalnızca standart bir bağlantı noktasını (80 veya 443) yeniden yönlendirmek için işe yarayacaktır - 2000'den 8080'e kadar bağlantı noktasını yeniden yönlendiremezsiniz, çünkü istemci varsayılan olarak 2000'de sorgulamayacaktır, bu yüzden hiç olmaz 2000'de dinlemiş olsa bile web sunucusuna gidin. Bu sizin için bir sorun olmayabilir.

Bununla birlikte, yalnızca belirli sorguların 8080'e yönlendirildiği "akıllı" yeniden yönlendirme istiyorsanız, bu gitmek için bir yol olabilir, çünkü yönlendirme, hangi URL'lerin yeniden yönlendirilmesi gerektiğine karar vermek için mantık içerebilir, ancak bağlantı noktası eşlemesi (aşağıda) her şeyi eşler .

Doğru nasıl yapılır

Sorunuzun cevabı, web sunucusunun istemcinin varsayılan bağlantı noktasına (80/443) gönderdiği, ancak sunucunun 8080 numaralı bağlantı noktasında aldığı web isteklerine yanıt vermesini istemenizdir.

Bu, görebileceğiniz gibi, istemci ile sunucu arasındaki bağlantı noktalarını eşleyen bir şeye ihtiyacınız olduğu anlamına gelir . Bu şekilde, istemci bağlantı noktası 80'e (web tarayıcıları tarafından kullanılan varsayılan bağlantı noktası) gönderir, ancak aslında web sunucusu tarafından 8080 bağlantı noktasına alınır. Tabii ki, web sunucusunu 8080 bağlantı noktasını dinleyecek şekilde yapılandırmanız gerekecektir, çünkü bu standart değildir, ancak bu kolaydır ve herhangi bir web sunucusunun kendi dinleme bağlantı noktalarını belirtmesi gerekir.

Bunu yapmanın en genel yolu, bağlantı noktası eşleme yoluyla yönlendirici / güvenlik duvarı içinde olacaktır.

Basit bir ifadeyle, bunu yapmak için yönlendiriciye, hedef IP'si ve hedef bağlantı noktası = 80 olan alınan her şeyin, hedef bağlantı noktası 8080 olarak değiştirilerek LAN'a geçirilmesi gerektiği konusunda bir kural verilir. Ne web sunucusu ne de istemci değişiklikten haberdar olmayacaktır (yönlendirici tarafından% 100 işlenir), bu nedenle her ikisi için de% 100 şeffaf olacaktır. İstemcinin URL'sinde ": 8080" olmayacak ve 80 numaralı bağlantı noktasını sorguladığı ve web sunucusu 80 numaralı bağlantı noktasını yoksayabilir ve yalnızca 8080 üzerinde dinleyebileceği için hiçbir şeyi yeniden yönlendirmesi gerekmez. .

"Bağlantı noktaları için DNS" nin yapacağı gibi basit ve anlaşılır bir yol istiyorsanız, bu muhtemelen sorunuzda sorduğunuza en yakın eşdeğerdir.


Yönlendirme eşlemesi veya yeniden yazma hakkında sık sık duyuyorum? bu çözümler nelerdir?
xetra11

Bunlar içinde tekme değiştiriciler şunlardır içinde müşterinin komutunu işlerken, web sunucusu. Web sunucusu bunu destekliyorsa, 8080 numaralı bağlantı noktasında yapılan herhangi bir sorguya otomatik olarak yanıt verebilirsiniz , 8080 numaralı bağlantı noktasında aynı URL'ye bir HTTP yönlendirmesi - sonuçta, HTTP / 80 -> HTTPS / 443 yönlendirmesi hemen hemen aynı şeydir. Ancak önce sorguyu alabilmesi gerekir, bu nedenle dinlemek için yapılandırılmadığı bağlantı noktalarında çalışmaz ve istemci muhtemelen: 8080 değiştirilmiş URL'yi görür. Bağlantı noktası eşleme yoluyla bunu yapmak, yalnızca 80 numaralı bağlantı noktasını kullandıkları için (% 8080 yalnızca% 100 dahili) istemci için% 100 görünmez yapar
Stilez

"Web sunucusunda yeniden yönlendirme / eşleme" bölümünü ekledim ve son bölümü, sorunuzu daha ayrıntılı bir şekilde ele almak için genişlettim. Umarım yardımcı olurlar!
Stilez

3

Yapamazsın.

Yani teknik olarak bu yapılabilir. DNS, bir alan adı gönderebildiği ve bir IP adresi alabildiği için ünlüdür. Ancak, DNS protokolünü biraz çalıştım ve gerçekten DNS teknik olarak sadece alan adları ve IP adreslerinden çok daha fazlası için bir sorgu / yanıt mekanizması olarak işlev görebiliyor. Olası yaklaşımlardan biri, TXT kaydı (teknik olarak yalnızca metin olan ve herhangi bir şey için kullanılabilen) gibi tipik A veya AAAA türü olmayan bir DNS kaynak kaydı veya bir SRV kaydı veya başka bir yöntem kullanmaktır. seçtiğiniz daha yeni kaynak kaydı türü.

Kendi yazılımınızı (hem istemci hem de sunucu) oluşturuyorsanız, bazı kişilerin DNS barındırma şirketlerini kullandığını ve bunları yalnızca belirli kayıt türleriyle sınırlandırdığını bilmesinin dışında, böyle bir şey yapmamanın teknik bir nedeni olmayabilir. Bu talihsiz bir durum çünkü kendi DNS sunucularını çalıştıran insanlar kesinlikle bu tür şeyler için yeterli esnekliğe sahipler.

Ancak, kendi ağ protokolünüzü oluşturmuyorsanız (örneğin, HTTP kullanmak istiyorsanız), büyük bir sorunla karşılaşmanız olasıdır, yani mevcut yazılım özel çözümünüzü kullanmazsanız, önceden kurulmuş çözümler. Bu bariyer olacak. Teknik olarak imkansız değil. Toplumsal bir engel: Herkesi işleri kendi tarzınıza yapmaya ikna edebilir misiniz?

Şimdi bunu neden yapamayacağınızı açıkladım, ancak peşinde olduğunuz şey için bir çözümüm olabilir. İlk olarak, neden IP adresleri ve bağlantı noktalarımız olduğuna bir göz atalım.

IP adresleri ve bağlantı noktaları farklı şeyler yapar. IP adresinin amacı, OSI Model ağ iletişimi Katman 2 ve 3'ün amaçlarına ulaşmaktır. IP adresinin amacı, trafiğin hangi bilgisayara gitmesi gerektiğini belirlemektir. Bu amaçla bir bağlantı noktası numarası kullanabilmemiz, güvenlik duvarlarının / yönlendiricilerin NAPT'yi gerçekleştirmek için bağlantı noktası numaralarını araştırmasını sağlayarak (bazen PNAT veya sadece NAT olarak da adlandırılan Ağ Adresi Bağlantı Noktası Tabanlı Çeviri), kaynak (bilgi), ancak özgün tasarımın bir parçası değildi. Bağlantı noktası numaralarının bu "kötüye kullanımından" bir dakika uzaklaşırsak ve orijinal tasarımı düşünürsek, daha kolay bir çözüm bulabiliriz. İnternet tasarımıyla, makinelerin IP adresleri kullanılarak bulunması amaçlanmıştır.

TCP ve UDP ve bazı alternatifler tarafından kullanılan bir "port numarası" nın noktası, bireysel konuşmaları takip edebilmektir. Bu, çalışan programlarla iletişimin hizalanmasına yardımcı olur. Dolayısıyla, bir makine 80 numaralı TCP bağlantı noktasında trafik alırsa, makine ağ trafiğinin web sunucusu olan program tarafından kullanılması gerektiğini bilecektir. Bir web tarayıcısı aynı anda birden çok grafik indirirse, "kaynak bağlantı noktası" sayıları ve "hedef bağlantı noktası" sayılarının kombinasyonları hangi verilerin hangi grafik için kastedildiğini takip edebilir, böylece bu eşzamanlı konuşmalar verileri karıştırmadan gerçekleşebilir.

Şimdi tahminim, bir DNS sunucusuna erişiminizin olması ve DNS yönetiminin trafik yönlendirmelerinden bazılarını biraz daha fazla ele alabilmenin uygun olacağını düşündüğünüz gibi görünüyor. Ancak DNS, bir bağlantı noktası numarası almanıza yardımcı olamıyor gibi görünüyor. Ne yapabilirsin?

IPv6'yı düşünün. IPv6, çok daha fazla IP adresine sahip olmanızı sağlar. Ayrıca, IPv4'ün bazı uygulamalarından farklı olarak, IPv6 kullanan cihazlar tipik olarak aynı anda birden fazla aktif IPv6 adresini kolayca destekleyebilir. Dolayısıyla, bir bilgisayarda üç farklı ağ protokolüne sahip olmak istiyorsanız, aynı bilgisayara en az üç farklı IPv6 adresi atayabilirsiniz. Ve sonra bu IPv6 adresleriyle istediğiniz yönlendirme parlaklıklarını yapabilirsiniz.

Daha sonra, IPA6 adresine bir ad atamak için AAAA kaynak kayıt türünü kullanabilirsiniz; ağ tasarımınız istediğiniz bilgisayardaki belirli bir hizmete etkin bir şekilde adanmış olarak değerlendirilebilir.

Wallah, artık DNS'yi bir yazılım parçasını etkin bir şekilde işaret ediyor ve DNS'yi bir bağlantı noktası numarasına güvenmeye gerek kalmadan bu hedefe ulaştınız, çünkü bu işlevsellik çok yaygın değil çünkü destekledi.

Olası itiraz:
Ve IPv4 ile sıkışıp kalırsanız ve IPv6'nın bir şekilde desteklenmediğini düşünüyorsanız, bu sorunu çözmeye çalışmanızı öneririm. Bu sorunun düzeltilmesi muhtemelen daha kolay olacaktır (belki bir tür tünel kullanma) ve uyguladıktan sonra muhtemelen daha ödüllendirici bir düzeltme olacaktır.


IPv6'yı desteklemek her zaman iyidir, ancak bir nedenden dolayı 80 numaralı bağlantı noktasını (veya 443) kullanma izniniz varsa yardımcı olmaz.
Paŭlo Ebermann

Bu doğrudur, ancak DNS bir bağlantı noktası numarası aktarmayı başardıysa, belirli bir bağlantı noktası numarasındaki trafiği engelleyen bir güvenlik duvarı etrafında da çalışmaz. Bunun yanı sıra, IPv6'nın nasıl kullanılacağına dair açıklamam gerçekten cevabın sadece bir parçasıydı ve cevabımın önceki kısımlarının soruyu ele aldığına inanıyorum.
TOOGAM
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.