'github.com' 解析,但超时

'github.com' 解析,但超时

由于某种原因,我无法访问github.com;连接超时。过去几天我一直遇到这个问题。我访问其他网站时没有遇到这个问题。

我在跑macOS v10.15.5(卡塔利娜)。

跑步路由追踪,我看到 DNS 解析了,但是随后丢失了(答案指出这是 GitHub 的预期情况):

traceroute github.com

输出:

traceroute to github.com (192.30.253.113), 64 hops max, 72 byte packets
 1  10.0.0.1 (10.0.0.1)  5.508 ms  1.134 ms  1.275 ms
 2  192.168.1.1 (192.168.1.1)  3.066 ms  2.711 ms  2.658 ms
 3  80.10.124.196 (80.10.124.196)  69.645 ms  53.357 ms  55.386 ms
 4  10.125.222.74 (10.125.222.74)  54.702 ms  61.938 ms  38.273 ms
 5  ae44-0.niidf202.paris15earrondissement.francetelecom.net (193.252.98.246)  108.873 ms  32.476 ms  102.200 ms
 6  193.252.137.74 (193.252.137.74)  55.651 ms  82.649 ms  70.433 ms
 7  zayo-9.gw.opentransit.net (193.251.250.188)  38.020 ms  85.435 ms  91.153 ms
 8  ae27.cs1.cdg11.fr.eth.zayo.com (64.125.29.4)  168.142 ms  220.846 ms  195.284 ms
 9  ae0.cs1.cdg12.fr.eth.zayo.com (64.125.29.84)  180.439 ms  119.870 ms  108.460 ms
10  ae2.cs3.lhr11.uk.eth.zayo.com (64.125.29.25)  114.051 ms * *
11  * * *
12  * * *
13  * * *
14  209.66.120.181.ipyx-243981-004-zyo.zip.zayo.com (209.66.120.181)  112.761 ms  120.212 ms  113.661 ms
15  * * *
16  * * *
17  * * *
18  * * *
19  * * *
20  * * *
21  * * *
22  * * *
23  * * *
24  * * *
25  * * *
26  * * *
27  * * *
...

使用host确认 DNS 解析

host github.com

输出:

github.com has address 140.82.113.4
github.com mail is handled by 5 ALT1.ASPMX.L.GOOGLE.com.
github.com mail is handled by 5 ALT2.ASPMX.L.GOOGLE.com.
github.com mail is handled by 10 ALT3.ASPMX.L.GOOGLE.com.
github.com mail is handled by 10 ALT4.ASPMX.L.GOOGLE.com.
github.com mail is handled by 1 ASPMX.L.GOOGLE.com.

对来自的 IP 地址运行 curl host,我可以看到尝试访问时连接超时192.30.253.113

curl -v --insecure -L 140.82.113.4

输出:

*   Trying 140.82.113.4...
* TCP_NODELAY set
* Connected to 140.82.113.4 (140.82.113.4) port 80 (#0)
> GET / HTTP/1.1
> Host: 140.82.113.4
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Content-length: 0
< Location: https://140.82.113.4/
<
* Connection #0 to host 140.82.113.4 left intact
* Issue another request to this URL: 'https://140.82.113.4/'
*   Trying 140.82.113.4...
* TCP_NODELAY set
* Connected to 140.82.113.4 (140.82.113.4) port 443 (#1)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/cert.pem
  CApath: none
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
* ALPN, server accepted to use http/1.1
* Server certificate:
*  subject: C=US; ST=California; L=San Francisco; O=GitHub, Inc.; CN=github.com
*  start date: May  5 00:00:00 2020 GMT
*  expire date: May 10 12:00:00 2022 GMT
*  issuer: C=US; O=DigiCert Inc; OU=www.digicert.com; CN=DigiCert SHA2 High Assurance Server CA
*  SSL certificate verify ok.
> GET / HTTP/1.1
> Host: 140.82.113.4
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 301 Moved Permanently
< Content-length: 0
< Location: https://github.com/
<
* Connection #1 to host 140.82.113.4 left intact
* Issue another request to this URL: 'https://github.com/'
*   Trying 192.30.253.113...
* TCP_NODELAY set
* Connection failed
* connect to 192.30.253.113 port 443 failed: Operation timed out
* Failed to connect to github.com port 443: Operation timed out
* Closing connection 2
curl: (7) Failed to connect to github.com port 443: Operation timed out
* Closing connection 0
* Closing connection 1

此时我认为问题出在 GitHub 方面。然而,我的所有同事中只有我一个人遇到了这个问题。

我使用 macOS 访客帐户登录,并能够访问 GitHub。但该问题仍然出现在另一个普通用户帐户上。因此,问题来自某些用户特定的配置。

我也运行过,sudo killall -HUP mDNSRespondersudo dscacheutil -flushcache问题并没有得到解决。

如果我curl不使用任何-L重定向(即没有任何重定向)进行调用,请求就会成功。我得到了 GitHub 的 HTML:

curl -H "Host: github.com" --insecure -v https://

输出:

140.82.118.3/
*   Trying 140.82.118.3...
* TCP_NODELAY set
* Connected to 140.82.118.3 (140.82.118.3) port 443 (#0)
[...]
* TLSv1.2 (IN), TLS handshake, Finished (20):
[...]
<!DOCTYPE html>
<html lang="en">
  <head>
[...]

答案1

我也遇到了这个问题,也持续了好几天,而且和你的 IP 地址一样!今天早上刚修好。

我修复该问题的方法是查看我的 /etc/hosts 并查看 github.com 列出的 IP,然后注释掉该行。

有人给我的解释

libc(在不同的操作系统中方式不同)使用 /etc/hosts 来覆盖主机名查找。这在测试某些东西时有时很有用,但我常常会忘记其中的东西……

192.30.253.113 是一个 github 地址,因为他们拥有 192.30.252.0/22。您可以运行 whois 192.30.253.113 进行确认。这很可能是 github.com 的有效服务器地址,但几天前已退役。我甚至无法 ping 它。他们会将其从他们的 DNS 服务器中删除,但由于它是硬编码在您笔记本电脑的 /etc/hosts 中,所以它对这种变化一无所知!

答案2

但是你的命令已经显示域名解析(到第 2 行中的 IP 地址 192.30.253.113)。如果没有,那么跟踪根本就无法启动。

其余的跟踪输出有与解析 DNS 名称无关– 这根本不是 traceroute 检查的内容。(域名是不是重新解析每个数据包。一旦应用程序知道 IP 地址,它就会直接使用该地址。)相反,traceroute 可以显示随后的实际网络连接存在问题。

您的输出并不一定意味着存在普遍问题 - 它只是表明这些节点不想响应跟踪路由探测具体来说。当 traceroute 在 UDP 模式下使用时,这在 GitHub 系统中实际上是正常的(因为他们只是有一个防火墙,可以在早期阻止 UDP 探测)。您可以将其切换到 ICMP 探测以获得更准确的结果:

sudo traceroute -I github.com
sudo traceroute -I 192.30.253.113

但是,对于您来说,跟踪不会告诉您太多信息,因为最终系统本身,即 192.30.253.113 负载均衡器,无法接受您的 HTTPS 连接。但通常情况下,GitHub 的操作员会迅速从 DNS 中删除错误地址(并且正如您的第二个命令所示,错误地址实际上不再存在于 DNS 中)。

换句话说,问题在于域名解析为错误的每当 curl 或 traceroute 使用操作系统提供的名称查找功能时,地址。

可能的选择:

  • 你刚好解析了域名仍然有该地址,它将被操作系统缓存几分钟(GitHub 指定 60 秒,但并非所有系统都遵守如此低的 TTL)。只需等待一段时间再试一次。

  • 您在 /etc/hosts 中将错误地址设置为覆盖(traceroute 和 curl 会接受该地址,但hostdig工具会绕过该地址)。请使用其他设备进行检查。

  • 您的 DNS 服务器此时正在撒谎,例如,网络管理员可能愚蠢地尝试使用自定义地址覆盖域名。(host不过,您的第二个命令显示效果不错。)尝试使用其他连接(例如公共 Wi-Fi 或移动 4G)来绕过任何拦截。

  • GitHub 的域名服务器不一致,在不同的查询中返回不同的结果。(该域名由 AWS 托管Dyn,一个更新调用成功,一个失败,这并非不可能。)等待一段时间后再试。

答案3

Github.com 确实可以在您的计算机上解析,这一点可以从 traceroute 有一个可用的 IP 地址 ( 192.30.253.113) 得到证明。您的问题不在于 DNS 解析。

事实上,你尝试进行的测试与 DNS 关系不大。解析在测试开始之前就已经完成了。你的问题是你的数据包没有到达 Github 的服务器。

但是,traceroute 无法确定这一点,因为似乎通往 Github.com 的路径上的某些方以某种方式禁用了 traceroute(见下文)。尽管我看到了星星,但 Github.com 对我来说仍然运行良好。

 mtak@dc4:~$ traceroute github.com
traceroute to github.com (140.82.118.4), 30 hops max, 60 byte packets
 1  * * *
 2  l6.f2.ams4.transip.net (77.72.151.70)  16.942 ms  16.917 ms l5.f1.ams4.transip.net (77.72.151.8)  15.319 ms
 3  f1.r2.ams0.transip.net (77.72.151.124)  0.261 ms f2.r1.ams0.transip.net (77.72.151.122)  0.594 ms  0.577 ms
 4  r1-a0.e1.ams7.transip.net (157.97.168.1)  0.407 ms  0.391 ms r2-a0.e1.ams8.transip.net (157.97.168.4)  0.407 ms
 5  transip.telecity2.openpeering.nl (82.150.159.226)  0.704 ms  1.247 ms 213.198.92.21 (213.198.92.21)  2.528 ms
 6  * * xe-0-2-1.er1.ams1.nl.zip.zayo.com (64.125.12.137)  0.879 ms
 7  ae9.cs1.ams17.nl.eth.zayo.com (64.125.31.10)  6.972 ms  7.191 ms  7.150 ms
 8  ae2.cs1.fra6.de.eth.zayo.com (64.125.29.58)  7.067 ms  6.956 ms  9.627 ms
 9  ae1.mcs1.fra6.de.eth.zayo.com (64.125.29.57)  6.791 ms  6.843 ms  6.911 ms
10  82.98.193.31.IPYX-270403-001-ZYO.zip.zayo.com (82.98.193.31)  7.432 ms  7.339 ms  7.291 ms
11  * * *
12  * * *
13  * * *
14  * * *
15  * * *
16  * * *
17  * * *
18  * * *
19  * * *
20  * * *
21  * * *
22  * * *
23  * * *
24  * * *
25  * * *
26  * * *
27  * * *
28  * * *
29  * * *
30  * * *

目前,我认为你能做的不多。解决成功了,你就可以上网了。剩下的就交给其他方了。

答案4

除了给出的答案之外,traceroute由于它使用 ICMP 或 UDP 数据包,有时可能会产生一些误导。

您更有可能使用tcptraceroute目标端口 443 来获取更好的信息。也许您的跟踪路由甚至支持-T切换。

相关内容