내 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.