Fake DNS
假 DNS 在服务器(包括 WireGuard)或 TUN 配置上选择加入:
dns: servers: "tls://1.1.1.1" fake_ip: true它在入站身份验证/准入之后、目标规则之前拦截端口 53 上的逻辑 TCP 和 UDP 目标。它不会打开 DNS 监听器或拦截加密的 DNS。截获的 DNS 在本地应答或通过 dns.servers 转发,永远不会转发到应用程序请求的解析器。对端口 53 的显式规则覆盖是普通转发,而不是拦截。
A/AAAA 综合创建范围映射。稍后与这些地址的连接会在路由或主机名嗅探之前恢复主机名。当规则或直接连接需要真实的 IP 时,恢复的主机名会正常解析;代理可以接收主机名。对于 sniff: true,可见的 TLS、SNI 或 HTTP 主机仅在主机名规则中优先;恢复的名称仍然是连接目标,并且是 IP 规则解析的内容。这两个提示都是客户端控制的,因此不同的嗅探名称可以绕过恢复名称上的主机名拒绝规则。接收上下文范围内未映射的地址无法关闭。来自另一个上下文的非重叠范围的地址不会被识别,并且会作为普通 IP 进行路由。重叠范围可能会映射到接收上下文中不相关的主机名。使用一个共享的名为 DNS 组来为相同客户端提供服务的入站。既定的流程保持其选定的目标。
false 禁用该功能。选项对象使用以下默认值启用它:
fake_ip: ipv4_range: "198.18.0.0/15" ipv6_range: null max_entries: 65536 bypass_domains: [] missing_family: forward https_records: forward state_file: null- 池必须是具有可用地址的 CIDR;保留不冲突的范围并将它们路由到相同的入口。基地址和基地址+1 地址被保留,IPv4 广播也是如此。真实的上游、引导、代理、配置的转发/回退目标和文字规则覆盖地址不能位于任何活动或保留的虚假范围内。这些检查甚至适用于没有 Fake DNS 或明确禁用它的入站。
- TUN 接口和网关地址不能与任何活动或保留池重叠,保留的基地址+1 地址除外。无论 TUN 的 DNS 上下文如何,每个重叠池中都必须保留重叠池内的地址。
max_entries限制保留域映射,而不是分配范围。最近最少使用的域被驱逐;顺序分配在重用之前遍历整个范围。综合答案的 TTL 为 60 秒。这并不能保证映射在压力下保持 60 秒有效。bypass_domains使用正常的主机名掩码后缀匹配,包括子域。排除的姓名和 IP 形状的问题将被转发。missing_family: forward转发残疾家庭的查询;nodata返回一个空的成功答案。https_records: forward保留 HTTPS/SVCB 答案;suppress为这两种类型返回空的成功答案。转发的地址提示和 ECH 可以绕过基于主机名的路由;压制会牺牲这些能力。- 其他记录类型使用真正的上游交换。保留有效的否定/错误答案。多问题查询收到FORMERR; TSIG/SIG(0)、区域传输和非查询操作被拒绝。综合答案未签名,并且不声明 DNSSEC 身份验证。
命名的 DNS 组在每个引用入站之间共享一个池:
- dns_group: shared-fake dns_servers: ["tls://1.1.1.1"] fake_ip: true- address: "0.0.0.0:1080" protocol: {type: socks} dns: {servers: shared-fake}内联 fake_ip 会创建私有上下文,即使 servers 引用命名组也是如此。省略内联覆盖以共享组的映射。组合启用假的组需要对组合组制定明确的策略。
私有上下文身份使用服务器传输和配置的侦听地址(包括它们的顺序)或 Unix 套接字路径。 TUN上下文使用device_name(省略时为default); WireGuard 上下文使用 名称/公钥身份。更改这些输入会更改专用池和快照所有权。当所有权必须保留监听器更改或地址重新排序时,请使用命名的 dns_group。具有不同所有者的现有状态文件将被拒绝。
兼容的重新加载保留映射,包括在同一组/内联标识下显式禁用/重新启用。池范围、容量或状态文件所有权更改需要重新启动。如果没有 state_file,重新启动会丢失映射。以前的活动合成范围和端点仍然被排除在实际 DNS、承载层分辨率和配置的转发/覆盖目标之外,直到重新启动为止,包括删除上下文之后。使用状态文件,快照是私有的、自动替换的、针对多个编写器锁定的,并检查池和上下文身份兼容性。启动前创建其父目录;保护它,因为该文件记录了查询的域。状态文件名不得以 .lock 结尾(不区分大小写);该后缀是为所有权锁保留的。游标保留在发出前保持不变;崩溃可能会丢失最近的映射,然后关闭失败,而不是恢复过时的所有者。在更改其池配置之前备份或显式删除不兼容状态。持久族需要至少两个可分配地址,并且持久池仅限于 383,473 个条目才能满足快照读取限制;异常长的上下文名称会减少可用的快照容量。重启后预订可能会跳过未使用的地址; Windows 断电持久性和状态文件 ACL 需要特定于平台的验证。
省略 servers 使用系统 DNS。桌面发现是定期刷新的端点快照,而不是操作系统的完整分割/范围 DNS 策略。将发现的解析器和任何环回存根自己的上游流量保留在 TUN 捕获之外,以避免递归拦截。 Android/iOS 主机必须显式提供底层真实的 dns.servers;不支持自动 VPN 系统发现。主机本地 TUN 部署应配置显式的真实上游:本机主机名查找可能会重新进入主机的拦截解析器。如果无法发现可用的端点,则启用伪造的系统配置将无法启动。后来的上游故障会产生 DNS 故障,而不是公共提供商的后备。 UDP 和 HTTP/3 上游仍然仅直接; TCP/TLS/HTTPS可以使用客户端链。 DNS 客户端链使用配置的引导解析器。当通过支持远程名称解析的代理传递时,下游代理主机名仍未解析; shoes 无法检查该远程代理解析的地址。相反,规则下载通过受保护的引导解析器预先解析下游代理。仅当显式配置传输时,UDP 截断才会重试 TCP。具有混合上游设置的组会在返回截断的答案之前尝试其剩余的配置解析器以获得完全成功或否定的答复。如果回退失败或到达转发期限,则返回保留的截断回复;它仍然通过了真实地址守卫。本地 UDP DNS 对等体一次处理一个查询,具有有限的背压;转发的查询可以将后续的综合答案延迟到截止日期。
SOCKS、UoT、H2MUX、XUDP、Hysteria2 和 TUIC 保留原始逻辑回复地址。 Snell 的回复格式仅支持 IP 地址:主机名寻址的 DNS 需要对其回复身份进行真正的查找,如果查找失败,则会失败。文字地址 DNS 拦截在 Snell 上仍然完全本地化。
请参阅共享池示例。