%20DNS%20%EC%A1%B0%ED%9A%8C%EA%B0%80%20%EC%9E%91%EB%8F%99%ED%95%98%EB%8A%94%20%EB%B0%A9%EC%8B%9D.png)
나는 최근 클라이언트가 프록시 서버로부터 페이지를 요청할 때 어떤 일이 일어나는지에 관한 토론에 참여했습니다. 나는 단지 일반적인 경우에 이 일련의 사건에 대한 내가 이해한 것이 올바른지 확인하고 싶었을 뿐입니다.
- 사용자 요청 사이트
- 클라이언트는 DNS 요청을 구성된 DNS 서버로 전송하여 대상 IP 주소를 확인합니다(프록시를 우회하도록 구성된 HTTP 요청을 수용하기 위해 먼저 수행됨).
- DNS로부터 대상 IP를 수신하고 HTTP 요청이 전송되기 직전에 요청을 예외 목록과 비교하여 확인합니다.
- 대상 서버가 예외 목록에 없으면 요청이 프록시 서버로 전달됩니다.
- 대상 서버가 예외 목록에 있으면 클라이언트 시스템의 라우팅 테이블에 따라 요청이 전달됩니다.
어떤 피드백이라도 매우 감사하겠습니다.
답변1
정확하지는 않습니다. 클라이언트 구성 방법에 따라 다릅니다. 기본 예제로 IE를 사용해 보겠습니다.
IE를 구성하는 경우명백한대리:예를 들어 다른 옵션을 선택하지 않고 프록시를 8080으로 설정합니다.
사용자가 주소를 입력합니다.
IE는 주소를 확인합니다.IE 프록시 예외 목록과 문자열 일치(예: "다음 주소에 대해 프록시 우회:")
ㅏ.의 항목과 일치하는 경우우회로목록,고객용도자체 DNS이름을 확인하고클라이언트는 대상 IP 주소에 직접 연결됩니다.포트 80(가정)에서 다음과 같은 요청을 보냅니다.
GET /something.htm HTTP/1.1
Host: fulldomainame.example.com
비.우회 목록 항목이 일치하지 않는 경우, 계속하다:
IE는 구성된 프록시에 연결합니다., 다음 형식의 요청을 보냅니다.
GET http://fulldomainname.example.com/something.htm HTTP/1.1
보너스 사실: 이 사용은URL의 FQDN클라이언트에게 알릴 수 있는 한 가지 방법은생각한다실제 웹 서버 대신 프록시와 통신하고 있습니다.
프록시는 해당 호스트 이름을 확인합니다.사용하여그 자체의DNS를 누른 다음 대상 사이트(위 2단계의 클라이언트처럼 작동) 등에 연결합니다.
WPAD/PAC를 사용하는 경우:
자동 구성이 활성화될 때 ISA/TMG에서 제공하는 것과 같은 WPAD(웹 프록시 자동 검색) 또는 PAC 또는 Autoconfig(프록시 자동 구성) 스크립트를 사용하는 경우 다음과 같이 다릅니다.
사용자가 주소를 입력합니다.
고객다운로드현재wpad.dat/autoproxy.js/.pac구성된 위치의 파일
클라이언트는 "FindProxyForUrl"를 js 파일에 저장하고 실행합니다.
Autoproxy 스크립트는 다음을 처리합니다.호스트 이름그리고URL. 이는 제한된 기능의 자바스크립트 파일이지만 여전히 많은 작업이 가능합니다.
ㅏ. 여기에는 다음이 포함될 수 있습니다.이름 확인(IsInNet, DnsResolve)
비. 여기에는 다음이 포함될 수 있습니다.문자열 일치(ShExpMatch)
씨. 여기에는 다음이 포함될 수 있습니다.백만까지 계산(i++)
디. 여기에는 다음이 포함될 수 있습니다난해한 경고 팝업 메시지관리자가 바보라면
- (아니면 그냥 웃겼음)
- ((또는 디버깅))
그만큼FindProxyForUrl함수는 적어도 하나의 문자열을 반환합니다.: 사용할 최고의 프록시 순서 목록(세미콜론으로 구분)
ㅏ. 어느 하나"직접", 이 경우 클라이언트는 위의 우회 사례에 따라 이름 자체를 확인하고 직접 연결해야 합니다.
비. 또는"PROXY 프록시 이름:8080"또는 이와 유사한 경우 클라이언트가 해당 프록시의 해당 포트에 연결하여 다음과 같이 지시합니다.전체 URL을 얻으세요, 그리고프록시가 이름 확인을 수행합니다..
- 로서예: 스크립트 함수가 반환된 경우"PROXY yourProxy:8080;직접"클라이언트에게 연결하라고 지시합니다.너의 프록시TCP 포트에서8080이 URL을 요청하고,저것연결을 설정할 수 없습니다. 직접 연결해 보세요. 메모TCP 세션 설정 실패는 그다지 빠르지 않으므로 사용자에게 유쾌한 장애 조치 경험은 아니지만 그 어떤 것도 뛰어넘지 못합니다. 아마도.
때때로 결함, 미묘함 및 설명할 수 없는 동작이 있지만 대부분의 경우 이상하고 흥미로운 방식으로 문제가 발생하지 않는 경우 위의 내용은 제가 수년에 걸쳐 작동하는 방식을 본 것입니다. 최신 브라우저는 동작을 최적화하고 병렬화하며 항상 흥미로운 작업을 시도하고 있으므로 해당 브라우저에 대한 최신 문서를 확인하여 세부적인 내용을 이해하세요.
WinSock 프록시/ISA 방화벽 클라이언트/TMG 클라이언트:
TMG/ISA 서버의 Winsock 프록시 클라이언트에 관심이 있다면 이는 더 유연하고 움직이는 부분이 있는 다른 이야기입니다. 여기에 들어갈 내용이 너무 많지만 작동 방식을 설명하는 문서가 있습니다. 즉, Windows 소켓에 연결되어 앱별 및 사용자별로 TCP/UDP 기반 트래픽과 이름 확인 요청을 모두 가로챌 수 있습니다. 매우 강력하지만 현재는 더 이상 사용되지 않으며 몇 년 동안 업데이트되지 않았습니다.
고객은 정말 집착할 수 있습니다.
하나최종 메모: HTTP 클라이언트가 특정 사이트/URL에 대해 프록시와 통신하기로 결정하면,프록시가 그렇게 하지 말라고 할 방법이 없습니다..
"나는 그것을 제공하지 않습니다. 대신 직접 이동해야 합니다"에 대한 HTTP 상태 코드나 헤더가 없습니다...
클라이언트가 특정 URL이 프록시 제공된다고 결정하면,대리 죽음의 손아귀계속됩니다.
이를 방지하는 유일한 방법은 클라이언트가 연결하기 직전에 PAC 또는 우회 목록에서 선택 논리를 가져오는 것입니다.
영역 및 PAC 파일에 대한 최종 참고 사항
IE는 다음과 같은 사이트를 처리합니다.직접연결됨 - URL에 점이 있는 경우에도 - 로컬 인트라넷 영역의 일부가 되기 위해(기본적으로 - 영역 속성에서 설정 가능) 해당 사이트에 Windows 통합 인증(예: Kerberos 및/또는 NTLM 인증)을 허용하는 등의 작업을 수행합니다. , 투명하게). 따라서 로컬 인트라넷 영역에 항목이 있는지 여부를 제어하면 자동 인증 측면에서 해당 항목의 신뢰 정도가 정의됩니다. 다시 말하지만, 적어도 기본적으로는 그렇습니다.
답변2
귀하의 DNS 부분이 맞는지 잘 모르겠습니다. 유효한 DNS 서버가 없는 시스템이 프록시를 사용하여 IE에서 페이지를 가져오는 것을 본 적이 있습니다.
답변3
나는 우분투 10.04, 와인, IE 6.0 및 오징어 2.7에서 시도합니다(시스템에는 하나의 DNS가 있고 오징어에는 다른 DNS 서버가 있습니다)
- 사용자가 프록시에 요청 보내기
- Squid는 DNS 서버에 DNS 요청을 보냅니다.
- 오징어는 DNS 응답을 받습니다. nxdomain 또는 기타 오류가 발생하면 오류 페이지를 IE로 보냅니다. 이름이 확인되면 페이지를 가져와 IE에 제공합니다.
IE 6.0은 DNS 이름을 확인하지 않습니다.
답변4
나는 그렇지 않다고 생각합니다. IP와 도메인을 예외 목록에 입력하거나 도메인을 입력하고 IP가 예외 목록에 있으면 아마도 여전히 프록시를 통해 전달될 것입니다.
Proxy.pac/wpad.dat를 사용하면 이 동작에서 강제로 벗어날 수 있습니다.