Я планирую перенести виртуальную машину из одного дата-центра в другой. У виртуальной машины есть общедоступный IP-адрес, который в новом дата-центре изменится на другой общедоступный IP-адрес.
Я планирую изменить запись DNS для виртуальной машины, чтобы она отражала новый IP-адрес, но я хочу, чтобы машина оставалась доступной, пока DNS распространяет изменения.
Есть ли способ настроить какой-либо маршрут или правило iptables, чтобы любой пакет, предназначенный для моего 1-го (старого) IP-адреса, пересылался на мой 2-й (новый) IP-адрес?
Таким образом, пользователи шириной кэшированной записи DNS для 1-го IP-адреса все равно смогут получить доступ к виртуальной машине.
Через некоторое время (1 или 2 дня) я смог безопасно удалить правило маршрутизации.
Я мало что знаю о таблицах IP и еще меньше о маршрутизации. Мне не удалось гуглить даже намека на это, за исключением некоторых научных статей ...
Я считаю, что это неправильный подход к проблеме.
Проблема в том, что вы хотите поддерживать службу во время распространения DNS, однако, если у вас есть доступ к DNS, вы можете просто сократить время распространения DNS до нескольких секунд, независимо от вашего приемлемого сбоя.
Ваша A-запись для домена выглядит примерно так:
<hostname> 14400 IN A <IP Address>
Второе значение - это время (TTL), в течение которого DNS может быть кэширован в секундах. Измените это на
<hostname> 10 IN A <IP Address>
Теперь все будут получать обновления в течение 10 секунд. Конечно, на время этого изменения ваша DNS будет увеличиваться.
Итак, последовательность
Ценность "чего-то небольшого" - это любой простой, который может выдержать ваш сервис в рамках SLA.
Создайте своего рода туннельную связь между двумя виртуальными машинами - OpenVPN, GRE, всем, что плавает ваша лодка.
После этого назначьте IP-адрес старой виртуальной машины туннельному интерфейсу новой виртуальной машины и удалите этот IP-адрес из любого интерфейса, которому он назначен в настоящее время на старой виртуальной машине.
Как только это будет сделано, все, что вам нужно сделать, это добавить маршрут на старой виртуальной машине для IP-адреса, который будет перенаправлен на новую виртуальную машину на туннельном интерфейсе.
Предостережения: в зависимости от типа виртуальной машины (и, следовательно, виртуальной сетевой карты) это может быть невозможно. Кроме того, если есть какая-либо исходящая фильтрация на пути к вашей новой виртуальной машине, пакеты с исходным адресом старой виртуальной машины будут отброшены; в этом случае вам нужно будет настроить новую виртуальную машину для маршрутизации через туннельный интерфейс (и, следовательно, старую виртуальную машину), когда исходным адресом является старый адрес.
Что касается реальных команд, прочитайте справочную страницу iproute2.