尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Atmosphère DNS.mitm:Switch 上基于 hosts 的 DNS 请求重定向与遥测屏蔽

Atmosphère DNS.mitm:Switch 上基于 hosts 的 DNS 请求重定向与遥测屏蔽 Atmosphère DNS.mitmSwitch 上基于 hosts 的 DNS 请求重定向与遥测屏蔽【免费下载链接】AtmosphereAtmosphère is a work-in-progress customized firmware for the Nintendo Switch.项目地址: https://gitcode.com/GitHub_Trending/at/AtmosphereAtmosphère DNS.mitm 是 Nintendo Switch 定制固件 Atmosphère 内置的 DNS 请求重定向机制通过 SD 卡上的 hosts 文件把任意域名指向指定 IP并默认屏蔽官方遥测上报域名在 DNS 层面切断遥测数据。为什么需要它你发现某个域名必须屏蔽或者想把某个域名指到本地 IP。Switch 系统里基本没有系统级的手段通常只能去折腾路由器。但多数玩家并不控制路由器路由器也没法按 emummc 环境做不同处理。改起来麻烦影响面还大。DNS.mitm 解决的就是这个缺口。它在系统内部做 DNS 重定向SD 卡上一个文本文件就能完成 hosts 屏蔽、遥测拦截和本地重定向。不用动路由器且规则对全系统进程生效。该特性自 0.18.0 起可用属于 ams_mitm 模块的一部分。ams_mitm 是 Atmosphère 里的一组系统服务代理模块DNS.mitm 是其中的 DNS 成员。它到底做了什么机制速览先说 MITM 代理是什么。直白点它站在客户端和服务器中间替客户端收请求替服务器回响应客户端全程无感知。DNS.mitm 顶替的就是系统 DNS 解析服务 sfdnsres。sfdnsres 是 Switch 官方的域名解析服务任何进程发起的 gethostbyname、getaddrinfo 调用把域名翻成 IP 的两个函数都会先经过它。核心链路分三步环节干什么接管环节顶替 sfdnsres 服务系统里所有域名解析请求都先过它匹配环节拿请求的主机名去 hosts 文件生成的重定向规则表里逐条匹配应答命中直接伪造一个解析成功的响应返回规则里配置的 IP不查外网应答未命中把请求原样转发给真实的 sfdnsres行为跟没开 DNS.mitm 一样默认规则把官方遥测域名指向 127.0.0.1。这是回环地址也就是机器自己连它必失败遥测上报自然被掐断。两个行为边界需要记牢规则对全系统进程生效包括系统服务、游戏和 homebrew没有白名单hosts 文件只在开机时解析一次运行期间改文件不会自动加载。把 hosts 跑起来配置实战文件放哪hosts 文件选择顺序文件都放在/atmosphere/hosts/目录下对应 SD 卡根目录的 atmosphere/hosts 文件夹。Atmosphère 按顺序尝试读到第一个存在的就停优先级文件适用条件1emummc_%04x.txtemummc id 的 4 位小写十六进制如 emummc_0001.txt仅 emummc2emummc.txt仅 emummc3sysmmc.txt仅 sysmmc4default.txt兜底任何环境文档里第一条写作 emummc_%04lx.txt源码实际格式串是 %04x以 4 位小写十六进制输出。emummc id 来自 emummc.ini 配置。default.txt 不存在时首次启动会自动创建它并写入默认规则。你不用手动建。怎么写最小可用 hosts格式就是经典 hosts一个 IP 后跟一个或多个主机名。改这里在 SD:/atmosphere/hosts/default.txt 新建# 一个 IP 后面可跟多个主机名空格分隔 127.0.0.1 ads.example.com track.example.com 10.0.0.5 my.local.server第一行屏蔽两个域名第二行把本地服务域名指到内网 IP。指向 127.0.0.1 意味着连接必然失败是常用屏蔽手法。默认规则怎么叠加除你的文件外还会额外先解析一份默认规则。效果等价于把默认规则拼在你的文件之前# Nintendo telemetry servers 127.0.0.1 receive-%.dg.srv.nintendo.net receive-%.er.srv.nintendo.net这是有意设计。系统更新换掉遥测域名、而你的文件没跟上时默认规则还能兜住新域名把遥测风险降到最低。配合后定义覆盖先定义的优先级你自己的文件也能覆盖默认规则对同一域名的设置。优先级细节下一节讲。改动后如何生效只有两条路重启系统开机会重新解析文件homebrew 向已连接的 sfdnsres 会话发扩展 IPC 命令 65000AtmosphereReloadHostsFile触发重解析。IPC 是进程间通信机制。65000 是 Atmosphère 私有扩展命令普通解析调用不会触发它。homebrew 不发这条命令时重启是唯一办法。语法与优先级进阶两个扩展语法hosts 文件在标准格式上多了两个扩展语法写法匹配效果**.example.com匹配 a.example.com、b.c.example.com任意位置匹配 0 个或多个任意字符%receive-%.dg.srv.nintendo.net解析时展开为系统环境标识 nsd!environment_identifier量产机恒为 lp1等价于 receive-lp1.dg.srv.nintendo.net通配匹配用的是经典 wildcardcmp 算法逐字符比较遇到不匹配回溯。实现在stratosphere/ams_mitm/source/dns_mitm/dnsmitm_host_redirection.cpp#L27-L65。% 占位符在解析时从系统设置读取环境标识词法阶段直接替换。量产机常量 lp1 定义在libraries/libstratosphere/include/stratosphere/nsd/nsd_types.hpp#L34非量产环境可能是 dd1以实际机器为准。覆盖优先级后定义者赢同一文件里多条规则匹配同一域名时后定义的那条赢。实现有个小技巧AddRedirection 先把同名主机名的旧规则删掉再把新规则插到列表头部。查询从列表头开始匹配命中即返回。后定义的规则天然排在头部天然优先。默认规则先解析你的文件内容后解析。所以同一域名你的自定义设置总能覆盖默认值。三条硬限制仅 IPv4。重定向结果统一构造为 IPv4 地址调用方显式要求 IPv6 时直接触发断言系统会崩。文件里别写 IPv6。32 KiB 上限。hosts 文件大小达到 0x8000 字节会拒绝解析并断言。全系统生效。ResolverImpl::ShouldMitm 对所有客户端进程返回 true规则作用于每个进程。接口声明见stratosphere/ams_mitm/source/dns_mitm/dnsmitm_resolver_impl.hpp。出了问题怎么查排障现象原因解法改了 hosts 文件不生效文件只在开机时解析一次重启或让 homebrew 发 IPC 65000emummc 专用文件没被识别文件名必须是 4 位小写十六进制 emummc idemummc_%04x.txt重命名或改用 emummc.txt某进程解析域名时系统崩溃重定向只支持 IPv4请求强制 IPv6 触发断言排查文件条目与该程序的解析方式整行规则被静默忽略行首不是数字IPv4 首位的行当注释丢弃注释单独成行规则行必须以 IP 开头文件无法解析超过 32 KiB0x8000大小上限精简或拆分文件不知道启动选了哪个文件没看启动日志查看 /atmosphere/logs/dns_mitm_startup.log启动日志默认生成无需任何配置。它记录选择过程选中了哪个文件、跳过了哪些、是否追加默认规则、最终规则列表主机名 - IP。文件每次开机删除重建只保留当次结果。想看每一次请求需要打开 DNS 调试日志。把这一行加进 system_settings.ini 的 [atmosphere] 段enable_dns_mitm_debug_log u8!0x1之后每次 GetHostByName/GetAddrInfo 请求和命中的重定向都会追加写入 /atmosphere/logs/dns_mitm_debug.log。行形如[0000000000000000]: Redirecting host.example.com to 127.0.0.1括号里是发起进程的程序 id方便查哪个进程在解析什么域名。写入逻辑见stratosphere/ams_mitm/source/dns_mitm/dnsmitm_debug.cpp。一页速查三个配置项都在system_settings.ini的 [atmosphere] 段配置项默认值作用enable_dns_mitmu8!0x1总开关置 0 完全禁用 DNS.mitm含遥测屏蔽add_defaults_to_dns_hostsu8!0x1是否在自定义 hosts 之外追加默认遥测屏蔽规则enable_dns_mitm_debug_logu8!0x0是否把每次 DNS 请求与命中写入调试日志⚠️ 表中默认值以配置模板注释为准配置项缺省时源码按禁用处理以实际版本为准。想行为稳定建议三项都显式写出。三条一句话提醒默认规则永远排在你的自定义规则前面所以自定义规则可以覆盖同一域名的默认设置。hosts 文件只在开机解析一次改完必须重启或发 IPC 65000 才生效。重定向只支持 IPv4请求强制 IPv6 会触发断言文件里别写 IPv6。参考资料核心实现stratosphere/ams_mitm/source/dns_mitm/dnsmitm_module.cpp模块入口、线程模型、总开关检查stratosphere/ams_mitm/source/dns_mitm/dnsmitm_host_redirection.cpphosts 解析、通配匹配、文件选择、默认规则生成stratosphere/ams_mitm/source/dns_mitm/dnsmitm_resolver_impl.cpp请求拦截、命中直返与未命中转发、IPC 65000 实现stratosphere/ams_mitm/source/dns_mitm/dnsmitm_resolver_impl.hpp服务接口声明与 65000 命令号stratosphere/ams_mitm/source/dns_mitm/dnsmitm_debug.cpp调试日志实现libraries/libstratosphere/include/stratosphere/nsd/nsd_types.hpp环境标识常量lp1 / dd1配置模板config_templates/system_settings.ini[atmosphere] 段含三个 DNS.mitm 配置项相关文档docs/features/dns_mitm.mdDNS.mitm 特性官方说明docs/components/modules/ams_mitm.mdams_mitm 模块总览【免费下载链接】AtmosphereAtmosphère is a work-in-progress customized firmware for the Nintendo Switch.项目地址: https://gitcode.com/GitHub_Trending/at/Atmosphere创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表