Caractériser et contourner à distance les interférences réseau avec le SDK Outline

Ce guide explique comment utiliser les outils de ligne de commande du SDK Outline pour comprendre et contourner les interférences réseau à distance. Vous apprendrez à utiliser les outils du SDK pour mesurer les interférences réseau, tester les stratégies de contournement et analyser les résultats. Ce guide se concentre sur les outils resolve, fetch et http2transport.

Premiers pas avec les outils du SDK Outline

Vous pouvez commencer à utiliser les outils du SDK Outline directement à partir de la ligne de commande.

Résoudre le DNS

L'outil resolve vous permet d'effectuer des recherches DNS avec un résolveur spécifique.

Pour résoudre l'enregistrement A d'un domaine :

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

Pour résoudre un enregistrement CNAME :

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

Récupérer une page Web

L'outil fetch peut être utilisé pour récupérer le contenu d'une page Web.

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

Il peut également forcer la connexion à utiliser QUIC.

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

Utiliser un proxy local

L'outil http2transport crée un proxy local pour acheminer votre trafic. Pour démarrer un proxy local avec un transport Shadowsocks :

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

Vous pouvez ensuite utiliser ce proxy avec d'autres outils tels que curl :

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

Spécifier des stratégies de contournement

Le SDK Outline permet de spécifier différentes stratégies de contournement qui peuvent être combinées pour contourner différentes formes d'interférences réseau. La spécification de ces stratégies se trouve dans la documentation Go.

Stratégies composables

Ces stratégies peuvent être combinées pour créer des techniques de contournement plus robustes.

  • DNS-over-HTTPS avec fragmentation TLS : doh:name=cloudflare-dns.com&address=cloudflare.net:443 | tlsfrag:1
  • SOCKS5-over-TLS avec domain fronting : tls:sni=decoy.example.com&certname=[HOST] | socks5:[HOST]:[PORT]
  • Routage multisaut avec Shadowsocks : ss://[USERINFO1]@[HOST1]:[PORT1] | ss://[USERINFO2]@[HOST2]:[PORT2] | ss://[USERINFO3]@[HOST3]:[PORT3]

Accès et mesure à distance

Pour mesurer les interférences réseau telles qu'elles sont ressenties dans différentes régions, vous pouvez utiliser des proxys à distance. Vous pouvez rechercher ou créer des proxys distants auxquels vous connecter.

Options d'accès à distance

L'outil fetch vous permet de tester les connexions à distance de différentes manières.

Serveur Outline

Connectez-vous à distance à un serveur Outline standard avec un transport 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 sur SSH

Créez un proxy SOCKS5 à l'aide d'un tunnel SSH.

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

Se connecter à ce tunnel à l'aide de fetch

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

Étude de cas : contourner le blocage de YouTube en Iran

Voici un exemple pratique de détection et de contournement des interférences réseau.

Détecter le bloc

Lorsque vous essayez de récupérer la page d'accueil YouTube via un proxy iranien, la requête expire, ce qui indique un blocage.

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

Cette commande échoue en raison d'un délai d'attente dépassé.

Contournement avec la fragmentation TLS

En ajoutant la fragmentation TLS au transport, nous pouvons contourner ce blocage.

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

Cette commande récupère le titre de la page d'accueil YouTube, qui est <title>YouTube</title>.

Contournement avec la fragmentation TLS et 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>'

Cette opération renvoie également <title>YouTube</title>.

Contourner la censure avec un serveur 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>'

Cette opération renvoie également <title>YouTube</title>.

Ressources et analyses supplémentaires

Pour les discussions et les questions, consultez le groupe de discussion du SDK Outline.