Мне сказали, что в Китае есть два основных (только?) Интернет-провайдера - China Telecom (CT) и China Unicom (CU) - и что трафик, маршрутизируемый между ними, очень медленный, почти такой же плохой, как трафик, который должен пересекать Великий Брандмауэр. Чтобы обойти эту проблему, вы (как оператор веб-сайта в Китае) должны получить два внешних IP-адреса для своего веб-сайта, по одному для каждого провайдера.
Не стесняйтесь комментировать, действительно ли это необходимо, но если это так, как можно реализовать правильную маршрутизацию для этого? Поместите оба IP-адреса в DNS для одного и того же имени хоста и позвольте клиенту каким-то образом выяснить, какой из них лучше? Отдельные имена хостов?
Я живу в Китае и могу подтвердить то, что вы говорите.
Большинство крупных китайских интернет-порталов, таких как qq.com или baidu.com, действительно имеют подключения к обоим крупным интернет-провайдерам, а затем направляют ваш трафик через один или другой в зависимости от вашего интернет-соединения.
Я не знаю, как они это делают, но я вижу, что в зависимости от того, где я нахожусь, 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. Но я также не знаю подробностей о том, как это сделать.
Маршрутизация нескольких IP-адресов довольно проста, с PBR это очень просто, вы создаете отдельные таблицы маршрутизации с помощью iproute2, добавляете правила, по которым трафик, проходящий или исходящий с этого IP-адреса, перенаправляется через тот же интерфейс. Что касается нескольких IP-адресов через DNS, вам просто нужно настроить представления в BIND, сделав ACL для пользователей из ISP1 и один для пользователей из ISP2, а затем заставить сервер BIND ответить с правильным IP-адресом для этого сетевого блока.
Мне кажется, что DNS - это только часть (и, возможно, меньшая часть) решения, поскольку он касается входящий трафик. Ответы обычно намного больше, чем запросы, поэтому вам, вероятно, следует установить на ваших серверах некоторые таблицы маршрутизации, чтобы также отправлять исходящий трафик через правильный сетевой адаптер.
Обновление: по всей видимости, некоторые хостинг-провайдеры предлагают «соединения BGP», которые избавляют от этой проблемы, путем маршрутизации одного IP-адреса напрямую через шлюзы через всех провайдеров.