Zdalne wykrywanie i omijanie zakłóceń w sieci za pomocą pakietu Outline SDK

Ten przewodnik pokazuje, jak za pomocą narzędzi wiersza poleceń pakietu SDK Outline zrozumieć i obejść zakłócenia sieciowe z perspektywy zdalnej. Dowiesz się, jak używać narzędzi pakietu SDK do pomiaru zakłóceń w sieci, testowania strategii obchodzenia ograniczeń i analizowania wyników. W tym przewodniku skupimy się na narzędziach resolve, fetchhttp2transport.

Pierwsze kroki z narzędziami Outline SDK

Narzędzi Outline SDK możesz zacząć używać bezpośrednio z wiersza poleceń.

Rozwiązywanie nazw DNS

Narzędzie resolve umożliwia przeprowadzanie wyszukiwań DNS za pomocą określonego resolvera.

Aby rozwiązać rekord A domeny:

go run github.com/Jigsaw-Code/outline-sdk/x/tools/resolve@latest -resolver 8.8.8.8 -type A 1.2.3.4.nip.io

Aby rozwiązać rekord CNAME:

go run github.com/Jigsaw-Code/outline-sdk/x/tools/resolve@latest -resolver 8.8.8.8 -type CNAME www.google.com

Pobieranie strony internetowej

Narzędzie fetch może służyć do pobierania treści ze strony internetowej.

go run github.com/Jigsaw-Code/outline-sdk/x/tools/fetch@latest https://example.com

Może też wymusić użycie protokołu QUIC.

go run github.com/Jigsaw-Code/outline-sdk/x/tools/fetch@latest -proto=h3 https://www.youtube.com

Używanie lokalnego serwera proxy

Narzędzie http2transport tworzy lokalny serwer proxy, przez który kieruje ruch. Aby uruchomić lokalny serwer proxy z transportem Shadowsocks:

go run github.com/Jigsaw-Code/outline-sdk/x/tools/http2transport@latest -localAddr 127.0.0.1:8080 -transport "ss://{your_shadowsocks_credentials}"

Możesz następnie użyć tego serwera proxy z innymi narzędziami, takimi jak curl:

curl -p -x http://127.0.0.1:8080 https://ipinfo.io

Określanie strategii omijania

Pakiet SDK Outline umożliwia określanie różnych strategii obchodzenia ograniczeń, które można łączyć, aby omijać różne formy zakłóceń sieci. Specyfikację tych strategii znajdziesz w dokumentacji Go.

Strategie kompozycyjne

Te strategie można łączyć, aby tworzyć bardziej zaawansowane techniki obchodzenia.

  • DNS-over-HTTPS z fragmentacją TLS: doh:name=cloudflare-dns.com&address=cloudflare.net:443 | tlsfrag:1
  • SOCKS5-over-TLS z maskowaniem domeny: tls:sni=decoy.example.com&certname=[HOST] | socks5:[HOST]:[PORT]
  • Routing wieloskoku z Shadowsocks: ss://[USERINFO1]@[HOST1]:[PORT1] | ss://[USERINFO2]@[HOST2]:[PORT2] | ss://[USERINFO3]@[HOST3]:[PORT3]

Dostęp zdalny i pomiar

Aby zmierzyć zakłócenia sieci w różnych regionach, możesz użyć zdalnych serwerów proxy. Możesz znaleźć lub utworzyć zdalne serwery proxy, z którymi chcesz się połączyć.

Opcje dostępu zdalnego

Za pomocą narzędzia fetch możesz zdalnie testować połączenia na różne sposoby.

Serwer Outline

Połącz się zdalnie ze standardowym serwerem Outline za pomocą transportu Shadowsocks.

go run github.com/Jigsaw-Code/outline-sdk/x/tools/fetch@latest -timeout 15 -transport "ss://{remote_shadowsocks_credentials}" https://ipinfo.io | jq

SOCKS5 przez SSH

Utwórz serwer proxy SOCKS5 za pomocą tunelu SSH.

ssh -D 127.0.0.1:1080 -C -N $USER@$HOST:$PORT

Połącz się z tym tunelem za pomocą funkcji fetch.

go run github.com/Jigsaw-Code/outline-sdk/x/tools/fetch@latest -timeout 15 -transport "socks5://localhost:1080" https://ipinfo.io | jq

Studium przypadku: omijanie blokady YouTube w Iranie

Oto praktyczny przykład wykrywania i omijania zakłóceń sieci.

Wykrywanie bloku

Podczas próby pobrania strony głównej YouTube za pomocą irańskiego serwera proxy żądanie przekracza limit czasu, co wskazuje na blokadę.

export TRANSPORT="ss://{remote_shadowsocks_credentials}"
go run github.com/Jigsaw-Code/outline-sdk/x/tools/fetch@latest -timeout 15 -transport "${TRANSPORT}|override:host=$(dig +short www.youtube.com | tail -1)" https://www.youtube.com

To polecenie kończy się niepowodzeniem z powodu przekroczenia limitu czasu.

Obejście z fragmentacją TLS

Dodając fragmentację TLS do transportu, możemy obejść tę blokadę.

go run github.com/Jigsaw-Code/outline-sdk/x/tools/fetch@latest -timeout 15 -transport "${TRANSPORT}|override:host=$(dig +short www.youtube.com | tail -1)|tlsfrag:1" https://www.youtube.com | grep -oe '<title>.*</title>'

To polecenie pobiera tytuł strony głównej YouTube, czyli <title>YouTube</title>.

Omijanie z użyciem fragmentacji TLS i DNS-over-HTTPS

go run github.com/Jigsaw-Code/outline-sdk/x/tools/fetch@latest -timeout 15 -transport "${TRANSPORT}|tlsfrag:1|doh:name=cloudflare-dns.com&address=www.cloudflare.net" https://www.youtube.com | grep -oe '<title>.*</title>'

Zwraca też wartość <title>YouTube</title>.

Omijanie blokad za pomocą serwera Outline

go run github.com/Jigsaw-Code/outline-sdk/x/tools/fetch@latest -timeout 15 -transport "${TRANSPORT}|ss://<your_shadowsocks_credentials>" https://www.youtube.com | grep -oe '<title>.*</title>'

Ten kod też zwraca wartość <title>YouTube</title>.

Dalsza analiza i zasoby

Aby wziąć udział w dyskusji lub zadać pytanie, odwiedź grupę dyskusyjną dotyczącą pakietu SDK Outline.