הגדרת 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 מוצפן על גבי HTTPS‏ (DoH).
    • tls: שימוש במפַתח DNS מוצפן ב-TLS‏ (DoT).
    • udp: שימוש ב-UDP Resolver.
    • tcp: שימוש ב-TCP Resolver.

פותר DNS-over-HTTPS‏ (DoH)

https:
  name: dns.google
  address: 8.8.8.8
  • name: שם הדומיין של שרת ה-DoH.
  • address: המארח:יציאה של שרת ה-DoH. ברירת המחדל היא name:443.

DNS-over-TLS Resolver‏ (DoT)

tls:
  name: dns.google
  address: 8.8.8.8
  • name: שם הדומיין של שרת ה-DoT.
  • address: המארח:יציאה של שרת ה-DoT. ברירת המחדל היא name:853.

UDP Resolver

udp:
  address: 8.8.8.8
  • address: המארח:יציאה של פותר ה-UDP.

TCP Resolver

tcp:
  address: 8.8.8.8
  • address: המארח:יציאה של פותר ה-TCP.

הגדרת TLS

  • השדה tls מציין רשימה של אמצעי התעבורה של TLS לבדיקה.
  • כל תעבורת TLS היא מחרוזת שמציינת את התעבורה שבה צריך להשתמש.
  • לדוגמה, הערך override:host=cloudflare.net|tlsfrag:1 מציין תעבורה שמשתמשת ב-domain fronting עם Cloudflare ובהצפנה מחולקת של TLS. פרטים נוספים זמינים במסמכי התיעוד בנושא הגדרות.

הגדרת חלופה

המערכת משתמשת בהגדרה חלופית אם אף אחת מהאסטרטגיות ללא שרת proxy לא מצליחה להתחבר. לדוגמה, אפשר לציין שרת proxy לגיבוי כדי לנסות את החיבור של המשתמש. השימוש בחלופה יהיה איטי יותר, כי קודם כל אסטרטגיות ה-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, יוצרים אובייקט 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.

זוהי דוגמה בסיסית, וייתכן שתצטרכו להתאים אותה לתרחיש לדוגמה הספציפי שלכם.