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
מציינים איך החבילות צריכות להיות מועברות ליעד.
פורמט: ממשק
סוגי הממשקים הנתמכים:
-
tcpudp
: TCPUDPConfig
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 היא כתובת המארח:היציאה של נקודת הקצה שנבחרה. החיבור נוצר באמצעות חייגן ברירת המחדל.
סוגי הממשקים הנתמכים לנקודות קצה של זרם ומנות:
-
dial
: DialEndpointConfig first-supported
: FirstSupportedConfig-
websocket
: WebsocketEndpointConfig shadowsocks
: ShadowsocksConfig
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:
first-supported
: FirstSupportedConfigshadowsocks
: ShadowsocksConfig
פונקציות מסוג Packet Listener
ה-Packet Listener יוצר חיבור חבילות לא מוגבל שאפשר להשתמש בו כדי לשלוח חבילות לכמה יעדים.
PacketListenerConfig
פורמט: null | ממשק
הערך null (לא קיים) של Packet Listener מציין את ברירת המחדל של Packet Listener, שהיא UDP Packet Listener.
סוגי הממשקים הנתמכים:
first-supported
: FirstSupportedConfigshadowsocks
: ShadowsocksPacketListenerConfig
שיטות
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
(EndpointConfig[] | DialerConfig[] | PacketListenerConfig[]): רשימת אפשרויות לבחירה
דוגמה:
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