De Smart Dialer zoekt naar een strategie waarmee DNS en TLS voor een bepaalde lijst testdomeinen wordt gedeblokkeerd. Je hebt hiervoor een configuratie nodig waarin meerdere strategieën worden beschreven om uit te kiezen.
YAML-configuratie voor de Smart Dialer
De configuratie die de Smart Dialer gebruikt, staat in de YAML-indeling. Een voorbeeld:
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-configuratie
- In het veld
dns
staat een lijst met DNS-resolvers om te testen. - Elke DNS-resolver kan een van de volgende typen zijn:
system
: Gebruik de systeemresolver. Specificeer met een leeg object.https
: Gebruik een versleutelde DNS-over-HTTPS-resolver (DoH).tls
: Gebruik een versleutelde DNS-over-TLS-resolver (DoT).udp
: Gebruik een UDP-resolver.tcp
: Gebruik een TCP-resolver.
DNS-over-HTTPS-resolver (DoH)
https:
name: dns.google
address: 8.8.8.8
name
: De domeinnaam van de DoH-server.address
: De host:port van de DoH-server. De standaardwaarde isname
:443.
DNS-over-TLS-resolver (DoT)
tls:
name: dns.google
address: 8.8.8.8
name
: De domeinnaam van de DoT-server.address
: De host:port van de DoT-server. De standaardwaarde isname
:853.
UDP-resolver
udp:
address: 8.8.8.8
address
: De host:port van de UDP-resolver.
TCP-resolver
tcp:
address: 8.8.8.8
address
: De host:port van de TCP-resolver.
TLS-configuratie
- In het veld
tls
staat een lijst met TLS-transporten om te testen. - Elk TLS-transport is een tekenreeks die aangeeft welk transport moet worden gebruikt.
override:host=cloudflare.net|tlsfrag:1
geeft bijvoorbeeld een transport aan dat domain fronting gebruikt met Cloudflare en TLS-fragmentatie. In de configuratiedocumentatie vind je meer informatie.
Reserveconfiguratie
Een reserveconfiguratie wordt gebruikt als via geen van de proxyloze strategieën verbinding kan worden gemaakt. Je kunt er bijvoorbeeld een back-upproxyserver in opgeven om de verbinding van de gebruiker mee te proberen. Als je een reserveconfiguratie gebruikt, start deze langzamer, omdat de andere DNS-/TLS-strategieën eerst moeten mislukken of er een time-out voor moet optreden.
De reservetekenreeksen moeten de volgende zijn:
- Een geldige
StreamDialer
-configuratietekenreeks zoals beschreven inconfigurl
. - Een geldig Psiphon-configuratieobject als onderliggend object van een
psiphon
-veld.
Voorbeeld voor Shadowsocks-server
fallback:
- ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNTprSzdEdHQ0MkJLOE9hRjBKYjdpWGFK@1.2.3.4:9999/?outline=1
Voorbeeld voor SOCKS5-server
fallback:
- socks5://[USERINFO]@[HOST]:[PORT]
Voorbeeld van Psiphon-configuratie
Als je het Psiphon-netwerk wilt gebruiken, moet je het volgende doen:
- Vraag het Psiphon-team om een configuratie waarmee je toegang krijgt tot hun netwerk. Je moet hiervoor misschien een contract aangaan.
- Voeg de Psiphon-configuratie die je hebt gekregen toe aan het gedeelte
fallback
van je Smart Dialer-configuratie. Json is compatibel met YAML, dus je kunt je Psiphon-configuratie rechtstreeks in het gedeeltefallback
kopiëren en plakken, zoals hier:
fallback:
- psiphon: {
"PropagationChannelId": "FFFFFFFFFFFFFFFF",
"SponsorId": "FFFFFFFFFFFFFFFF",
"DisableLocalSocksProxy" : true,
"DisableLocalHTTPProxy" : true,
...
}
De Smart Dialer gebruiken
Als je de Smart Dialer wilt gebruiken, maak je een StrategyFinder
-object en roep je de methode NewDialer
aan. Geef hierbij de lijst met testdomeinen en de YAML-configuratie mee.
Via de methode NewDialer
krijg je een transport.StreamDialer
waarmee je verbinding kunt maken via de gevonden strategie. Bijvoorbeeld:
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.
Dit is een algemeen voorbeeld, je moet het misschien aanpassen voor jouw specifieke use case.