WSL2 DNS解析异常
昨晚我在给服务器打补丁时遇到了看似DNS劫持的现象,经过调查发现这实际上是WSL2的一个异常行为。
正常DNS查询解析
在标准Linux主机上使用dig进行DNS查询时,响应通常包含几个部分:
- QUESTION:查询的问题
- ANSWER:回答部分
- AUTHORITY:权威服务器列表
- ADDITIONAL:附加信息
WSL2的异常行为
在WSL2环境下运行相同的查询时,发现E.ROOT-SERVERS.net和G.ROOT-SERVERS.net等本应出现在附加区的记录被错误地放入了回答区。通过数据包分析可见,WSL2的DNS服务器没有像标准DNS服务器那样正确区分各个区段。
实际问题场景
作者在服务器升级后尝试SSH重连时遇到了异常:
- SSH客户端报告发现服务器新IP并要求验证签名
- 实际上连接到了错误的内部IP(本应只在附加区出现的DNS服务器IP)
- 问题表现为间歇性出现
技术分析
问题根源在于:
- SSH客户端进行DNS查询时获得两个回答(正确IP和错误IP)
- 由于第一个IP无响应,客户端尝试了第二个错误IP
- 该IP恰好运行着SSH服务,导致连接成功但连接到错误主机
安全影响评估
虽然理论上可能被恶意利用,但攻击者需要较高权限才能实现。作者已计划将该问题提交至WSL2的GitHub问题列表。
总结
这个WSL2特有的DNS处理异常可能在某些环境下造成问题,特别是在自动化脚本或安全敏感场景中。虽然当前风险有限,但仍建议开发者注意此行为差异。