Outline sử dụng cấu hình dựa trên YAML để xác định các thông số VPN và xử lý lưu lượng truy cập TCP/UDP. Cấu hình này hỗ trợ khả năng kết hợp ở nhiều cấp độ, cho phép thiết lập linh hoạt và có thể mở rộng.
Cấu hình cấp cao nhất chỉ định một TunnelConfig.
Ví dụ
Cấu hình Shadowsocks thông thường sẽ có dạng như sau:
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
Lưu ý cách chúng ta có thể chạy TCP và UDP trên các cổng hoặc điểm cuối khác nhau.
Bạn có thể tận dụng các điểm neo YAML và khoá hợp nhất <<
để tránh trùng lặp:
transport:
$type: tcpudp
tcp:
<<: &shared
$type: shadowsocks
endpoint: ss.example.com:4321
cipher: chacha20-ietf-poly1305
secret: SECRET
prefix: "POST "
udp: *shared
Giờ đây, bạn có thể kết hợp các chiến lược và thực hiện nhiều thao tác:
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
Trong trường hợp bị chặn các giao thức "không có gì đặc biệt" như Shadowsocks, bạn có thể sử dụng Shadowsocks qua WebSockets. Hãy xem cấu hình mẫu máy chủ về cách triển khai. Cấu hình máy khách sẽ có dạng như sau:
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
Xin lưu ý rằng điểm cuối Websocket có thể lần lượt lấy một điểm cuối. Điểm cuối này có thể dùng để bỏ qua việc chặn dựa trên 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
Xin lưu ý rằng WebSockets hiện chưa được hỗ trợ trên Windows. Để có một cấu hình duy nhất cho tất cả các nền tảng, hãy sử dụng first-supported
để có khả năng tương thích ngược:
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
Đường hầm
TunnelConfig
Đường hầm là đối tượng cấp cao nhất trong cấu hình Outline. Nó chỉ định cách định cấu hình VPN.
Định dạng: ExplicitTunnelConfig | LegacyShadowsocksConfig | LegacyShadowsocksURI
ExplicitTunnelConfig
Định dạng: struct
Trường:
transport
(TransportConfig): phương thức vận chuyển dùng để trao đổi các gói với đích đến mục tiêuerror
(struct): thông tin để truyền đạt cho người dùng trong trường hợp xảy ra lỗi dịch vụ (ví dụ: khoá đã hết hạn, hết hạn mức)message
(string): thông báo thân thiện với người dùng để hiển thị cho người dùngdetails
(string): thông báo sẽ xuất hiện khi người dùng mở phần thông tin chi tiết về lỗi. Hữu ích cho việc khắc phục sự cố.
Các trường error
và transport
loại trừ lẫn nhau.
Ví dụ thành công:
transport:
$type: tcpudp
tcp:
... # Stream Dialer for TCP
udp:
... # Packet Listener for UDP
Ví dụ về lỗi:
error:
message: Quota exceeded
details: Used 100GB out of 100GB
Vận chuyển
TransportConfig
Chỉ định cách trao đổi các gói với đích đến.
Định dạng: Giao diện
Các loại giao diện được hỗ trợ:
tcpudp
: TCPUDPConfig
TCPUDPConfig
TCPUDPConfig cho phép bạn thiết lập các chiến lược TCP và UDP riêng biệt.
Định dạng: struct
Trường:
tcp
(DialerConfig): Stream Dialer dùng cho các kết nối TCP.udp
(PacketListenerConfig): Packet Listener dùng cho các gói UDP.
Ví dụ về việc gửi TCP và UDP đến các điểm cuối khác nhau:
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
Điểm cuối
Các điểm cuối thiết lập kết nối đến một điểm cuối cố định. Phương thức này được ưu tiên hơn Dialers vì cho phép tối ưu hoá theo từng điểm cuối. Có các Điểm cuối luồng và Điểm cuối gói.
EndpointConfig
Định dạng: string | Interface
Điểm cuối string là địa chỉ host:port của điểm cuối đã chọn. Kết nối được thiết lập bằng Trình quay số mặc định.
Các loại giao diện được hỗ trợ cho Điểm cuối của luồng và gói:
dial
: DialEndpointConfigfirst-supported
: FirstSupportedConfigwebsocket
: WebsocketEndpointConfigshadowsocks
: ShadowsocksConfig
DialEndpointConfig
Thiết lập kết nối bằng cách quay số đến một địa chỉ cố định. Bạn có thể sử dụng trình quay số để tạo các chiến lược.
Định dạng: struct
Trường:
address
(string): địa chỉ điểm cuối để quay sốdialer
(DialerConfig): trình quay số dùng để quay số địa chỉ
WebsocketEndpointConfig
Đường hầm truyền trực tuyến và kết nối gói đến một điểm cuối qua WebSocket.
Đối với các kết nối luồng, mỗi thao tác ghi sẽ được chuyển thành một thông báo WebSocket. Đối với các kết nối gói, mỗi gói sẽ được chuyển thành một thông báo WebSocket.
Định dạng: struct
Trường:
url
(string): URL cho điểm cuối WebSocket. Lược đồ phải làhttps
hoặcwss
cho WebSocket qua TLS vàhttp
hoặcws
cho WebSocket văn bản thuần tuý.endpoint
(EndpointConfig): điểm cuối của máy chủ web để kết nối. Nếu không có, thì sẽ kết nối với địa chỉ được chỉ định trong URL.
Trình quay số
Trình quay số thiết lập các kết nối dựa trên địa chỉ điểm cuối. Có Stream và Packet Dialers.
DialerConfig
Định dạng: null | Interface
Trình quay số null (không có) là Trình quay số mặc định, sử dụng các kết nối TCP trực tiếp cho Luồng và các kết nối UDP trực tiếp cho Gói.
Các loại giao diện được hỗ trợ cho Trình quay số luồng và Trình đóng gói:
first-supported
: FirstSupportedConfigshadowsocks
: ShadowsocksConfig
Trình xử lý gói
Trình nghe gói thiết lập một kết nối gói không giới hạn có thể dùng để gửi gói đến nhiều đích đến.
PacketListenerConfig
Định dạng: null | Interface
Trình nghe gói null (không có) có nghĩa là Trình nghe gói mặc định, tức là Trình nghe gói UDP.
Các loại giao diện được hỗ trợ:
first-supported
: FirstSupportedConfigshadowsocks
: ShadowsocksPacketListenerConfig
Chiến lược
Shadowsocks
LegacyShadowsocksConfig
LegacyShadowsocksConfig đại diện cho một Đường hầm sử dụng Shadowsocks làm phương thức truyền tải. Thư viện này triển khai định dạng cũ để tương thích ngược.
Định dạng: struct
Trường:
server
(string): máy chủ lưu trữ để kết nốiserver_port
(number): số cổng để kết nốimethod
(string): mật mã AEAD cần sử dụngpassword
(string): dùng để tạo khoá mã hoáprefix
(string): tiền tố cần sử dụng. Được hỗ trợ trên các kết nối luồng và gói.
Ví dụ:
server: example.com
server_port: 4321
method: chacha20-ietf-poly1305
password: SECRET
prefix: "POST "
LegacyShadowsocksURI
LegacyShadowsocksURI đại diện cho một Đường hầm sử dụng Shadowsocks làm phương thức truyền tải. Thư viện này triển khai định dạng URL cũ để tương thích ngược.
Định dạng: chuỗi
Xem Định dạng URI Shadowsocks cũ và Giản đồ URI SIP002. Chúng tôi không hỗ trợ các trình bổ trợ.
Ví dụ:
ss://chacha20-ietf-poly1305:SECRET@example.com:443?prefix=POST%20
ShadowsocksConfig
ShadowsocksConfig có thể đại diện cho một Stream hoặc Packet Dialers, cũng như một Packet Listener sử dụng Shadowsocks.
Định dạng: struct
Trường:
endpoint
(EndpointConfig): điểm cuối Shadowsocks để kết nốicipher
(string): mật mã AEAD cần sử dụngsecret
(string): dùng để tạo khoá mã hoáprefix
(string, không bắt buộc): tiền tố giả dạng cần sử dụng. Được hỗ trợ trên các kết nối luồng và gói.
Ví dụ:
endpoint: example.com:80
cipher: chacha20-ietf-poly1305
secret: SECRET
prefix: "POST "
Định nghĩa về siêu dữ liệu
FirstSupportedConfig
Sử dụng cấu hình đầu tiên mà ứng dụng hỗ trợ. Đây là cách kết hợp các cấu hình mới trong khi vẫn tương thích ngược với các cấu hình cũ.
Định dạng: struct
Trường:
options
(EndpointConfig[] | DialerConfig[] | PacketListenerConfig[]): danh sách các lựa chọn cần cân nhắc
Ví dụ:
options:
- $type: websocket
url: wss://example.com/SECRET_PATH
- ss.example.com:4321
Giao diện
Giao diện cho phép chọn một trong nhiều cách triển khai. Trường này sử dụng trường $type
để chỉ định loại mà cấu hình đại diện.
Ví dụ:
$type: shadowsocks
endpoint: example.com:4321
cipher: chacha20-ietf-poly1305
secret: SECRET