Ngụy trang tiền tố kết nối

Kể từ phiên bản 1.9.0 của Outline Client, khoá truy cập hỗ trợ lựa chọn "tiền tố". "Tiền tố" là một danh sách các byte được dùng làm byte đầu tiên của salt trong một kết nối Shadowsocks. Điều này có thể khiến kết nối trông giống như một giao thức được phép trong mạng, vượt qua các tường lửa từ chối các giao thức mà chúng không nhận ra.

Khi nào tôi nên thử cách này?

Nếu nghi ngờ người dùng triển khai Outline vẫn bị chặn, bạn có thể cân nhắc thử một vài tiền tố khác.

Hướng dẫn

Tiền tố không được dài quá 16 byte. Tiền tố dài hơn có thể gây ra xung đột salt, điều này có thể ảnh hưởng đến độ an toàn của quá trình mã hoá và khiến các kết nối bị phát hiện. Sử dụng tiền tố ngắn nhất có thể để bỏ qua lệnh chặn mà bạn đang gặp phải.

Cổng bạn sử dụng phải khớp với giao thức mà tiền tố của bạn đang giả mạo. IANA duy trì một sổ đăng ký số cổng giao thức truyền tải để liên kết các giao thức và số cổng.

Một số ví dụ về tiền tố TCP hiệu quả trông giống như các giao thức phổ biến:

Cổng được đề xuất Được mã hoá bằng YAML Được mã hoá bằng URL
Yêu cầu HTTP 80 (http) "POST " POST%20
Phản hồi HTTP 80 (http) "HTTP/1.1 " HTTP%2F1.1%20
Yêu cầu DNS-over-TCP 53 (dns) "\u0005\u00DC\u005F\u00E0\u0001\u0020" %05%C3%9C_%C3%A0%01%20
ClientHello theo giao thức 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) "\u0016\u0003\u0001\u0000\u00a8\u0001\u0001" %16%03%01%00%C2%A8%01%01
Dữ liệu ứng dụng 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

Một số ví dụ về tiền tố UDP hiệu quả trông giống như các giao thức phổ biến:

Cổng được đề xuất Được mã hoá bằng YAML
Yêu cầu DNS 53 (dns) "\u006b\u007b\u0001\u0020" (lưu ý: ngẫu nhiên hoá 2 byte đầu tiên)
Phản hồi DNS 53 (dns) "\u006b\u007b\u0081\u00a0\u0000\u0001" (lưu ý: ngẫu nhiên hoá 2 byte đầu tiên)
QUIC Client Initial 443 (https) "\u00cd\u0000\u0000\u0000\u0001"

Khoá truy cập linh động

Để sử dụng tính năng tiền tố với Khoá truy cập động (ssconf://), hãy thêm khoá "tiền tố" vào đối tượng YAML, với giá trị được mã hoá bằng YAML đại diện cho tiền tố bạn muốn (xem ví dụ trong bảng ở trên). Bạn có thể sử dụng mã thoát (chẳng hạn như \u00FF) để biểu thị các điểm mã Unicode không in được trong dải U+0 đến U+FF. Ví dụ:

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"

Khoá truy cập tĩnh

Để sử dụng tiền tố với Khoá truy cập tĩnh (ss://), bạn cần sửa đổi khoá hiện có trước khi phân phối. Nếu bạn có Khoá truy cập tĩnh do Outline Manager tạo, hãy lấy phiên bản được mã hoá URL của tiền tố (xem ví dụ về các phiên bản này trong bảng ở trên) rồi thêm phiên bản đó vào cuối khoá truy cập như sau:

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

Tiền tố ở định dạng URL chỉ hoạt động đối với các kết nối TCP.

Đối với người dùng nâng cao, bạn có thể sử dụng chức năng encodeURIComponent() của trình duyệt để chuyển đổi tiền tố được mã hoá bằng JSON thành tiền tố được mã hoá bằng URL. Để làm việc này, hãy mở bảng điều khiển trình kiểm tra web (*Nhà phát triển > Bảng điều khiển web JavaScript *trên Chrome) rồi nhập nội dung sau:

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

Nhấn enter. Giá trị được tạo sẽ là phiên bản *được mã hoá URL*. Ví dụ:

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