O Smart Dialer (link em inglês) procura uma estratégia que desbloqueie o DNS e o TLS para uma lista específica de domínios de teste. Ele usa uma configuração que descreve várias estratégias para escolher.
Configuração YAML para o discador inteligente
A configuração que o discador inteligente usa está em um formato YAML. Exemplo:
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
Configuração do DNS
- O campo
dns
especifica uma lista de resolvedores de DNS a serem testados. - Cada resolvedor de DNS pode ser de um dos seguintes tipos:
system
: use o resolvedor do sistema. Especifique com um objeto vazio.https
: use um resolvedor DNS sobre HTTPS (DoH) criptografado.tls
: use um resolvedor DNS criptografado sobre TLS (DoT).udp
: use um resolvedor UDP.tcp
: use um solucionador TCP.
Resolvedor DNS sobre HTTPS (DoH)
https:
name: dns.google
address: 8.8.8.8
name
: o nome de domínio do servidor DoH.address
: o host:porta do servidor DoH. O padrão éname
:443.
Resolvedor DNS por TLS (DoT)
tls:
name: dns.google
address: 8.8.8.8
name
: o nome de domínio do servidor DoT.address
: o host:porta do servidor DoT. O padrão éname
:853.
Resolvedor UDP
udp:
address: 8.8.8.8
address
: o host:porta do resolvedor UDP.
Resolvedor TCP
tcp:
address: 8.8.8.8
address
: o host:porta do resolvedor TCP.
Configuração de TLS
- O campo
tls
especifica uma lista de transportes TLS a serem testados. - Cada transporte TLS é uma string que especifica o transporte a ser usado.
- Por exemplo,
override:host=cloudflare.net|tlsfrag:1
especifica um transporte que usa o fronting de domínio com a Cloudflare e a fragmentação TLS. Consulte a documentação de configuração para mais detalhes.
Configuração substituta
Uma configuração de fallback é usada se nenhuma das estratégias sem proxy conseguir se conectar. Por exemplo, ele pode especificar um servidor proxy de backup para tentar a conexão do usuário. O uso de um substituto será mais lento para começar, já que as outras estratégias DNS/TLS precisam falhar/expirar primeiro.
As strings de substituição precisam ser:
- Uma string de configuração
StreamDialer
válida, conforme definido emconfigurl
. - Um objeto de configuração válido do Psiphon como filho de um campo
psiphon
.
Exemplo de servidor Shadowsocks
fallback:
- ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNTprSzdEdHQ0MkJLOE9hRjBKYjdpWGFK@1.2.3.4:9999/?outline=1
Exemplo de servidor SOCKS5
fallback:
- socks5://[USERINFO]@[HOST]:[PORT]
Exemplo de configuração do Psiphon
Para usar a rede Psiphon, você precisa fazer o seguinte:
- Entre em contato com a equipe do Psiphon para receber uma configuração que dê acesso à rede. Isso pode exigir um contrato.
- Adicione a configuração do Psiphon recebida à seção
fallback
da configuração do discador inteligente. Como o JSON é compatível com o YAML, você pode copiar e colar a configuração do Psiphon diretamente na seçãofallback
, como esta:
fallback:
- psiphon: {
"PropagationChannelId": "FFFFFFFFFFFFFFFF",
"SponsorId": "FFFFFFFFFFFFFFFF",
"DisableLocalSocksProxy" : true,
"DisableLocalHTTPProxy" : true,
...
}
Como usar o discador inteligente
Para usar o discador inteligente, crie um objeto StrategyFinder
e chame o
método NewDialer
, transmitindo a lista de domínios de teste e a configuração YAML.
O método NewDialer
retorna um transport.StreamDialer
que pode ser usado
para criar conexões usando a estratégia encontrada. Exemplo:
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 é um exemplo básico e pode precisar ser adaptado para seu caso de uso específico.