由于某种原因,我无法访问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 mDNSResponder
但sudo 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 会接受该地址,但
host
或dig
工具会绕过该地址)。请使用其他设备进行检查。您的 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
切换。