5154

Good Luck To You!

在Ubuntu中如何配置DNS,让域名解析指向127.0.0.1?

在数字化时代,网络连接的稳定性和速度直接影响着我们的工作与生活体验,当您在Ubuntu系统上浏览网页、访问服务时,背后一个关键但常被忽视的角色就是DNS(域名系统),它如同互联网的“电话簿”,负责将我们易于记忆的域名(如www.google.com)翻译成机器能够理解的IP地址,默认的DNS服务可能存在速度慢、隐私泄露或被劫持的风险,一个强大而优雅的解决方案,就是利用本地主机地址0.0.1来搭建或指向一个本地DNS解析服务,本文将深入探讨在Ubuntu系统中,如何理解、配置并优化基于0.0.1的DNS设置,从而提升网络性能、增强隐私保护并获得更高的控制权。

在Ubuntu中如何配置DNS,让域名解析指向127.0.0.1?

理解核心概念:127.0.0.1 与 DNS

在开始配置之前,我们必须清晰地理解两个核心概念:0.0.1和DNS。

什么是 127.0.0.1?

0.0.1是一个特殊的IP地址,被称为“环回地址”,它指向您正在使用的设备本身,当您的计算机向0.0.1发送网络请求时,这个请求不会经过任何外部网络设备(如路由器或交换机),而是直接在内部被处理,它就是“我自己”的代名词,使用这个地址运行服务,可以确保极高的响应速度和与外部网络的隔离性,是测试和运行本地服务的理想选择。

什么是 DNS?

DNS(Domain Name System)的核心功能是域名解析,如果没有DNS,我们将不得不记住一长串毫无规律的数字(IP地址)才能访问网站,DNS服务器则维护着一个巨大的数据库,存储着域名与IP地址的对应关系,当您在浏览器中输入一个网址时,您的计算机会向DNS服务器发送查询请求,获取对应的IP地址,然后才能建立连接。

为什么要将 127.0.0.1 用作 DNS?

将DNS查询指向本地的0.0.1,意味着您在本地运行了一个DNS解析程序(或称为“解析器”),这样做的好处是多方面的:

  1. 速度提升:本地DNS解析器会缓存查询结果,当您再次访问同一个网站时,系统无需再向远程DNS服务器发送请求,而是直接从本地缓存中读取结果,响应时间几乎为零。
  2. 隐私与安全:您的所有DNS查询都由本地程序处理,然后可以转发给您信任的、支持加密(如DNS-over-TLS或DNS-over-HTTPS)的上游DNS服务器(如Cloudflare的1.1.1或Quad9的9.9.9),这可以有效防止互联网服务提供商(ISP)或网络中的其他实体窥探您的浏览历史,并避免DNS劫持和污染。
  3. 控制与灵活性:您可以自定义解析规则,屏蔽广告域名、恶意软件站点,或者为本地开发环境创建自定义的域名(如my-project.local指向0.0.1),极大地方便了开发工作。
  4. 可靠性:减少了对单一外部DNS服务器的依赖,即使上游DNS服务器暂时不可用,本地缓存依然可以解析您最近访问过的网站。

在 Ubuntu 上部署本地 DNS 服务器

现代Ubuntu系统(通常是18.04及以后版本)默认集成了systemd-resolved服务,这是一个功能强大的本地DNS解析器,是实现我们目标的最佳起点,对于需要更高级功能的用户,经典的dnsmasq也是一个绝佳的选择。

使用内置的 systemd-resolved(推荐)

systemd-resolved在大多数Ubuntu安装中已经默认运行,它提供了一个“存根监听器”,地址为0.0.53,虽然不是0.0.1,但其工作原理和效果完全一致,都是为了提供一个本地DNS服务。

步骤 1:检查服务状态

确认systemd-resolved正在运行:

systemctl status systemd-resolved

如果看到active (running)的绿色字样,说明服务已正常启动。

步骤 2:配置 /etc/resolv.conf

系统的DNS查询行为由/etc/resolv.conf文件控制,我们需要确保该文件指向systemd-resolved的存根监听器。

检查/etc/resolv.conf的属性:

在Ubuntu中如何配置DNS,让域名解析指向127.0.0.1?

ls -lh /etc/resolv.conf

在标准的Ubuntu系统中,它应该是一个指向../run/systemd/resolve/stub-resolv.conf的符号链接,如果是这样,那么配置基本正确。stub-resolv.conf通常如下:

nameserver 127.0.0.53
options edns0 trust-ad
search .

这里的nameserver 127.0.0.53就是关键,它告诉系统将所有DNS查询都发送到本地的systemd-resolved服务。

如果/etc/resolv.conf不是符号链接或内容不正确,您可以修复它:

# 备份现有文件
sudo mv /etc/resolv.conf /etc/resolv.conf.bak
# 创建正确的符号链接
sudo ln -s /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

步骤 3:设置上游 DNS 服务器

systemd-resolved本身不解析域名,而是将查询转发给上游的公共DNS服务器,您可以指定自己信任的服务器以获得更好的性能和隐私。

编辑配置文件:

sudo nano /etc/systemd/resolved.conf

找到[Resolve]部分,取消注释并修改以下行:

[Resolve]
DNS=1.1.1.1 8.8.4.4
FallbackDNS=9.9.9.9 1.0.0.1
#DNSOverTLS=yes
#Cache=yes
  • DNS=:设置首选的上游DNS服务器,这里使用了Cloudflare和Google的备用服务器。
  • FallbackDNS=:设置备用DNS服务器。
  • DNSOverTLS=yes:取消此行注释以启用DNS-over-TLS加密,增强隐私。

保存文件后,重启服务使配置生效:

sudo systemctl restart systemd-resolved

使用 Dnsmasq 实现更高级的控制

dnsmasq是一个轻量级且功能丰富的DNS转发器和DHCP服务器,非常适合需要精细控制本地DNS的用户。

步骤 1:安装 Dnsmasq

sudo apt update
sudo apt install dnsmasq

安装后,服务会自动启动。

步骤 2:配置 Dnsmasq

dnsmasq的主配置文件是/etc/dnsmasq.conf,建议先备份,然后进行编辑:

sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf.bak
sudo nano /etc/dnsmasq.conf

在文件中添加或修改以下关键配置:

# 监听本地地址
listen-address=127.0.0.1
# 设置上游DNS服务器
server=1.1.1.1
server=8.8.8.8
# 设置缓存大小
cache-size=1000
# (可选) 屏蔽广告域名
# addn-hosts=/etc/dnsmasq.adblock.hosts

步骤 3:管理 /etc/resolv.conf

在Ubuntu中如何配置DNS,让域名解析指向127.0.0.1?

使用dnsmasq时,需要确保/etc/resolv.conf只包含0.0.1作为nameserver,并且防止被其他程序(如NetworkManager)覆盖。

# 停止并禁用systemd-resolved,避免冲突
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
# 创建静态的resolv.conf
echo "nameserver 127.0.0.1" | sudo tee /etc/resolv.conf

注意:禁用systemd-resolved可能会影响某些依赖它的网络功能,请谨慎操作,对于大多数用户,坚持使用方法一更为稳妥。

重启dnsmasq服务:

sudo systemctl restart dnsmasq

验证与故障排除

配置完成后,使用dignslookup命令来验证DNS查询是否正在通过本地服务。

dig google.com

在输出中,关注SERVER:字段,如果显示0.0.53#53(127.0.0.53)(对于systemd-resolved)或0.0.1#53(127.0.0.1)(对于dnsmasq),则说明配置成功,再次执行相同命令,观察Query time:,会发现第二次查询的时间显著缩短,证明缓存正在工作。

常见问题排查:

  • DNS解析失败:检查服务状态(systemctl status ...),确认配置文件语法无误,检查防火墙设置。
  • 配置未生效:确保/etc/resolv.conf指向正确的地址,并且没有被网络管理工具覆盖。
  • 速度无提升:可能是首次查询,请多试几次,检查缓存设置是否合理。

下表小编总结了两种主要方法的对比:

特性 systemd-resolved dnsmasq
集成度 Ubuntu原生集成,无需安装 需手动安装
配置复杂度 较低,适合大多数用户 中等,提供更多自定义选项
监听地址 0.0.53 (存根) 0.0.1
加密DNS 原生支持DNS-over-TLS 需要借助其他工具(如stubby
广告屏蔽 通过/etc/systemd/resolved.conf配置有限 通过hosts文件或配置文件轻松实现
适用场景 日常使用、追求稳定与简单 开发环境、需要精细控制(如广告屏蔽、本地域名)

高级应用与最佳实践

一旦基础配置完成,您还可以探索更多高级功能:

  • 启用加密 DNS:如前所述,在/etc/systemd/resolved.conf中设置DNSOverTLS=yes,为您的DNS查询增加一层安全保护。
  • 实现广告屏蔽:通过维护一个包含广告域名的hosts文件,并在dnsmasq中引用它,可以在整个系统层面屏蔽广告,更专业的解决方案是使用Pi-hole,它本质上是dnsmasq的一个功能强大的封装。
  • 配置本地开发域名:对于Web开发者,在dnsmasq.conf中添加一行如address=/my-app.test/127.0.0.1,即可让http://my-app.test直接指向本地开发服务器,无需修改hosts文件。

通过将Ubuntu系统的DNS查询指向本地的0.0.1,我们不仅优化了网络访问速度,更重要的是夺回了数字生活的控制权和隐私权,无论是利用系统内置的systemd-resolved进行快速、安全的配置,还是借助dnsmasq实现高度定制化的本地网络环境,这都是在Ubuntu上提升系统体验的一项极具价值的实践。


相关问答 FAQs

问题1:127.0.0.1 和 127.0.0.53 有什么区别?为什么 systemd-resolved 使用后者?

回答0.0.1是标准的环回地址,泛指“本机”,而0.0.53systemd-resolved服务专用的“存根监听器”地址。systemd-resolved选择使用一个不同的地址(0.0.53)而不是通用的0.0.1,主要是为了避免端口冲突,这样,如果用户还想在同一台机器上运行其他需要监听0.0.1:53端口的DNS服务(如dnsmasqbind9),就不会与systemd-resolved发生冲突,对于用户而言,虽然地址不同,但其作为本地DNS解析入口的功能是完全相同的。

问题2:如果我手动编辑了 /etc/resolv.conf,但重启系统后它又被还原了,该怎么办?

回答:在Ubuntu系统中,/etc/resolv.conf通常由systemd-resolvedNetworkManager等服务自动管理,直接手动编辑是不会持久化的,正确的做法不是去“对抗”这个机制,而是去配置这些管理服务本身。

  • 对于使用 systemd-resolved 的用户:您不应该直接编辑/etc/resolv.conf,而应确保它是一个指向../run/systemd/resolve/stub-resolv.conf的符号链接,通过编辑/etc/systemd/resolved.conf来配置您的DNS设置,并重启systemd-resolved服务。
  • 对于希望完全自己控制的用户(例如使用 dnsmasq):您需要禁用自动管理resolv.conf的服务,可以禁用systemd-resolved,并配置NetworkManager(通过编辑/etc/NetworkManager/NetworkManager.conf,设置dns=none)来停止管理DNS,之后,您创建的静态/etc/resolv.conf文件就不会被覆盖了。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2025年12月    »
1234567
891011121314
15161718192021
22232425262728
293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
    网站收藏
    友情链接

    Powered By Z-BlogPHP 1.7.3

    Copyright Your WebSite.Some Rights Reserved.