Configuración de Smart Dialer

Smart Dialer busca una estrategia que desbloquee los protocolos DNS y TLS para una lista determinada de dominios de prueba. Para ello, admite un archivo de configuración en el que se describen múltiples estrategias entre las que se puede elegir.

Configuración en YAML para Smart Dialer

El archivo de configuración que admite Smart Dialer está en formato YAML. Este es un ejemplo:

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

Configuración de DNS

  • El campo dns especifica una lista de agentes de resolución de DNS que se deben probar.
  • Cada agente de resolución de DNS puede corresponder a uno de los siguientes tipos:
    • system: Usa el agente de resolución del sistema. Se especifica con un objeto vacío.
    • https: Usa un agente de resolución de DNS-over-HTTPS (DoH) encriptado.
    • tls: Usa un agente de resolución de DNS-over-TLS (DoT) encriptado.
    • udp: Usa un agente de resolución de UDP.
    • tcp: Usa un agente de resolución de TCP.

Agente de resolución de DNS-over-HTTPS (DoH)

https:
  name: dns.google
  address: 8.8.8.8
  • name: Es el nombre de dominio del servidor de DoH.
  • address: Es la dirección host:puerto del servidor de DoH. El valor predeterminado es name:443.

Agente de resolución de DNS-over-TLS (DoT)

tls:
  name: dns.google
  address: 8.8.8.8
  • name: Es el nombre de dominio del servidor de DoT.
  • address: Es la dirección host:puerto del servidor de DoT. El valor predeterminado es name:853.

Agente de resolución de UDP

udp:
  address: 8.8.8.8
  • address: Es la dirección host:puerto del agente de resolución de UDP.

Agente de resolución de TCP

tcp:
  address: 8.8.8.8
  • address: Es la dirección host:puerto del agente de resolución de TCP.

Configuración de TLS

  • El campo tls especifica una lista de transportes de TLS que se deben probar.
  • Cada transporte de TLS es una cadena que especifica el transporte que se usará.
  • Por ejemplo, override:host=cloudflare.net|tlsfrag:1 especifica un transporte que utiliza el fronting del dominio con Cloudflare y fragmentación de TLS. Consulta la documentación de configuración para conocer más detalles.

Configuración de resguardo

Se usa una configuración de resguardo si ninguna de las estrategias sin proxy permite conectarse. Por ejemplo, esta configuración puede especificar un servidor proxy de respaldo que intente realizar la conexión del usuario. Una configuración de resguardo se iniciará más lento, ya que las demás estrategias de DNS o TLS primero deben fallar o debe agotarse su tiempo de espera.

Cada cadena de resguardo debe cumplir con estas características:

  • Ser una cadena de configuración StreamDialer válida, como se define en configurl
  • Ser un objeto de configuración de Psiphon como elemento secundario de un campo psiphon

Ejemplo de servidor de Shadowsocks

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

Ejemplo de servidor de SOCKS5

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

Ejemplo de configuración de Psiphon

Para usar la red de Psiphon, deberás hacer lo siguiente:

  1. Comunícate con el equipo de Psiphon para obtener un archivo de configuración que te otorgue acceso a su red (lo que puede requerir la celebración de un contrato).
  2. Agrega el archivo de configuración de Psiphon a la sección fallback del archivo de configuración de Smart Dialer. Dado que JSON es compatible con YAML, puedes copiar y pegar el archivo de configuración de Psiphon directamente en la sección fallback, de forma similar a este ejemplo:
fallback:
  - psiphon: {
      "PropagationChannelId": "FFFFFFFFFFFFFFFF",
      "SponsorId": "FFFFFFFFFFFFFFFF",
      "DisableLocalSocksProxy" : true,
      "DisableLocalHTTPProxy" : true,
      ...
    }

Cómo usar Smart Dialer

Para usar Smart Dialer, crea un objeto StrategyFinder, llama al método NewDialer y pasa la lista de dominios de prueba y el archivo de configuración YAML. El método NewDialer devolverá un transport.StreamDialer que se puede usar para crear conexiones usando la estrategia encontrada. Por ejemplo:

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.

Este es un ejemplo básico y tal vez debas adaptarlo a tu caso de uso específico.