Przejdź do głównej zawartości

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, fetch i http2transport.

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/OutlineFoundation/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/OutlineFoundation/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/OutlineFoundation/outline-sdk/x/tools/fetch@latest https://example.com

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

go run github.com/OutlineFoundation/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/OutlineFoundation/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/OutlineFoundation/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/OutlineFoundation/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/OutlineFoundation/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/OutlineFoundation/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/OutlineFoundation/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/OutlineFoundation/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.