0%

git-clone-https-443-error

使用github出现以下问题:

fatal: unable to access 'https://github.com/andoma/rtmpdump.git/': Failed to connect to github.com port 443: 连接超时

网上解决办法部分可以通过设置或取消代理来修复,尝试未果。

更换为 ssh 可以正常使用。

proxy

git config http.proxy
git config https.proxy
git config --global --unset https.proxy
git config --global 'socks5:/127.0.0.1:1080'

git version

$ git --version 
git version 2.13.0

ping

$ ping github.com
PING github.com (192.30.252.128) 56(84) bytes of data.
^C
--- github.com ping statistics ---
79 packets transmitted, 0 received, 100% packet loss, time 79855ms

traceroute

$ traceroute 192.30.252.128
traceroute to 192.30.252.128 (192.30.252.128), 30 hops max, 60 byte packets
 1  gateway (192.168.110.1)  0.920 ms  0.908 ms  0.900 ms
 2  * * *
 3  192.168.3.1 (192.168.3.1)  1.542 ms  1.536 ms  1.510 ms
 4  115.236.90.217 (115.236.90.217)  9.464 ms  9.387 ms  9.464 ms
 5  220.191.159.125 (220.191.159.125)  5.358 ms 61.164.19.145 (61.164.19.145)  6.558 ms 61.164.8.45 (61.164.8.45)  5.350 ms
 6  * 61.164.22.149 (61.164.22.149)  3.388 ms *
 7  202.97.82.9 (202.97.82.9)  7.015 ms 202.97.68.137 (202.97.68.137)  6.437 ms 202.97.82.9 (202.97.82.9)  7.958 ms
 8  * * *
 9  * * *
10  * * *
11  * * *
12  * * *
13  * * *
14  * * *
15  * * *
16  * * *
17  * * *
18  * * *
19  * * *
20  * * *
21  * * *
22  * * *
23  * * *
24  * * *
25  * * *
26  * * *
27  * * *
28  * * *
29  * * *
30  * * *

netstat

$ netstat -nr
内核 IP 路由表
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.110.1   0.0.0.0         UG        0 0          0 eth0
0.0.0.0         192.168.188.1   0.0.0.0         UG        0 0          0 wlan0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 wlan0
192.168.110.0   0.0.0.0         255.255.254.0   U         0 0          0 eth0
192.168.188.0   0.0.0.0         255.255.254.0   U         0 0          0 wlan0

hosts

删除 hosts 中关于github的记录

#fix github
23.235.40.249  github.global.ssl.fastly.net
192.30.252.128 github.com
64.233.179.91 dl-ssl.google.com
64.233.169.101 groups.google.com
216.58.218.138 ajax.googleapis.com

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

192.30.252.128 github.com 屏蔽解决问题

$ ping github.com
PING github.com (192.30.255.113) 56(84) bytes of data.
64 bytes from lb-192-30-255-113-sea.github.com (192.30.255.113): icmp_seq=1 ttl=44 time=191 ms
64 bytes from lb-192-30-255-113-sea.github.com (192.30.255.113): icmp_seq=2 ttl=44 time=224 ms
^C
--- github.com ping statistics ---
3 packets transmitted, 2 received, 33% packet loss, time 2002ms
rtt min/avg/max/mdev = 191.531/208.191/224.851/16.660 ms

由上面打印可以看出是 github.com 地址发生变化导致 hosts 不对应,从而不能正常访问

原理

为了方便用户记忆,我们将IP变成一个个的域名来输入到浏览器进行访问。而这使得访问网站时要先将其域名解析成 IP 。DNS (Domain Name Server) 的作用就是进行 IP 解析,把域名对应到 IP。在 Great FireWall 的 5 种封锁方法中,有一种简单而效果很好的方法是 DNS 污染。GFW 会对 DNS 的解析过程进行干扰,这会使对某些被干扰的域名返回一个错误的 IP 地址给你的主机,使你无法正确连接到你要的服务器上读取正确的信息。

Hosts 文件本来是用来提高解析效率。在进行 DNS 请求以前,系统会先检查自己的 Hosts 文件中是否有这个地址映射关系,如果有则调用这个 IP 地址映射,如果没有再向已知的 DNS 服务器提出域名解析。也就是说 Hosts 的请求级别比 DNS 高。当你的 Hosts 文件里面有对应的 IP 时,它就会直接访问那个 IP,而不用通过 DNS。