sudo apt-get update 收到连接失败错误但可以 curl 到镜像

sudo apt-get update 收到连接失败错误但可以 curl 到镜像

由于安全限制,我在 Azure 上运行了一台 Ubuntu 18.04.2 LTS VM,但没有公共 IP。我可以使用 curl 通过 HTTP 下载文件,但 FTP 不起作用。

这些是我遇到的错误:

sudo apt-get update
Err:1 http://mirror.cs.unm.edu/archive bionic InRelease
  Connection failed [IP: 64.106.20.76 80]
Err:2 http://mirror.cs.unm.edu/archive bionic-updates InRelease
  Connection failed [IP: 64.106.20.76 80]
Err:3 http://mirror.cs.unm.edu/archive bionic-backports InRelease
  Connection failed [IP: 64.106.20.76 80]
Err:4 http://mirror.cs.unm.edu/archive bionic-security InRelease
  Connection failed [IP: 64.106.20.76 80]
Reading package lists... Done
W: Failed to fetch http://mirror.cs.unm.edu/archive/dists/bionic/InRelease  Connection failed [IP: 64.106.20.76 80]
W: Failed to fetch http://mirror.cs.unm.edu/archive/dists/bionic-updates/InRelease  Connection failed [IP: 64.106.20.76 80]
W: Failed to fetch http://mirror.cs.unm.edu/archive/dists/bionic-backports/InRelease  Connection failed [IP: 64.106.20.76 80]
W: Failed to fetch http://mirror.cs.unm.edu/archive/dists/bionic-security/InRelease  Connection failed [IP: 64.106.20.76 80]
W: Some index files failed to download. They have been ignored, or old ones used instead.

我挑了http://mirror.cs.unm.edu因为根据这里它仅支持 HTTP,理论上应该可以排除 FTP 问题。

但是我可以使用 curl fine 访问该镜像:

curl -O http://mirror.cs.unm.edu/archive/dists
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 10616  100 10616    0     0  61011      0 --:--:-- --:--:-- --:--:-- 61011

我试过几个镜像,但都没有成功。据我所知,没有防火墙、代理或防病毒设置干扰更新。所有传出端口都打开了。还尝试了所有建议这个问题

编辑:关于 D​​NS 设置,由于此 VM 通过 ExpressRoute 连接到内联网,因此会发生一些神奇的事情。

/etc/resolv.conf 的前几行内容如下:

# This file is managed by man:systemd-resolved(8). Do not edit.
#
# This is a dynamic resolv.conf file for connecting local clients to the
# internal DNS stub resolver of systemd-resolved. This file lists all
# configured search domains.
#
# Run "systemd-resolve --status" to see details about the uplink DNS servers
# currently in use.
#
# Third party programs must not access this file directly, but only through the
# symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a different way,
# replace this symlink by a static file or a different symlink.
#
# See man:systemd-resolved.service(8) for details about the supported modes of
# operation for /etc/resolv.conf.

nameserver 127.0.0.53
options edns0
search reddog.microsoft.com

我该如何进一步调试这个问题?

答案1

首先,我要感谢@mchid 添加了很多有价值的信息。

事实证明这是一个防火墙问题,但不受我的控制。

首先,我只是用它curl来测试连接。当我尝试时,curl www.google.com它会正常工作,我会得到 HTML 并确认它来自谷歌。当我尝试时,curl http://speedtest.ftp.otenet.gr/files/test1Mb.db它似乎可以工作,即没有错误并且会在本地创建一个文件。

但是当我尝试时, wget http://speedtest.ftp.otenet.gr/files/test1Mb.db我会收到一条ERROR 503: Service Unavailable.消息。然后我尝试调整 HTTP 标头等,但没有成功。所以我意识到 curl 可能无法正常工作,所以我检查了下载的文件,结果发现它们都是 11kb 大小,并且包含 HTML。该 HTML 是我们内联网的阻止 URL 消息。访问 Web 端点可以工作,但任何文件下载都被阻止。

所以在我看来,这都是使用ExpressRoute将 Azure VNet 连接到本地网络,以及我们的 IT 团队对此设置的限制。

这个故事的寓意是:

  • 如果您在经过一周的研究后遇到类似的问题,那么 98% 的可能性是某种防火墙问题,1% 的可能性是 DNS,或者 1% 的可能性是来自轨道上的核打击。
  • curl 可能会欺骗你,使用 wget
  • 仅仅因为 Azure 连接测试工具表明您可以访问 URI/端口,并不意味着您实际上可以用于实际使用。
  • 尝试测试下载文件,而不仅仅是使用 wget 访问端点
  • 确保您下载的测试文件有效。如果文件大小不符合您的预期,请检查其内容。
  • 与尽可能多的当地 IT 人员进行交谈,就我而言,我必须在我们组织中很高的级别上登记支持凭单,然后任何人才知道这些限制。

答案2

您可以使用apt-fast来安装软件包,而不是aptapt-getapt-fast是一个包装脚本,它使用aria2c命令从镜像下载软件包。

在开始之前,首先确保已安装以下依赖项。

以下是您需要的依赖项的列表:

libc-ares2
libc6
libgcc1
libgmp10 libgnutls30 libnettle6 libsqlite3-0
libstdc++6
libxml2
zlib1g

请运行以下命令列出已安装的包:

for i in $(echo "libc-ares2 libc6 libgcc1 libgmp10 libgnutls30 libnettle6 libsqlite3-0 libstdc++6 libxml2 zlib1g"); do dpkg -l | grep "ii  $i:"; done | sed 's/   .*$//g'

如果没有列出所有依赖项,请不要继续!


下一个,要安装aria2请运行以下命令:

curl -L -O http://mirrors.kernel.org/ubuntu/pool/universe/a/aria2/aria2_1.33.1-1_amd64.deb
sudo dpkg -i aria2_1.33.1-1_amd64.deb

最后要安装apt-fast,请运行以下命令:

curl -L -O https://launchpad.net/~apt-fast/+archive/ubuntu/stable/+files/apt-fast_1.9.8-1~ubuntu18.04.1_all.deb
sudo dpkg -i apt-fast_1.9.8-1~ubuntu18.04.1_all.deb

按照屏幕上的说明完成安装。


的命令apt-fast与 使用的命令相同apt-get

sudo apt-fast update
sudo apt-fast upgrade
sudo apt-fast install <package name>

如果您通常使用sudo apt full-upgradesudo apt dist-upgrade,请使用以下命令:

sudo apt-fast dist-upgrade

有关详细信息,apt-fast请参阅以下链接:

apt-fast ppa

github 上的 apt-fast

另外,这里是下载页面的链接aria2

packages.ubuntu.com

请发布任何错误。谢谢!

相关内容