blog icon indicating copy to clipboard operation
blog copied to clipboard

记一次网络错误的解决过程

Open lmk123 opened this issue 6 years ago • 0 comments

我有一个项目用到了 canvas-prebuilt,今天在同事的电脑上安装它时报错了:

$ npm install canvas-prebuilt
...
> [email protected] install node_modules/canvas-prebuilt
> node-pre-gyp install

Fail to connect to 192.30.253.113:443 connection timed out
...

在我自己的电脑上安装这个模块是没有问题的,所以一开始我以为是网络不稳定造成的,但同事说从早上到晚上试了好几次都是同样的错误,所以……

可达鸭眉头一皱,发现事情并不简单

我先尝试在自己电脑上 ping 了一下这个 IP:

$ ping 192.30.253.113
PING 192.30.253.113 (192.30.253.113): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
...

看来即使在能正常安装的电脑上也是 ping 不通这个 IP 的,那为什么没有遇到连接超时的错误呢?

带着这个疑问,我先查了一下这个 IP 地址是哪里的。在 Google 里搜索了 “where is 192.30.253.113”,得知这个 IP 地址来自美国加州的旧金山,是属于 GitHub 的 IP 地址。

鉴于 canvas-prebuilt 将编译好的文件托管在 GitHub 上,我猜它应该是想用这个 IP 访问 GitHub 上的文件,所以我尝试查找了一下 github.com 的 IP 地址:

$ nslookup github.com
Server:         192.168.0.1
Address:        192.168.0.1#53

Non-authoritative answer:
Name:   gtihub.com
Address: 192.30.253.112
Name:   gtihub.com
Address: 192.30.253.113

我的 DNS 服务器告诉我 github.com 有两个 IP 地址,其中一个就是上面那个 ping 不通的以 113 结尾的 IP,但还有一个 112。

然后我尝试 ping 了一下 github.com:

$ ping github.com
PING github.com (192.30.253.112): 56 data bytes
64 bytes from 192.30.253.112: icmp_seq=0 ttl=45 time=475.662 ms
64 bytes from 192.30.253.112: icmp_seq=1 ttl=45 time=493.921 ms
...

然后我注意到,我在 ping github.com 的时候,返回的 IP 地址是 112 结尾的;在同事的电脑上试了一下之后,发现 ping github.com 返回的 IP 地址是 113 结尾的。

另外,同事的电脑上运行 nslookup github.com 返回的也是这两个 IP 地址,但是顺序不太一样:113 结尾的排在前面。然后我尝试在同事的电脑上 ping 112 结尾的 IP 也是可以 Ping 通的。

所以最后的结论就是:我的电脑将 github.com 解析到了 112 结尾的这个能 ping 通的 IP,但同事的电脑上解析到了 113 结尾的无法 ping 通的 IP。

尝试在 hosts 里将 github.com 指向 112 结尾的 IP 地址之后,再安装 canvas-prebuilt 就没有问题了:

$ sudo echo "192.30.253.112    github.com" >> /etc/hosts
$ npm i canvas-prebuilt
> [email protected] install node_modules/canvas-prebuilt
> node-pre-gyp install

[canvas-prebuilt] Success: "node_modules/canvas-prebuilt/canvas/build/Release/canvas-prebuilt.node" is installed via remote

但这又引出了另一个问题:为什么我和同事的电脑上解析到的域名的 IP 地址顺序不一样?可是后来有别的事情,这个问题也就没有深究下去了。

lmk123 avatar Apr 16 '18 16:04 lmk123