Удаленная характеристика и обход сетевых помех с помощью Outline SDK

В этом руководстве показано, как использовать инструменты командной строки Outline SDK для понимания и обхода сетевых помех с удаленной точки зрения. Вы узнаете, как использовать инструменты SDK для измерения сетевых помех, тестирования стратегий обхода и анализа результатов. В этом руководстве основное внимание будет уделено инструментам resolve , fetch и http2transport .

Начало работы с инструментами Outline SDK

Вы можете начать использовать инструменты Outline SDK прямо из командной строки.

Решить DNS

Инструмент resolve позволяет выполнять DNS-поиск с помощью указанного преобразователя.

Чтобы разрешить запись A домена:

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

Чтобы разрешить запись CNAME:

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

Получить веб-страницу

Инструмент fetch можно использовать для извлечения содержимого веб-страницы.

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

Он также может принудительно перевести соединение на использование QUIC.

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

Используйте локальный прокси-сервер

Инструмент http2transport создает локальный прокси для маршрутизации вашего трафика. Чтобы запустить локальный прокси с транспортом Shadowsocks:

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

Затем вы можете использовать этот прокси с другими инструментами, такими как curl:

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

Укажите стратегии обхода

Outline SDK позволяет специфицировать различные стратегии обхода, которые можно комбинировать для обхода различных форм сетевых помех. Спецификация этих стратегий находится в документации go .

Компонуемые стратегии

Эти стратегии можно комбинировать для создания более надежных методов обхода.

  • DNS-over-HTTPS с фрагментацией TLS : doh:name=cloudflare-dns.com&address=cloudflare.net:443 | tlsfrag:1
  • SOCKS5-over-TLS с доменным фронтингом : tls:sni=decoy.example.com&certname=[HOST] | socks5:[HOST]:[PORT]
  • Многоадресная маршрутизация с помощью Shadowsocks : ss://[USERINFO1]@[HOST1]:[PORT1] | ss://[USERINFO2]@[HOST2]:[PORT2] | ss://[USERINFO3]@[HOST3]:[PORT3]

Удаленный доступ и измерение

Для измерения помех в сети, которые испытываются в разных регионах, вы можете использовать удаленные прокси-серверы. Вы можете найти или создать удаленные прокси-серверы для подключения.

Параметры удаленного доступа

Используя инструмент fetch , вы можете удаленно тестировать соединения различными способами.

Сервер Outline

Удаленное подключение к стандартному серверу Outline с помощью транспорта 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 через SSH

Создайте прокси SOCKS5 с использованием туннеля SSH.

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

Подключитесь к этому туннелю с помощью fetch

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

Пример из практики: обход блокировки YouTube в Иране

Вот практический пример обнаружения и обхода сетевых помех.

Определить блок

При попытке загрузить домашнюю страницу YouTube через иранский прокси-сервер время ожидания запроса истекает, что указывает на блокировку.

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

Эта команда завершается сбоем из-за тайм-аута.

Обход с фрагментацией TLS

Добавив фрагментацию TLS к транспорту, мы можем обойти эту блокировку.

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

Эта команда успешно извлекает заголовок домашней страницы YouTube: <title>YouTube</title> .

Обход с помощью фрагментации TLS и 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>'

Это также успешно возвращает <title>YouTube</title> .

Обход с помощью сервера 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>'

Это также возвращает <title>YouTube</title> .

Дополнительный анализ и ресурсы

Для обсуждений и вопросов посетите группу обсуждения Outline SDK .