# Configurer le proxy système (Changement d'IP)

Dans ce chapitre, vous apprendrez comment configurer un proxy IP pour le téléphone actuel. FIRERPA vous permet de configurer des proxys HTTP et SOCKS5 pour votre téléphone, de sorte que tout le trafic de communication de votre téléphone passera par le proxy configuré. Actuellement, cette fonctionnalité ne prend pas en charge IPv6.

## Connexion au proxy

Cette interface a de nombreux paramètres. Supposons que le proxy que vous avez obtenu de votre fournisseur de services est `http://1.x.x.x:8080`. Seules quelques lignes de code sont nécessaires pour faire passer le trafic de l'appareil par ce proxy. Vous pouvez continuer à consulter les `Paramètres complets` ci-dessous pour connaître les paramètres que vous pouvez utiliser.

```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)
```

Il est important de noter qu'après avoir configuré le proxy, les applications en cours d'exécution ne l'utiliseront pas immédiatement. Ces applications ont déjà établi des connexions TCP avant la configuration du proxy. Par conséquent, vous devez fermer manuellement l'application cible et la rouvrir pour qu'elle établisse une connexion via le proxy.

## Types de proxy

| Type de proxy   | Description                         |
|--------|------------------------------|
| GproxyType.HTTP_CONNECT      | HTTP                      |
| GproxyType.HTTPS_CONNECT     | HTTPS (HTTP+TLS)          |
| GproxyType.SOCKS5            | Socks5                    |
| GproxyType.SHADOWSOCKS       | Shadowsocks               |
| GproxyType.HTTP_RELAY        | Obsolète                     |


### Paramètres de chiffrement Shadowsocks

La liste suivante présente les types de chiffrement Shadowsocks pris en charge. Seules les méthodes de chiffrement de cette liste sont prises en charge ; les paramètres d'obfuscation ne sont pas supportés.

| Type de chiffrement   | Nom                         |
|--------|------------------------------|
| 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           |

Pour Shadowsocks, veuillez utiliser la méthode suivante pour définir la méthode de chiffrement et le mot de passe.

```python
profile.login = "chacha20-ietf-poly1305"
profile.password = "mot_de_passe"
```

## Fermer le proxy

Vous pouvez utiliser la commande suivante pour fermer le proxy configuré par FIRERPA sur le système. Cette interface est très simple et ne nécessite aucun paramètre supplémentaire.

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


## Paramètres complets

Voici les informations de configuration complètes des paramètres de l'interface proxy. Vous pouvez décider d'utiliser ou non chaque paramètre en fonction de sa description.

Vous pouvez configurer le type de service proxy avec le paramètre suivant. Si c'est un proxy socks5, utilisez `GproxyType.SOCKS5`.

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

Si vous avez besoin de rediriger les requêtes DNS vers 114, ce paramètre fera en sorte que toutes les requêtes DNS émises par le système soient transférées ici. En cas de coexistence avec OpenVPN, ne le configurez pas sur le DNS interne d'OpenVPN, sinon cela pourrait entraîner une perte totale de connexion. Si cette configuration n'est pas utilisée, le DNS par défaut du système est utilisé.

```{attention}
Si le paramètre dns_proxy est défini pour le proxy des requêtes DNS, le serveur DNS que vous utilisez doit prendre en charge les requêtes TCP. En général, les serveurs DNS courants prennent en charge les requêtes TCP.
```

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

Configuration de l'adresse IP et du numéro de port du serveur proxy.

```python
profile.host = adresse_du_serveur_proxy
profile.port = port_du_serveur_proxy
```

Si votre serveur proxy nécessite une authentification, vous pouvez la fournir avec les paramètres suivants. Cela dépend de votre fournisseur de proxy. Pour le type Shadowsocks, `login` correspond à la méthode de chiffrement.

```python
profile.login = "nom_utilisateur_proxy"
profile.password = "mot_de_passe_proxy"
```

Utilisé pour bloquer le trafic UDP dans le système. Pourquoi bloquer le trafic UDP ? Parce que la plupart des services de proxy publics actuels ne prennent pas en charge le trafic UDP au sein du système. Bien sûr, certains serveurs SOCKS5 prennent en charge le proxy UDP, comme la solution auto-hébergée que nous fournissons, et Shadowsocks prend également en charge l'UDP. Par conséquent, désactiver le trafic UDP du système est un bon choix. Cette option est désactivée par défaut.

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

Utilisé pour configurer s'il faut contourner le réseau local. Si configuré sur `True`, le trafic des sous-réseaux locaux comme 192.168.x.x, 10.x.x.x, etc., ne passera pas par le proxy. La valeur par défaut est `False`. Notez que si `udp_proxy` est activé, cette option n'a aucun effet sur le trafic UDP.

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

Utilisé pour configurer s'il faut utiliser un proxy pour le trafic UDP. Votre proxy doit remplir certaines conditions préalables : il doit être de type `GproxyType.SOCKS5` ou `GproxyType.SHADOWSOCKS`, et votre serveur proxy doit avoir activé le support du proxy UDP. Vous pouvez installer un serveur proxy prenant en charge SOCKS5 UDP ou construire votre propre serveur ss en suivant notre documentation. La valeur par défaut est `False`. Lorsque vous utilisez un proxy http ou que l'option `drop_udp` est `True`, cette option sera ignorée.

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

Utilisé pour définir si vous devez transférer tout le trafic DNS via le proxy. Une fois cette option activée, tout le trafic DNS de l'appareil sera envoyé via le proxy, ce qui peut éviter les situations de pollution DNS. Lorsque vous utilisez cette option, vous devez également spécifier le paramètre `nameserver`. Ne pas utiliser dans des scénarios de capture de paquets, car le logiciel de capture pourrait ne pas traiter correctement les paquets DNS, entraînant une pseudo-déconnexion.

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

Vous pouvez utiliser la configuration suivante pour définir un proxy pour une seule application spécifique dans le système. Le trafic des autres applications ne passera pas par le proxy.

```python
# Veuillez choisir l'une des trois méthodes ci-dessous pour sélectionner l'application cible.
app = d.application("com.android.browser")
app = d.get_application_by_name("Navigateur")
app = d.application("com.android.browser", user=999) # Application clonée

profile.application.set(app)
```

## Application automatique du proxy

Vous pouvez faire en sorte que FIRERPA se connecte automatiquement à un serveur proxy prédéfini au démarrage, garantissant ainsi que le trafic de votre téléphone passe toujours par le proxy. Copiez la configuration suivante, modifiez les paramètres avec vos informations de proxy, écrivez-les dans le fichier `properties.local`, puis redémarrez FIRERPA. Certains champs non décrits ici sont identiques aux noms de champs décrits dans la section `Paramètres complets`.

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

## Mettre en place un service proxy

FIRERPA fournit dans le répertoire `tools` un service proxy socks5 prêt à l'emploi via Docker, qui prend également en charge l'UDP. Vous pouvez apprendre à déployer votre propre serveur proxy dans les chapitres correspondants de cette documentation sur le déploiement de services proxy.