modified | Thursday 1 May 2025 |
---|
src/net/dnsclient_unix.go
Go 中 定 义 了 下 面 几 种 DNS 解 析 顺 序 , 其 中 fiLtes 表 示 查 询
/etc/hosts 文 件 , dns 表 示 执 行 dns 查 询
1 // hostLookup0rder specifies the order of LOOkupHO_
2 // It is basicatty a simptified representation of 1
3 //“files“means /etc/host5。
4 type _hostLookup0rder int
5
6 const (
7 / hostLookupCgo means defer to cCg0。
8 hostLookupCg0 hostLookup0rder = iota
9 hostLookupFiLeSDNS / files f
10 hostLookupDNSFiLes // dns firs「
11 hostLookupFitLes / _onty fiLt
12 hostLookupDNS // only DNS
13 )
在 src/net/conf.go 中 可 以 看 到
Go 会 先 根 据 一 些 初 始 条 件 判 断 查 询 的 顺 序 , 然 后 就 查 找
_/etc/nsswitch.conf 文 件 中 的 hosts 配 置 项 , 如 果 不 存 在 就 会
走 一 些 回 退 逻 辑 。 这 次 的 问 题 出 现 在 这 个 回 退 逻 辑 上
[ 河 吴 吴 吴 吴 命 吴 吴 吴 吴 吴 吴 吴 吴 吴 吴 吴 吴 吴 吴 吴 吴 吴 吴 吴 吴 颂 吴 吴 颂 吴 吴 吴 吴 颂 技 吴 吴 吴 育 吴 沥 吴 沥 吴 吴 吴 吴 命河 命 吴 唐
1 _ func(c conf) hostLookup0rder(r xReSoLver, hostnal
21 / We faited to parse 0or 0pen _nsSwitch . con1
22 // conservativety assume we Shoutd use cgo
23 / avaiLtable。
24 return faLLback0rder
25 ]
_2乏i ] |
27
通 过 上 面 的 代 码 我 们 可 以 发 现 , 当 前 系 统 如 果 是 linux 并 且 不 存 在
/etc/nsswitch.conf 文 件 的 时 候 , 会 直 接 返 回 dns,fites 的 顺
序 , 这 个 是 参 考 了 glibc 的 实 现 [2]
这 个 问 题 其 实 一 般 在 虚 拟 机 上 没 有 问 题 , 因 为 一 般 操 作 系 统 都 会 默
认 有 这 个 配 置 文 件 , 但 是 容 器 化 之 后 我 们 一 般 喜 欢 使 用 alpine linux
这 种 比 较 小 的 基 础 镜 像 ,alpine 中 就 不 存 在 的
_/etc/nsswitch.conf 这 个 文 件 , 所 以 就 有 可 能 会 出 现 问 题
上 面 这 段 逻 辑 不 能 再 1.16 中 进 行 复 现 , 是 因 为 1.16 已 经 修 改 了 这 个
逻 辑 , 主 要 就 是 把 Linux 的 这 个 判 断 分 支 删 除 掉 了 , 感 兴 趣 可 以 看
这 个 修 改 记 录 [3] 和 这 个 issue[4]
总 结
最 大 的 感 受 就 是 经 验 主 义 害 死 人 , 很 多 时 候 由 于 我 们 知 识 点 的 原 因
所 以 可 能 会 出 现 一 些 和 我 们 认 为 的 常 识 相 违 背 的 地 方 , 这 个 时 候 就
需 要 大 胆 假 设 小 心 求 证 了