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