0
0
Fork 0
mirror of https://github.com/dyhkwong/Exclave.git synced 2026-04-19 05:33:43 +00:00
设置
dyhkwong edited this page 2026-04-16 20:27:27 +08:00
This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

设置

服务模式

  • VPN通过系统提供的 VPN 服务TUN 虚拟接口)全局接管流量,将代理作为一个“伪 VPN”使用。

    • 作为一个代理而不是 VPN显然地仅支持传输层协议 TCP 和 UDP不支持其他传输层协议或更低层的协议如网络层的 ICMP除非您想要扭曲地将现有代理协议分叉以支持承载网络层流量。

    • ICMP echo 回复和 ICMPv6 echo 回复是伪造的。如果您不喜欢此行为,启用“丢弃 ICMP”以禁用此行为并丢弃 ICMP 与 ICMPv6。

  • 仅代理:仅启动代理实例,不接管流量。

TCP/IP 栈

类似于 SOCKS 或 HTTP CONNECT 的代理是工作在传输层的,而大多数 VPN 是工作在网络层的。为了将代理用作“伪 VPN”需要使用 TCP/IP 栈进行网络层IP 包与传输层TCP 或 UDP之间的转换。

  • gVisor使用 gVisor 实现的用户态 TCP/IP 栈进行网络层与传输层之间的转换。

  • System通过一种被有些人称为“二次 NAT”的伎俩,使用操作系统的 TCP/IP 栈进行网络层与传输层之间的转换。该方法没有一个确切的名称“system”一词可能是 Clash 发明的。

MTU

最大传输单元。软件内的默认值为 1500。

  • 在实践中Clash 等软件使用 9000 的 MTU 值仅仅为了在跑分中获得更高的分数,但如此大的 MTU 值可能会造成一些网络传输问题。

  • 本软件未考虑大于 16384 的 MTU 值,使用大于 16384 的 MTU 值可能造成未知后果。

启用 PCAP

使用 gVisor 作为 TCP/IP 栈时启用其抓包功能并转储流量。转储的 PCAP 文件有助于网络分析和故障排查。

按流量计费

仅 Android 10+ 可用。如果启用,将 VPN 标记为按流量计费。如果禁用VPN 继承上游接口的按流量计费特性。

丢弃 ICMP

丢弃 ICMP 和 ICMPv6而不是伪造 ICMP echo 回复和 ICMPv6 echo 回复。

应用流量统计

应用流量统计仅对 VPN 模式下的 TUN 生效。某些中国“安卓”设备魔改了“读取应用列表”的权限,您可能需要在系统设置中或其它地方手动授予该权限。

根证书提供者

  • 系统:使用系统根证书颁发机构存储。仅读取 /system/etc/security/cacerts 中的系统根证书颁发机构文件,与大多数 TLS 库在 Android 中的行为一致。但这实际上是 Go 的 bug,而不是预期行为。

  • Mozilla使用 Mozilla 提供的根证书颁发机构存储[1] [2]。对于一些缺乏系统更新、无法更新根证书存储的设备有用。

  • 系统和用户:在 Go 修复其 bug 之前,修正其读取证书存储的行为。如果 Go 修复了此 bug该选项会被移除。

    • 优先尝试读取 /apex/com.android.conscrypt/cacerts 中的系统证书Android 14+ 的路径),如果失败才读取 /system/etc/security/cacerts 中的系统证书
    • 信任 /data/misc/user/[user id]/cacerts-added 中用户安装的证书
    • 不信任 /data/misc/user/[user id]/cacerts-removed 中用户禁用的系统证书
  • 自定义:将自定义的 root_store.certs 文件PEM 格式)放置到 Android/data/包名/files,或者将其导入为路由资源,以使用自定义的根证书存储。

IPv6 路由

如果禁用,仅为 VPN 设置 IPv4 地址。如果启用,为 VPN 设置 IPv4 地址和 IPv6 地址。

分应用 VPN

从 VPN 中排除或包含所选应用。

在“代理”模式下,只有所选应用的流量会被 VPN 处理。在“绕过”模式下,除了所选应用以外的所有流量会被 VPN 处理。

  • 许多中国“安卓”设备魔改了“查询所有软件包”(android.permission.QUERY_ALL_PACKAGES)仅声明权限,破坏了软件的正常行为。您可能需要在系统设置中或其它地方手动授予所谓的“读取应用软件列表”(或其他相似名称,com.android.permission.GET_INSTALLED_APPS)运行时权限。

  • 没有“拥有完全的网络访问权限”权限(android.permission.internet的应用不会被显示。例如Geminicom.google.android.apps.bard没有联网权限而是通过名为的“Google”应用com.google.android.googlequicksearchbox进行联网。您应该搜索“Google”而不是“Gemini”。

  • 多用户支持Android VPN 仅作用于当前用户。您需要为每一个需要使用本应用的用户单独安装本软件。

  • “分应用 VPN”实际上是“分 UID VPN”。相同 UIDandroid:sharedUserId的应用共用是否从 VPN 中包含或排除。因此,用户界面上会有勾选一个则其余都勾选上的效果。

允许应用绕过 VPN

允许应用使用 bindProcessToNetwork 等系统提供的方法自行绕过 VPN。

  • 启用本选项如果您想要 FCM 绕过 VPN 的尝试[1] [2]生效。

  • 大约从 2025 年下半年开始,大部分情况下 FCM 在中国已经无法直连。您需要自行权衡此选项是否还有开启的必要。

绕过私有地址

从 VPN 中排除私有地址。一些局域网通信应用需要启用此选项以工作。若禁用,设置 TUN 路由地址为 0.0.0.0/0::/0

如果启用后 LineageOS 等系统的“允许客户端使用 VPN”不工作点击查看

域名解析策略

V2Ray 文档“domainStrategy”。

用于使目标地址是域名的流量匹配 IP 规则,却又把域名作为目标地址的扭曲需求。

  • 在 TUN 的情形下,目标地址总是 IP 地址。如果您不使用 fake DNS 或“覆盖目标地址”或 HTTP/SOCKS 入站,这些选项几乎没有区别。

启用流量嗅探

V2Ray 中的 sniffing。嗅探流量的域名(从 HTTP Host、TLS SNI、QUIC SNI 中)以及嗅探协议类型。

用于使目标地址是 IP 的流量匹配域名规则的扭曲需求。

覆盖目标地址

如果禁用,通过“流量嗅探”嗅探出的域名仅用于路由选择;如果启用,通过“流量嗅探”嗅探出的域名将作为目标地址。

用于使目标地址是 IP 的流量匹配域名规则,却又把嗅探出的域名作为目标地址的扭曲需求。

  • 启用本选项仅当你了解其存在的副作用。这是一些启用后无法工作的例子Tor、Apple 推送、MTProto。

劫持 DNS

使用 DNS 嗅探模块劫持不是发往 TUN DNS 地址的 DNS 查询(如 Termux 里的 dig),使其被内置 DNS 模块处理。

  • 一些假阳性和假阴性是预期的。该选项未被默认启用。

  • 发往 TUN DNS 地址的 DNS 查询始终会被内置 DNS 模块处理。

  • 本软件补充了 V2Ray 的内置 DNS 模块,使其可以按照 DNS 规则处理非 A/AAAA DNS 查询。所谓的“nonIPQuery”对本软件毫无意义。

  • 本软件补充了 V2Ray 的内置 DNS 模块,使其除系统 DNS 外可以返回正确的 TTL。所谓的“responseTtl”对本软件毫无意义。

解析目标地址

对于被代理的流量,如果目标地址是域名,则解析该域名为 IP 地址作为目标地址。

  • 在 TUN 的情形下,目标地址总是 IP 地址。如果您不使用 fake DNS 或“覆盖目标地址”或 HTTP/SOCKS 入站,这个选项几乎没有作用。启用 fake DNS 如果您非要这个选项起作用。

  • 不要像 SagerNet/sing-box#932 以及链接到的那些重复问题那样报告“偏好 IPv4/偏好 IPv6”不工作。

  • 您可能不希望服务端接收到目标地址是域名的 UDP 流量,因为目标地址是域名的 UDP 流量的 NAT 映射行为几乎不可能被正确处理。

解析目标地址(直连)

对于直连流量,如果目标地址是域名,则解析该域名为 IP 地址作为目标地址。

如果禁用,则由系统通过上游接口 DNS 地址解析域名为 IP 地址。

  • 在 TUN 的情形下,目标地址总是 IP 地址。如果您不使用 fake DNS 或“覆盖目标地址”或 HTTP/SOCKS 入站,这个选项几乎没有作用。启用 fake DNS 如果您非要这个选项起作用。

  • 不要像 SagerNet/sing-box#932 以及链接到的那些重复问题那样报告“偏好 IPv4/偏好 IPv6”不工作。

解析目标地址(服务器地址)

如果服务器地址是域名,则解析该域名为 IP 地址再向该 IP 地址发起连接。

如果禁用,则由系统通过上游接口 DNS 地址解析域名为 IP 地址。

连接测试 URL

用于测试代理连通性的 URL。设置为 HTTPS URL 以避免“机场”劫持流量伪造时延。

  • 一些其它软件会使用 HTTP RTT 等数值作为测试结果以取悦用户眼球,并不反映实际体验。

启用 TLS Client Hello 分片

对 TLS Client Hello 进行 TLS 记录分片 或 TCP 分段或两者兼用,可能有助于规避某些地区的 SNI 审查。仅适用于核心支持的协议,不适用于插件。

  • 在 2023 年至 2025 年左右,该机制据报告[1] [2]被一些地区的 SNI 审查豁免,但也会造成极其明显的特征。使用它仅当你知道自己在做什么的话。

  • 由于过大的后量子密钥大小导致的过大 TLS Client HelloGo 标准 TLS 库,以及 uTLS 库,本已不得不对 TLS Client Hello 进行 TCP 分段,但完整的 SNI 仍存在于第一个分段中。

  • 不属于 TLS Client Hello 分片但与此有关的是,对于 QUIC 所使用的 TLS 变体,据 2025 年的报告,对 QUIC Client Initial 和其 CRYPTO 帧进行分片和乱序被一些地区的 SNI 审查豁免,尽管这最初是 Chromium quiche 里用于避免协议僵化的所谓“Chaos Protection”。事实上的 Go 标准 QUIC 库 quic-go 已采用该机制。

  • 如果不是走投无路的话,不要滥用豁免机制。

安全建议

对安全性相当于明文(一些人所谓的“裸奔”)的配置显示警告。对于被显示警告的配置,传输内容可以被中间人解密。

该选项默认启用,且强烈不推荐禁用。强烈建议不要使用被显示警告的配置。

存在下列的局限性(包含但不限于):

  • 如果“密码”用于加密,密码强度未被检查;
  • 对于部分协议,不代表无法实行重放攻击;
  • 自定义配置未被检查;
  • 如果 Shadowsocks 配置使用非 obfs-localsimple-obfs或 v2ray-plugin 的插件,无法检查;
  • 不代表您正在使用代理的事实无法被检测到;
  • 不代表如果密码、私钥等被泄露,传输内容仍然无法被解密;
  • 不代表如果您的本地环境不安全,传输内容仍然无法被解密;
  • 不代表如果本软件有未知的漏洞,传输内容仍然无法被解密;
  • 不代表随着科技发展,传输内容仍然无法被将来的技术解密;
  • 服务器地址为 localhost::1127.0.0.0/8 的配置不会被警告不安全,但是如果服务器地址为解析到 ::1127.0.0.0/8 的域名,则会出现假阳性;
  • 安全建议被提供是期望它能有所帮助,但不提供任何担保

远程 DNS/直连 DNS

格式:每行一个。没有并发查询。

支持的 DNS 服务器类型:

格式 说明 绕过路由组件
host(域名或 IP 使用 53 端口的 UDP DNS
udp://host[:port] UDP DNS
udp+local://host[:port] UDP DNS
tcp://host[:port] TCP DNS
tcp+local://host[:port] TCP DNS
https://[username:password]@host[:port]/dns-query DNS over HTTPS仅 HTTP/1.1 和 HTTP/2
https+local://[username:password]@host[:port]/dns-query DNS over HTTPS仅 HTTP/1.1 和 HTTP/2
quic://host[:port] DNS over QUIC
quic+local://host[:port] DNS over QUIC
tls://host[:port] DNS over TLS
tls+local://host[:port] DNS over TLS
h3://[username:password]@host[:port]/dns-query DNS over HTTPS仅 HTTP/3
h3+local://[username:password]@host[:port]/dns-query DNS over HTTPS仅 HTTP/3
使用系统 DNS 使用系统 API通过上游接口 DNS 地址进行 DNS 查询。系统 DNS 查询非 A/AAAA 仅支持 Android 10+。如果是 Android 9 或以下,将对非 A/AAAA 查询返回“未实现NOTIMP”。

某些是本软件添加而不是存在于原始 V2Ray 中。

  • EDNS 客户端 IP:填入一个有效的 IP 地址。根据 V2Ray 源码IPv4 将使用 /24 的 CIDRIPv6 将使用 /96 的 CIDR。

  • 远程/直连 DNS 解析策略

    • 这显然地仅适用于明文可劫持的 A/AAAA 查询。

    • 用于控制 DNS 解析所谓的“IP 地址偏好”的扭曲需求。

    • "UseIPv4" 将始终对 AAAA 查询返回空解析NOERROR"UseIPv6" 将始终对 A 查询返回空解析NOERROR

    • 没有 PreferIPv4PreferIPv6。不要像 SagerNet/sing-box#932 以及链接到的那些重复问题那样报告“偏好 IPv4/偏好 IPv6”不工作。

  • 若远程 DNS 为域名,该域名由直连 DNS 解析;若直连 DNS 为域名且不带 +local 且启用“解析目标地址”,该域名由 Bootstrap DNS 解析。Bootstrap DNS 仅能填写 IP 地址的 DNS 或者带 +local 的 DNS。

  • 域名重写“hosts”。解析指定的域名为指定的 IP 地址并伪造回复。这显然地仅适用于明文可劫持的 A/AAAA 查询。格式如下。

    example.com 127.0.0.1 127.0.0.2
    www.example.com 127.0.0.1
    www1.example.com www2.example.com
    
  • 启用 DNS 路由:若启用,路由中绕过的域名由直连 DNS 解析,代理的域名由远程 DNS 解析;若禁用,绕过和代理的域名均由远程 DNS 解析。但是,为了避免回环,代理服务器地址总是由系统 DNS 或直连 DNS 解析。

  • 启用 fake DNS使用“fake DNS”本地伪造 DNS 回复以消灭由 DNS 查询所带来的 RTT。伪造出的对每个域名唯一的“fake IP”地址将在连接时被还原为域名。

    • 这显然地仅适用于明文可劫持的 A/AAAA 查询。
    • 这也用于使目标地址是 IP 的流量匹配域名规则以及可选的把还原出的域名作为目标地址的扭曲需求。
    • 这也用于控制 DNS 解析“IP 地址偏好”的扭曲需求。
    • 您应该对计算机网络有足够的认识,了解 fake DNS 的数不清的副作用和局限性。这些问题包含但不限于:破坏依赖正确的 DNS 回复以工作的应用;破坏 UDP NAT 映射行为;破坏代理中的代理。

启用 SOCKS5 入站

启用一个监听在 TCP 与 UDP 127.0.0.1(如果允许来自局域网的连接,则监听在 ::)的 SOCKS 入站。

一些应用可以显式配置使用 SOCKS 代理。

SOCKS5 UDP 缺乏鉴权机制。如果启用 UDP 支持,用户名密码认证总是可以被绕过。

如果未启用用户名密码认证,该 SOCKS5 入站兼容 SOCKS4 和 SOCKS4A。

启用 HTTP 入站

启用一个监听在 TCP 127.0.0.1(如果允许来自局域网的连接,则监听在 ::)的 HTTP 入站。

一些应用可以显式配置使用 HTTP 代理。

附加 HTTP 代理到 VPN

仅 Android 10+ 可用。仅未启用 Basic 认证时可用。部分应用会遵循附加到 VPN 的 HTTP 代理,它们的流量不会经过 TUN 接口。

  • 部分应用(知乎、京东、讯飞等)检测到被附加的 HTTP 代理会拒绝正常工作您可以在“HTTP 代理例外列表”中添加它们的域名(每行一个)。更好的方法是在“分应用 VPN” 中绕过它们。

启用透明代理入站

启用一个用于 Netfilter REDIRECT 的监听在 TCP 127.0.0.1::1(如果允许来自局域网的连接,则监听在 ::)的入站。

你需要使用 iptables DNAT/REDIRECT 把 TCP 流量重定向到透明代理端口。

不支持 TPROXY因为其需要以 root 特权运行 JNI 代码。这需要使用 Magisk/KernelSU 等 root 解决方案的透明代理模块。

启用 DNS 入站

启用一个监听在 TCP 与 UDP 127.0.0.1(如果允许来自局域网的连接,则监听在 ::)的 DNS 请求转发器。

允许来自局域网的连接

将监听地址设置为 ::(这在 Go 中是双栈的)而不是 127.0.0.1,以允许其他设备主动地配置 SOCKS 或 HTTP 代理通过本设备连接代理服务器。

这不意味着其他设备的流量会通过热点无感知地通过您的代理。除非您设备的系统支持“VPN 共享”(未经修改的 Android 系统不支持),这需要使用 VPN Hotspot(需要 root以达成。

网络变化时打断被复用的连接

在网络变化(如 Wi-Fi 接入点之间切换、数据网络与 Wi-Fi 之间切换)时打断现有连接,以缓解一些因为连接复用或多路复用导致的错误使用已无法使用的旧连接的问题。该选项仅对这些连接复用或多路复用的协议有效(不包括由插件实现的协议):

  • HTTP/2、HTTP/3、SSH、WireGuard、AnyTLS、Hysteria 2、TUIC、Juicity、mieru
  • 带下列“传输层”的协议HTTP或称 H2、gRPC、QUIC、Hysteria 2、XHTTP仅在使用 HTTP/2 或 HTTP/3 时)
  • 启用了 Mux.Cool 或 sing-mux 的协议
  • UDP DNS、DNS over HTTPS、DNS over HTTP/3、DNS over QUIC

DNS over TCP 与 DNS over TLS 虽然可以连接复用,但本软件未实现。一些 UDP/QUIC 类协议包含在内,是因为可能会由 UDP over TCP 的协议承载。

不建议禁用该选项。该选项在未来可能会被强制启用并移除。

使用替代方法查询已安装软件包

不使用 getInstalledPackagesgetInstalledApplications 查询已安装软件包,而是添加

<queries>
    <intent>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent>
</queries>

并使用 getPackagesHoldingPermissions 查询具有“拥有完全的网络访问权限”权限(android.permission.internet)的软件包。此方法不需要 android.permission.QUERY_ALL_PACKAGES 权限或所谓的 com.android.permission.GET_INSTALLED_APPS 权限以规避一些应用商店例如Google Play 商店)对 android.permission.QUERY_ALL_PACKAGES 权限的一刀切管制(甚至禁止合理使用)和许多中国“安卓”设备对 android.permission.QUERY_ALL_PACKAGES 权限以所谓的“保护用户隐私”为幌子进行的蓄意破坏。

该方法的输出结果可能不会与 getInstalledPackagesgetInstalledApplications 完全一致。切勿启用如果您没有遇到无法查询已安装软件包的问题。

实验性标志Experimental flags

点击查看