解决 WSL Ubuntu 中 /etc/resolv.conf 自动重置问题

解决 WSL Ubuntu 中 /etc/resolv.conf 自动重置问题

      • 前言
      • 问题描述
      • 问题原因
      • 尝试过的命令及分析
      • 解决方案:修改 `wsl.conf` 禁用自动生成
      • 总结

前言

在使用 Windows Subsystem for Linux (WSL) 的 Ubuntu 子系统时,你可能会遇到 /etc/resolv.conf 文件被自动重置的问题。即使你手动删除或修改了这个文件,它仍然会被恢复到默认配置,例如被设置为 nameserver 192.168.31.2。 本文将深入探讨这个问题的原因,并提供有效的解决方案,同时回顾一些可能无效的尝试性操作,帮助你彻底解决 WSL Ubuntu 中的 DNS 配置困扰。

问题描述

正如用户遇到的情况,即使执行 sudo rm /etc/resolv.conf 删除了 /etc/resolv.conf 文件,或者使用 sudo tee /etc/resolv.conf <<< "nameserver 192.168.31.111" 尝试手动设置 nameserver,重启 WSL 后,/etc/resolv.conf 文件仍然会被重置为包含 nameserver 192.168.31.2 的内容。 这导致用户自定义的 DNS 设置无法生效,影响网络访问。

问题原因

这个问题的根源在于 WSL 的网络配置机制。 WSL 默认被设计为与 Windows 主机网络环境紧密集成。 为了简化网络配置,WSL 会自动生成 /etc/resolv.conf 文件,并使其 镜像 Windows 主机当前的 DNS 设置。 这意味着,每次 WSL 启动或网络环境发生变化时,WSL 都会重新生成 /etc/resolv.conf,覆盖任何手动修改。

因此,仅仅删除或临时修改 /etc/resolv.conf 文件是无法持久解决问题的。我们需要 阻止 WSL 自动生成该文件,并采取其他方式来配置 DNS。

尝试过的命令及分析

为了更好地理解问题,并帮助读者避坑,我们先回顾一下用户尝试过的一些命令,并分析其效果:

ls -l /etc/resolv.conf
  • 作用: 列出 /etc/resolv.conf 文件的详细信息,包括权限、所有者、大小和修改时间等。 用于确认文件是否存在以及基本属性。
cat /etc/resolv.conf
  • 作用: 查看 /etc/resolv.conf 文件的内容,确认当前的 nameserver 设置。 通常会看到 nameserver 192.168.31.2,即使之前尝试删除或修改过。
sudo rm /etc/resolv.conf
  • 作用: 尝试删除 /etc/resolv.conf 文件。 看似有效,但重启 WSL 后文件会被自动重新生成,之前的删除操作无效。
lsattr /etc/resolv.conf
  • 作用: 查看 /etc/resolv.conf 文件的特殊属性。 在某些情况下,文件可能被设置了 i 属性 (immutable),即不可修改。 但通常 WSL 自动生成的 /etc/resolv.conf 不会默认设置这个属性。
sudo chattr -i /etc/resolv.conf
  • 作用: 尝试移除 /etc/resolv.conf 文件的 i 属性(如果存在)。 如果文件被设置为不可修改,这个命令可以解锁文件,使其可以被删除或编辑。 但在这个场景下,通常不是 i 属性的问题,而是 WSL 的自动重写机制。
sudo rm /etc/resolv.conf
  • 作用: 再次尝试删除 /etc/resolv.conf 文件。 在移除了 i 属性后,如果之前存在该属性,这次删除操作应该可以成功。 但仍然无法阻止 WSL 的自动重写。
sudo tee /etc/resolv.conf <<< "nameserver 192.168.31.111"
  • 作用: 使用 tee 命令和重定向,尝试将 nameserver 192.168.31.111 写入 /etc/resolv.conf 文件。 这个命令可以临时修改文件内容。 但重启 WSL 后,修改会被自动重置。
cat /etc/resolv.conf
  • 作用: 再次查看 /etc/resolv.conf 文件内容,确认 tee 命令是否生效。 在重启前,可以看到修改后的内容。
sudo chattr +i /etc/resolv.conf
  • 作用: 尝试为 /etc/resolv.conf 文件设置 i 属性 (immutable),使其不可修改。 这个命令的目的是防止 WSL 自动修改文件。 但实际效果有限,WSL 可能会在启动时尝试重写文件,即使设置了 i 属性也可能失败,或者导致其他问题。 不推荐使用这种方式来解决自动重置问题。

总结: 以上命令虽然在一定程度上可以操作 /etc/resolv.conf 文件,但都无法从根本上解决 WSL 自动重置的问题。 我们需要更深入地配置 WSL,阻止其自动管理 /etc/resolv.conf

解决方案:修改 wsl.conf 禁用自动生成

要彻底解决 /etc/resolv.conf 自动重置的问题,我们需要修改 WSL 的配置文件 wsl.conf,禁用其自动生成 /etc/resolv.conf 的功能。 然后,我们可以手动创建并配置 /etc/resolv.conf 文件,或者使用其他 DNS 配置方式。

步骤 1: 编辑 wsl.conf 文件

在 WSL Ubuntu 终端中,使用文本编辑器(例如 nanovim)打开或创建 /etc/wsl.conf 文件:

sudo nano /etc/wsl.conf

如果文件不存在,nano 会创建一个新文件。

步骤 2: 添加配置内容

wsl.conf 文件中,添加以下配置段和内容:

[network]
generateResolvConf = false
  • [network] 表示网络配置段。
  • generateResolvConf = false 关键配置,禁用 WSL 自动生成 /etc/resolv.conf 文件的功能。

保存并关闭文件 (在 nano 中,按 Ctrl+X,然后按 Y 确认保存,最后按 Enter 退出)。

步骤 3: 手动创建并配置 /etc/resolv.conf (可选)

在禁用自动生成后,您可以选择手动创建 /etc/resolv.conf 文件,并配置您想要的 DNS 服务器。 如果您希望使用特定的 DNS 服务器,例如 192.168.31.111 或公共 DNS 服务器 8.8.8.88.8.4.4,请执行以下操作:

sudo rm /etc/resolv.conf  # 如果文件还存在,先删除
sudo nano /etc/resolv.conf

/etc/resolv.conf 文件中,添加 nameserver 行,指定 DNS 服务器地址。 例如:

nameserver 192.168.31.111
# 或者使用公共 DNS
# nameserver 8.8.8.8
# nameserver 8.8.4.4

根据您的需求选择合适的 DNS 服务器,保存并关闭文件。

如果您希望完全禁用 DNS 解析,可以跳过手动创建 /etc/resolv.conf 的步骤。 WSL 将不会自动生成,您也没有手动创建,这样系统将不会使用 /etc/resolv.conf 进行 DNS 解析。 但这通常不是推荐的做法,除非您有特殊需求。

步骤 4: 重启 WSL 使配置生效

配置 wsl.conf 后,需要重启 WSL 才能使更改生效。 在终端中运行以下命令重启 WSL:

wsl --shutdown
wsl

或者,您可以直接重启您的 Windows 电脑,效果相同。

步骤 5: 验证 DNS 配置

重启 WSL 后,验证 /etc/resolv.conf 文件是否按照您的设置生效。 如果手动创建并配置了 /etc/resolv.conf,请检查文件内容:

cat /etc/resolv.conf

您应该看到您在文件中设置的 nameserver 地址。 如果选择不手动创建 /etc/resolv.conf,则文件可能不存在或为空。

您还可以使用 nslookupping 命令测试 DNS 解析是否正常工作:

nslookup baidu.com
ping baidu.com

如果 DNS 解析正常,nslookup 应该能够解析域名,ping 应该能够 ping 通域名对应的 IP 地址。

总结

通过修改 wsl.conf 文件并禁用 generateResolvConf 选项,我们可以有效地阻止 WSL 自动重置 /etc/resolv.conf 文件,从而实现自定义 DNS 配置的目的。 这种方法是 持久且推荐 的解决方案,可以彻底解决 WSL Ubuntu 中 /etc/resolv.conf 自动重置的问题,让用户能够灵活地管理 WSL 的 DNS 设置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/70225.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【第15章:量子深度学习与未来趋势—15.3 量子深度学习在图像处理、自然语言处理等领域的应用潜力分析】

一、开篇:为什么我们需要关注这场"量子+AI"的世纪联姻? 各位技术爱好者们,今天我们要聊的这个话题,可能是未来十年最值得押注的技术革命——量子深度学习。这不是简单的"1+1=2"的物理叠加,而是一场可能彻底改写AI发展轨迹的范式转移。 想象这样一个…

企业软件合规性管理:构建高效、安全的软件资产生态

引言 在数字化转型的浪潮下&#xff0c;企业的软件使用方式日益多元化&#xff0c;涉及云端、订阅制、永久授权及浮动许可等多种模式。然而&#xff0c;随着软件资产的增多&#xff0c;企业面临着合规性管理的严峻挑战&#xff1a;非法软件使用、许可证管理不当、软件资产闲置…

python学习笔记,python处理 Excel、Word、PPT 以及邮件自动化办公

文章目录 前言一、环境搭建1. 下载 Python2. 安装 Python 二、处理 Excel 文件&#xff08;openpyxl库&#xff09;三、 处理 Word 文件&#xff08;python-docx库&#xff09;四、 处理 PPT 文件&#xff08;python-pptx库&#xff09;五、 自动发送邮件&#xff08;smtplib和…

Python 基础-循环

目录 简介 break continue 小结 简介 要计算123&#xff0c;我们可以直接写表达式&#xff1a; >>> 1 2 3 6要计算123...10&#xff0c;勉强也能写出来。 但是&#xff0c;要计算123...10000&#xff0c;直接写表达式就不可能了。 为了让计算机能计算成千上…

简单易懂,解析Go语言中的Channel管道

Channel 管道 1 初始化 可用var声明nil管道&#xff1b;用make初始化管道&#xff1b; len()&#xff1a; 缓冲区中元素个数&#xff0c; cap()&#xff1a; 缓冲区大小 //变量声明 var a chan int //使用make初始化 b : make(chan int) //不带缓冲区 c : make(chan stri…

python-leetcode 36.二叉树的最大深度

题目&#xff1a; 给定一个二叉树root,返回其最大深度 二叉树的最大深度是指从根节点到最远叶子节点的最长路径上的节点数 方法一&#xff1a;深度优先搜索 知道了左子树和右子树的最大深度l和r&#xff0c;那么该二叉树的最大深度即为:max(l,r)1 而左子树和右子树的最大深…

RESTful 的特点与普通 Web API 的区别

RESTful 是一种设计风格&#xff0c;而不仅仅是普通的 Web API。它遵循一些特定的原则和约束&#xff0c;使得 API 更加简洁、可扩展和易于理解。以下是 RESTful 的特点&#xff0c;以及与普通 Web API 的区别&#xff1a; RESTful 的特点 1. 资源导向 RESTful API 的核心是资…

结构风荷载理论与Matlab计算

结构风荷载理论与matlab计算的实例程序&#xff0c;适合初学者理解matlab风荷载计算 资源文件列表 程序_结构风荷载理论与Matlab计算/chapter1/exam_simWind_1_1.m , 1035 程序_结构风荷载理论与Matlab计算/chapter1/Extrmv.m , 303 程序_结构风荷载理论与Matlab计算/chapter1…

numpy(02 数据类型和数据类型转换)

numpy(01 入门) 目录 一、Python NumPy 数据类型 1.1 NumPy 基本类型 1.2 数据类型对象 (dtype) 1.3 具体实例 二、Numpy数据类型转换 2.1 浮点数据转换 2.2 整型数据转换 2.3 浮点数转整数 一、Python NumPy 数据类型 1.1 NumPy 基本类型 下表列举了常用 NumPy 基…

【雅思博客04】Silence please!

A: Those people in front of us are making so much noise. It’s so inconsiderate! B: Don’t worry about it; it’s not such a big deal. A: Oh... I can’t hear a thing! Excuse me, can you keep it down? C: Sure, sorry about that! A: Someone’s phone is ri…

【大语言模型_3】ollama本地加载deepseek模型后回答混乱问题解决

背景&#xff1a; 本地下载了DeepSeek-R1-Distill-Qwen-7B模型后&#xff0c;通过ollama create DeepSeek-R1-Distill-Qwen-7B -f ds7b.mf加载模型启动后回答混乱&#xff0c;无法使用。 解决方法 重新下载模型&#xff0c;选择了DeepSeek-R1-Distill-Qwen-7B-Q4_K_M.gguf 重…

nginx ngx_http_module(9) 指令详解

nginx ngx_http_module(9) 指令详解 nginx 模块目录 nginx 全指令目录 一、目录 1.1 模块简介 ngx_http_uwsgi_module&#xff1a;uWSGI支持模块&#xff0c;允许Nginx与uWSGI服务器进行通信。uWSGI是一种应用服务器协议&#xff0c;广泛用于Python Web应用的部署。通过该…

用PyInstaller构建动态脚本执行器:嵌入式Python解释器与模块打包 - 简明教程

技术场景&#xff1a; 需分发的Python工具要求终端用户可动态修改执行逻辑将Python环境与指定库&#xff08;如NumPy/Pandas&#xff09;嵌入可执行文件实现"一次打包&#xff0c;动态扩展"的轻量化解决方案。 ▌ 架构设计原理 1. 双模运行时识别 # 核心判断逻辑…

山石网科×阿里云通义灵码,开启研发“AI智造”新时代

近日&#xff0c;山石网科正式宣布全面接入阿里云通义灵码企业专属版&#xff0c;这标志着山石网科在研发智能化、自动化领域迈出重要一步&#xff0c;为研发工作注入强大的AI动力&#xff0c;实现多维度的效率飞跃。 此次合作&#xff0c;阿里云通义灵码依托强大的AI能力&…

《被讨厌的勇气》(六)

1.自由就是被别人讨厌。 2.毫不在意别人的评价、不害怕被别人讨厌、不追求被他人认可&#xff0c;如果不付出以上这些代价&#xff0c;那就无法贯彻自己的生活方式&#xff0c;也就是不能获得自由。 3.在意你的脸的只有你自己。 4.不去干涉别人的课题也不让别人干涉自己的课题.…

使用 PyTorch 实现标准卷积神经网络(CNN)

卷积神经网络&#xff08;CNN&#xff09;是深度学习中的重要组成部分&#xff0c;广泛应用于图像处理、语音识别、视频分析等任务。在这篇博客中&#xff0c;我们将使用 PyTorch 实现一个标准的卷积神经网络&#xff08;CNN&#xff09;&#xff0c;并介绍各个部分的作用。 什…

SpringBoot2.0整合Redis(Lettuce版本)

前言&#xff1a; 目前java操作redis的客户端有jedis跟Lettuce。在springboot1.x系列中&#xff0c;其中使用的是jedis, 但是到了springboot2.x其中使用的是Lettuce。 因为我们的版本是springboot2.x系列&#xff0c;所以今天使用的是Lettuce。关于jedis跟lettuce的区别&#…

qt + opengl 给立方体增加阴影

在前几篇文章里面学会了通过opengl实现一个立方体&#xff0c;那么这篇我们来学习光照。 风氏光照模型的主要结构由3个分量组成&#xff1a;环境(Ambient)、漫反射(Diffuse)和镜面(Specular)光照。下面这张图展示了这些光照分量看起来的样子&#xff1a; 1 环境光照(Ambient …

大模型工具大比拼:SGLang、Ollama、VLLM、LLaMA.cpp 如何选择?

简介&#xff1a;在人工智能飞速发展的今天&#xff0c;大模型已经成为推动技术革新的核心力量。无论是智能客服、内容创作&#xff0c;还是科研辅助、代码生成&#xff0c;大模型的身影无处不在。然而&#xff0c;面对市场上琳琅满目的工具&#xff0c;如何挑选最适合自己的那…

stream流常用方法

1.reduce 在Java中&#xff0c;可以使用Stream API的reduce方法来计算一个整数列表的乘积。reduce方法是一种累积操作&#xff0c;它可以将流中的元素组合起来&#xff0c;返回单个结果。对于计算乘积&#xff0c;你需要提供一个初始值&#xff08;通常是1&#xff0c;因为乘法…