# 模拟器代理 IP：每个多开窗口独立 IP

> 在 Macro Automation Studio 中为每个模拟器实例或云设备绑定一个 HTTP、HTTPS 或 SOCKS5 代理，测试出口 IP，并在 Webhook 中读回它。

Source: https://automationmacro.com/zh-CN/docs/proxies (设备, updated 2026-09-05)

给每个模拟器实例或云设备配一个模拟器代理 IP，每台设备就有了自己的网络身份。Macro Automation Studio（MAS）把你的代理存在账户里，为每台设备绑定一个代理，并把这台设备的流量路由过去：模拟器上用本地中继，云设备上用设备网络内部的透明代理。这一页介绍代理类型、两种添加方式、绑定、测试和限制。

## 开始之前

- 一个可用的代理：MAS 集成的住宅代理网关的账户，或者其他任意提供商的端点。
- 设备已在某个[设备组](/docs/device-groups)中。代理绑定到设备，不是组。
- 已安装 MAS 并用有效的套餐登录。

## 代理类型

MAS 接受 `http`、`https` 和 `socks5` 代理，带或不带用户名和密码都可以。IP 白名单授权的代理把凭据留空即可。

在**代理**页有两种添加代理的方式：

- **网关账户**（第一个标签页）：输入一次网关账户的登录名和密码。这只添加一个条目，而你绑定它的每台设备都会从网关获得自己的固定 IP。你可以选择**国家**（可选），把**协议**设为 **HTTP** 或 **SOCKS5**，并打开**高级定向**设定州、城市、邮编或 ASN。更细的定向需要指定国家，并且提供商会按更高的费率计费，表单在你使用前会说明。
- **其他提供商**：输入**标签**、**协议**、**主机 / IP**、**端口**以及可选的**用户名**和**密码**，或者在**粘贴代理（每行一个）**下按以下任意格式一次粘贴多个代理，然后点击**导入并测试**：

```text
host:port
host:port:user:pass
scheme://user:pass@host:port
```

点击**添加并测试**。MAS 加密存储凭据，然后立即测试代理。

## 测试代理

**代理池**表格列出每个代理及其状态：**可用**、**失效**或**未检测**。**测试**通过代理访问一个 IP 回显服务，记录出口 IP、出口国家和延迟；**全部测试**对整个池执行同样的操作。**出口 / 地区**列把你要求的（**want:**）和测试观察到的（**got:**）并排显示，因为网关的出口可能不在你要求的国家。网关代理的测试不带会话，所以它的测试出口是轮换的。

**流量**列是过去 30 天 MAS 通过这个代理路由的流量，由 MAS 自己的中继测量。你的提供商的计费数字可能不同。

## 为每个模拟器实例或云设备绑定一个代理

每台设备一个代理。绑定第二个会替换第一个，对话框会提醒你："This device already has a proxy. Attaching will replace it."

从**代理**页：

1. 在某个代理上点击**绑定**。
2. 选择**模拟器设备**。已有代理的设备会标注 "has a proxy"。
3. 选择**会话行为**：**固定**，把一个 IP 固定给这台设备；或**轮换**，每个请求一个新 IP。
4. 点击**绑定**。

从**设备组**中的设备卡片：打开**高级设置**，在**代理**下拉框中选择代理。卡片以固定模式绑定它。**无代理**移除分配。

每个固定分配都有自己的会话 ID，正是它把一个网关账户变成每台设备各不相同的出口 IP。对于其他提供商的普通代理，出口 IP 就是那个端点给的；会话设置不会改变它。

**当前绑定**表格列出每台设备及其代理和会话。**应用信息**显示解析后的连接细节，包括按设备生成的用户名，可在 MAS 之外使用。

## SOCKS5 或 HTTP 代理在安卓模拟器上如何工作

安卓的全局代理设置没有用户名和密码字段，而网关的用户名正是定向和会话 ID 所在的地方。所以 MAS 在每次运行时在这台电脑上运行一个小型中继：

1. 运行开始时，MAS 查找设备的代理，并启动一个绑定到 `127.0.0.1` 空闲端口的中继。中继在出站时附加凭据，对设备说 HTTP，对上游说 HTTP、HTTPS 或 SOCKS5，所以 SOCKS5 网关也能用于本身不支持 SOCKS5 的模拟器。
2. MAS 通过中继发送一个请求，证明链路可用，并读回出口 IP、国家和城市。凭据错误或地区不可用会在这里失败，也就是在宏启动之前。
3. adb 连接后，MAS 运行 `adb reverse` 让模拟器自己的 localhost 能到达中继，然后把设备的全局 HTTP 代理设为 `127.0.0.1:<relay port>`。每次重连都会重复这一步，因为重连会丢掉反向映射。
4. 运行结束时，MAS 清除代理设置，移除反向映射，关闭中继。

设备卡片会叙述每一步：检查后显示**代理就绪**，应用后显示带出口 IP 的**代理已启用**，运行后显示**代理已关闭**，失败时显示带原因的**代理失败**。中继只监听回环地址，所以你网络上的其他设备无法使用它。

> [!WARNING]
> 安卓的全局代理设置只是建议性的。忽略它的应用（一些游戏就是如此）在模拟器上会直接发送流量。[云设备](/cloud-devices)没有这个缺口。

## 在云设备上如何工作

在云设备上，MAS 完全不使用安卓的设置。设备启动时，主机在设备的网络命名空间内启动一个透明代理，并把每个出站 TCP 连接重定向过去。每个连接都通过你的上游代理、用你的凭据重新建立，所以无论应用是否遵守代理设置，设备的全部流量都从代理的 IP 出口。云端代理用 HTTP CONNECT 与上游通信，所以请给云设备一个 HTTP 或 HTTPS 代理。

- 代理在设备的整个生命周期内生效，而不是按运行。绑定或更换后，停止再启动设备；卡片会显示 "Applies when the device next starts"。
- 设备运行时，卡片显示带出口 IP 的**代理**，每次运行的日志开头是 "Proxy active, traffic routed through <ip>"。
- 如果代理无法应用，设备不会以无代理状态启动。它会进入**错误**并提示 "proxy setup failed, turn the device off and on to retry"。
- 在设备已经运行时绑定的代理会在之后的轮询中应用，无需重启。

## Webhook 和运行历史中的出口 IP

当一次运行启用了代理时，这次运行的 Webhook 事件会在 `data` 中携带 `proxy_exit_ip` 和 `proxy_country`，与 `device_name`、`device_port` 和 `group_id` 并列。同样的值也和运行一起存储，所以你之后可以查看某次运行的流量从哪里出口。参见 [Webhook](/docs/webhooks)。

## 限制

- 每台设备一个代理；没有代理的设备直接连接。
- 协议：`http`、`https`、`socks5`。端口 1 到 65535。
- 模拟器按运行应用代理；云设备按设备启动应用代理，并且需要 HTTP 或 HTTPS 上游。
- 网关定向：要么指定国家，要么排除国家，不能同时；州、城市、邮编和 ASN 需要指定国家。
- 流量数字由 MAS 测量，不是你的提供商账单。

## 供 API 密钥使用的代理路由

每个代理路由都接受 [API 密钥](/docs/api-keys)：`/api/proxy` 和 `/api/proxy/{id}` 上的 `GET`、`POST` 和 `PUT`，`POST /api/proxy/import`，`POST /api/proxy/{id}/validate`，`/api/proxy/assignments` 下的分配路由及 `/api/proxy/assignments/{id}/connection-info`，查询设备所绑定代理的 `GET /api/proxy/devices/{device_id}`，以及 `GET /api/proxy/usage`。用 `GET /api/emulator/devices` 查找设备 ID。参见 [REST API](/docs/rest-api)。

## 故障排查

### 设备卡片显示代理失败

消息会指出是哪一步。"proxy did not respond, check credentials or targeting" 表示上游拒绝了检查：登录信息错误、套餐过期，或者网关在该国家没有 IP。在代理页运行**测试**查看提供商的回复。"could not expose the proxy relay to the device (adb reverse)" 或 "could not set the device proxy" 表示 adb 在连接和设置之间丢失了模拟器；参见 [ADB 故障排查](/docs/adb-troubleshooting)，然后重新启动运行。

### 状态显示失效

测试无法通过代理访问互联网。检查主机、端口和协议，然后是凭据，如果是 IP 白名单授权的代理，确认它允许这台电脑的 IP。修复后再次**测试**；成功时延迟和出口 IP 会更新。

### 云设备显示 proxy setup failed

设备主机在启动时无法应用代理。确认代理是**可用**的、是 HTTP 或 HTTPS 而不是 SOCKS5，然后点击**停止**，等待，再**启动**。要在没有代理的情况下启动设备，先把它的**代理**设为**无代理**。
