WPAD (Web Proxy Autodiscovery Protocol)

Warning

미꾸라지 v4.3.15 버전부터 기본적으로 아이템에 설정된 중계 서버 혹은 Full VPN 모드 에 설정된 중계 서버만 연결이 됩니다. 나머지 중계 서버들은 명시적으로 연결 설정을 하지 않는 이상 연결하지 않습니다.

이로 인해 연결되지 않는 중계 서버 IP 를 WPAD 문법에 사용될 경우 연결이 안되는 이슈가 있을 수 있습니다. 이 문제를 해결하기 위해서는

  • 종량제 요금제 사용자의 경우 Custom 아이템 제작 을 하여 중계 서버를 자동 연결되도록 할 수 있습니다.
  • 혹은 Mudfish Launcher 상에서 “상태 -> 중계 서버” 메뉴에 들어가셔서 사용하시는 중계 서버를 클릭하면 뜨는 팝업창 상의 “연결 (Bind)” 버튼을 클릭하시면 임시적으로 (명시적으로) 해당 중계 서버와 연결이 됩니다.

소개

Web Proxy Auto-Discovery (WPAD) 프로토콜은 DHCP 혹은 DNS discovery 방법을 사용하여 사용자가 설정 파일의 URL 위치를 알 수 있도록 하는 방법중에 하나인데요, 이것이 작동하게 되면 브라우저는 자동으로 설정 파일을 다운로드 받아서 특정 URL 혹은 호스트에 대한 proxy 설정을 하게 됩니다. 사실 WPAD 프로토콜은 설정 파일을 어떻게 발견할 수 있을 까하는 방법론에 관한 것이 대부분이고 실제 설정 파일 포맷에 대허는 Proxy auto-config format 이 사용됩니다. 참고로 PAC 파일 포멧은 정말 옛날 브라우저인 Netscape Navigator 에서 처음 소개되었습니다.

미꾸라지에서 이 기능을 사용하실려면 전문가 모드 활성화할 경우 사용할 수 있습니다. WPAD 모드에 대해 자세한 내용은 아래의 섹션들을 참고해 주세요.

쉽게 따라하는 PAC 포맷 예제

처음 미꾸라지 UI 의 ‘설정 -> WPAD’ 메뉴에 들어가시면 아래와 같이 기본 설정이 들어가 있는데요, 이 내용을 수정하고 자신이 원하는 사이트를 넣음으로써 가속 적용 여부를 정할 수 있습니다.

/*
 * 이 예제는 사용자가 아무런 rule 을 설정하지 않았을 때 나타나는 기본
 * 설정 파일입니다.
 */
function FindProxyForURL(url, host) {
    /* 모든 요청을 PROXY (SOCKS) 서버를 거치지 않고 직접 연결합니다. */
    return "DIRECT";
}

예를 들어, 던전 파이터 홈페이지 (http://df.nexon.com) 와 블러드앤소울 홈페이지 (http://bns.plaync.com) 에 접속하는 부분을 미꾸라지 ‘KR Asia (S. Korea - KT2 IDC)’ 중계 서버를 통해 접속하고 나머지는 모두 직접 접속하고 싶을 때를 가정해 보겠습니다.

‘KR Asia (S. Korea - KT2 IDC)’ 중계 서버의 Public IP (14.63.185.131) 을 통해 접속을 하고자 한다면 아래와 같이 할 수 있습니다.

Note

현재 각 중계 서버는 Public IP 에 대해 아래와 같이 listening port 를 열고 있습니다.

  • TCP 18080 (HTTP 프로토콜)
  • TCP 18081 (SOCKS v5 프로토콜)
  • TCP 18082 (HTTPS (SSL) 프로토콜)

Warning

Public IP 를 통한 방법은 브라우저가 SOCKSv5 계정 인증을 대부분 지원하지 않기 때문에 사용할 수 없습니다.

Public IP 이용
function FindProxyForURL(url, host) {
    if (shExpMatch(host, "df.nexon.com"))
        return "PROXY 14.63.185.131:18080";
    if (shExpMatch(host, "bns.plaync.com"))
        return "HTTPS 14.63.185.131:18082";
    return "DIRECT";
}

‘KR Asia (S. Korea - KT2 IDC)’ 중계 서버의 Private IP (10.253.240.1) 을 통해 접속을 하고자 한다면 아래와 같이 할 수 있습니다.

Note

현재 각 중계 서버는 Private IP 에 대해 아래와 같이 listening port 를 열고 있습니다.

  • TCP 8080 (HTTP 프로토콜)
  • TCP 8081 (SOCKS v5 프로토콜)
Private IP 이용
function FindProxyForURL(url, host) {
    if (shExpMatch(host, "df.nexon.com"))
        return "PROXY 10.253.240.1:8080";
    if (shExpMatch(host, "bns.plaync.com"))
        return "SOCKS 10.253.240.1:8081";
    return "DIRECT";
}

그럼 반대의 경우도 생각해 볼 수 있는데요, 특정 페이지를 제외한 모든 접속을 미꾸라지 특정 노드를 통해 접속하도록 할 수 있습니다.

function FindProxyForURL(url, host) {
    /*
     * 127.0.0.1 주소는 반드시 예외 처리를 해주셔야 합니다.  왜냐하면
     * 해당 주소는 Mudfish Launcher 가 사용하는 주소 중의 하나이기
     * 때문입니다.
     */
    if (shExpMatch(host, "localhost") ||
        shExpMatch(host, "127.0.0.1"))
        return "DIRECT";
    return "PROXY 10.255.96.1:8080";
}

Warning

모든 요청을 HTTP 혹은 SOCKS proxy 을 거치도록 설정을 하고 싶다면 반드시 127.0.0.1 주소와 localhost 주소는 예외 처리해 주셔야 합니다. 그렇지 않으면 브라우저 상에서 작동하는 MUDFISH Launcher 가 제대로 동작하지 않을 수 있습니다.

기타 아래의 각각 함수들의 사용법을 통해서 좀 더 유연하게 웹 페이지들의 주소를 설정할 수 있습니다.