Cấu hình Trình quay số thông minh

Smart Dialer tìm kiếm một chiến lược giúp bỏ chặn DNS và TLS cho một danh sách miền kiểm thử nhất định. Thao tác này sẽ lấy một cấu hình mô tả nhiều chiến lược để chọn.

Cấu hình YAML cho Trình quay số thông minh

Cấu hình mà Trình quay số thông minh sử dụng có định dạng YAML. Dưới đây là ví dụ:

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

Cấu hình DNS

  • Trường dns chỉ định danh sách các trình phân giải DNS cần kiểm thử.
  • Mỗi trình phân giải DNS có thể thuộc một trong các loại sau:
    • system: Sử dụng trình phân giải hệ thống. Chỉ định bằng một đối tượng trống.
    • https: Sử dụng một trình phân giải DNS-over-HTTPS (DoH) đã mã hoá.
    • tls: Sử dụng một trình phân giải DNS được mã hoá qua TLS (DoT).
    • udp: Sử dụng một trình phân giải UDP.
    • tcp: Sử dụng trình phân giải TCP.

Trình phân giải DNS-over-HTTPS (DoH)

https:
  name: dns.google
  address: 8.8.8.8
  • name: Tên miền của máy chủ DoH.
  • address: Máy chủ lưu trữ:cổng của máy chủ DoH. Giá trị mặc định là name:443.

Trình phân giải DNS-over-TLS (DoT)

tls:
  name: dns.google
  address: 8.8.8.8
  • name: Tên miền của máy chủ DoT.
  • address: Máy chủ lưu trữ:cổng của máy chủ DoT. Giá trị mặc định là name:853.

Trình phân giải UDP

udp:
  address: 8.8.8.8
  • address: Host:port của trình phân giải UDP.

Trình phân giải TCP

tcp:
  address: 8.8.8.8
  • address: Host:port của trình phân giải TCP.

Cấu hình TLS

  • Trường tls chỉ định danh sách các phương thức truyền tải TLS cần kiểm thử.
  • Mỗi phương thức truyền tải TLS là một chuỗi chỉ định phương thức truyền tải cần sử dụng.
  • Ví dụ: override:host=cloudflare.net|tlsfrag:1 chỉ định một phương thức truyền tải sử dụng kỹ thuật che giấu nguồn gốc với Cloudflare và phân mảnh TLS. Hãy xem tài liệu về cấu hình để biết thông tin chi tiết.

Cấu hình dự phòng

Cấu hình dự phòng sẽ được dùng nếu không có chiến lược không dùng proxy nào có thể kết nối. Ví dụ: bạn có thể chỉ định một máy chủ proxy dự phòng để thử kết nối của người dùng. Việc sử dụng một phương án dự phòng sẽ mất nhiều thời gian hơn để bắt đầu, vì trước tiên, các chiến lược DNS/TLS khác phải thất bại/hết thời gian chờ.

Các chuỗi dự phòng phải là:

  • Một chuỗi cấu hình StreamDialer hợp lệ như được xác định trong configurl.
  • Một đối tượng cấu hình Psiphon hợp lệ dưới dạng phần tử con của trường psiphon.

Ví dụ về máy chủ Shadowsocks

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

Ví dụ về máy chủ SOCKS5

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

Ví dụ về cấu hình Psiphon

Để sử dụng mạng Psiphon, bạn cần:

  1. Hãy liên hệ với nhóm Psiphon để lấy một cấu hình cho phép bạn truy cập vào mạng của họ. Bạn có thể cần phải ký hợp đồng.
  2. Thêm cấu hình Psiphon đã nhận vào phần fallback trong cấu hình Smart Dialer. Vì JSON tương thích với YAML, nên bạn có thể sao chép và dán cấu hình Psiphon trực tiếp vào phần fallback, như sau:
fallback:
  - psiphon: {
      "PropagationChannelId": "FFFFFFFFFFFFFFFF",
      "SponsorId": "FFFFFFFFFFFFFFFF",
      "DisableLocalSocksProxy" : true,
      "DisableLocalHTTPProxy" : true,
      ...
    }

Cách sử dụng Trình quay số thông minh

Để sử dụng Trình gọi thông minh, hãy tạo một đối tượng StrategyFinder và gọi phương thức NewDialer, truyền vào danh sách các miền kiểm thử và cấu hình YAML. Phương thức NewDialer sẽ trả về một transport.StreamDialer mà bạn có thể dùng để tạo các kết nối bằng chiến lược đã tìm thấy. Ví dụ:

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.

Đây là một ví dụ cơ bản và có thể cần được điều chỉnh cho phù hợp với trường hợp sử dụng cụ thể của bạn.

Thêm chiến lược dự phòng mới

Chiến lược dự phòng được sử dụng khi không có chiến lược không dùng proxy nào thành công. Đây thường là những proxy được kỳ vọng là đáng tin cậy hơn.

Cách thêm chiến lược dự phòng mới:

  1. Tạo hàm FallbackParser. Hàm này lấy một YAMLNode và trả về một transport.StreamDialer cùng một chữ ký cấu hình.
  2. Đăng ký FallbackParser bằng phương thức mobileproxy.SmartDialerOptions.RegisterFallbackParser.

Ví dụ: đây là cách bạn có thể đăng ký một phương án dự phòng được định cấu hình bằng {error: "my error message"} luôn trả về lỗi khi quay số:

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")
  //...
}