ubuntu-解决-DNS-代理设置错误,导致不能上网的-DoHDoT问题
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查询的效率和隐私性。
再未来 DoX :变是永远的不变。
优缺点
- DNS
- 优点:原生支持,广泛部署,无需额外配置。
- 缺点:明文传输,容易受到篡改和监听。
- DoH
- 优点:与HTTPS流量不可区分,难以被审查,易于绕过某些网络限制。
- 缺点:可能与现有的网络基础设施(如中间件、缓存)存在兼容性问题。
- DoT
- 优点:设计简洁,易于实现,提供端到端加密。
- 缺点:可被ISP或网络防火墙识别并阻止,因为使用了专用端口。
- DoQ
- 优点:减少连接延迟,提高传输效率,支持并发请求。
- 缺点:目前支持度不广,需要进一步测试和部署。
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
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服务器,本质上都可以是中间人,只不过这个中间人到底是谁而已。
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 给应用程序
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