Od wersji 1.9.0 klienta Outline klucze dostępu obsługują opcję „prefiks”. „Prefiks” to lista bajtów wykorzystywanych jako pierwsze bajty ciągu zaburzającego połączenia Shadowsocks TCP. Może on sprawić, że połączenie będzie wyglądać jak protokół, który jest dozwolony w sieci, co pozwoli obejść zapory sieciowe odrzucające nierozpoznane protokoły.
Kiedy warto tego spróbować?
Jeśli podejrzewasz, że użytkownicy Twojego wdrożenia Outline są wciąż blokowani, rozważ wypróbowanie kilku różnych prefiksów.
Instrukcje
Długość prefiksu nie powinna przekraczać 16 bajtów. Dłuższe prefiksy mogą powodować konflikty ciągów zaburzających, co może zmniejszyć bezpieczeństwo szyfrowania i doprowadzić do wykrycia połączeń. Do ominięcia blokad należy użyć możliwie najkrótszego prefiksu.
Używany port powinien być zgodny z protokołem, pod który podszywa się prefiks. Organizacja IANA prowadzi rejestr numerów portów protokołów transportowych, który mapuje protokoły i numery portów.
Niektóre przykładowe skuteczne prefiksy wyglądają jak typowe protokoły:
Zalecany port | Zakodowany w formacie JSON | Zakodowany w formacie adresu URL | |
---|---|---|---|
Żądanie HTTP | 80 (HTTP) | "POST " |
POST%20 |
Odpowiedź HTTP | 80 (HTTP) | "HTTP/1.1 " |
HTTP%2F1.1%20 |
Żądanie DNS przez TCP | 53 (DNS) | "\u0005\u00DC\u005F\u00E0\u0001\u0020" |
%05%C3%9C_%C3%A0%01%20 |
ClientHello protokołu TLS | 443 (https), 463 (smtps), 563 (nntps), 636 (ldaps), 989 (ftps – dane), 990 (ftps), 993 (imaps), 995 (pop3s), 5223 (APN firmy Apple), 5228 (Sklep Play), 5349 (protokoły turn) | "\u0016\u0003\u0001\u0000\u00a8\u0001\u0001" |
%16%03%01%00%C2%A8%01%01 |
Dane aplikacji TLS | 443 (https), 463 (smtps), 563 (nntps), 636 (ldaps), 989 (ftps – dane), 990 (ftps), 993 (imaps), 995 (pop3s), 5223 (APN firmy Apple), 5228 (Sklep Play), 5349 (protokoły turn) | "\u0013\u0003\u0003\u003F" |
%13%03%03%3F |
ServerHello protokołu TLS | 443 (https), 463 (smtps), 563 (nntps), 636 (ldaps), 989 (ftps – dane), 990 (ftps), 993 (imaps), 995 (pop3s), 5223 (APN firmy Apple), 5228 (Sklep Play), 5349 (protokoły turn) | "\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 |
Dynamiczne klucze dostępu
Żeby używać funkcji prefiksu z dynamicznymi kluczami dostępu (ssconf://
), dodaj klucz „prefiksu” do obiektu JSON z wartością zakodowaną w formacie JSON, która reprezentuje wybrany prefiks (zobacz przykłady w tabeli powyżej). Możesz użyć kodów modyfikacji (takich jak \u00FF), żeby reprezentować niedrukowalne punkty kodowe Unicode w przedziale od U+0
do U+FF
, na przykład:
{
"server": "example.com",
"server_port": 8388,
"password": "example",
"method": "chacha20-ietf-poly1305",
"prefix": "\u0005\u00DC\u005F\u00E0\u0001\u0020"
}
Statyczne klucze dostępu
Żeby użyć prefiksów ze statycznymi kluczami dostępu (ss://), musisz zmodyfikować istniejący klucz przed jego rozpowszechnieniem. Jeśli masz statyczny klucz dostępu wygenerowany przez Menedżera Outline, uzyskaj wersję prefiksu zakodowaną w formacie adresu URL (zobacz przykłady w tabeli powyżej) i dodaj ją na końcu klucza dostępu w ten sposób:
ss://Z34nthataITHiTNIHTohithITHbVBqQ1o3bkk@127.0.0.1:33142/?outline=1&prefix=<your url-encoded prefix goes here>
Zaawansowani użytkownicy mogą przekonwertować prefiks zakodowany w formacie JSON na zakodowany w formacie adresu URL przy użyciu funkcji encodeURIComponent()
przeglądarki. W tym celu należy otworzyć konsolę do badania sieci (*Deweloper > Konsola sieciowa w Javascripcie *w Chrome) i wpisać:
encodeURIComponent("<your json-encoded prefix goes here>")
Naciśnij Enter. Wygenerowana zostanie wartość w *wersji *zakodowanej w formacie adresu URL, na przykład:
encodeURIComponent("\u0016\u0003\u0001\u0000\u00a8\u0001\u0001")
'%16%03%01%00%C2%A8%01%01'