본문으로 건너뛰기

스마트 다이얼러 구성

스마트 다이얼러는 주어진 테스트 도메인 목록에 대해 DNS 및 TLS 차단을 해제할 전략을 검색하며, 여러 전략을 기술하는 구성에서 전략을 선택합니다.

스마트 다이얼러를 위한 YAML 구성​

스마트 다이얼러에서 사용하는 구성은 YAML 형식입니다. 예를 들면 다음과 같습니다.

dns:
- system: {}
- https:
name: 8.8.8.8
- https:
name: 9.9.9.9
tls:
- ""
- split:2
- tlsfrag:1

fallback:
- ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNTprSzdEdHQ0MkJLOE9hRjBKYjdpWGFK@1.2.3.4:9999/?outline=1

DNS 구성​

  • dns 필드는 테스트하려는 DNS 리졸버 목록을 지정합니다.

  • 각 DNS 리졸버는 다음 유형 중 하나일 수 있습니다.

    • system: 시스템 리졸버를 사용합니다. 빈 객체로 지정하세요.

    • https: 암호화된 DNS-over-HTTPS(DoH) 리졸버를 사용합니다.

    • tls: 암호화된 DNS over TLS(DoT) 리졸버를 사용합니다.

    • udp: UDP 리졸버를 사용합니다.

    • tcp: TCP 리졸버를 사용합니다.

DNS-over-HTTPS 리졸버(DoH)​

https:
name: dns.google
address: 8.8.8.8
  • name: DoH 서버의 도메인 이름입니다.

  • address: DoH 서버의 호스트:포트입니다. 기본값은 name:443입니다.

DNS-over-TLS 리졸버(DoT)​

tls:
name: dns.google
address: 8.8.8.8
  • name: DoH 서버의 도메인 이름입니다.

  • address: DoT 서버의 호스트:포트입니다. 기본값은 name:853입니다.

UDP 리졸버​

udp:
address: 8.8.8.8
  • address: UDP 리졸버의 호스트:포트입니다.

TCP 리졸버​

tcp:
address: 8.8.8.8
  • address: TCP 리졸버의 호스트:포트입니다.

TLS 구성​

  • tls 필드는 테스트하려는 TLS 전송 목록을 지정합니다.

  • 각 TLS 전송은 사용하려는 전송을 지정하는 문자열입니다.

  • 예를 들어, override:host=cloudflare.net|tlsfrag:1은 Cloudflare 및 TLS 단편화를 통해 도메인 프론팅을 사용하는 전송을 지정합니다. 자세한 내용은 구성 문서를 참고하세요.

대체 구성​

대체 구성은 프록시리스 전략이 모두 연결에 실패할 경우 사용됩니다. 예를 들어 사용자의 연결을 시도할 백업 프록시 서버를 지정할 수 있습니다. 대체 구성을 사용할 경우, 다른 DNS/TLS 전략이 먼저 실패하거나 시간이 초과된 후에야 실행되므로 시작이 지연될 수 있습니다.

대체 문자열은 다음 중 하나여야 합니다.

  • configurl에 정의된 형식에 따른 유효한 StreamDialer 구성 문자열

  • psiphon 필드의 하위 요소로서 유효한 Psiphon 구성 객체

Shadowsocks 서버 예​

fallback:
- ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNTprSzdEdHQ0MkJLOE9hRjBKYjdpWGFK@1.2.3.4:9999/?outline=1

SOCKS5 서버 예​

fallback:
- socks5://[USERINFO]@[HOST]:[PORT]

Psiphon 구성 예​

Psiphon 네트워크를 사용하려면 다음을 수행해야 합니다.

  1. Psiphon 팀에 문의하여 해당 네트워크에 액세스할 수 있는 구성 정보를 받습니다. 계약이 필요할 수도 있습니다.

  2. 수신한 Psiphon 구성 정보를 스마트 다이얼러 구성의 fallback 섹션에 추가합니다. JSON은 YAML과 호환되므로 다음과 같이 Psiphon 구성을 fallback 섹션에 직접 복사하여 붙여넣을 수 있습니다.

fallback:
- psiphon: {
"PropagationChannelId": "FFFFFFFFFFFFFFFF",
"SponsorId": "FFFFFFFFFFFFFFFF",
"DisableLocalSocksProxy" : true,
"DisableLocalHTTPProxy" : true,
...
}
노트

Psiphon 코드베이스는 GPL 라이선스를 따르므로, 사용자의 코드에 라이선스 제한이 적용될 수 있습니다. Psiphon의 별도 라이선스 취득을 고려할 수도 있습니다.

스마트 다이얼러 사용 방법​

스마트 다이얼러를 사용하려면 StrategyFinder 객체를 만들고 NewDialer 메서드를 호출하여 테스트 도메인 목록과 YAML 구성을 전달합니다. NewDialer 메서드는 찾은 전략을 사용하여 연결을 생성할 수 있는 transport.StreamDialer 객체를 반환합니다. 예를 들면 다음과 같습니다.

finder := &smart.StrategyFinder{
TestTimeout: 5 * time.Second,
LogWriter: os.Stdout,
StreamDialer: &transport.TCPDialer{},
PacketDialer: &transport.UDPDialer{},
}

configBytes := []byte(`
dns:
- system: {}
- https:
name: 8.8.8.8
- https:
name: 9.9.9.9
tls:
- ""
- split:2
- tlsfrag:1
fallback:
- ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNTprSzdEdHQ0MkJLOE9hRjBKYjdpWGFK@1.2.3.4:9999/?outline=1
`)

dialer, err := finder.NewDialer(
context.Background(),
[]string{"www.google.com"},
configBytes
)
if err != nil {
// Handle error.
}

// Use dialer to create connections.

이 예시는 기본적인 사용 방법일 뿐이며 특정 사용 사례에 따라 조정이 필요할 수 있습니다.