Smart Dialer menelusuri strategi yang membuka blokir DNS dan TLS untuk daftar domain pengujian tertentu. Fungsi ini memerlukan konfigurasi yang menjelaskan beberapa strategi untuk dipilih.
Konfigurasi YAML untuk Smart Dialer
Konfigurasi yang digunakan Smart Dialer memiliki format YAML. Berikut ini contohnya:
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
Konfigurasi DNS
- Kolom
dnsmenentukan daftar resolver DNS yang akan diuji. - Setiap resolver DNS dapat berupa salah satu jenis berikut:
system: Menggunakan resolver sistem. Tentukan dengan objek kosong.https: Gunakan pemroses DNS-over-HTTPS (DoH) terenkripsi.tls: Gunakan resolver DNS melalui TLS (DoT) terenkripsi.udp: Menggunakan resolver UDP.tcp: Gunakan TCP resolver.
Resolver DNS-over-HTTPS (DoH)
https:
name: dns.google
address: 8.8.8.8
name: Nama domain server DoH.address: Host:port server DoH. Defaultnya adalahname:443.
Resolver DNS-over-TLS (DoT)
tls:
name: dns.google
address: 8.8.8.8
name: Nama domain server DoT.address: Host:port server DoT. Default-nya adalahname:853.
Resolver UDP
udp:
address: 8.8.8.8
address: Host:port resolver UDP.
TCP Resolver
tcp:
address: 8.8.8.8
address: Host:port dari resolver TCP.
Konfigurasi TLS
- Kolom
tlsmenentukan daftar transport TLS yang akan diuji. - Setiap transport TLS adalah string yang menentukan transport yang akan digunakan.
- Misalnya,
override:host=cloudflare.net|tlsfrag:1menentukan transport yang menggunakan domain fronting dengan Cloudflare dan fragmentasi TLS. Lihat dokumentasi config untuk mengetahui detailnya.
Konfigurasi Penggantian
Konfigurasi penggantian digunakan jika tidak ada strategi tanpa proxy yang dapat terhubung. Misalnya, server proxy ini dapat menentukan server proxy cadangan untuk mencoba koneksi pengguna. Penggunaan penggantian akan lebih lambat untuk dimulai, karena strategi DNS/TLS lainnya harus gagal/waktunya habis terlebih dahulu.
String penggantiannya harus:
- String konfigurasi
StreamDialeryang valid seperti yang ditentukan dalamconfigurl. - Objek konfigurasi Psiphon yang valid sebagai turunan kolom
psiphon.
Contoh server Shadowsocks
fallback:
- ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNTprSzdEdHQ0MkJLOE9hRjBKYjdpWGFK@1.2.3.4:9999/?outline=1
Contoh server SOCKS5
fallback:
- socks5://[USERINFO]@[HOST]:[PORT]
Contoh konfigurasi Psiphon
Untuk menggunakan jaringan Psiphon, Anda harus:
- Hubungi tim Psiphon untuk mendapatkan konfigurasi yang memberi Anda akses ke jaringan mereka. Hal ini mungkin memerlukan kontrak.
- Tambahkan konfigurasi Psiphon yang diterima ke bagian
fallbackkonfigurasi Smart Dialer Anda. Karena JSON kompatibel dengan YAML, Anda dapat menyalin dan menempelkan konfigurasi Psiphon langsung ke bagianfallback, seperti ini:
fallback:
- psiphon: {
"PropagationChannelId": "FFFFFFFFFFFFFFFF",
"SponsorId": "FFFFFFFFFFFFFFFF",
"DisableLocalSocksProxy" : true,
"DisableLocalHTTPProxy" : true,
...
}
Cara Menggunakan Smart Dialer
Untuk menggunakan Smart Dialer, buat objek StrategyFinder dan panggil metode
NewDialer, dengan meneruskan daftar domain pengujian dan konfigurasi YAML.
Metode NewDialer akan menampilkan transport.StreamDialer yang dapat digunakan
untuk membuat koneksi menggunakan strategi yang ditemukan. Contoh:
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.
Ini adalah contoh dasar dan mungkin perlu disesuaikan untuk kasus penggunaan spesifik Anda.
Menambahkan strategi penggantian baru
Strategi penggantian digunakan jika tidak ada strategi tanpa proxy yang berhasil. Biasanya, ini adalah proxy yang diharapkan lebih andal.
Untuk menambahkan strategi penggantian baru:
- Buat fungsi
FallbackParser. Fungsi ini mengambilYAMLNodedan menampilkantransport.StreamDialerserta tanda tangan konfigurasi. - Daftarkan
FallbackParserdengan metodemobileproxy.SmartDialerOptions.RegisterFallbackParser.
Misalnya, berikut cara mendaftarkan penggantian yang dikonfigurasi dengan
{error: "my error message"} yang selalu menampilkan error saat melakukan panggilan:
func RegisterErrorConfig(opt *mobileproxy.SmartDialerOptions, name string) {
opt.RegisterFallbackParser(name, func(ctx context.Context, yamlNode smart.YAMLNode) (transport.StreamDialer, string, error) {
switch typed := yamlNode.(type) {
case string:
dialer := transport.FuncStreamDialer(func(ctx context.Context, addr string) (transport.StreamConn, error) {
return nil, errors.New(typed)
})
return dialer, typed, nil
default:
return nil, "", fmt.Errorf("invalid error dialer config")
}
})
}
func main() {
// ...
opts := mobileproxy.NewSmartDialerOptions(mobileproxy.NewListFromLines(*testDomainsFlag), *configFlag)
opts.SetLogWriter(mobileproxy.NewStderrLogWriter())
RegisterErrorConfig(opts, "error")
//...
}