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
dnschỉ đị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
tlschỉ đị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:1chỉ đị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
StreamDialerhợp lệ như được xác định trongconfigurl. - 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:
- 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.
- Thêm cấu hình Psiphon đã nhận vào phần
fallbacktrong 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ầnfallback, 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:
- Tạo hàm
FallbackParser. Hàm này lấy mộtYAMLNodevà trả về mộttransport.StreamDialercùng một chữ ký cấu hình. - Đăng ký
FallbackParserbằng phương thứcmobileproxy.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")
//...
}