![sudo apt-get update 收到连接失败错误但可以 curl 到镜像](https://linux22.com/image/1166733/sudo%20apt-get%20update%20%E6%94%B6%E5%88%B0%E8%BF%9E%E6%8E%A5%E5%A4%B1%E8%B4%A5%E9%94%99%E8%AF%AF%E4%BD%86%E5%8F%AF%E4%BB%A5%20curl%20%E5%88%B0%E9%95%9C%E5%83%8F.png)
由于安全限制,我在 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
我试过几个镜像,但都没有成功。据我所知,没有防火墙、代理或防病毒设置干扰更新。所有传出端口都打开了。还尝试了所有建议这个问题
编辑:关于 DNS 设置,由于此 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
来安装软件包,而不是apt
或apt-get
。apt-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-upgrade
或sudo apt dist-upgrade
,请使用以下命令:
sudo apt-fast dist-upgrade
有关详细信息,apt-fast
请参阅以下链接:
另外,这里是下载页面的链接aria2
:
请发布任何错误。谢谢!