התחזות לתחילית החיבור

החל מגרסה 1.9.0 של Outline Client, מפתחות הגישה תומכים באפשרות 'קידומת'. ‫'prefix' היא רשימה של בייטים שמשמשים כבייטים הראשונים של ה-salt בחיבור Shadowsocks. כך החיבור נראה כמו פרוטוקול שמותר ברשת, ועוקף חומות אש שדוחות פרוטוקולים שהן לא מזהות.

מתי כדאי לנסות את זה?

אם אתם חושדים שהמשתמשים בפריסת Outline שלכם עדיין נחסמים, כדאי לנסות כמה קידומות שונות.

הוראות

הקידומת לא יכולה להיות ארוכה מ-16 בייט. קידומות ארוכות יותר עלולות לגרום להתנגשויות של מלח, מה שעלול לפגוע באבטחת ההצפנה ולגרום לזיהוי חיבורים. כדי לעקוף את החסימה, צריך להשתמש בקידומת הקצרה ביותר שאפשר.

היציאה שבה משתמשים צריכה להתאים לפרוטוקול שהקידומת מתיימרת להיות. ‫IANA מנהלת רישום של מספרי יציאות של פרוטוקולי העברה שכולל מיפוי של פרוטוקולים ומספרי יציאות.

דוגמאות לקידומות TCP יעילות שנראות כמו פרוטוקולים נפוצים:

יציאה מומלצת מוצפן ב-YAML קידוד כתובת URL
בקשת HTTP ‫80 (http) "POST " POST%20
תגובת HTTP ‫80 (http) "HTTP/1.1 " HTTP%2F1.1%20
בקשת DNS-over-TCP ‫53 (dns) "\u0005\u00DC\u005F\u00E0\u0001\u0020" %05%C3%9C_%C3%A0%01%20
TLS ClientHello ‫443 (https), ‏ 463 (smtps), ‏ 563 (nntps), ‏ 636 (ldaps), ‏ 989 (ftps-data), ‏ 990 (ftps), ‏ 993 (imaps), ‏ 995 (pop3s), ‏ 5223 (Apple APN), ‏ 5228 (Play Store), ‏ 5349 (turns) "\u0016\u0003\u0001\u0000\u00a8\u0001\u0001" %16%03%01%00%C2%A8%01%01
נתוני אפליקציה של TLS ‫443 (https), ‏ 463 (smtps), ‏ 563 (nntps), ‏ 636 (ldaps), ‏ 989 (ftps-data), ‏ 990 (ftps), ‏ 993 (imaps), ‏ 995 (pop3s), ‏ 5223 (Apple APN), ‏ 5228 (Play Store), ‏ 5349 (turns) "\u0013\u0003\u0003\u003F" %13%03%03%3F
TLS ServerHello ‫443 (https), ‏ 463 (smtps), ‏ 563 (nntps), ‏ 636 (ldaps), ‏ 989 (ftps-data), ‏ 990 (ftps), ‏ 993 (imaps), ‏ 995 (pop3s), ‏ 5223 (Apple APN), ‏ 5228 (Play Store), ‏ 5349 (turns) "\u0016\u0003\u0003\u0040\u0000\u0002" %16%03%03%40%00%02
SSH ‫22 (ssh), ‏ 830 (netconf-ssh), ‏ 4334 (netconf-ch-ssh), ‏ 5162 (snmpssh-trap) "SSH-2.0\r\n" SSH-2.0%0D%0A

דוגמאות לקידומות UDP יעילות שנראות כמו פרוטוקולים נפוצים:

יציאה מומלצת מוצפן ב-YAML
בקשת DNS ‫53 (dns) "\u006b\u007b\u0001\u0020" (הערה: צריך להקצות ערך אקראי לשני הבייטים הראשונים)
תגובת DNS ‫53 (dns) "\u006b\u007b\u0081\u00a0\u0000\u0001" (הערה: צריך להקצות ערך אקראי לשני הבייטים הראשונים)
QUIC Client Initial ‫443 (https) "\u00cd\u0000\u0000\u0000\u0001"

מפתחות גישה דינמיים

כדי להשתמש בתכונת הקידומת עם מפתחות גישה דינמיים (ssconf://), מוסיפים מפתח prefix לאובייקט ה-YAML, עם ערך בקידוד YAML שמייצג את הקידומת הרצויה (דוגמאות מופיעות בטבלה שלמעלה). אתם יכולים להשתמש בקודי escape (כמו ‎\u00FF) כדי לייצג נקודות קוד של Unicode שלא ניתן להדפיס בטווח U+0 עד U+FF. לדוגמה:

transport:
  $type: tcpudp
  tcp:
    <<: &shared
      $type: shadowsocks
      endpoint: 147.182.248.224:20478
      secret: cqXYJ2BtMyNHneQHjpIXyg
      cipher: chacha20-ietf-poly1305
    prefix: "\u0013\u0003\u0003\u003F"
  udp:
    <<: *shared
    prefix: "\u006b\u007b\u0001\u0020"

מפתחות גישה סטטיים

כדי להשתמש בקידומות עם מפתחות גישה סטטיים (ss://), צריך לשנות את המפתח הקיים לפני שמפיצים אותו. אם יש לכם מפתח גישה סטטי שנוצר על ידי Outline Manager, צריך להעתיק גרסה מקודדת ב-URL של הקידומת (דוגמאות לכך מופיעות בטבלה שלמעלה) ולהוסיף אותה לסוף מפתח הגישה באופן הבא:

ss://Z34nthataITHiTNIHTohithITHbVBqQ1o3bkk@127.0.0.1:33142/?outline=1&prefix=<your url-encoded prefix goes here>

קידומות בפורמט כתובת ה-URL פועלות רק בחיבורי TCP.

משתמשים מתקדמים יכולים להשתמש בפונקציה encodeURIComponent() בדפדפן כדי להמיר את הקידומת בקידוד JSON לקידומת בקידוד URL. כדי לעשות את זה, פותחים את מסוף בודק האינטרנט (*Developer > Javascript Web Console *ב-Chrome) ומקלידים את הפקודה הבאה:

encodeURIComponent("<your json-encoded prefix goes here>")

הקש Enter. הערך שיופק יהיה הגרסה *המקודדת בכתובת ה-URL*. לדוגמה:

encodeURIComponent("\u0016\u0003\u0001\u0000\u00a8\u0001\u0001")
'%16%03%01%00%C2%A8%01%01'