当前位置: 首页 > news >正文

ubuntu 解决 DNS 代理设置错误,导致不能上网的 DoH、DoT问题

老旧的 udp dns明文查询,早就被 doh ,dot取代了。优选 doh,更自在。

但目前的现状是 3种 DNS 传输协议 udp / doh / dot 同时存在。

未来,如何选择?
  • 测试: udp dns:简单方便
  • 内网:dot:方便管理
  • 外网:doh,DoQ 自在

DoQ (DNS over QUIC):

DoQ是一种新兴的技术,它结合了DNS查询和QUIC协议的优势。QUIC是一个基于UDP的多路复用传输协议,它减少了连接建立时间,并提供了更好的性能加密支持。DoQ旨在进一步提升DNS查询的效率和隐私性。  DoH, DoT, DoQ 的区别 - DNS-WIKI  

再未来 DoX :变是永远的不变。

优缺点

  • DNS
    • 优点:原生支持,广泛部署,无需额外配置。
    • 缺点:明文传输,容易受到篡改和监听。
  • DoH
    • 优点:与HTTPS流量不可区分,难以被审查,易于绕过某些网络限制。
    • 缺点:可能与现有的网络基础设施(如中间件、缓存)存在兼容性问题。
  • DoT
    • 优点:设计简洁,易于实现,提供端到端加密。
    • 缺点:可被ISP或网络防火墙识别并阻止,因为使用了专用端口。
  • DoQ
    • 优点:减少连接延迟,提高传输效率,支持并发请求。
    • 缺点:目前支持度不广,需要进一步测试和部署。

1.

abc@mpc:~$ sudo netstat -tulnp | grep ':53'
tcp6       0      0 :::53                   :::*                    LISTEN      1/init              
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           662/avahi-daemon: r
udp6       0      0 :::53                   :::*                                1/init              
udp6       0      0 :::5353                 :::*                                662/avahi-daemon: r

#

# 由于53 端口已经被占用了,所以运行下面 3句,是不会改变上面的结果的。

abc@mpc:~$ sudo systemctl stop systemd-resolved
abc@mpc:~$ sudo systemctl start systemd-resolved

2.

abc@mpc:~$ sudo lsof -i:53
COMMAND    PID             USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
systemd      1             root   67u  IPv6   8304      0t0  UDP *:domain
systemd      1             root   68u  IPv6   6829      0t0  TCP *:domain (LISTEN)
systemd-t  554 systemd-timesync   12u  IPv4  50483      0t0  UDP localhost:58362->127.0.0.53:domain
dnss       673             dnss    3u  IPv6   6829      0t0  TCP *:domain (LISTEN)
dnss       673             dnss    8u  IPv6   6829      0t0  TCP *:domain (LISTEN)
dnss       673             dnss    9u  IPv6   8304      0t0  UDP *:domain
snapd      692             root   17u  IPv4  51454      0t0  UDP localhost:36633->127.0.0.53:domain
firefox   4322             test   18u  IPv4  53266      0t0  UDP localhost:33606->127.0.0.53:domain
firefox   4322             test   55u  IPv4  52458      0t0  UDP localhost:34866->127.0.0.53:domain

#

# dnss为官方仓库里就有的,一句简单命令就可以 doh 了,OK。但是,doh 被那啥了,国内的一些 doh可以使用。

路由器,DNS服务器,本质上都可以是中间人,只不过这个中间人到底是谁而已。

3.

abc@mpc:~$ sudo apt remove dnss

abc@mpc:~$ sudo netstat -tulnp | grep ':53'
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           662/avahi-daemon: r
udp6       0      0 :::5353                 :::*                                662/avahi-daemon: r

   

## stop dnss 即可,并不是一定要 remove

abc@mpc:~$ sudo systemctl stop systemd-resolved
abc@mpc:~$ sudo systemctl start systemd-resolved

  • systemd-resolved 为 debian 系自带的域名服务器;使用 ip 为 127.0.0.53:53
  • 127.0.0.1:53 给其他dns代理服务器使用的。
  • dns查询顺序:先查询 systemd-resolved dns 127.0.0.53:53,无效、则查询 127.0.0.1:53  ?
    当然,并不只是这里提到的,实际上,中间还有其他的查询路径,比如 hosts 文件
  • 所以用户自己配置了dns服务器时,如需要使用自己的,则需要先停止系统自带的 systemd-resolved dns ?有些是代理软件自行设置,有些则需要用户自己设置。

应用程序发起 DNS 请求  
├─ 1. 检查本地 `/etc/hosts` 文件(若域名存在则直接返回 IP)‌#自己也可以进行DNS劫持
├─ 2. 查询本地 DNS 缓存(如 `systemd-resolved` 或浏览器缓存)‌
├─ 3. 通过 `/etc/resolv.conf` 找到 DNS 服务器地址(默认指向 `127.0.0.53:53`)‌
│   ├─ 若使用 `systemd-resolved`:请求转发至 `127.0.0.53:53`(本地代理,OS自带?)‌
│   │   ├─ `systemd-resolved` 根据配置(`/run/systemd/resolve/resolv.conf`)

│   │   │     向外部 DNS 服务器发起查询‌
│   │   └─ 结果缓存并返回给应用程序‌
│   └─ 手动绑定其他服务(如 `dnsmasq`,用户代理,不是系统默认自带的代理

│         请求直接发往 `127.0.0.1:53`(需服务已监听此地址)‌
└─ 4. 外部 DNS 服务器响应,最终返回 IP 给应用程序‌

  

  

4.

abc@mpc:~$ sudo netstat -tulnp | grep ':53'
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      5360/systemd-resolv
udp        0      0 127.0.0.53:53           0.0.0.0:*                           5360/systemd-resolv
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           662/avahi-daemon: r
udp6       0      0 :::5353                 :::*                                662/avahi-daemon: r

tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      5360/systemd-resolv

系统自带的 DNS 服务,回来了。

OK

相关文章:

  • Leetcode做题记录----2
  • vue3自定义指令实现输入框值范围大小限制
  • 网络安全之文件上传漏洞
  • leetcode日记(95)将有序数组转换为二叉搜索树
  • C++ primer plus 第八节 内存模型和命名空间第一部分
  • Spring Boot配置类原理、Spring Boot核心机制理解,以及实现自动装置的底层原理
  • 知乎后台管理系统:数据库系统原理实验2——逻辑模型设计
  • 《断舍离》:给生活做减法,给灵魂做加法
  • k8s面试题总结(十四)
  • 微软PIKE-RAG:多层次多粒度体系化智能化的知识库构建方案
  • 【leetcode hot 100 138】随机链表的复制
  • 如何下载一些网上只提供了预览的pdf
  • 架构学习第八周--Kubernetes博客搭建
  • 【高德地图开发】鼠标框选点标记,并获取标记信息
  • Python Web应用开发之Flask框架——高级应用(一)
  • 八、排序算法
  • Git基本概念及使用
  • 搜广推校招面经四十四
  • 嵌入式音视频通话SDK组件EasyRTC:全平台设备兼容,智能硬件里的WebRTC调用实践
  • python ---cad二次开发(环境搭建)
  • 上海虹桥高铁站拦门事件反转,谁在带偏网友?
  • 台湾花莲县海域发生5.7级地震,震源深度15公里
  • 科普|治疗腰椎间盘突出症,筋骨平衡理论如何提供新视角?
  • 多地政府机关食堂迎来大客流,重庆荣昌区委书记给厨师们鼓劲
  • 在海拔3980米驻守:“全国先进工作者”刘鹏与洛戈梁子警务站的9年
  • 国防部新闻发言人就日本民用飞机侵闯中国钓鱼岛领空答记者问