我使用的计算机(Windows 7 Enterprise)有两个网络连接,一个提供对互联网和大学网络的访问 - 这个适配器应该用于大多数事情。第二个适配器是通过路由器连接到一些实验室设备的本地网络,没有互联网访问权限。
在这种情况下,我无法让 git 正常工作。禁用第二个(本地)适配器后,一切都按预期工作。但是,当启用适配器时,powershell 无法访问 github - 例如,拉取请求失败,显示错误 443。然而,互联网仍然可以用于 powershell 之外的所有其他东西 - 例如 IE/Firefox/cmd/等。因此,似乎 powershell 正在尝试使用第二个适配器,即使它无法访问互联网。
有趣的是,如果我ping github.com
从 powershell 运行,第一个回复会丢失,但随后会收到所有其他回复。如果我再次尝试运行git pull
,它会连接,但只能连接一次。如果我再次尝试拉取,它会失败。这是可重复的,如果我在运行 git 命令之前 ping github,那么它对该命令有效 -但如果命令花费的时间太长(例如同步大型存储库),它会在中途失败。
我真的不知道是什么原因造成的。我尝试了几种方法,包括在 Windows 中手动设置接口指标,使第一个适配器的数字非常低,而第二个适配器的数字非常高(因此不利)。但这似乎对 git 没有任何帮助 - 它解决了我在 Windows 访问互联网时遇到的问题,但对 git 没有帮助。我还尝试将第二个适配器设置为静态 IP,没有默认网关(如本文所建议的那样超级用户问题)。
我是否遗漏了什么?
为了回应@LazyBadger,我已经运行tracert github.com
并得到以下结果:
Tracing route to github.com [192.30.252.131]
over a maximum of 30 hops:
1 ******** [192.168.*.*] reports: Destination host unreachable.
如果我运行route print 0*
,我会得到以下结果:
===========================================================================
Interface List
14...** ** ** ** cd 5e ......Intel(R) I210 Gigabit Network Connection #2 <- This one is the primary adapter
13...** ** ** ** cd 5f ......Intel(R) I210 Gigabit Network Connection
1...........................Software Loopback Interface 1
===========================================================================
IPv4 Route Table
===========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 129.*.*.* 129.*.*.* 2
===========================================================================
Persistent Routes:
None
IPv6 Route Table
===========================================================================
Active Routes:
None
Persistent Routes:
None
(*) 注意:我删除了 IP 地址和 MAC 地址,但是192.168.*.*
第二个适配器无法访问互联网,而129.*.*.*
第一个适配器可以访问互联网。
如果我然后运行ping github.com
,我会得到以下内容
Pinging github.com [192.30.252.128] with 32 bytes of data:
Reply from 192.168.*.*: Destination host unreachable.
Reply from 192.30.252.128: bytes=32 time=84ms TTL=52
然后跑步tracert github.com
我得到了
Tracing route to github.com [192.30.252.128]
over a maximum of 30 hops:
1 <1 ms <1 ms <1 ms ********* [129.*.*.*]
..............
7 82 ms 82 ms 83 ms ae-4-90.edge3.Washington4.Level3.net [4.69.149.210]
8 83 ms 83 ms 83 ms GITHUB-INC.edge3.Washington4.Level3.net [4.53.116.102]
9 84 ms 84 ms 84 ms 192.30.252.201
10 84 ms 84 ms 84 ms github.com [192.30.252.128]
在此之后它不再起作用 - 基本上,我执行 ping 后的第一个命令将起作用,但任何进一步的命令都会返回到使用错误的适配器,直到我再次执行 ping 为止。
很有趣。tracert
对于 Google 等其他网站来说,运行良好。不同之处在于,任何以 IP 开头的网站192.
似乎都经过了错误的适配器。
答案1
好吧,原来是路由器配置错误。出于某种原因,尽管子网掩码配置为255.255.255.0
,但 Windows 却将第二个接口的子网掩码设置为255.0.0.0
。在更改路由器中的其他一些设置后,分配了正确的子网掩码。
本质上是因为子网掩码太宽,而 Github 恰好将192.x.x.x
其用作外部 IP 地址,因此对 Github 的所有请求都通过第二个接口路由。一旦子网掩码得到纠正,问题就消失了。
这也解释了为什么从 PS 可以正确访问 Google 等网站,而 Github 却不能。