Netzwerkstörungen mit dem Outline SDK aus der Ferne charakterisieren und umgehen

In dieser Anleitung wird gezeigt, wie Sie mit den Befehlszeilentools des Outline SDK Netzwerkstörungen aus der Ferne erkennen und umgehen können. Sie erfahren, wie Sie mit den Tools des SDK Netzwerkstörungen messen, Umgehungsstrategien testen und die Ergebnisse analysieren. In diesem Leitfaden geht es hauptsächlich um die Tools resolve, fetch und http2transport.

Erste Schritte mit den Outline SDK-Tools

Sie können die Outline SDK-Tools direkt über die Befehlszeile verwenden.

DNS auflösen

Mit dem Tool resolve können Sie DNS-Lookups mit einem bestimmten Resolver durchführen.

So lösen Sie den A-Eintrag einer Domain auf:

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

So lösen Sie einen CNAME-Eintrag auf:

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

Webseite abrufen

Mit dem Tool fetch können Sie den Inhalt einer Webseite abrufen.

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

Außerdem kann die Verbindung so erzwungen werden, QUIC zu verwenden.

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

Lokalen Proxy verwenden

Das http2transport-Tool erstellt einen lokalen Proxy, über den Ihr Traffic geleitet wird. So starten Sie einen lokalen Proxy mit einem Shadowsocks-Transport:

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

Sie können diesen Proxy dann mit anderen Tools wie curl verwenden:

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

Strategien zur Umgehung angeben

Mit dem Outline SDK können verschiedene Umgehungsstrategien angegeben werden, die kombiniert werden können, um verschiedene Formen von Netzwerkstörungen zu umgehen. Die Spezifikation für diese Strategien finden Sie in der Go-Dokumentation.

Zusammensetzbare Strategien

Diese Strategien können kombiniert werden, um robustere Umgehungstechniken zu entwickeln.

  • DNS-over-HTTPS mit TLS-Fragmentierung: doh:name=cloudflare-dns.com&address=cloudflare.net:443 | tlsfrag:1
  • SOCKS5-over-TLS mit Domain Fronting: tls:sni=decoy.example.com&certname=[HOST] | socks5:[HOST]:[PORT]
  • Multi-Hop-Routing mit Shadowsocks: ss://[USERINFO1]@[HOST1]:[PORT1] | ss://[USERINFO2]@[HOST2]:[PORT2] | ss://[USERINFO3]@[HOST3]:[PORT3]

Remotezugriff und ‑messung

Mit Remote-Proxys können Sie Netzwerkstörungen in verschiedenen Regionen messen. Sie können Remote-Proxys finden oder erstellen, um eine Verbindung herzustellen.

Optionen für den Remote-Zugriff

Mit dem Tool fetch können Sie Verbindungen auf verschiedene Arten remote testen.

Outline-Server

Stellen Sie eine Remote-Verbindung zu einem Standard-Outline-Server mit einem Shadowsocks-Transport her.

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

SOCKS5 über SSH

Erstellen Sie einen SOCKS5-Proxy über einen SSH-Tunnel.

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

Verbindung zu diesem Tunnel mit „fetch“ herstellen

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

Fallstudie: YouTube-Sperrung im Iran umgehen

Hier ist ein praktisches Beispiel für das Erkennen und Umgehen von Netzwerkstörungen.

Blockierung erkennen

Wenn versucht wird, die YouTube-Startseite über einen iranischen Proxy abzurufen, tritt ein Zeitüberschreitungsfehler auf, was auf eine Blockierung hindeutet.

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

Dieser Befehl schlägt mit einem Zeitüberschreitungsfehler fehl.

Umgehen mit TLS-Fragmentierung

Durch Hinzufügen der TLS-Fragmentierung zur Übertragung können wir diese Blockierung umgehen.

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>'

Mit diesem Befehl wird der Titel der YouTube-Startseite abgerufen, nämlich <title>YouTube</title>.

Umgehen mit TLS-Fragmentierung und 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>'

Dadurch wird auch <title>YouTube</title> zurückgegeben.

Umgehen mit einem Outline-Server

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>'

Auch hier wird <title>YouTube</title> zurückgegeben.

Weitere Analysen und Ressourcen

Wenn Sie sich mit anderen Nutzern austauschen oder Fragen stellen möchten, besuchen Sie das Outline SDK-Forum.