我遇到了一个非常奇怪的情况。启用 IPv6 后,我无法访问 Facebook。我可以浏览它,但所有 AJAX 查询都失败了,所以我无法查看提要、发送消息或做任何有用的事情。
facebook.com 可以 ping 通并返回 IPv6 地址:
$ ping facebook.com
PING facebook.com(edge-star-mini6-shv-01-nrt1.facebook.com (2a03:2880:f10f:83:face:b00c:0:25de)) 56 data bytes
64 bytes from edge-star-mini6-shv-01-nrt1.facebook.com (2a03:2880:f10f:83:face:b00c:0:25de): icmp_seq=1 ttl=54 time=21.3 ms
64 bytes from edge-star-mini6-shv-01-nrt1.facebook.com (2a03:2880:f10f:83:face:b00c:0:25de): icmp_seq=2 ttl=54 time=21.8 ms
64 bytes from edge-star-mini6-shv-01-nrt1.facebook.com (2a03:2880:f10f:83:face:b00c:0:25de): icmp_seq=3 ttl=54 time=20.7 ms
我可以禁用 IPv6,然后一切正常:
$ sudo sysctl -p
[sudo] password for misha:
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
$ ping facebook.com -c 5
PING facebook.com (31.13.82.36) 56(84) bytes of data.
64 bytes from edge-star-mini-shv-01-nrt1.facebook.com (31.13.82.36): icmp_seq=1 ttl=55 time=20.3 ms
64 bytes from edge-star-mini-shv-01-nrt1.facebook.com (31.13.82.36): icmp_seq=2 ttl=55 time=20.4 ms
64 bytes from edge-star-mini-shv-01-nrt1.facebook.com (31.13.82.36): icmp_seq=3 ttl=55 time=21.4 ms
64 bytes from edge-star-mini-shv-01-nrt1.facebook.com (31.13.82.36): icmp_seq=4 ttl=55 time=21.5 ms
64 bytes from edge-star-mini-shv-01-nrt1.facebook.com (31.13.82.36): icmp_seq=5 ttl=55 time=21.1 ms
--- facebook.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4007ms
rtt min/avg/max/mdev = 20.330/20.957/21.503/0.493 ms
一切都继续正常工作了几个小时,直到 IPv6 以某种方式重新启用,我必须重复该过程。
我的问题:
- 启用 IPv6 后,为什么 FB 无法运行?
- 为什么一段时间后 IPv6 会重新启用?我更新了 sysctl.conf,所以更改不应该是永久的吗?
答案1
Facebook 大量使用 IPv6,因此它肯定能行得通。他们的数据中心内部完全采用 IPv6。
您可能会看到 MTU 处理方面的问题。初始页面可能小于最低 MTU,或者该服务器使用不同的数据包大小。如果其他请求的大小不同,或者它们的服务器以不同的方式处理路径 MTU 发现,那么您可能会看到类似这样的情况。不过这只是猜测。
您是否正在使用 IPv6 隧道?这可能解释了部分原因。当您提供更多信息时,我会更新答案。