הפניה להגדרות של Outline

‫Outline משתמש בתצורה מבוססת-YAML כדי להגדיר פרמטרים של VPN ולטפל בתנועת TCP/UDP. ההגדרה תומכת בהרכבה במספר רמות, ומאפשרת הגדרות גמישות וניתנות להרחבה.

בהגדרה ברמה העליונה מצוין TunnelConfig.

דוגמאות

הגדרה טיפוסית של Shadowsocks תיראה כך:

transport:
  $type: tcpudp

  tcp:
    $type: shadowsocks
    endpoint: ss.example.com:4321
    cipher: chacha20-ietf-poly1305
    secret: SECRET
    prefix: "POST "

  udp:
    $type: shadowsocks
    endpoint: ss.example.com:4321
    cipher: chacha20-ietf-poly1305
    secret: SECRET

שימו לב שעכשיו אפשר להפעיל TCP ו-UDP ביציאות או בנקודות קצה שונות.

כדי להימנע משכפול, אפשר להשתמש בעוגני YAML ובמפתח << merge:

transport:
  $type: tcpudp

  tcp:
    <<: &shared
      $type: shadowsocks
      endpoint: ss.example.com:4321
      cipher: chacha20-ietf-poly1305
      secret: SECRET
    prefix: "POST "

  udp: *shared

עכשיו אפשר ליצור אסטרטגיות ולבצע כמה קפיצות:

transport:
  $type: tcpudp

  tcp:
    $type: shadowsocks

    endpoint:
      $type: dial
      address: exit.example.com:4321
      dialer:
        $type: shadowsocks
        address: entry.example.com:4321
        cipher: chacha20-ietf-poly1305
        secret: ENTRY_SECRET

    cipher: chacha20-ietf-poly1305
    secret: EXIT_SECRET

  udp: *shared

במקרה של חסימת פרוטוקולים שקשה לזהות כמו Shadowsocks, אפשר להשתמש ב-Shadowsocks דרך WebSockets. במאמר דוגמה להגדרת שרת מוסבר איך פורסים את הכלי. הגדרת לקוח תיראה כך:

transport:
  $type: tcpudp
  tcp:
    $type: shadowsocks
    endpoint:
        $type: websocket
        url: wss://legendary-faster-packs-und.trycloudflare.com/SECRET_PATH/tcp
    cipher: chacha20-ietf-poly1305
    secret: SS_SECRET

  udp:
    $type: shadowsocks
    endpoint:
        $type: websocket
        url: wss://legendary-faster-packs-und.trycloudflare.com/SECRET_PATH/udp
    cipher: chacha20-ietf-poly1305
    secret: SS_SECRET

שימו לב שנקודת הקצה של Websocket יכולה לקבל נקודת קצה, שאפשר להשתמש בה כדי לעקוף חסימה שמבוססת על DNS:

transport:
  $type: tcpudp
  tcp:
    $type: shadowsocks
    endpoint:
        $type: websocket
        url: wss://legendary-faster-packs-und.trycloudflare.com/SECRET_PATH/tcp
        endpoint: cloudflare.net:443
    cipher: chacha20-ietf-poly1305
    secret: SS_SECRET

  udp:
    $type: shadowsocks
    endpoint:
        $type: websocket
        url: wss://legendary-faster-packs-und.trycloudflare.com/SECRET_PATH/udp
        endpoint: cloudflare.net:443
    cipher: chacha20-ietf-poly1305
    secret: SS_SECRET

שימו לב: בשלב הזה אין תמיכה ב-WebSockets ב-Windows. כדי להגדיר קובץ config אחד לכל הפלטפורמות, צריך להשתמש ב-first-supported לצורך תאימות לאחור:

transport:
  $type: tcpudp
  tcp:
    $type: shadowsocks
    endpoint:
      $type: first-supported
      options:
        - $type: websocket
          url: wss://legendary-faster-packs-und.trycloudflare.com/SECRET_PATH/tcp
        - ss.example.com:4321
    cipher: chacha20-ietf-poly1305
    secret: SS_SECRET

  udp:
    $type: shadowsocks
    endpoint:
      $type: first-supported
      options:
        - $type: websocket
          url: wss://legendary-faster-packs-und.trycloudflare.com/SECRET_PATH/udp
        - ss.example.com:4321
    cipher: chacha20-ietf-poly1305
    secret: SS_SECRET

מנהרות

TunnelConfig

Tunnel הוא האובייקט ברמה העליונה בהגדרת Outline. היא מציינת איך צריך להגדיר את ה-VPN.

פורמט: ExplicitTunnelConfig | LegacyShadowsocksConfig | LegacyShadowsocksURI

ExplicitTunnelConfig

פורמט: struct

שדות:

  • transport (TransportConfig): אמצעי התעבורה שישמש להעברת חבילות ליעד
  • error (struct): מידע להעברה למשתמש במקרה של שגיאת שירות (לדוגמה, מפתח שפג תוקפו, חריגה ממכסה)
    • message (string): הודעה ידידותית למשתמש שתוצג למשתמש
    • details (string): ההודעה שתוצג כשהמשתמש יפתח את פרטי השגיאה. המידע הזה יכול לעזור בפתרון בעיות.

השדות error ו-transport הם בלעדיים.

דוגמה להצלחה:

transport:
  $type: tcpudp
  tcp:
    ...  # Stream Dialer for TCP
  udp:
    ...  # Packet Listener for UDP

דוגמה לשגיאה:

error:
  message: Quota exceeded
  details: Used 100GB out of 100GB

תחבורה

TransportConfig

מציינים איך החבילות צריכות להיות מועברות ליעד.

פורמט: ממשק

סוגי הממשקים הנתמכים:

TCPUDPConfig

‫TCPUDPConfig מאפשר להגדיר אסטרטגיות נפרדות ל-TCP ול-UDP.

פורמט: struct

שדות:

  • tcp (DialerConfig): חייגן הסטרימינג שבו יש להשתמש לחיבורי TCP.
  • udp (PacketListenerConfig): מאזין המנות שמשמש למנות UDP.

דוגמה לשליחת TCP ו-UDP לנקודות קצה שונות:

tcp:
  $type: shadowsocks
  endpoint: ss.example.com:80
  <<: &cipher
    cipher: chacha20-ietf-poly1305
    secret: SECRET
  prefix: "POST "

udp:
  $type: shadowsocks
  endpoint: ss.example.com:53
  <<: *cipher

נקודות קצה

נקודות קצה יוצרות חיבורים לנקודת קצה קבועה. עדיף להשתמש בו במקום בחייגנים, כי הוא מאפשר לבצע אופטימיזציות ספציפיות לנקודות קצה. יש נקודות קצה (endpoints) של Stream ושל Packet.

EndpointConfig

פורמט: string | Interface

נקודת הקצה string היא כתובת המארח:היציאה של נקודת הקצה שנבחרה. החיבור נוצר באמצעות חייגן ברירת המחדל.

סוגי הממשקים הנתמכים לנקודות קצה של זרם ומנות:

DialEndpointConfig

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

פורמט: struct

שדות:

  • address (string): כתובת נקודת הקצה לחיוג
  • dialer (DialerConfig): החייגן שמשמש לחיוג לכתובת

WebsocketEndpointConfig

מנהרות מעבירות בסטרימינג חיבורים של מנות לנקודת קצה באמצעות WebSockets.

בחיבורים של סטרימינג, כל פעולת כתיבה הופכת להודעת WebSocket. בחיבורי מנות, כל מנה הופכת להודעת WebSocket.

פורמט: struct

שדות:

  • url (string): כתובת ה-URL של נקודת הקצה של WebSocket. הסכימה צריכה להיות https או wss עבור WebSocket over TLS, ו-http או ws עבור WebSocket בטקסט פשוט.
  • endpoint (EndpointConfig): נקודת הקצה של שרת האינטרנט שאליה מתחברים. אם הוא לא קיים, המערכת מתחברת לכתובת שצוינה בכתובת ה-URL.

חייגנים

חייגנים יוצרים חיבורים בהתאם לכתובת של נקודת קצה. יש חיוג לשידור וחיוג למנות מידע.

DialerConfig

פורמט: null | ממשק

חייגן null (לא קיים) הוא חייגן ברירת המחדל, שמשתמש בחיבורי TCP ישירים לזרם ובחיבורי UDP ישירים לחבילות.

סוגי ממשקים נתמכים לחייגן של Stream ולחייגן של Packer:

פונקציות מסוג Packet Listener

ה-Packet Listener יוצר חיבור חבילות לא מוגבל שאפשר להשתמש בו כדי לשלוח חבילות לכמה יעדים.

PacketListenerConfig

פורמט: null | ממשק

הערך null (לא קיים) של Packet Listener מציין את ברירת המחדל של Packet Listener, שהיא UDP Packet Listener.

סוגי הממשקים הנתמכים:

שיטות

Shadowsocks

LegacyShadowsocksConfig

‫LegacyShadowsocksConfig מייצג מנהרה שמשתמשת ב-Shadowsocks כפרוטוקול התעבורה. הוא מיישם את הפורמט מדור קודם לצורך תאימות לאחור.

פורמט: struct

שדות:

  • server (string): המארח שאליו מתחברים
  • server_port (number): מספר היציאה להתחברות
  • method ‏ (string): AEAD cipher לשימוש
  • password (string): משמש ליצירת מפתח ההצפנה
  • prefix (string): התחפושת של הקידומת לשימוש. התכונה נתמכת בחיבורים של סטרימינג ושל מנות נתונים.

דוגמה:

server: example.com
server_port: 4321
method: chacha20-ietf-poly1305
password: SECRET
prefix: "POST "

LegacyShadowsocksURI

‫LegacyShadowsocksURI מייצג מנהרה שמשתמשת ב-Shadowsocks כפרוטוקול התעבורה. היא מיישמת את פורמט כתובות ה-URL מדור קודם לצורך תאימות לאחור.

פורמט: string

אפשר לעיין בפורמט URI מדור קודם של Shadowsocks ובסכימת URI של SIP002. אנחנו לא תומכים בפלאגינים.

דוגמה:

ss://chacha20-ietf-poly1305:SECRET@example.com:443?prefix=POST%20

ShadowsocksConfig

‫ShadowsocksConfig יכול לייצג חיוג של זרם או של מנות, וגם PacketListener שמשתמש ב-Shadowsocks.

פורמט: struct

שדות:

  • endpoint (EndpointConfig): נקודת הקצה של Shadowsocks שאליה מתחברים
  • cipher ‏ (string): AEAD cipher לשימוש
  • secret (string): משמש ליצירת מפתח ההצפנה
  • prefix (string, אופציונלי): הסוואת הקידומת לשימוש. התכונה נתמכת בחיבורים של סטרימינג ושל מנות נתונים.

דוגמה:

endpoint: example.com:80
cipher: chacha20-ietf-poly1305
secret: SECRET
prefix: "POST "

הגדרות של מטא

FirstSupportedConfig

השימוש הוא בהגדרה הראשונה שהאפליקציה תומכת בה. זו דרך לשלב הגדרות חדשות תוך שמירה על תאימות לאחור עם הגדרות ישנות.

פורמט: struct

שדות:

דוגמה:

options:
  - $type: websocket
    url: wss://example.com/SECRET_PATH
  - ss.example.com:4321

ממשק

ממשקי API מאפשרים לבחור אחת מכמה הטמעות. הוא משתמש בשדה $type כדי לציין את הסוג שההגדרה מייצגת.

דוגמה:

$type: shadowsocks
endpoint: example.com:4321
cipher: chacha20-ietf-poly1305
secret: SECRET