# デバイス HTTP プロキシ

FIRERPA はモバイル端末上で HTTP プロキシ（サービス設定内のブリッジプロキシ、すなわち `tunnel2.*`）を提供します。パソコンやブラウザのプロキシ設定をスマートフォンに向けると、パソコンからの Web アクセスはまずスマートフォンを通り、スマートフォンのネットワークから外部へ出るため、表示される IP アドレスはスマートフォンのものと一致します。これは [プロキシを設定する](./set-proxy.md) とは逆方向の動作で、以下のように対比されます：

| | **デバイス HTTP プロキシ**（本章） | **プロキシを設定する** |
| --- | --- | --- |
| **ネットワークの方向** | **パソコン** → スマートフォンを**経由**してインターネットへ | **スマートフォン上のアプリ** → **外部プロキシ**を経由してインターネットへ |
| **主な用途** | パソコンでスマートフォンの IP を利用する | スマートフォンにプロキシ IP を適用する |

一般的な使用例としては、パソコンとスマートフォンで同じ出口 IP を共有して連携デバッグを行う、パケットキャプチャ時に mitmproxy の上流をスマートフォンに向けてトラフィックがデバイスから出るようにする、または複数デバイスのネットワークを IP ソースとして活用するなどがあります。

## プロキシの使用

この機能はデフォルトで有効で、プロキシはリモートデスクトップとサービス ポートを共有し、デフォルトは `65000` です。スマートフォンの WLAN 設定で現在の IP アドレスを確認してください（以下の例では `192.168.0.2`）。`port` を変更した場合は、例のポートを適宜置き換えてください。パソコンからスマートフォンの FIRERPA サービス ポートにアクセスできる必要があり、通常は同一 LAN 内にあるか、サービス ポートをパブリック ネットワークに転送する必要があります。

パソコン上で次のコマンドを使用して素早く検証できます（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`、パスワードはサービス証明書 PEM ファイルの 1 行目の PASSWD（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
```