# モバイルプロキシサービス

モバイルプロキシサービスは、少し分かりにくいかもしれません。まず一言で説明すると、FIRERPAにはHTTPプロキシサーバーが内蔵されており、このHTTPネットワークプロキシを通じて、つまり携帯電話のネットワークを経由して他のサイトにアクセスすることができます。

例えば、デバイスと同じネットワークIP環境下でネットワークテストを行い、問題を調査したい場合があります。FIRERPAのこのプロキシ機能は、FIRERPAを実行しているデバイスをHTTPネットワークプロキシサーバーとして使用することをサポートします。つまり、この機能を通じて、このモバイルデバイスをプロキシサーバーとして使用し、通信トラフィックをこのデバイスのネットワーク出口を経由させることができます。あるいは、パケットキャプチャを行っているが、トラフィックをローカルPCから出したくない場合、このプロキシサービスをmitmproxyの上流プロキシとして設定することができます。これにより、パケットをキャプチャしつつ、すべての通信トラフィックは元のデバイスから送信され続けます。また、多数のデバイスのアイドル状態のネットワークをIPプロキシサービスとして利用することも可能です。

## プロキシの使用

Firefoxブラウザの設定で「手動でプロキシを設定する」を選択し、`192.168.0.2`、ポート `65000` をプロキシとして設定し、「このプロキシをHTTPSでも使用する」にチェックを入れると、お使いのFirefoxはデバイスと同じアウトバウンドIPを持つようになります。

以下のcurlコマンドで素早く体験することもできます。

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

Pythonのrequestsライブラリを使用することもできます。

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


デフォルトでは、このプロキシは認証を必要としません。しかし、`--certificate` を使用して起動した場合（サービス証明書を使用した場合）、ログインユーザー名は `lamda` となり、パスワードはリモートデスクトップのログイントークン（注意：リモートデスクトップのカスタムパスワードではなく、サービス証明書ファイル内のパスワード）と同じになります。また、`properties.local` で `tunnel2.password` をカスタム設定し、このパスワードを自分で設定することもできます。

上記のサービス証明書を使用する場合、以下の方法で利用します。

```bash
curl -x http://lamda:証明書のパスワード@192.168.0.2:65000 https://httpbin.org/ip
```

同様に、Pythonのrequestsでは以下のようになります。

```python
requests.get("https://httpbin.org/ip", proxies={"http":"http://lamda:証明書のパスワード@192.168.0.2:65000", "https": "http://lamda:証明書のパスワード@192.168.0.2:65000"})
```


## プロキシの設定

`properties.local` に以下の設定を書き込むことで、モバイルプロキシ機能の設定ができます。パスワード認証を設定したり、デフォルトのアウトバウンドネットワークインターフェースではなく、`rmnet`（4G/5Gモバイルネットワーク）インターフェース経由で通信させたりすることが可能です。

```ini
tunnel2.login=lamda
tunnel2.password=あなたの新しいパスワード
```

アウトバウンドインターフェース `iface` の設定は、モバイルプロキシの出口ネットワークを設定するために使用されます。設定可能な値は `wlan` と `rmnet` の2つです。`iface` の値が `wlan` の場合、利用可能なwlanインターフェースが自動的に検出され、そのうちの1つがリクエストの送信に使用されます。
一方、`iface` が `rmnet` の場合、モバイルデータ（4G/5G、WIFIがオンであっても）を有効にし、モバイルネットワークインターフェースからリクエストを送信しようとします。`rmnet` または `wlan` に設定されていても、そのインターフェースにネットワーク接続がない場合、プロキシは機能しません。
この項目が設定されていない場合、デフォルトのネットワークを使用してリクエストが送信されます。

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