การกำหนดค่า Smart Dialer

Smart Dialer จะค้นหากลยุทธ์ที่เลิกบล็อก DNS และ TLS สำหรับรายการโดเมนทดสอบที่ระบุ ซึ่งจะใช้การกำหนดค่าที่อธิบายรายละเอียดกลยุทธ์ต่างๆ เพื่อให้เลือกใช้งานได้

การกำหนดค่า YAML สำหรับ Smart Dialer

การกำหนดค่าที่ Smart Dialer ใช้จะอยู่ในรูปแบบ YAML ดังตัวอย่างต่อไปนี้

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

  • ฟิลด์ dns จะระบุรายการรีโซลเวอร์ DNS ที่จะทดสอบ
  • รีโซลเวอร์ DNS แต่ละรายการอาจเป็นประเภทใดประเภทหนึ่งต่อไปนี้
    • system: ใช้รีโซลเวอร์ระบบ ระบุด้วยออบเจ็กต์ที่ว่างเปล่า
    • https: ใช้รีโซลเวอร์ DNS over HTTPS (DoH) ที่เข้ารหัส
    • tls: ใช้รีโซลเวอร์ DNS over TLS (DoT) ที่เข้ารหัส
    • udp: ใช้รีโซลเวอร์ UDP
    • tcp: ใช้รีโซลเวอร์ TCP

รีโซลเวอร์ DNS-over-HTTPS (DoH)

https:
  name: dns.google
  address: 8.8.8.8
  • name: ชื่อโดเมนของเซิร์ฟเวอร์ DoH
  • address: host:port ของเซิร์ฟเวอร์ DoH ค่าเริ่มต้นคือ name:443

รีโซลเวอร์ DNS-over-TLS (DoT)

tls:
  name: dns.google
  address: 8.8.8.8
  • name: ชื่อโดเมนของเซิร์ฟเวอร์ DoT
  • address: host:port ของเซิร์ฟเวอร์ DoT ค่าเริ่มต้นคือ name:853

รีโซลเวอร์ UDP

udp:
  address: 8.8.8.8
  • address: host:port ของรีโซลเวอร์ UDP

รีโซลเวอร์ TCP

tcp:
  address: 8.8.8.8
  • address: host:port ของรีโซลเวอร์ TCP

การกำหนดค่า TLS

  • ฟิลด์ tls จะระบุรายการการรับส่งข้อมูล TLS ที่จะทดสอบ
  • การรับส่งข้อมูล TLS แต่ละรายการคือสตริงที่ระบุการรับส่งข้อมูลที่จะใช้
  • เช่น override:host=cloudflare.net|tlsfrag:1 จะระบุการรับส่งข้อมูลที่ใช้การทำ Domain Fronting ด้วย Cloudflare และการกระจาย Fragment ของ TLS ดูรายละเอียดได้จาก เอกสารประกอบการกำหนดค่า

การกำหนดค่าสำรอง

การกำหนดค่าสำรองจะใช้ในกรณีที่ไม่มีกลยุทธ์ปลอดพร็อกซีที่สามารถเชื่อมต่อได้ เช่น การกำหนดค่านี้ระบุพร็อกซีเซิร์ฟเวอร์สำรองเพื่อพยายามทำการเชื่อมต่อของผู้ใช้ การใช้การกำหนดค่าสำรองจะเริ่มต้นได้ช้ากว่า เนื่องจากต้องให้กลยุทธ์ DNS/TLS อื่นๆ ต้องล้มเหลว/หมดเวลาก่อน

สตริงสำรองควรเป็นดังนี้

  • สตริงการกำหนดค่า StreamDialer ที่ถูกต้องตามที่กำหนดไว้ใน configurl
  • ออบเจ็กต์การกำหนดค่า Psiphon ที่ถูกต้องเป็นรายการย่อยของฟิลด์ psiphon

ตัวอย่างเซิร์ฟเวอร์ Shadowsocks

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

ตัวอย่างเซิร์ฟเวอร์ SOCKS5

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

ตัวอย่างการกำหนดค่า Psiphon

หากต้องการใช้เครือข่าย Psiphon คุณจะต้องทำดังนี้

  1. ติดต่อทีม Psiphon เพื่อรับการกำหนดค่าที่ให้สิทธิ์เข้าถึงเครือข่าย ซึ่งการดำเนินการนี้อาจต้องมีการทำสัญญา
  2. เพิ่มการกำหนดค่า Psiphon ที่ได้รับมาในส่วน fallback ของการกำหนดค่า Smart Dialer เนื่องจาก JSON สามารถใช้งานร่วมกับ YAML คุณจึงคัดลอกและวางการกำหนดค่า Psiphon ลงในส่วน fallback ได้โดยตรงดังนี้
fallback:
  - psiphon: {
      "PropagationChannelId": "FFFFFFFFFFFFFFFF",
      "SponsorId": "FFFFFFFFFFFFFFFF",
      "DisableLocalSocksProxy" : true,
      "DisableLocalHTTPProxy" : true,
      ...
    }

วิธีใช้ Smart Dialer

หากต้องการใช้ Smart Dialer ให้สร้างออบเจ็กต์ StrategyFinder และเรียกใช้เมธอด NewDialer ซึ่งส่งผ่านในรายการโดเมนทดสอบและการกำหนดค่า YAML เมธอด NewDialer จะส่งกลับ transport.StreamDialer ที่สามารถใช้สร้างการเชื่อมต่อโดยใช้กลยุทธ์ที่พบ เช่น

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.

นี่เป็นเพียงตัวอย่างพื้นฐานและอาจต้องมีการปรับเปลี่ยนให้เข้ากับ Use Case ของคุณโดยเฉพาะ