几周以来,我在更新许多 Raspberry /拉斯普比设备。
/etc/apt/sources.list
当我使用apt-get update
命令尝试过的任何镜像上,我都遇到了 DNS 解析问题。
root@rpi# apt update
Err :1 http://ftp.igh.cnrs.fr/pub/os/linux/raspbian/raspbian buster InRelease
Erreur temporaire de résolution de « ftp.igh.cnrs.fr »
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
Tous les paquets sont à jour.
W: Impossible de récupérer http://ftp.igh.cnrs.fr/pub/os/linux/raspbian/raspbian/dists/buster/InRelease Erreur temporaire de résolution de « ftp.igh.cnrs.fr »
W: Le téléchargement de quelques fichiers d'index a échoué, ils ont été ignorés, ou les anciens ont été utilisés à la place.
它总是告诉我有一个暂时故障解决需要主机。(抱歉,屏幕截图中的法语版本)
分析与尝试
以下是我尝试过的设置,但结果总是不好
- 在不同的 FTP 和 HTTP 镜像 URL 上
- 来自不同的互联网连接(检查我的堆栈上是否存在隐藏的代理)
- 不同的 DNS IP(Google、OpenDNS、互联网提供商)
/etc/resolv.conf
# Google DNS nameserver 8.8.8.8
- 我尝试禁用 wifi 或以太网,但都失败了
- 尝试强制启用 DNS
/etc/nsswitch.conf
hosts: dns
- 我尝试断开 VPN 连接(用于监控):仍然失败
- 我试过
apt clean
或apt-get purge
- 重启也尝试过
DNS解析分析及线索
✔ 我可以 ping 通我的 DNS
root@rpi:/# ping -c1 8.8.8.8 PING 8.8.8.8 (8.8.8.8): 56 data bytes 64 bytes from 8.8.8.8: icmp_seq=0 ttl=106 time=43,538 ms --- 8.8.8.8 ping statistics --- 1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max/stddev = 43,538/43,538/43,538/0,000 ms
我可以通过
nslookup
命令获取 IProot@rpi:/# nslookup ftp.igh.cnrs.fr Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: ftp.igh.cnrs.fr canonical name = ftp4.igh.cnrs.fr. Name: ftp4.igh.cnrs.fr Address: 193.50.6.155
我可以获得
wget
给定的 URL:# wget http://ftp.igh.cnrs.fr/pub/os/linux/raspbian/raspbian/dists/buster/InRelease --2021-03-08 17:35:40-- http://ftp.igh.cnrs.fr/pub/os/linux/raspbian/raspbian/dists/buster/InRelease Résolution de ftp.igh.cnrs.fr (ftp.igh.cnrs.fr)… 193.50.6.155 Connexion à ftp.igh.cnrs.fr (ftp.igh.cnrs.fr)|193.50.6.155|:80… connecté. requête HTTP transmise, en attente de la réponse… 200 OK Taille : 14974 (15K) [application/octet-stream] Sauvegarde en : « InRelease » InRelease 100% [===================================================================================================================================================================>] 14,62K --.-KB/s ds 0,03s 2021-03-08 17:35:40 (512 KB/s) — « InRelease » sauvegardé [14974/14974]
没有 iptables 规则
root@rpi# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
我也尝试过
tcpdump
使用tcpdump -i wlan0 -v port 53
命令。
→ 当wget
正常使用 DNS 解析时(我得到一些数据包跟踪),
→apt
不发送任何 DNS 解析请求...
解决方法
如果我将手动 DNS 解析放在/etc/hosts
本地文件中:它运行良好。
但在我看来,这对于长期解决方案来说是不可接受的。
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.1.1 raspberrypi
193.50.6.155 ftp.igh.cnrs.fr
我完全不明白为什么 APT 命令不使用我的全局 DNS 配置!?
答案1
经过进一步调查,似乎与systemd-resolved.service
Raspbian 有关的东西已用 openresolv 替换了 resolvconf 默认包。
因此,我尝试通过输入此命令强制重新安装 resolvconf,并且成功了
apt purge -y openresolv resolvconf
wget http://ftp.igh.cnrs.fr/pub/os/linux/raspbian/raspbian/pool/main/r/resolvconf/resolvconf_1.79_all.deb
dpkg -i resolvconf_1.79_all.deb
systemctl restart systemd-resolved.service
systemctl enable systemd-resolved.service
rm resolvconf_1.79_all.deb
确实,由于原始问题,我无法使用 apt 强制重新安装。
因此,我通过从镜像站点下载此包来手动重新安装。