단일 공용 IP 주소를 사용하여 NAT 뒤에 여러 서버 노출


17

이것은 NAT와 DNS에 대한 정식 질문입니다

현재 NAT (Network Address Translating) 방화벽으로 인터넷과 분리 된 웹 서버와 전자 메일 서버가 포함 된 DMZ로 네트워크를 설정하려고합니다.

다음 인터페이스로 NAT 방화벽을 설치했습니다.

WAN - x.x.x.x (redacted public IP address)
DMZ - 192.168.124.5/24
LAN - 192.168.123.5/24

DMZ에는 두 개의 호스트가 있습니다.

Web server - 192.168.124.30
E-mail server - 192.168.124.32

example.com도메인 example.commail.example.com공개 IP 주소를 모두 확인 하려면 도메인 의 DNS를 구성해야한다는 것을 알고 있습니다.

NAT 방화벽이 모든 수신 요청을 example.com192.168.124.30의 웹 서버로, 모든 수신 요청을 mail.example.com192.168.124.32의 전자 메일 서버 로 전달하고 싶습니다 . NAT 방화벽 구성에 "포트 포워딩"기능이 있지만 원하는 것을 얻을 수없는 것 같습니다.


3
특정 기술에 대한 언급을 제거하기 위해 귀하의 질문을 편집했습니다. 이 질문은 여전히 ​​똑같은 기본 사항을 요구하지만 기술 중립적 인 방법입니다. 마찬가지로 내 답변은 원래 질문에 적용되지만 방화벽 및 서비스 호스트 상황이 다른 다른 사람들이 여기에서 답변을 찾는 경우에도 적용됩니다.
Evan Anderson

답변:


18

TCP / IP 프로토콜 스택 계층 간, 특히 DNS와 응용 프로그램 계층 프로토콜 간 정보 흐름에 대한 생각에 혼란을 겪고 있습니다.

하나의 공개 IP 주소가 있습니다. 귀하의 DNS는 확실히 모두 해결할 수 mail.example.comexample.com같은 공용 IP 주소에 있습니다.

일반적으로 방화벽의 외부 인터페이스에서 수신 할 공용 IP 주소에 대한 요청을 포함하는 IP 데이터 그램에는 원격 클라이언트가 액세스하려는 호스트 이름이 포함되어 있지 않습니다. 두 호스트 이름이 모두 동일한 IP 주소로 확인되므로 방화벽은 원격 클라이언트가 확인한 호스트 이름을 마술처럼 "인식"할 수 없습니다. IP 계층은 응용 프로그램 계층에서 사용 된 호스트 이름을 인식하지 못합니다.

TCP 및 UDP 프로토콜은 포트 번호를 사용하여 호스트가 제공하는 특정 서비스를 차별화합니다. 예를 들어, NAT 방화벽의 포트 전달 (포트 주소 변환 또는 PAT라고도 함) 기능을 사용하여 인바운드 TCP 포트를 보내는 동안 들어오는 요청을 웹 서버로 TCP 포트 80 (HTTP)으로 보내는 것이 가능할 수 있습니다. 이메일 서버로 25 (SMTP).

그러나 두 시스템에서 동일한 서비스를 호스팅하려는 경우이 전략에 문제가 있습니다. 웹 서버의 보안 웹 사이트 (고객 액세스 용)와 전자 메일 서버의 보안 웹 사이트 (웹 메일 용)를 모두 호스팅한다고 가정합니다. NAT 방화벽의 공용 IP 주소에서 TCP 포트 443 (HTTPS)으로 들어오는 요청은 한 서버 또는 다른 서버로만 라우팅 될 수 있습니다.

이 상황에 대한 일반적인 해결책은 더 많은 공용 IP 주소를 갖는 것입니다. IPv4 주소가 부족해지기 때문에 문제가 될 수도 있습니다.

애플리케이션 계층의 일부 프로토콜에서는 공개 IP 주소의 부족 문제를 해결하기 위해 노력합니다 . 예를 들어, HTTP / 1.1은 Host:헤더를 추가하여 웹 서버가 동일한 공용 IP 주소에서 여러 웹 사이트를 호스팅 할 수 있도록합니다. TLS는 SNI ( Server Name Indication ) 확장을 추가하여 원격 클라이언트가 입력 한 호스트 이름을 기반으로 적절한 인증서를 선택할 수 있도록합니다.

응용 프로그램 계층에서 이러한 종류의 해결 방법을 사용하면 모든 응용 프로그램 계층 프로토콜에 고유 한 "수정"이 필요합니다 (그리고 모든 서버 및 클라이언트 소프트웨어가 해당 "수정"을 구현해야 함). 큰 주문입니다.

응용 프로그램 계층 프로토콜을 수정하는 대신 일부 프로토콜은 요청을 "라우팅"할 수있는 소프트웨어를 사용하여 여러 호스트간에 "멀티플렉싱"될 수 있습니다. 응용 프로그램 계층에서 패킷을 검사해야하므로 단순한 NAT 방화벽의 기능을 넘어 설 가능성이 있습니다. nginx와 같은 리버스 프록시를 사용하는 것은 HTTP 프로토콜에 대한 이러한 종류의 "멀티플렉싱"(또는 Microsoft 환경에서 Forefront TMG 또는 ISA Server의 웹 게시 규칙)에 대한 좋은 예입니다 . 이론적으로 모든 프로토콜은 리버스 프록시를 통해 멀티플렉싱 될 수 있지만 프로토콜이 더 난해할수록 사용자 정의 코드 작성에 대해 이야기 할 가능성이 높습니다.

단일 공용 IP 주소의 서로 다른 두 호스트에서 동일한 서비스를 제공해야하는 경우 항상 호스트 중 하나를 비표준 포트로 이동하는 옵션이 있습니다. 그러나 클라이언트는 비표준 포트를 알고 있어야합니다. HTTP (S)의 경우, http://example.com:XXX표기법 ( XXX비표준 포트 번호) 이있는 URL이 생성됩니다 . 이것이 당신의 상황에서 문제가 될지 여부는 당신 만이 결정할 수있는 것입니다. (제 경험에 따르면 실제로 최종 사용자는 :XXX직접 입력해야하는 URL에서 포트 표기법 을 처리 할 수 ​​없습니다 .)


1
"수정"이 아닌 해결 방법. :)
Michael Hampton

@MichaelHampton-나중에 들려! > smile <
Evan Anderson

@EvanAnderson 답변 주셔서 감사합니다. ForeFront와 함께 일하는 데 익숙해 져서 일이 엉망이 된 것 같습니다. 그러한 작업은 평범한 느낌이었습니다. 응용 프로그램 계층에서 작동하는이 기능을 갖춘 Linux 방화벽 배포에 대해 알고 있습니까? Shorewall을 아직 보았지만 iplayers를 기반으로하기 때문에 ip 레이어를 기반으로하기 때문에이 작업을 수행 할 수 있는지 확실하지 않습니다.
Atrotygma

5

"포트 포워딩"기능을 사용하면 : 80 및 : 443 ~ 192.168.124.30으로 향하는 트래픽과 나머지 포트 (또는 이메일 서버가 사용하도록 설정된 포트)를 192.168.124.32로 전송할 수 있습니다. 어떤 이유로 든 전자 메일 서버와 웹 서버에 대해 두 포트 중 하나가 필요한 경우 문제가 있습니다. 이 방법을 사용하려면 전자 메일 서버에 대한 모든 웹 액세스가 다른 (비표준) 포트에 있어야합니다. 포트 번호를 추가하거나 보안 연결을 지정하는 방법을 모르는 사용자를 위해 웹 서버를 설정 mail.example.com하여 대신 " " 라고 표시된 것을 리디렉션하도록 설정했을 것입니다 . (당신이 하는 권리, 메일 서버에 전용 보안 웹 연결을 사용하려고?)https://mail.example.com:other_port

이것은 응용 프로그램 계층이 아닌 전송 계층에 있으므로 심층적 인 패킷 검사에 의존 할 필요가 없습니다. 대신 포트의 TCP 헤더에서 찾기 쉬운 위치를 확인할 수 있습니다.


3

"들어오는 요청"이 다른 것, 즉 웹 서버의 웹 트래픽 (HTTP)과 메일 서버의 메일 트래픽 (SMTP)과 다른 경우, 실제로 수행 할 수 있습니다. HTTP는 TCP 포트 80 (HTTPS의 경우 443)을 사용하지만 SMTP는 TCP 포트 25를 사용합니다. 따라서 동일한 공용 IP 주소에서 HTTP 트래픽을 웹 서버로, SMTP 트래픽을 메일 서버로 전달할 수 있습니다. 이것이 "포트 포워딩"의 의미입니다. 모든 괜찮은 방화벽이 가능합니다.

그러나 우연히 두 서버가 동일한 유형의 트래픽을 허용해야하는 경우, 메일 서버가 웹 메일 서비스를 호스팅하는 경우 특정 포트 (80 및 / 또는 443)를 전달할 수 있기 때문에 문제가 있습니다 단일 서버에만; 클라이언트가 요청한 이름을 기준으로 웹 트래픽을 분리하려면 리버스 프록시와 같이 TCP / IP보다 높은 레벨에서 작동하는 것이 필요합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.