# HTTP-прокси устройства

FIRERPA предоставляет на телефоне HTTP-прокси — мостовой прокси (bridge proxy) в конфигурации сервиса, то есть `tunnel2.*`. Если вы укажете на компьютере или в браузере прокси-сервер, ведущий на телефон, трафик компьютера сначала пойдёт через телефон, а затем выйдет через сеть телефона; внешний IP-адрес будет совпадать с IP-адресом телефона. По направлению это противоположно [настройке прокси](./set-proxy.md). Сравнение:

| | **HTTP-прокси устройства** (эта глава) | **Настройка прокси** |
| --- | --- | --- |
| **Направление трафика** | **Компьютер** → выход через **телефон** | **Приложение на телефоне** → выход через **внешний прокси** |
| **Типичное применение** | Дать компьютеру использовать IP телефона | Назначить телефону прокси-IP |

К типичным сценариям относятся: использование одного и того же исходящего IP для компьютера и телефона при совместной отладке и диагностике, настройка upstream в mitmproxy на телефон при перехвате трафика, чтобы трафик по-прежнему выходил с устройства, или использование сетей нескольких устройств в качестве источника IP-адресов.

## Использование прокси

Эта функция включена по умолчанию; прокси использует общий с удалённым рабочим столом служебный порт, по умолчанию `65000`. Посмотрите текущий IP в настройках WLAN телефона (в примерах ниже — `192.168.0.2`), а если вы изменяли `port`, не забудьте заменить порт в примерах. Компьютер должен иметь доступ к служебному порту FIRERPA на телефоне: обычно он должен находиться в одной локальной сети с телефоном, либо служебный порт должен быть проброшен в интернет.

На компьютере можно быстро проверить работу следующей командой (замените IP на адрес вашего устройства):

```bash
curl -x http://192.168.0.2:65000 https://httpbin.org/ip
```

Если возвращённый IP совпадает с внешним IP телефона, всё работает. В Firefox можно задать HTTP-прокси `192.168.0.2`, порт `65000` и включить параметр «также использовать этот прокси для HTTPS». В Python можно написать:

```python
requests.get("https://httpbin.org/ip", proxies={"http": "http://192.168.0.2:65000", "https": "http://192.168.0.2:65000"})
```

Если сервисный сертификат не включён, прокси по умолчанию не требует аутентификации. Если при запуске используется сервисный сертификат, необходимо использовать имя пользователя `lamda`; пароль — это PASSWD из первой строки PEM-файла сервисного сертификата (тот же пароль, что и для входа в удалённый рабочий стол по HTTPS, но не пользовательский пароль WebUI). Кроме того, в [конфигурации сервиса](./properties.md) можно задать `tunnel2.password`, чтобы указать отдельный пароль прокси. Пример curl в этом случае:

```bash
curl --proxy-insecure -x https://lamda:пароль_сертификата@192.168.0.2:65000 https://httpbin.org/ip
```

Пример на Python:

```python
requests.get("https://httpbin.org/ip", verify=False, proxies={"http": "https://lamda:пароль_сертификата@192.168.0.2:65000", "https": "https://lamda:пароль_сертификата@192.168.0.2:65000"})
```

## Настройка прокси

Мостовой прокси можно настроить в [конфигурации сервиса](./properties.md). Например, задайте `tunnel2.login` и `tunnel2.password` для собственных учётных данных:

```ini
tunnel2.login=lamda
tunnel2.password=ваш_новый_пароль
```

`tunnel2.iface` задаёт исходящий сетевой интерфейс: `wlan` означает выход через Wi-Fi, `rmnet` — через мобильные данные (4G/5G; даже если Wi-Fi подключён, приоритет будет у мобильного трафика). Если параметр не задан, используется системная сеть по умолчанию; если выбранный интерфейс в данный момент не имеет сети, прокси будет недоступен.

```ini
tunnel2.iface=rmnet
```