Разработчикам

Размещённые прокси

10 мин чтенияОткрыть как Markdown ↗

Размещённый прокси направляет трафик приложения через URnetwork, когда приложение принимает только настройку прокси: curl, скрипт, скрейпер или мобильное приложение вроде Shadowrocket. В этом руководстве показано, где найти URL прокси на ur.io и как указать его в распространённых клиентах.

Одно замечание об области применения: у размещённого прокси нет запечатанного сеанса. Ваше клиентское устройство работает внутри оператора, который переводит протокол прокси в протокол сети. Между оператором и вашим трафиком стоит не запечатывание, а то, что прокси не ведёт журналов, как описано в модели угроз. Провайдеры по-прежнему не узнают, кто вы. Если приложение может само запускать URnetwork, приложения и SDK — более приватный путь.

Два вида прокси

ur.io создаёт два вида прокси, которыми могут пользоваться сторонние клиенты:

HTTPS-проксиSOCKS5-прокси
ТарифЛюбой тарифUR Pro
URL на ur.iohttps://<token>.<host>:<port>socks5h://<token>:x@<host>:<port>
Где находится токенВ имени хоста, без имени пользователя и пароляВ имени пользователя; пароль никогда не проверяется
Клиент должен поддерживатьHTTPS-прокси, которые используют TLS до проксиSOCKS5 с именем пользователя и паролем
Что передаётВеб-трафик: HTTP, и HTTPS через CONNECTTCP-соединения, и UDP через UDP associate

SOCKS5-прокси не поддерживает BIND и отбрасывает UDP-датаграммы больше 2 KiB. На UR Pro ur.io также создаёт профили WireGuard. Импортируйте скачанный файл .conf в приложение WireGuard; остальная часть руководства посвящена HTTPS и SOCKS5.

Как получить URL прокси

  1. Войдите на ur.io и откройте Прокси (Proxies) (ur.io/app/proxies).
  2. Выберите Создать прокси (Create proxy).
  3. Выберите тип прокси: HTTPS, SOCKS5 или WireGuard. У SOCKS5 и WireGuard есть значок Pro. На бесплатном тарифе кнопка создания сначала предлагает Pro.
  4. Выберите местоположение. Найдите страну, регион или город или оставьте Лучший доступный (Best available): он использует любого провайдера в сети. У каждого местоположения указано, сколько в нём провайдеров.
  5. Выберите Create HTTPS proxy или Create SOCKS5 proxy. Новый прокси появится вместе со своим URL.

У каждого HTTPS- и SOCKS5-прокси в списке есть Копировать URL (Copy URL): копирует весь URL вместе с токеном, и ×: удаляет прокси.

Как читать URL

Text
https://<token>.<host>:<port>
socks5h://<token>:x@<host>:<port>
  • <token> — токен прокси, длинная последовательность букв и цифр. Это единственные учётные данные прокси, и регистр букв не важен.
  • В HTTPS-URL токен — первая метка имени хоста. Укажите <token>.<host> в качестве хоста прокси точно так, как его показывает ur.io: именно токен в имени выполняет вход.
  • В SOCKS5-URL токен стоит между socks5h:// и :x@. <host> идёт после @, а <port> — после последнего :.
  • x — пароль-заглушка. SOCKS5-прокси никогда не проверяет пароль, поэтому подойдёт любое значение. Некоторые клиенты отправляют имя пользователя, только если задан и пароль, в том числе requests в Python, и для них URL от ur.io содержит x. Если клиент запрашивает имя пользователя и пароль по отдельности, укажите токен и любой пароль.
  • Сохраните h в socks5h. С ней прокси сам разрешает имена хостов, так что DNS-запросы уходят через провайдера, а не с вашего компьютера. С обычным socks5 curl сначала разрешает имена на вашем компьютере.

Обращайтесь с URL как с паролем. Любой, у кого он есть, может пользоваться прокси, а трафик прокси расходует данные вашего аккаунта. Если URL утёк, удалите этот прокси на ur.io, и прокси перестанет принимать его токен. Затем создайте новый.

Проверка с помощью curl

Shell
# HTTPS proxy, on every plan
curl -x 'https://<token>.<host>:<port>' https://api.bringyour.com/my-ip-info

# SOCKS5 proxy, on UR Pro
curl -x 'socks5h://<token>:x@<host>:<port>' https://api.bringyour.com/my-ip-info

/my-ip-info отвечает адресом, с которого пришёл ваш запрос, и тем, где этот адрес находится. Через прокси это адрес провайдера в выбранном вами местоположении. Для HTTPS-прокси нужен curl 7.52 или новее.

Браузеры

Проще всего пустить браузер через прокси с помощью расширения URnetwork: оно само создаёт свой размещённый прокси и управляет им. См. Начало работы в браузере.

Чтобы вместо этого использовать прокси, созданный на ur.io, возьмите его HTTPS-URL. Chrome вообще не умеет отправлять имя пользователя SOCKS5. Настройки прокси операционной системы и ручные настройки прокси в Firefox, как правило, не могут описать HTTPS-прокси.

Chrome, Edge и другие браузеры на Chromium. Запустите браузер с прокси в командной строке. Благодаря отдельному каталогу профиля флаг работает, даже когда ваше обычное окно браузера открыто:

Shell
# macOS
open -na "Google Chrome" --args --user-data-dir="$HOME/urnetwork-proxy-profile" --proxy-server="https://<token>.<host>:<port>"

# Linux
google-chrome --user-data-dir="$HOME/urnetwork-proxy-profile" --proxy-server="https://<token>.<host>:<port>"

# Windows, in Command Prompt (Edge: msedge instead of chrome)
start chrome --user-data-dir="%USERPROFILE%\urnetwork-proxy-profile" --proxy-server="https://<token>.<host>:<port>"

Firefox. В ручных настройках Firefox нет поля имени пользователя для SOCKS и нет типа HTTPS-прокси, поэтому используйте однострочный файл автоматической настройки прокси (PAC). Сохраните это как urnetwork.pac:

js
function FindProxyForURL(url, host) {
  return "HTTPS <token>.<host>:<port>";
}

Затем откройте Настройки → Основные → Параметры сети → Настроить… (Settings → General → Network Settings → Settings…), выберите URL автоматической настройки прокси (Automatic proxy configuration URL), введите адрес файла, например file:///Users/you/urnetwork.pac или file:///C:/Users/you/urnetwork.pac, и нажмите ОК (OK). Чтобы отключить прокси, выберите Без прокси (No proxy) в том же окне.

Мобильные приложения: Shadowrocket и другие

Прокси-приложения для телефонов, например Shadowrocket на iOS, принимают SOCKS5-сервер в виде нескольких полей. Создайте SOCKS5-прокси на ur.io (UR Pro) и скопируйте его URL. В приложении добавьте сервер и заполните его по URL:

ПолеЗначение
Тип (Type)SOCKS5
Адрес, сервер или хост (Address)<host>: часть между @ и последним :
Порт (Port)<port>: цифры после последнего :
Пользователь или имя пользователя (User)<token>: часть между socks5h:// и :x@
Пароль (Password)Любое значение, например x

Сохраните сервер, выберите его и включите подключение. Для всего телефона приложение URnetwork для iOS или Android не требует прокси и обеспечивает более приватный путь.

Python

requests принимает оба вида прокси. Для SOCKS5 нужен дополнительный пакет socks (pip install "requests[socks]"), а в его URL нужен пароль-заглушка:

python
import requests

proxy = "https://<token>.<host>:<port>"          # HTTPS proxy, every plan
# proxy = "socks5h://<token>:x@<host>:<port>"    # SOCKS5 proxy, UR Pro

r = requests.get(
    "https://api.bringyour.com/my-ip-info",
    proxies={"http": proxy, "https": proxy},
    timeout=30,
)
print(r.json()["info"]["ip"])

httpx принимает те же URL; для SOCKS5 нужен pip install "httpx[socks]". aiohttp принимает HTTPS-прокси:

python
import asyncio

import aiohttp
import httpx

with httpx.Client(proxy="https://<token>.<host>:<port>") as client:
    print(client.get("https://api.bringyour.com/my-ip-info").json())


async def main():
    async with aiohttp.ClientSession() as session:
        async with session.get("https://api.bringyour.com/my-ip-info", proxy="https://<token>.<host>:<port>") as r:
            print(await r.json())

asyncio.run(main())

Стандартный обработчик загрузок Scrapy не может получать страницы https:// через HTTPS-прокси: он останавливается с ошибкой «HTTPS proxies for HTTPS destinations are not supported». Загружайте такие страницы одной из библиотек выше.

Node.js

Для fetch передайте HTTPS-прокси в ProxyAgent из undici:

js
import { fetch, ProxyAgent } from "undici";

const dispatcher = new ProxyAgent("https://<token>.<host>:<port>");
const res = await fetch("https://api.bringyour.com/my-ip-info", { dispatcher });
console.log(await res.json());

Для node:https и библиотек, принимающих агент, используйте https-proxy-agent, а для SOCKS5 — socks-proxy-agent:

js
import https from "node:https";
import { HttpsProxyAgent } from "https-proxy-agent";
// import { SocksProxyAgent } from "socks-proxy-agent";

const agent = new HttpsProxyAgent("https://<token>.<host>:<port>");
// const agent = new SocksProxyAgent("socks5h://<token>:x@<host>:<port>");

https.get("https://api.bringyour.com/my-ip-info", { agent }, (res) => res.pipe(process.stdout));

Другие программы: proxychains

В Linux proxychains-ng направляет соединения программы через SOCKS5-прокси (UR Pro), даже если у программы нет настройки прокси. Он работает за счёт предзагрузки библиотеки, поэтому не действует на статически скомпонованные программы, к которым относится большинство программ на Go. Первым прокси у него должен быть IP-адрес, а не имя хоста, поэтому сначала узнайте адрес:

Shell
dig +short <host>

Сохраните файл конфигурации urnetwork.conf с этим адресом:

Text
strict_chain
proxy_dns
[ProxyList]
socks5 <ip> <port> <token> x

Затем запускайте программы через него:

Shell
proxychains4 -f urnetwork.conf curl https://api.bringyour.com/my-ip-info

proxy_dns заставляет proxychains разрешать имена через прокси. Если позже соединения перестанут работать, узнайте адрес заново.

Ограничения

Бесплатный тарифUR Pro
Активные прокси51 000
Новые прокси в минуту520

Прокси, которые создаёт браузерное расширение, тоже учитываются. Ограничение останавливает только создание новых прокси: имеющиеся прокси продолжают работать, а удаление одного освобождает место для другого. Прокси остаётся, пока вы его не удалите; прокси, который не использовался около 30 дней, удаляется автоматически.

Уникальные IP выхода

Размещённый прокси обычно распределяет свои соединения между несколькими провайдерами, поэтому два ваших прокси могут выходить с одного и того же адреса. С уникальным IP выхода, на UR Pro, каждый прокси выходит через одного провайдера, чей адрес не использует ни один из ваших других прокси. Прокси сохраняет свой выход, пока этот провайдер остаётся исправным.

  • Как включить: на странице «Прокси» отметьте Уникальный IP выхода (Unique exit IP) при создании прокси. Задайте Количество прокси (Number of proxies), чтобы создать до 20 за раз. В API добавьте "unique_exit": true в proxy_config.
  • Ограничения: прокси с уникальным выходом учитываются в тех же ограничениях, что и любые другие: 1 000 активных и 20 новых в минуту.
  • Что вы видите: у каждого прокси показано, где находится его выход (город, регион и страна) и с какого времени. IP-адрес выхода не показывается. Чтобы его увидеть, выполните проверку IP через прокси, например командами curl выше.
  • Если провайдер выходит из строя: прокси автоматически получает новый уникальный выход и на это время показывает Замена выхода… (Replacing exit…). Число замен в час ограничено; сверх ограничения прокси ждёт и пробует позже. В API "unique_exit_replace": "manual" заставляет прокси вместо этого ждать вас: он показывает Выход потерян (Exit lost), пока вы его не смените.
  • Сменить выход (Rotate exit): даёт прокси новый уникальный выход. Выход прокси можно менять раз в минуту и до 60 раз в день. Если в местоположении нет другого свободного уникального выхода, прокси сохраняет текущий.
  • Нет доступного уникального выхода: когда все исправные выходы в местоположении уже заняты вашими другими прокси, ur.io сообщает об этом и ничего не создаёт; попытка не учитывается в ваших ограничениях. Выберите другое местоположение или Лучший доступный.

Устранение неполадок

ur.io отказывается создать прокси. Он показывает причину (сообщения на английском). На бесплатном тарифе:

  • «Your plan's limit of 5 active proxies is reached. Remove a proxy to create another, or upgrade to UR Pro for more.» (Достигнуто ограничение вашего тарифа в 5 активных прокси.) Удалите прокси, которыми больше не пользуетесь, или перейдите на Pro.
  • «Your plan allows 5 new proxies a minute. Try again in a minute, or upgrade to UR Pro for more.» (Ваш тариф позволяет создавать 5 новых прокси в минуту.) Подождите минуту и попробуйте снова.

На UR Pro те же сообщения называют ограничения Pro и не предлагают перейти на другой тариф.

SOCKS5-прокси отклоняет вход. curl выводит одно из этих сообщений, а другие клиенты формулируют их по-своему:

  • User was rejected by the SOCKS5 server (1 1). Токен неверный или обрезан, либо прокси удалён. Скопируйте URL с ur.io заново.
  • No authentication method was acceptable. Клиент не отправил имя пользователя. Укажите токен в качестве имени пользователя и пароль-заглушку, например x.

HTTPS-прокси отклоняет соединение. curl выводит CONNECT tunnel failed, response N, где N:

  • 407: прокси не нашёл действительного токена. Скопируйте URL с ur.io заново и укажите весь <token>.<host> в качестве хоста прокси.
  • 502: прокси больше не существует, например потому, что вы его удалили, или до цели не удалось достучаться.
  • 403: адрес вызывающей стороны не входит в IP-привязку прокси. Она есть только у прокси, созданных через API с IP-привязкой.

Клиент, который получает пустой ответ или соединение, сразу закрывающееся, вероятно, говорит с прокси по обычному HTTP. Используйте URL https:// в клиенте, который поддерживает HTTPS-прокси.

Страницы загружаются медленно или по таймауту. Попробуйте Лучший доступный или местоположение с большим числом провайдеров. Трафик прокси расходует данные вашего аккаунта, поэтому аккаунт без оставшихся данных не может открывать новые соединения.

IP выхода меняется. Как и в приложениях, размещённый прокси распределяет свои соединения между несколькими провайдерами в своём местоположении. Адрес, который видит сайт, может меняться от одного соединения к другому. Чтобы закрепить за каждым прокси один IP выхода, создайте его с уникальным IP выхода на UR Pro.

Прокси не в том месте. Лучший доступный может выходить в любой стране. Выберите страну, регион или город при создании прокси. ur.io не может перенести уже существующий прокси: создайте новый в нужном месте, затем удалите старый.

Автоматизация через API

Страница «Прокси» вызывает API оператора: POST /network/auth-client с proxy_config, где initial_device_state.location выбирает местоположение. В ответе proxy_config_result содержит https_proxy_url, socks_proxy_url и auth_token. В socks_proxy_url из API нет имени пользователя: добавьте auth_token в качестве имени пользователя, как это делает ur.io. lock_ip_list из IP-адресов или подсетей ограничивает, кто может пользоваться прокси. Ограничения выше действуют и для API.

Для уникального IP выхода добавьте unique_exit в proxy_config:

JSON
{
  "proxy_config": {
    "unique_exit": true,
    "initial_device_state": {
      "location": { "connect_location_id": { "best_available": true } }
    }
  }
}

Добавьте "unique_exit_replace": "manual", чтобы при сбое провайдера прокси оставался на своём выходе, пока вы его не смените; по умолчанию используется "auto".

proxy_config_result.exit в ответе содержит exit_id, country_code, region, city, exit_since и state (assigned, replacing или no_supply) выхода, state_reason, если он есть, и replace_mode. GET /network/proxies сообщает то же самое в поле exit каждого прокси, рядом с его proxy_client. Отказ с no_unique_supply означает, что в местоположении не осталось выхода, который ваши прокси ещё не используют. POST /network/proxy/rotate-exit с client_id прокси переводит его на новый уникальный выход и возвращает новый exit; сверх ограничения на смену он отказывает с rate_limited, а когда другого свободного выхода нет — с no_unique_supply. Он принимает вход вашей сети или ключ API.