내 DNS 레코드는 IP 주소 만 가리킬 수 있습니다. 포트에 도달하려면 어떻게해야합니까?


10

네트워크 관리에 익숙하지 않아서 DNS 레코드를 성공적으로 설정 한 것에 대해 이미 기쁘게 생각합니다.

이 URL을 원하기 때문에 약간 혼란 스럽습니다.

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

실제로 이것에 도달

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

따라서 사용자는 포트를 명시 적으로 설정하지 않고도 포트 8080에서 서비스를 이용할 수 있습니다.

어떻게해야합니까? 서버에 특별한 응용 프로그램이 필요합니까? 또는 요청에 적용 할 리디렉션 항목이 있습니까?


4
브라우저는 기본적으로 포트 8080에 액세스하지 않습니다. 질문을 잘못 입력 한 것입니까?
Džuris

dns가 무엇이며 무엇을 하는가에 대한 오해.
CONvid19

@ Džuris Na 그것은 8080이 80 대신 http 기본값이라고 생각하는 실수였습니다
xetra11

답변:


32

DNS 레코드는 포트를 가리킬 수 없습니다 (여기에 적용되지 않는 몇 가지 특수한 경우는 예외).

웹 서비스가 포트 8080에서 수신 대기하고이 포트를 지정하지 않고 도달하려면 3 가지 옵션이 있습니다.

  • 실제로 포트 80 (또는 https의 경우 443)에서 수신 대기하십시오.
  • 포트 8080 (역 프록시)의 서비스로 요청을 전달하도록 포트 80에서 이미 수신중인 항목을 구성하십시오.
  • 리디렉션과 함께 사용할 수있는 경우 프록시 대신이를 사용하지만 클라이언트는 :8080리디렉션 후 주소 표시 줄에서 해당 부분을 볼 수 있습니다 .

10
SRV 레코드를 사용하고 서비스 포트를 지정할 수 있다면 어떨까요? 너무 나쁜 브라우저는 이것을 사용하지 않습니다.
Jacob Evans

4
@JacobEvans : 모든 것을위한 SRV 기록은 나의 오래된 꿈입니다. 훨씬 더 쉬워 질 것입니다 (지금 80과 443을 제외한 모든 것을 막을 수있는 방화벽 관리자는 제외)
Sven

SRV 레코드 는 XMPP와 같은 일부 서비스에서 매우 잘 작동 하지만 슬프게도 많지는 않지만 HTTP는 아닙니다.
Josh

옵션 4 : 방화벽으로 포트 포워드
Joel Coel

10

웹 서버는 기본적으로 TCP 포트 80을 수신합니다. URL에 포트 번호를 명시 적으로 입력하지 않으려면 몇 가지 옵션이 있습니다.

  • 포트 8080 대신 포트 80을 사용하도록 웹 서버를 재구성 할 수 있습니다. 이는 nginx 또는 Apache와 같은 웹 서버에는 권장되지만 Gunicorn과 같은 웹 서버에는 권장되지 않습니다. 해당 포트가 다른 웹 서버에서 이미 사용 중일 수 있으므로이 옵션이 항상 가능한 것은 아닙니다.

    또한 서버가 NAT 게이트웨이 뒤에 있으면 공용 IP 주소를 소유하지 않으며 해당 공용 NAT 주소와 포트 80의 조합이 이미 다른 웹 서버로 전달 될 수 있습니다.

  • TCP 포트 80의 트래픽을 수락하고 TCP 포트 8080의 웹 서버로 보내는 역방향 프록시 서버를 웹 서버 앞에 둘 수 있습니다. 포트 80이 이미 사용중인 경우에도 작동합니다. 리버스 프록시 서버를 두 웹 서버 앞에두면 80 이외의 포트를 청취 할 수 있습니다.

어떤 옵션이 가장 좋을지, 제한 사항 등을보다 자세하고 상세하게 설명하려면 설정에 대해 더 알아야합니다. 바라건대이 설명이 이미 약간 명확 해졌습니다.


필요한 정보가 이미 있습니다! 나는 8080의 기본 웹 포트 80을 잘못 생각했다
xetra11

7

질문 수준과 관련된 간단한 답변

DNS의 이국적인 사용을 무시하고 DNS 조회 (질문과 관련이 없음)를 무시하면 거의 모든 DNS 사용은 다음과 같은 형식입니다.

  1. 클라이언트는 도메인 이름 (정규화 된 이름 또는 다른 이름)을 DNS 서버로 보냅니다.
  2. DNS 서버는 레코드에서 도메인 정보를 반환합니다. 일반적으로 요청 된 주요 정보는 해당 도메인의 웹 / 이메일과 통신하기위한 IP 주소이거나 해당 정보를 더 잘 제공 할 수있는 다른 DNS 서버의 IP 주소입니다.

클라이언트가 서버에 접속하면 서버 자체가 대신하여 DNS 시스템이 그림에서 빠져 나옵니다.

즉, DNS 시스템은 포트 정보를 제공 할 필요가 없으며 거의 ​​제공하지 않습니다. 따라서 질문의 목표가 유효하고 종종 이루어 지지만 실제로는 DNS 시스템이 아닙니다. 그것이 당신이 그것을 해결할 수없는 이유입니다 :)

아이디어는 일단 클라이언트가 찾고있는 특정 머신이나 서버를 찾을 수 있으면 선택한 포트에서 수신하고 구성된 모든 포트의 프로토콜에 대해 수락 / 거부 / 응답하는 것은 해당 머신에 달려 있다는 것입니다.

예를 들어, HTTP 웹 서비스는 일반적으로 포트 80에서 제공됩니다. 즉, 클라이언트가 시스템 IP를 알고 나면 포트 80으로 메시지를 보내면 해당 시스템의 웹 서비스에서 해당 메시지를 읽거나 응답한다고 가정 할 수 있습니다. 그러나 그런 식일 필요는 없습니다. 서버가 포트 9000에서 웹 수신 요청을 청취하도록 구성된 경우 포트 9000에 도달 할 수있는 모든 클라이언트는 웹 서비스에 도달 할 수 있습니다. 서버가 포트 10000을 포트 9000으로 리디렉션하는 프록시 / NAT / 라우터 뒤에 있고 클라이언트가 포트 10000에서 웹 요청을 보내면 서버는 포트 9000에서 웹 요청을 수신하고 응답합니다.

웹 서버 내에서 리디렉션 / 매핑

리디렉션 매핑에 대해 질문하거나 주석을 다시 작성했습니다. 이것은 웹 서버가 할 수있는 기능입니다. 기본적으로 요청에서 수신 한 URL을 처리하는 방법을 관리하도록 웹 서버 (또는 대부분 / 대다수의 웹 서버)를 구성 할 수 있습니다. 따라서 수신시 URL을 내부적으로 수정하여 다른 URL을 동일한 방식으로 처리하거나 일반적인 오타 (매핑)를 수정하거나 실제로 다른 대체 URL을 사용하여 클라이언트에게 다시 요청하도록 지시 할 수 있습니다. (리디렉션).

이것들은 용도가 있으며 원칙적으로 사용 사례를 처리 할 수 ​​있지만 다음과 같은 이유로 "적절한"솔루션처럼 들리지 않습니다.

  1. 나는 매핑이 전혀 도움이되지 않는다고 생각합니다 . 매핑은 웹 서버에 거의 전적으로 내부, 그것은 "치료라고 그것 인 것처럼 URL을 URL". 예를 들어 웹 서버 URL 매핑을 사용하여 사용자가 " https://example.com/index.php?area-=forum&topic = 2 ", 또한" https://example.com/forum.php?topic=2 "및" https://forum.example.com?topic=2조회를 처리하는 첫 번째 단계로 내부에서 두 번째 URL을 내부적으로 세 번째 URL에 맵핑하여이 작업을 한 번만 처리하십시오.이 대상이 IP / 포트가 아닌 조회 경로에 영향을 미치므로 맵핑이 많이 사용되지 않습니다. 포트 관리 및 클라이언트의 경우 실제로 8080을 전혀 쿼리하지 않습니다.
  2. 리디렉션은 효과가 있지만 원하는 것이 아닐 수도 있습니다 . 웹 서버의 리디렉션은 실제로 웹 서버 내부 기능이기 때문에 실제로 쿼리를받는 웹 서버에 의존합니다. 따라서 웹 서버는 원래 쿼리를 얻으려면 포트 80에서 수신 대기해야하며 리디렉션 / 맵으로 응답해야합니다. 그것은 것 또한 당신이 원하는 같은 소리하지 않습니다 : "8080"URL, 포트 8080 기능적에서 수신해야, 그것은 다시를 사용하여 쿼리, 모든 클라이언트 쿼리 포트 (80)에게해야 할 리디렉션 규칙을 필요 하다. 사용자는 ": 8080"이 포함 된 새 URL을 볼 수 있지만 "투명"하고 싶지 않은 것처럼 보입니다.
  3. 또한 리디렉션은 표준 포트 (80 또는 443)를 리디렉션하는 경우에만 작동 합니다. 클라이언트는 기본적으로 2000에서 쿼리하지 않기 때문에 포트 2000을 8080으로 리디렉션 할 수 없었습니다. 2000에서 청취 중이더라도 웹 서버에 접속하십시오. 이것은 문제가되지 않을 수 있습니다.

그러나 특정 쿼리 만 8080으로 다시 라우팅되는 "지능형"리디렉션을 원하는 경우 리디렉션에는 경로를 지정하여 어떤 URL을 리디렉션해야하는지 결정하는 논리가 포함될 수 있지만 포트 매핑 (아래)은 모든 것을 매핑 할 수 있기 때문 입니다.

올바르게하는 방법

귀하의 질문에 대한 답변은 웹 서버가 클라이언트가 기본 포트 (80/443)로 보내지 만 실제로 서버는 포트 8080에서 수신하는 웹 요청에 응답하기를 원한다는 것입니다.

즉, 알 수 있듯이 클라이언트와 서버 사이의 포트매핑하는 사이에 무언가가 필요 합니다 . 이렇게하면 클라이언트는 포트 80 (웹 브라우저에서 사용하는 기본 포트)을 보내지 만 실제로는 웹 서버가 포트 8080에서받습니다. 물론 표준이 아니기 때문에 포트 8080에서 수신 대기하도록 웹 서버를 구성해야하지만, 웹 서버는 수신 포트를 지정할 수 있어야합니다.

이 작업을 수행하는 가장 일반적인 방법은 포트 매핑을 통해 라우터 / 방화벽 내에있는 것입니다.

간단히 말해서, 라우터는 대상 IP가 80이고 수신 포트가 80 인 수신 된 모든 것이 대상 포트를 8080으로 변경하여 LAN으로 전달해야한다는 규칙이 적용됩니다. 웹 서버 나 클라이언트 모두 변경 사항을 인식하지 못하므로 (라우터가 100 % 처리 함) 두 서버 모두 100 % 투명합니다. 클라이언트는 URL에 ": 8080"을 가지고 있지 않으며 포트 80을 쿼리하기 때문에 아무것도 리디렉션 할 필요가 없으며 웹 서버는 포트 80을 쿼리하지 않으므로 포트 80을 무시하고 8080에서만 수신 대기 할 수 있습니다. .

"포트 용 DNS"와 비슷한 간단하고 직접적인 방법을 원한다면 이것은 질문에서 요구하는 것과 가장 가까운 것입니다.


리디렉션 매핑 또는 다시 쓰기에 대해 자주 듣는가? 이 솔루션들도 있습니까?
xetra11

이들은 클라이언트 명령을 처리 할 때 웹 서버 에서 시작되는 수정 자입니다 . 따라서 웹 서버가 지원하는 경우 포트 8080의 동일한 URL로 HTTP 리디렉션을 사용하여 포트 80의 모든 질문에 자동으로 응답 할 수 있습니다. 결국 HTTP / 80-> HTTPS / 443 리디렉션은 거의 동일합니다. 그러나 먼저 쿼리를 수신 할 수 있어야하므로 수신하도록 구성되지 않은 포트에서는 작동하지 않으며 클라이언트는 : 8080 수정 된 URL을 볼 수 있습니다. 포트 매핑을 통해이를 수행하면 포트 80 만 사용하므로 클라이언트가 100 % 볼 수 없게됩니다 (8080은 100 % 내부 전용)
Stilez

"웹 서버 내에서 리디렉션 / 매핑" 섹션을 추가 하고 마지막 섹션을 확장하여 질문에 대한 자세한 내용을 다루었습니다. 나는 그들이 도움이되기를 바랍니다!
Stilez

3

당신은 할 수 없습니다.

기술적으로 이것은 가능합니다. DNS는 도메인 이름을 제출하고 IP 주소를 얻는 것으로 유명합니다. 그러나 DNS 프로토콜을 약간 연구했으며 실제로 DNS는 기술적으로 도메인 이름과 IP 주소 이상의 것보다 쿼리 / 응답 메커니즘으로 작동 할 수 있습니다. 가능한 한 가지 방법은 TXT 레코드 (기술적으로 텍스트 일 ​​뿐이고 어떤 용도로든 사용될 수 있음) 또는 SRV 레코드 또는 기타 다른 것과 같이 일반적인 A 또는 AAAA 유형이 아닌 DNS 리소스 레코드를 사용하는 것입니다. 최신 리소스 레코드 유형을 선택하십시오.

자신의 소프트웨어 (클라이언트 및 서버 모두)를 구성하는 경우 일부 사람들은 DNS 호스팅 회사를 사용하고 특정 레코드 유형 만 사용하도록 제한한다는 점을 제외하고는 이러한 일을하지 않는 기술적 이유가 없을 수 있습니다. 자신의 DNS 서버를 운영하는 사람들은 그러한 것들에 대해 충분한 유연성을 가지고 있기 때문에 불행한 일입니다.

그러나 고유 한 네트워킹 프로토콜을 구성하지 않으면 (예 : HTTP를 사용하려는 경우) 사용하지 않는 한 기존 소프트웨어가 사용자 지정 솔루션을 사용하지 않는다는 큰 문제가 발생할 수 있습니다. 이미 확립 된 솔루션. 그것이 장벽이 될 것입니다. 기술적으로 불가능하지 않습니다. 사회적 장벽 : 모든 사람이 자신의 방식으로 일을하도록 설득 할 수 있습니까?

나는 왜 당신이 그것을 할 수 없는지 설명했지만, 나는 당신이 무엇을했는지에 대한 해결책을 가지고있을 것입니다. 먼저 IP 주소와 포트가있는 이유를 살펴 보겠습니다.

IP 주소와 포트는 다른 일을합니다. IP 주소의 목적은 네트워크 통신 OSI 모델의 계층 2 및 3의 목표를 달성하는 것입니다. IP 주소의 목적은 트래픽이 전송 될 컴퓨터를 식별하는 것입니다. 방화벽 / 라우터가 NAPT (네트워크 주소 포트 기반 변환, 때로는 PNAT 또는 NAT라고도 함)를 수행하기 위해 포트 번호를 조사하도록하여 포트 번호를 사용할 수 있다는 사실은 리소스 (정보)를 포함하지만 원래 디자인의 일부가 아닙니다. 포트 번호의이 "남용"에서 1 분 동안 벗어나 원래 디자인을 고려하면보다 쉬운 솔루션을 찾을 수 있습니다. 인터넷의 디자인에 따라 IP 주소를 사용하여 컴퓨터를 찾을 수있었습니다.

TCP 및 UDP 및 일부 대안에서 사용되는 "포트 번호"는 개별 대화를 추적 할 수있는 것입니다. 이는 실행중인 프로그램과의 통신을 정렬하는 데 도움이됩니다. 따라서 머신이 TCP 포트 80에서 트래픽을 수신하면 웹 서버 인 프로그램이 네트워크 트래픽을 사용한다는 것을 알게됩니다. 웹 브라우저가 여러 그래픽을 동시에 다운로드하는 경우 "소스 포트"번호와 "대상 포트"번호의 조합은 어떤 데이터가 어떤 그래픽을 의미하는지 추적 할 수 있으므로 데이터를 혼합하지 않고도 동시 대화가 가능합니다.

이제는 DNS 서버에 액세스 할 수 있다고 생각합니다 .DNS 관리가 일부 트래픽 라우팅을 조금 더 처리하는 것이 편리하다고 생각하는 것 같습니다. 그러나 DNS는 포트 번호를 얻는 데 도움이되지 않는 것 같습니다. 당신은 무엇을 할 수 있나요?

IPv6을 고려하십시오. IPv6을 사용하면 더 많은 IP 주소를 가질 수 있습니다. 또한 일부 IPv4 구현과 달리 IPv6을 사용하는 장치는 일반적으로 동시에 여러 개의 활성 IPv6 주소를 쉽게 지원할 수 있습니다. 따라서 한 컴퓨터에 3 개의 다른 네트워크 프로토콜을 사용하려는 경우 동일한 컴퓨터에 3 개의 다른 IPv6 주소를 할당 할 수 있습니다. 그런 다음 IPv6 주소를 사용하여 원하는 라우팅을 수행 할 수 있습니다.

그런 다음 AAAA 리소스 레코드 유형을 사용하여 해당 IPv6 주소에 이름을 할당하면 네트워크 설계에서 원하는 특정 컴퓨터의 특정 서비스 전용으로 효과적으로 처리 할 수 ​​있습니다.

Wallah, 이제 DNS가 소프트웨어를 효과적으로 가리키고 있으며, DNS가 포트 번호를 가리 키도록 할 필요없이 그 목표를 달성했습니다.이 기능은 일반적으로 작동하지 않기 때문에 제대로 작동하지 않습니다. 지원됩니다.

가능한 반대 :
그리고 만약 당신이 IPv4에 갇혀 있다고 느끼고 IPv6이 어떻게 든 지원되지 않는다고 생각한다면, 나는 그 문제를 해결하려고 노력할 것을 권장합니다. 이 문제는 아마도 더 쉽게 고칠 수 있고 (어쩌면 일종의 터널링을 사용하고) 구현 한 후에는 더 보람있는 수정이 될 것입니다.


IPv6은 항상 지원하는 것이 좋지만 어떤 이유로 든 포트 80 (또는 443)을 사용할 수 있으면 도움이되지 않습니다.
Paŭlo Ebermann

이것은 사실이지만 DNS가 포트 번호를 전달할 수 있다면 특정 포트 번호의 트래픽을 차단하는 방화벽에서는 작동하지 않습니다. 그 외에도 IPv6 사용 방법에 대한 설명은 실제로 답변의 일부일 뿐이며, 답변의 이전 부분이 문제를 해결한다고 생각합니다.
TOOGAM
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.