ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

域名指向哪由你定:Atmosphère DNS.mitm 重定向与遥测屏蔽实战指南

域名指向哪由你定:Atmosphère DNS.mitm 重定向与遥测屏蔽实战指南 域名指向哪由你定Atmosphère DNS.mitm 重定向与遥测屏蔽实战指南【免费下载链接】AtmosphereAtmosphère is a work-in-progress customized firmware for the Nintendo Switch.项目地址: https://gitcode.com/GitHub_Trending/at/AtmosphereAtmosphère 从 0.18.0 版本起内置了一个叫 DNS.mitm 的组件它像邮局前台的转发窗口任何进程发起域名解析前都要先过这个窗口。窗口手里有一本 hosts 规则簿查到了就直接回你一个指定 IP查不到才把请求原样递给真正的解析服务sfdnsres。出厂状态下它已经在替你屏蔽任天堂官方遥测域名。下面讲清楚规则怎么写、文件放哪、怎么立刻生效、出问题怎么看日志。开箱即用什么都没改时它已经在替你屏蔽什么无需任何配置。只要系统启动DNS.mitm 就默认开启并接管全部解析请求。默认规则会把任天堂遥测服务器的解析结果改成回环地址127.0.0.1。回环地址就是指向自己的 IP连接必然失败于是遥测数据在 DNS 层面就被切断了。当前默认规则内容源码中内置# Nintendo telemetry servers 127.0.0.1 receive-%.dg.srv.nintendo.net receive-%.er.srv.nintendo.net其中的%在量产机上展开为环境标识lp1即实际拦截的是receive-lp1.dg.srv.nintendo.net和receive-lp1.er.srv.nintendo.net。 这些默认规则会被额外前置解析相当于自动拼接到你的 hosts 文件之前。这是一个刻意的兜底设计假如系统更新换了遥测域名而你的自定义文件没跟上默认规则仍能挡住新域名。如果你不想叠加默认规则在system_settings.ini的[atmosphere]段写入[atmosphere] add_defaults_to_dns_hosts u8!0x0如果想连 DNS.mitm 整个关掉含遥测屏蔽改一行即可[atmosphere] enable_dns_mitm u8!0x0该开关在模块线程启动时最先检查取值为 0 时子系统直接退出不做任何拦截。动手写一条 hosts 规则并放到正确的目录DNS.mitm 用的是略微扩展的 hosts 格式只有两个扩展点*通配符匹配主机名任意位置的 0 个或多个字符。*.example.com能同时命中a.example.com和b.c.example.com匹配由移植自 clibs/wildcardcmp 的wildcardcmp函数完成。%占位符系统会把设置项nsd!environment_identifier的值印在这里。量产机恒为lp1非量产环境可能不同。普通行行首必须是 IPv4 地址十进制数字之后可跟多个主机名例如127.0.0.1 host1 host2。行首不是数字的整行会被当作注释忽略。 一份可用的自定义文件长这样0.0.0.0 ads.example.com 127.0.0.1 *.tracking.corp.net 127.0.0.1 my.local.service文件查找顺序命中即停后面的不再检查SD:/atmosphere/hosts/emummc_XXXX.txt—— 仅 emummc 模式XXXX是 emummc id 的 4 位小写十六进制。注意文档写作emummc_%04lx.txt而源码实际格式串是/hosts/emummc_%04x.txt以源码为准。SD:/atmosphere/hosts/emummc.txt—— 仅 emummc。SD:/atmosphere/hosts/sysmmc.txt—— 仅 sysmmc。SD:/atmosphere/hosts/default.txt—— 兜底任何模式都会走到它。default.txt 会自动创建它不存在时Atmosphère 会先建/hosts目录再写入上面那段默认遥测规则生成该文件。⚠️ 单个 hosts 文件上限 32 KiB0x8000字节超出会拒绝解析。让新规则立刻生效重启与 IPC 命令重载hosts 文件只在系统启动时解析一次改完文件不会自动生效。两种办法重启系统最简单可靠下次启动重新走一遍选文件、解析的流程。IPC 重载homebrew 向已连接的sfdnsres会话发送 Atmosphère 私有扩展命令65000AtmosphereReloadHostsFile会直接调用InitializeResolverRedirections()重建整张重定向表。命令号声明见 dnsmitm_resolver_impl.hpp。这里的 IPC 指进程间通信通道该命令是私有扩展普通gethostbyname/getaddrinfo调用不会触发重解析。幕后机制一条解析请求如何被拦截和改道 把窗口想象成总机接线员所有来电解析请求先查呼叫清单查到号码直接念出来查不到才转接给真正的运营商。服务以 MITM 服务器形式挂在系统 DNS 服务名sfdnsres上服务名编码见 dnsmitm_module.cpp最多同时接受 30 个会话由 8 个线程1 主 7 辅助循环处理请求。对全部进程生效ResolverImpl::ShouldMitm对任何客户端都返回true没有白名单系统服务与游戏进程的请求都会被查一遍。命中规则直接构造hostent或addrinfo结构由serializer/目录下的DNSSerializer序列化后作为响应返回host_error/errno/retval均置 0解析成功。未命中返回ResultShouldForwardToSession请求原样转给真实的sfdnsres会话。后定义者覆盖先定义者AddRedirection先按主机名删掉同名旧规则再把新规则插到列表头部查询时从表头开始逐个通配匹配、命中即返回。所以同一文件中靠后写的规则赢。仅支持 IPv4重定向结果统一构造为AF_INET地址若调用方通过 hint 显式要求AF_INET6实现会直接AMS_ABORT断言失败见 dnsmitm_resolver_impl.cpp。hosts 里别写 IPv6。文件选择与规则解析逻辑集中在 dnsmitm_host_redirection.cpp。⚠️ 提醒正因为规则作用于所有进程写0.0.0.0或通配规则前想清楚会影响谁——游戏、系统更新器都在其中。观察与排障看懂两份日志日志条件启动日志无需配置每次启动/重解析自动生成请求调试日志需显式开启启动日志SD:/atmosphere/logs/dns_mitm_startup.log。每次初始化时先删旧文件再重建所以只保留当次结果。内容依次是选文件过程Selecting hosts file...、Selected ...、是否追加默认规则、最终生效的逐条主机名 - IP列表。确认到底用了哪个文件、规则是否生效看它就够了。请求调试日志在[atmosphere]段设enable_dns_mitm_debug_log u8!0x1后生成SD:/atmosphere/logs/dns_mitm_debug.log以追加模式写入。每次GetHostByName/GetAddrInfo请求都会记录行首是发起进程的 16 位十六进制 program id命中重定向时会另记一条Redirecting 域名 到 IP。排查某个进程在解析什么为什么没走重定向看它实现见 dnsmitm_debug.cpp。排障时最常踩的坑按出现频率排列文件改完没重启也没发 65000 命令同一域名写了多条、忘了后定义者生效hosts 里混入了 IPv6文件超过 32 KiB 上限。配置速查与延伸阅读三个配置项都在system_settings.ini的[atmosphere]段配置项默认值作用enable_dns_mitmu8!0x1DNS.mitm 总开关0 时完全禁用add_defaults_to_dns_hostsu8!0x1是否在自定义内容之外前置默认遥测屏蔽规则enable_dns_mitm_debug_logu8!0x0是否记录每次解析请求与重定向的调试日志延伸阅读仓库内相对路径特性文档docs/features/dns_mitm.md配置模板config_templates/system_settings.ini模块线程模型stratosphere/ams_mitm/source/dns_mitm/dnsmitm_module.cpp解析与匹配stratosphere/ams_mitm/source/dns_mitm/dnsmitm_host_redirection.cpp请求拦截stratosphere/ams_mitm/source/dns_mitm/dnsmitm_resolver_impl.cpp环境标识常量lp1libraries/libstratosphere/include/stratosphere/nsd/nsd_types.hpp【免费下载链接】AtmosphereAtmosphère is a work-in-progress customized firmware for the Nintendo Switch.项目地址: https://gitcode.com/GitHub_Trending/at/Atmosphere创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表