HTTP 프록시를 사용할 때 로컬에서 DNS를 확인하는 방법이 있습니까?

HTTP 프록시를 사용할 때 로컬에서 DNS를 확인하는 방법이 있습니까?

이는 다음 질문을 기반으로 합니다.https://askubuntu.com/questions/447877/how-to-resolve-the-dns-locally-when-there-is-a-proxy-configured

나는 단지 거기에 있는지 알고 싶습니다.기존의이는 IP 범위를 프록시 예외 목록에 추가하고 클라이언트(웹 브라우저, IM 클라이언트, 이메일 클라이언트 등)가 로컬에서만 이름을 확인하고 IP 주소와 일치하지 않는 요청을 전달하도록 함으로써 수행됩니다.


추신: 저는 http 프록시가 어떻게 작동하는지 잘 알고 있지만 클라이언트가 먼저 DNS 캐시/파일/서버(있는 경우)를 요청하는 것을 막을 수는 없습니다. 이는 프록시 자체에는 도움이 되지 않지만 프록시로 전송되는 내용을 결정하는 데는 도움이 될 수 있습니다.

PPS: 예, 이는 기본 동작보다 덜 효율적일 수 있지만 누구에게도 이를 구현하도록 요청하지도 않고 기본 동작으로 설정하지도 않습니다. 적어도 Google은 그것에 대해 모르기 때문에 그것이 어떤 형태로 존재하는지 묻고 있습니다. (또한 dnsmasq와 같은 경우 작업을 두 번 수행하는 것은 그다지 중요하지 않습니다.)

답변1

내가 생각할 수 있는 유일한 방법은 다음과 같은 것을 설치하는 것입니다.소규모 에이전트그리고 URL의 도메인 이름을 기반으로 일부 요청을 직접 받고 나머지는 기본 프록시 squid나 다른 프록시로 전달하도록 구성합니다.

이에 따르면 man 5 tinyproxy이는 upstream구성 옵션을 통해 수행됩니다.

* 'upstream host:port "site_spec"' turns on the upstream proxy for the sites matching `site_spec`.

내 로컬 네트워크에서 이것을 실행 중이므로 얼마나 잘 작동하는지 squid모르겠습니다 .tinyproxy

답변2

예를 들어 파일이 기본 기능에서 이 기능을 사용하는 경우 proxy.pac로컬 DNS 조회가 필요합니다. 예를 들어dnsDomainIs()FindProxyForURL()

function FindProxyForURL(url, host) {
        if (dnsDomainIs(host, ".local.example.net"))
       { return "DIRECT" };

        if (dnsDomainIs(host, "work.example.net")
           || dnsDomainIs(host, "intranet.example.net)
           )
       { return "PROXY work.proxy.example.net:3128" };

    return "PROXY proxy.local.example.net:3128; DIRECT";
}

이는 브라우저가 로컬 URL에 직접 액세스하고, 작업별 URL에 대해 작동 중인 프록시 서버에 액세스하고(어떤 형태의 인증이 필요할 수 있음), 다른 모든 경우에는 로컬 네트워크의 로컬 프록시 서버에 액세스하도록 지시합니다(또는 직접 액세스). 도달할 수 없습니다).

관련 정보