为什么使用 chroot 时必须指定 DNS?

为什么使用 chroot 时必须指定 DNS?

上次我从 Live USB chroot 到我旧的坏掉的系统时,我无法连接到互联网。在这种情况下教程,我读到我应该将 OpenDNS 添加到我的/etc/resolv.conf 如果我使用 DHCP

DHCP(或 chroot)如何影响我的 DNS?

DHCP 不就是路由器给我分配 IP 的一种方法吗?为什么我可以通过 Live USB 正常连接到互联网,却chroot必须添加新的 DNS?

答案1

DHCP 不就是路由器给我分配 IP 的唯一方式吗?

不,这也是路由器向您提供额外信息的方式 - 网关 IP、DNS 服务器 IP、默认域名、时间服务器 IP 等等。

为什么我可以从 Live USB 正常连接到互联网,但在 chroot 中我必须添加新的 DNS?

Linux 将 DNS 服务器地址存储在一个文件中。由于 chroot 会改变程序查看文件路径的方式,这意味着它们会在该/etc/resolv.conf路径上找到不同的文件,这意味着它们可能会找到存储在那里的不同地址。

(你的 DHCP 客户端对你的 chroot 一无所知,它只更新主要的 /etc/resolv.conf文件 - 它无法搜索和更新全部可能的文件。


一种常见的解决方法是链接(绑定)“内部”路径,使其引用相同的“外部”文件。例如,您可以在 chroot 到 /mnt 之前执行此操作:

mount --bind /etc/resolv.conf /mnt/etc/resolv.conf

(当然,稍后您必须先卸载它,系统才会允许您卸载 /mnt。)

相关内容