有人告诉我,中国有两个主要的(唯一的?)ISP - 中国电信 (CT) 和中国联通 (CU) - 两者之间的流量路由非常慢,几乎与必须穿越防火墙的流量一样慢。要解决这个问题,您(作为中国的网站运营商)应该为您的网站获取两个外部 IP 地址,每个提供商一个。
如果确实有必要,请随意评论,但如果有必要,如何实现正确的路由?将两个 IP 地址放入同一主机名的 DNS 中,让客户端以某种方式找出哪个更好?单独的主机名?
答案1
我住在中国,可以证实你所说的话。
大多数大型中国互联网门户网站(例如 qq.com 或 baidu.com)实际上都与两家大型 ISP 都有连接,然后根据您的互联网连接通过其中一个或另一个路由您的流量。
我不知道他们是如何做到的,但我可以看到,根据我所在的位置,DNS 记录 qq.com(中国最大的门户网站之一)解析为不同的 IP 地址:
我家的连接:
mst@mst-gentoo-nb ~ $ nslookup qq.com
Server: 192.168.1.1
Address: 192.168.1.1#53
Non-authoritative answer:
Name: qq.com
Address: 119.147.15.13
Name: qq.com
Address: 119.147.15.17
我的办公室联系方式:
mauro@sylvester:~ ssh$ nslookup qq.com
Server: 10.60.1.249
Address: 10.60.1.249#53
Non-authoritative answer:
Name: qq.com
Address: 220.181.138.59
Name: qq.com
Address: 125.39.127.22
如果我检查whois
这些不同 IP 的记录,我可以看到它们属于不同的提供商。
所以我猜想这个机制以某种方式在他们的 DNS 中实现。但我也不知道具体如何实现。
答案2
路由多个 IP 相当简单,使用 PBR 轻而易举,您可以使用 iproute2 创建单独的路由表,添加规则,使通过或源自该 IP 的流量通过同一接口重新路由出去。至于通过 DNS 的多个 IP 地址,您只需要在 BIND 中设置视图,为来自 ISP1 的用户和来自 ISP2 的用户分别创建一个 ACL,然后让 BIND 服务器响应该网络块的正确 IP。
答案3
在我看来,DNS只是解决方案的一部分(也许是较小的一部分),因为它处理传入流量。响应通常比请求大得多,因此您可能应该在服务器上安装一些路由表,以便通过正确的网络适配器发送传出流量。
更新:显然,一些托管服务提供商提供“BGP 连接”,通过所有提供商的网关直接路由单个 IP 地址,可以解决这个问题。