网络请求分流走向
- 系统代理模式
- Tunnel 模式
客户端请求流程
-
开启系统代理模式下,客户端如果遵循系统代理,则不需要进行 dns 解析,而且直接将请求交给HTTP 代理服务器进行处理
-
若客户端不遵循系统代理或者没有启用系统代理, 则客户端会考虑使用系统默认 DNS 或内置的 DNS服务器进行查询.
- 如果系统 DNS 或者客户都内置 DNS 使用 udp 查询,网关模式下,Stash Tunnel 会拦截并返回Stash 内部的 DNS 查询结果
- 如果系统 DNS 或者客户都内置 DNS 使用 doh 或 dot 加密请求, 默认情况下 Stash Tunnel 不会拦截
查看流程图
flowchart TB
C1[客户端解析 DNS 失败]
C2[客户端解析 DNS 成功]
C3[客户端 real-ip 请求指向Stash Tunnel]
C4[客户端请求 指向 Stash HTTP Proxy]
C5[客户端 fake-ip 请求指向 Stash Tunnel]
END[结束]
A[客户端发起请求] --> A1{是否启用系统代理}
A1 -->|YES| A1.1{客户端是否遵循系统代理}
A1.1 --> |NO| A3
A1.1 --> |YES| C4
A1 -->|NO| A3{请求是否包含域名}
A3 -->|YES| A4[本地 DNS 解析]
A4 --> A4.1{本地域名解析是否使用 udp}
A4.1 --> |YES| A4.2[Stash拦截 DNS 请求]
A4.2 --> A4.3{域名是否匹配fake-ip-filter 白名单}
A4.3 -->|YES| A4.4[Stash 内部解析DNS]
A4.4 --> A4.5{解析DNS是否成功}
A4.5 -->|NO| A4.6[Stash 返回 NXDOMAIN 错误]
A4.6 --> C1
C1 --> END
A4.5 -->|YES| A4.7[Stash 返回 DNS 解析真实 ip 结果]
A4.7 --> C2
C2 --> C3
A4.3 --> |NO| A4.8[返回 fake-ip]
A4.8 --> C5
A3 -->|NO| C3
Stash 内部 DNS 解析流程
此流程为按照使用推测, 非明确的官方流程
按以下优先级返回IP, 若无 IP 则返回 NXDOMAIN
- Hosts
- Nameserver Policy
- Nameserver
- Fallback
- NXDOMAIN
查看流程图
flowchart TB
A[解析域名]
E[返回 IP 结果]
E1[返回 NXDOMAIN 错误]
B1{Hosts是否能查找到对应的记录}
B2{Nameserver Policy 是否有对应的 DNS 服务器}
B3[使用 Nameserver Policy 查询 DNS]
B4{Nameserver Policy DNS 是否有返回匹配的查询记录}
C0[并发查询 nameserver 和 fallback]
C1[并发使用 nameserver 查询 DNS]
C2[并发使用 fallback 查询 DNS]
D1{nameserver 是否有返回匹配的查询记录}
D2{fallback 是否有返回匹配的查询记录}
A --> B1
B1 -->|YES| E
B1 -->|NO| B2
B2 -->|YES| B3
B3 --> B4
B4 -->|YES| E
B4 -->|NO| C0
C0 --> C1
C0 --> C2
C1 --> D1
C2 --> D1
D1 -->|YES| E
D1 -->|NO| D2
D2 -->|YES|E
D2 -->|NO| E1