Tài liệu tham khảo về cấu hình Outline

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êu
  • error (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ùng
    • details (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 errortransport 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ợ:

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:

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:

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ặc wss cho WebSocket qua TLS và http hoặc ws 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:

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ợ:

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ối
  • server_port (number): số cổng để kết nối
  • method (string): mật mã AEAD cần sử dụng
  • password (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ũ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ối
  • cipher (string): mật mã AEAD cần sử dụng
  • secret (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:

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