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