news 2026/6/6 23:53:02

WSL2 网络故障,DNS 解析失败但 ping IP 正常

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
WSL2 网络故障,DNS 解析失败但 ping IP 正常

WSL2 DNS 解析故障排查与解决方案

问题现象
  1. WSL2(Ubuntu)中所有域名解析失败:
    $ curl -I https://github.com curl: (6) Could not resolve host: github.com $ ping www.baidu.com ^C # 请求超时无响应
  2. 但直接ping外网 IP 正常:
    $ ping 8.8.8.8 64 bytes from 8.8.8.8: icmp_seq=1 ttl=103 time=172 ms
排查过程
1. 检查基本配置
  • 确认/etc/resolv.conf配置:
    $ cat /etc/resolv.conf nameserver 8.8.8.8 nameserver 1.1.1.1
  • /etc/wsl.conf已设置自动生成 DNS,配置正常。
2. 检查网关与路由
  • 查看路由表:
    $ ip route default via 172.26.192.1 dev eth0 # 正常
  • 测试网关连通性:
    $ ping 172.26.192.1 # 网关可通
3. 测试 UDP 53 端口
  • 检查 DNS 请求出口:
    $ timeout 2 bash -c "echo >/dev/udp/8.8.8.8/53" && echo "开放" || echo "阻塞" 开放
    结果:请求可发出,但无应答,表明回程包被拦截。
4. 检查 Windows 端口占用
  • Windows 管理员终端执行:
    netstat -ano | findstr ":53 "
    关键输出:
    UDP 0.0.0.0:53 *:* 3704
  • 查询占用进程:
    tasklist /svc /FI "PID eq 3704"
    输出:
    映像名称 PID 服务 svchost.exe 3704 SharedAccess
    结论:Internet Connection Sharing (ICS) 服务占用了 UDP 53 端口。

尝试了以下失败的解决方案
  1. 禁用 SharedAccess 服务

    sc.exe config SharedAccess start= disabled net stop SharedAccess
    • 结果:服务停止后自动重启,端口仍被占用
  2. 修改.wslconfig

    [wsl2] networkingMode=NAT dnsTunneling=false autoProxy=false
    • 执行wsl --shutdown后端口短暂释放,重启 WSL 后端口又被占用。
  3. 重启winnat并重置网络

    net stop winnat && net start winnat netsh winsock reset
    • 结果:无效。
  4. 尝试 TCP 53 代理

    • 国内 DNS(如223.5.5.5)的 TCP 53 端口被 RST(连接重置),无法使用。

解决方案:DNS over HTTPS (DoH) 本地代理
原理
  • 在 WSL 内启动本地 UDP 53 监听器。
  • 将 DNS 请求封装为 DoH 请求,通过 HTTPS 443 端口发送至公共 DNS 服务器。
  • 绕过宿主机被占用的 53 端口,直接获取解析结果。
实施步骤
  1. 创建 DoH 代理脚本

    sudo tee /usr/local/bin/dns-doh-proxy.py << 'EOF' #!/usr/bin/env python3 import socket import struct import http.client import ssl UPSTREAM_IP = '223.5.5.5' # 阿里 DNS IP UPSTREAM_HOST = 'dns.alidns.com' # SNI 域名 UPSTREAM_PATH = '/dns-query' LISTEN = ('127.0.0.1', 53) def doh_query(data): try: raw_sock = socket.create_connection((UPSTREAM_IP, 443), timeout=5) ctx = ssl.create_default_context() ssl_sock = ctx.wrap_socket(raw_sock, server_hostname=UPSTREAM_HOST) conn = http.client.HTTPSConnection(UPSTREAM_HOST) conn.sock = ssl_sock conn.request( 'POST', UPSTREAM_PATH, body=data, headers={'Content-Type': 'application/dns-message'} ) resp = conn.getresponse() if resp.status == 200: return resp.read() except: pass return None sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.bind(LISTEN) print(f"DoH proxy listening on {LISTEN}", flush=True) while True: data, addr = sock.recvfrom(512) resp = doh_query(data) if resp: sock.sendto(resp, addr) EOF sudo chmod +x /usr/local/bin/dns-doh-proxy.py
  2. 本地 DNS 配置

    sudo chattr -i /etc/resolv.conf 2>/dev/null sudo rm -f /etc/resolv.conf sudo tee /etc/resolv.conf << 'EOF' nameserver 127.0.0.1 EOF sudo chattr +i /etc/resolv.conf # 防止文件被修改
  3. 启动代理

    sudo nohup /usr/local/bin/dns-doh-proxy.py > /tmp/doh-proxy.log 2>&1 &
  4. 验证

    $ curl -I https://github.com HTTP/2 200 # 成功解析! $ ping www.baidu.com PING www.a.shifen.com (157.148.69.151) 56(84) bytes of data. 64 bytes from 157.148.69.151: icmp_seq=1 ttl=49 time=9.31 ms
开机自启配置

~/.bashrc末尾添加:

pgrep -f dns-doh-proxy.py || sudo nohup /usr/local/bin/dns-doh-proxy.py > /tmp/doh-proxy.log 2>&1 &

注意:需确保当前用户有sudo免密权限,或启动时手动输入密码。


问题根源与总结
  • 根源:Windows 的SharedAccess服务强制绑定0.0.0.0:53,导致 WSL DNS 回包被丢弃。
  • 方案
    • 通过 DoH 代理将 DNS 流量转移至 HTTPS 通道,绕过 53 端口占用。

若您遇到以下情况,可参考此方案:

  • ping通 IP 但域名解析失败。
  • Windows 上netstat显示 UDP 53 被占用。
  • 常规网络重置、服务重启无效。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/6 23:52:46

了解卷积反向传播算法

目录 一、前言 二、为什么需要反向传播 三、卷积层训练的本质 四、卷积前向传播回顾 五、反向传播要解决什么问题 六、卷积反向传播核心思想 七、理解卷积核梯度 八、卷积核更新过程 九、输入层梯度如何计算 十、为什么卷积核要旋转180度 十一、多通道卷积反向传播 …

作者头像 李华
网站建设 2026/6/6 23:48:35

5分钟掌握BilibiliDown:跨平台B站视频下载终极指南

5分钟掌握BilibiliDown&#xff1a;跨平台B站视频下载终极指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.com/gh_mirrors/bi/B…

作者头像 李华
网站建设 2026/6/6 23:48:18

Nios II开发全流程疑难杂症排查指南:从硬件设计到软件调试

1. 项目概述 在FPGA开发领域&#xff0c;Altera&#xff08;现Intel&#xff09;的Nios II软核处理器是一个极其灵活且强大的工具&#xff0c;它允许我们在FPGA内部构建一个完整的片上系统。然而&#xff0c;从硬件设计到软件调试&#xff0c;这条路上布满了各种“坑”。无论是…

作者头像 李华
网站建设 2026/6/6 23:47:45

上海徐汇区新高一语文补课班文学拓展 | 作文提升、阅读高分

新高一语文告别初中浅层字词识记与短篇记叙文写作&#xff0c;转向整本书研读、思辨类现代文阅读、议论文高分写作与古文深度赏析&#xff0c;徐汇坐拥南模、位育、市二、徐汇中学等多所市重点&#xff0c;校内月考、分班考着重文学素养拓展与读写综合能力&#xff0c;不少学生…

作者头像 李华
网站建设 2026/6/6 23:46:20

SQLite 使用 UUID 主键风险大!UUID7 能否解决排序难题?

2026 年 6 月 5 日 在数据库中&#xff0c;用随机 UUID 作主键很常见。不过&#xff0c;随机 UUID&#xff08;如 UUID4&#xff09;有个已知缺点&#xff0c;其无序性会让聚集索引产生大量额外分页操作&#xff0c;因为是随机将行插入 B 树&#xff0c;还得重新平衡。本文能帮…

作者头像 李华
网站建设 2026/6/6 23:42:54

cas:120550-35-8,Biotin-PEG3-PFP,生物素-三聚乙二醇-五氟苯酚酯

描述Biotin-PEG3-PFP 是一种胺反应性生物偶联试剂&#xff0c;由生物素、PEG3间隔臂和PFP活性酯三部分组成&#xff0c;用于蛋白质生物素化标记。基本信息中文名&#xff1a;生物素-三聚乙二醇-五氟苯酚酯 英文名&#xff1a;Biotin-PEG3-PFP CAS号&#xff1a;120550-35-8 分子…

作者头像 李华