设置系统代理(IP 切换)

您可以在此章节了解到如何为当前的手机设置 IP 代理,FIRERPA 支持您为当前的手机设置 HTTP、SOCKS5 代理,这样您手机的所有通信流量将从设置的代理发出,目前该功能不支持 IPV6。

连接代理

此接口的参数较多,假设您从服务商处获得的代理为 http://1.x.x.x:8080,仅需如下几行代码即可让设备流量通过此代理。您可以继续查看下方 完整参数 来了解您可以使用的参数。

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

对于 Shaowsocks,请使用以下的方式设置加密方式以及密码。

profile.login = "chacha20-ietf-poly1305"
profile.password = "密码"

关闭代理

您可以使用如下关闭 FIRERPA 在系统上设置的代理,这个接口非常简单,不需要您提供额外的参数。

d.stop_gproxy()

完整参数

下面是代理接口完整的参数配置信息,您可以根据每种参数的描述来选择您是否需要使用该参数。

您可以通过如下参数配置代理服务的类型,如果是 socks5 代理则为 GproxyType.SOCKS5

profile.type = GproxyType.HTTP_CONNECT

如果您需要重定向 DNS 查询到 114,该参数会使系统发出的所有 DNS 将会被转发至此,如果是与 OpenVPN 共存的情况,不要设置为 OpenVPN 的内网 DNS,否则可能彻底断网,不使用此配置时默认使用的是系统默认 DNS。

注意

如果设置了 dns_proxy 参数进行 DNS 查询的代理,您使用的 DNS 服务器需要支持 TCP 查询,通常情况下常用 DNS 服务器均支持 TCP 查询。

profile.nameserver = "114.114.114.114"

代理服务器的 IP 以及其端口号配置。

profile.host = 代理服务器地址
profile.port = 代理服务器端口

如果您的代理服务器需要登录验证,可以通过如下参数提供,这取决于您的代理提供商,对于 Shadowsocks 类型,login 则为加密方法。

profile.login = "代理服务器登录用户名"
profile.password = "代理服务器登录密码"

用以屏蔽系统中的 UDP 流量,为什么需要屏蔽 UDP 流量?因为现今大部分的公共代理服务均不支持代理系统内的 UDP 流量,当然,也有部分 SOCKS5 服务器支持代理 UDP,比如我们提供的自建方案,Shadowsocks 通常也支持 UDP。所以禁用系统 UDP 流量是一个不错的选择,这个选项默认是关闭的。

profile.drop_udp = False

用以配置是否需要绕过本地网络,如果配置为 True,那么如 192.168.x 10.x 等路由器网段的流量将不会经过代理,默认为 False。需要注意如果开启了 udp_proxy,此选项对 UDP 流量无效。

profile.bypass_local_subnet = True

用以配置是否需要代理 UDP 流量,需要您的代理符合一些先决条件,您的代理只能是 GproxyType.SOCKS5 或者 GproxyType.SHADOWSOCKS 代理,并且您的代理服务器开启了 UDP 代理支持,您可以通过我们提供的文档安装支持 SOCKS5 UDP 的代理服务器或者自建 ss 服务器。默认为 False,当您使用 http 代理或者 drop_udp 选项为 True,此选项将会被忽略。

profile.udp_proxy = False

用以设置您是否需要通过代理来转发所有 DNS 流量,开启此选项后,设备上所有的 DNS 流量都将通过代理发出,可以避免污染的情况。使用此选项时,需要您同时指定 nameserver 参数。不可在抓包场景使用,否则由于抓包软件可能无法正确对待 DNS 数据包,导致伪断网。

profile.dns_proxy = False

您可以通过如下配置来仅对系统中的某一个应用设置代理,除外的应用流量将不会通过代理。

# 下属三种选择目标应用的方式请三选一。
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 即可,部分未描述的字段与 完整参数 中描述的字段名相同。

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

搭建代理服务

FIRERPA 在 tools 目录中提供了一个开箱即用同时支持 UDP 的 socks5 代理服务 docker,您可以在本文档的部署代理服务相关章节了解如何部署自己的代理服务器。