在Ubuntu20.04上进行apt update时由于DNS的原因出现错误

首先

這是我在使用Vagrant時遇到的錯誤。不僅是Vagrant,這似乎是常見的ubuntu20錯誤,所以我留下來以備下次遇到。

环境

    • 母艦:Ubuntu18.04.5LTS

 

    • Vagrant & Virtualbox 使用

 

    • ubuntu20.04をインストール

 

    bridged network interfaces : br0

情况

在使用Vagrant up启动虚拟机后,
使用Vagrant ssh进行连接,在执行apt update时出现错误。

vagrant@ubuntu2004:~$ sudo apt update
Err:1 http://jp.archive.ubuntu.com/ubuntu focal InRelease                   
  Temporary failure resolving 'jp.archive.ubuntu.com'
Err:2 http://security.ubuntu.com/ubuntu focal-security InRelease            
  Temporary failure resolving 'security.ubuntu.com'
Err:3 http://jp.archive.ubuntu.com/ubuntu focal-updates InRelease
  Temporary failure resolving 'jp.archive.ubuntu.com'
Err:4 http://jp.archive.ubuntu.com/ubuntu focal-backports InRelease
  Temporary failure resolving 'jp.archive.ubuntu.com'
Reading package lists... Done           
Building dependency tree       
Reading state information... Done
All packages are up to date.
W: Failed to fetch http://jp.archive.ubuntu.com/ubuntu/dists/focal/InRelease  Temporary failure resolving 'jp.archive.ubuntu.com'
W: Failed to fetch http://jp.archive.ubuntu.com/ubuntu/dists/focal-updates/InRelease  Temporary failure resolving 'jp.archive.ubuntu.com'
W: Failed to fetch http://jp.archive.ubuntu.com/ubuntu/dists/focal-backports/InRelease  Temporary failure resolving 'jp.archive.ubuntu.com'
W: Failed to fetch http://security.ubuntu.com/ubuntu/dists/focal-security/InRelease  Temporary failure resolving 'security.ubuntu.com'
W: Some index files failed to download. They have been ignored, or old ones used instead.

查看错误后发现,似乎DNS的名称转换没有成功。
尝试确认DNS的当前状态。

$ cat /etc/resolv.conf 

nameserver 127.0.0.53
options edns0 trust-ad

在探索之后发现,
127.0.0.53是什么意思?这是nameserver(DNS)。
这似乎是Ubuntu的一个错误,符号链接的引用已经指向了另一个位置。
我们来进行确认。

$ ls -l /etc/resolv.conf
lrwxrwxrwx 1 root root 39 12月 13 23:01 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf

如上所述,本来应该是/run/systemd/resolve/stub-resolv.conf的位置,但现在却引用了一个更高级的目录。
这样做的话,即使修正了原因文件/etc/resolv.conf和/run/systemd/resolve/stub-resolv.conf这两个文件,问题也无法解决。
(因为在修复后使用sudo systemctl restart systemd-resolved更新,导致无法还原正常状态,sudo apt update也无法通过。)

处理

因此,只需编辑DNS并重新创建符号链接,它就会正常工作。

请使用nano或vi编辑/etc/systemd/resolve.conf文件,并添加自己的DNS IP地址。
由于apt无法使用,所以暂时无法使用emacs。

$ sudo nano /etc/systemd/resolve.conf

#DNS=
  ↓
DNS=your_DNS_IP

当进行编辑后,将重新创建/etc/resolv.conf的符号链接。

$ sudo unlink /etc/resolv.conf
$ sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf

最后,只需更新DNS设置即可完成。在参考文章中,使用了sudo reboot指令,但我经过检查使用了systemctl restart指令以确认操作。

$ sudo systemctl restart systemd-resolved

我会确认是否正确地设置了链接。

$ ls -l /etc/resolv.conf
lrwxrwxrwx 1 root root 39 12月 14 08:01 /etc/resolv.conf -> /run/systemd/resolve/stub-resolv.conf

已经恢复正常。然后,请执行sudo apt update并确认其是否正常运行。

用Vagrantfile一次性解决问题

我会在启动VM时对其进行修复。在第3行中,将sed的Your_DNS_IP更改为适合自己环境的DNS IP,则应该能正常运行。

config.vm.provision "shell", inline: <<-SHELL
    sed -i -e 's/DNS=4.2.2.1 4.2.2.2 208.67.220.220/DNS=Your_DNS_IP/g' /etc/systemd/resolved.conf
    unlink /etc/resolv.conf
    ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
    systemctl restart systemd-resolved
SHELL

最后

根据参考文章所说,似乎是Ubuntu 18.04的一个错误,但是即使升级到20版本也仍然存在相同问题。不仅仅在虚拟机上,主机上也可能会有类似的错误,所以当再次面临时可以有用。

如果能帮到某人,我会感到幸福。

请查阅此文

 

广告
将在 10 秒后关闭
bannerAds