設定代理

您可以在此章節了解如何為目前的手機設定 IP 代理,FIRERPA 支援您為目前的手機設定 HTTP/s、SOCKS5、SHADOWSOCKS 等代理,使裝置流量透過指定代理發出,支援代理 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)

代理類型 (type)

代理類型說明
GproxyType.HTTP_CONNECTHTTP
GproxyType.HTTPS_CONNECTHTTPS (HTTP+TLS)
GproxyType.SOCKS5SOCKS5
GproxyType.SHADOWSOCKSShadowsocks
GproxyType.HTTP_RELAY已廢棄

Shadowsocks 加密參數

以下列表為支援的 Shadowsocks 加密類型,僅支援列表內的加密方式,不支援混淆參數。

加密類型名稱
AESaes-128-cfb
AESaes-192-cfb
AESaes-256-cfb
AESaes-128-ctr
AESaes-192-ctr
AESaes-256-ctr
CAMELLIAcamellia-128-cfb
CAMELLIAcamellia-192-cfb
CAMELLIAcamellia-256-cfb
DESdes-cfb
AES-AEADaes-128-gcm
AES-AEADaes-192-gcm
AES-AEADaes-256-gcm
AEADchacha20-ietf-poly1305

對於 Shadowsocks,請使用以下的方式設定加密方式以及密碼。

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.x、10.x.x.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

設定裝置上的代理出網網路介面,比如您的裝置存在 SIM 卡網路(rmment_datax)、WIFI 網路(wlan0)、以及一個 USB 供網(eth0),這時候由於不同網路的權重不一,系統可能預設使用 SIM 卡網路,而您需要代理從 USB 供網出去,這時,您可以透過此參數指定代理的出口網路。

profile.interface = "eth0"

您可以透過如下配置來僅對系統中的某一個應用設定代理,除外的應用流量將不會透過代理。

# 下屬三種選擇目標應用的方式請三選一。
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 在啟動時自動連接預設的代理伺服器,這樣可以確保您的手機流量始終透過代理。填入下列配置(修改為您的代理資訊,配置方式見 服務配置),部分未描述的欄位與 完整參數 中描述的欄位名稱相同。

gproxy.enable=true              ; 是否啟用服務 true | false
gproxy.type=http-connect        ; 代理類型可為 http-connect, https-connect, socks5, shadowsocks
gproxy.host=172.1.1.1           ; 代理伺服器位址
gproxy.port=8080                ; 代理伺服器埠號
gproxy.password=                ; 代理伺服器登入密碼(無驗證則留空)
gproxy.login=                   ; 代理伺服器登入使用者名稱(無驗證則留空,若類型為 shadowsocks 則為加密方法)
gproxy.nameserver=              ; 自訂 DNS 伺服器
gproxy.drop_udp=false           ; 是否丟棄 UDP 封包。
gproxy.udp_proxy=false          ; 是否代理 UDP 封包(需要代理支援,如 socks5、shadowsocks)。
gproxy.bypass_local_subnet=true ; 不代理區域網路流量。
gproxy.dns_proxy=false          ; 使 DNS 查詢經由代理(需支援 UDP 及 TCP 的 DNS 伺服器)。
gproxy.uid=                     ; 僅對指定 UID 代理(預設全域)。

搭建代理服務

FIRERPA 在 tools 目錄中提供了一個開箱即用同時支援 UDP 的 SOCKS5 代理服務 Docker,您可以在本文件的 部署 Socks5 代理 相關章節了解如何部署自己的代理伺服器。