Konfigurasi Smart Dialer

Smart Dialer menelusuri strategi yang membatalkan pemblokiran 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 dns menentukan daftar resolver DNS yang akan diuji.
  • Setiap resolver DNS dapat berupa salah satu jenis berikut:
    • system: Menggunakan resolver sistem. Tentukan dengan objek kosong.
    • https: Menggunakan resolver DNS-over-HTTPS (DoH) terenkripsi.
    • tls: Menggunakan resolver DNS terenkripsi melalui TLS (DoT).
    • udp: Menggunakan resolver UDP.
    • tcp: Menggunakan resolver TCP.

DNS-over-HTTPS Resolver (DoH)

https:
  name: dns.google
  address: 8.8.8.8
  • name: Nama domain server DoH.
  • address: host:port server DoH. Defaultnya adalah name:443.

DNS-over-TLS Resolver (DoT)

tls:
  name: dns.google
  address: 8.8.8.8
  • name: Nama domain server DoT.
  • address: host:port server DoT. Default-nya adalah name:853.

Resolver UDP

udp:
  address: 8.8.8.8
  • address: host:port dari resolver UDP.

Resolver TCP

tcp:
  address: 8.8.8.8
  • address: host:port dari resolver TCP.

Konfigurasi TLS

  • Kolom tls menentukan daftar transpor TLS yang akan diuji.
  • Setiap transpor TLS adalah string yang menentukan transpor yang akan digunakan.
  • Misalnya, override:host=cloudflare.net|tlsfrag:1 menentukan transpor yang menggunakan domain fronting dengan Cloudflare dan fragmentasi TLS. Lihat dokumentasi konfigurasi untuk mengetahui detailnya.

Konfigurasi Penggantian

Konfigurasi penggantian digunakan jika tidak ada strategi tanpa proxy yang dapat terhubung. Misalnya, server proxy cadangan dapat ditentukan untuk mencoba koneksi pengguna. Penggunaan penggantian akan lebih lambat untuk dimulai, karena strategi DNS/TLS lainnya harus gagal/waktu tunggu habis terlebih dahulu.

String penggantian harus:

  • String konfigurasi StreamDialer yang valid seperti yang ditentukan dalam configurl.
  • 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:

  1. Hubungi tim Psiphon untuk mendapatkan konfigurasi yang memberi Anda akses ke jaringan mereka. Hal ini mungkin memerlukan kontrak.
  2. Tambahkan konfigurasi Psiphon yang diterima ke bagian fallback pada konfigurasi Smart Dialer Anda. Karena JSON kompatibel dengan YAML, Anda dapat menyalin dan menempelkan konfigurasi Psiphon langsung ke bagian fallback, seperti ini:
fallback:
  - psiphon: {
      "PropagationChannelId": "FFFFFFFFFFFFFFFF",
      "SponsorId": "FFFFFFFFFFFFFFFF",
      "DisableLocalSocksProxy" : true,
      "DisableLocalHTTPProxy" : true,
      ...
    }

Cara Menggunakan Telepon Pintar

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 tertentu.