# Настройка системного прокси (переключение IP)

В этой главе вы узнаете, как настроить IP-прокси для вашего текущего мобильного телефона. FIRERPA поддерживает настройку HTTP и SOCKS5 прокси для вашего телефона, после чего весь его сетевой трафик будет проходить через настроенный прокси. В настоящее время эта функция не поддерживает IPv6.

## Подключение к прокси

Этот интерфейс имеет много параметров. Предположим, вы получили от провайдера прокси `http://1.x.x.x:8080`. Всего несколько строк кода позволят направить трафик устройства через этот прокси. Вы можете ознакомиться с разделом `Полные параметры` ниже, чтобы узнать обо всех доступных параметрах.

```python
profile = GproxyProfile()
profile.type = GproxyType.HTTP_CONNECT

profile.drop_udp = True
profile.host = "1.x.x.x"
profile.port = 8080

d.start_gproxy(profile)
```

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

## Типы прокси

| Тип прокси   | Описание                         |
|--------|------------------------------|
| GproxyType.HTTP_CONNECT      | HTTP                      |
| GproxyType.HTTPS_CONNECT     | HTTPS (HTTP+TLS)          |
| GproxyType.SOCKS5            | Socks5                    |
| GproxyType.SHADOWSOCKS       | Shadowsocks               |
| GproxyType.HTTP_RELAY        | Устарело                     |


### Параметры шифрования Shadowsocks

Ниже приведен список поддерживаемых типов шифрования Shadowsocks. Поддерживаются только методы шифрования из этого списка; параметры обфускации не поддерживаются.

| Тип шифрования   | Название                         |
|--------|------------------------------|
| AES             | aes-128-cfb                      |
| AES             | aes-192-cfb                      |
| AES             | aes-256-cfb                      |
| AES             | aes-128-ctr                      |
| AES             | aes-192-ctr                      |
| AES             | aes-256-ctr                      |
| CAMELLIA        | camellia-128-cfb                 |
| CAMELLIA        | camellia-192-cfb                 |
| CAMELLIA        | camellia-256-cfb                 |
| DES             | des-cfb                          |
| AES-AEAD        | aes-128-gcm                      |
| AES-AEAD        | aes-192-gcm                      |
| AES-AEAD        | aes-256-gcm                      |
| AEAD            | chacha20-ietf-poly1305           |

Для Shadowsocks используйте следующий способ для установки метода шифрования и пароля.

```python
profile.login = "chacha20-ietf-poly1305"
profile.password = "пароль"
```

## Отключение прокси

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

```python
d.stop_gproxy()
```


## Полные параметры

Ниже приведена полная информация о параметрах конфигурации прокси-интерфейса. Вы можете решить, нужно ли использовать тот или иной параметр, на основе его описания.

С помощью следующего параметра вы можете настроить тип прокси-сервиса. Если это socks5 прокси, используйте `GproxyType.SOCKS5`.

```python
profile.type = GproxyType.HTTP_CONNECT
```

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

```{attention}
Если для проксирования DNS-запросов установлен параметр dns_proxy, используемый вами DNS-сервер должен поддерживать TCP-запросы. Обычно популярные DNS-серверы поддерживают TCP-запросы.
```

```python
profile.nameserver = "114.114.114.114"
```

Настройка IP-адреса и порта прокси-сервера.

```python
profile.host = адрес_прокси_сервера
profile.port = порт_прокси_сервера
```

Если ваш прокси-сервер требует аутентификации, вы можете предоставить учетные данные с помощью следующих параметров. Это зависит от вашего провайдера прокси. Для типа Shadowsocks, login представляет собой метод шифрования.

```python
profile.login = "имя_пользователя_прокси"
profile.password = "пароль_прокси"
```

Используется для блокировки UDP-трафика в системе. Зачем нужно блокировать UDP-трафик? Потому что большинство современных публичных прокси-сервисов не поддерживают проксирование UDP-трафика. Конечно, некоторые SOCKS5-серверы поддерживают UDP, например, наше собственное решение для развертывания, и Shadowsocks обычно также поддерживает UDP. Поэтому отключение системного UDP-трафика является хорошим выбором. Эта опция по умолчанию отключена.

```python
profile.drop_udp = False
```

Используется для настройки обхода локальной сети. Если установлено значение `True`, трафик в подсетях роутера, таких как 192.168.x.x и 10.x.x.x, не будет проходить через прокси. По умолчанию `False`. Обратите внимание, что если включен udp_proxy, эта опция не действует на UDP-трафик.

```python
profile.bypass_local_subnet = True
```

Используется для настройки проксирования UDP-трафика. Ваш прокси должен соответствовать некоторым предварительным условиям: он должен быть типа `GproxyType.SOCKS5` или `GproxyType.SHADOWSOCKS`, и на вашем прокси-сервере должна быть включена поддержка UDP. Вы можете установить прокси-сервер с поддержкой SOCKS5 UDP или самостоятельно развернуть ss-сервер, используя нашу документацию. По умолчанию `False`. Эта опция будет проигнорирована, если вы используете HTTP-прокси или если опция drop_udp установлена в `True`.

```python
profile.udp_proxy = False
```

Используется для настройки перенаправления всего DNS-трафика через прокси. При включении этой опции весь DNS-трафик на устройстве будет отправляться через прокси, что может помочь избежать DNS-спуфинга. При использовании этой опции необходимо также указать параметр `nameserver`. Не используйте в сценариях перехвата пакетов, так как программное обеспечение для перехвата может некорректно обрабатывать DNS-пакеты, что приведет к ложному обрыву сети.

```python
profile.dns_proxy = False
```

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

```python
# Выберите один из трех следующих способов для выбора целевого приложения.
app = d.application("com.android.browser")
app = d.get_application_by_name("Браузер")
app = d.application("com.android.browser", user=999) # приложение с несколькими экземплярами

profile.application.set(app)
```

## Автоматическое применение прокси

Вы можете настроить FIRERPA на автоматическое подключение к предварительно заданному прокси-серверу при запуске. Это гарантирует, что трафик вашего телефона всегда будет проходить через прокси. Скопируйте следующую конфигурацию, измените ее в соответствии с вашими данными прокси, запишите в файл `properties.local` и перезапустите FIRERPA. Некоторые неописанные поля имеют те же имена, что и поля, описанные в разделе `Полные параметры`.

```ini
gproxy.enable=true
gproxy.type=http-connect
gproxy.host=1.x.x.x
gproxy.port=8080
gproxy.password=
gproxy.login=
```

## Настройка прокси-сервера

FIRERPA предоставляет готовый к использованию docker-контейнер с прокси-сервисом SOCKS5, поддерживающим UDP, в каталоге tools. Вы можете узнать, как развернуть собственный прокси-сервер, в соответствующем разделе этой документации о развертывании прокси-сервиса.