Назад | Перейти на главную страницу

Преодоление асимметричной маршрутизации при миграции между наборами интернет-провайдеров

Мы мигрируем с одного набора адресов на другой, оба / 24, и пытаемся минимизировать время простоя во время миграции. В идеале мы должны запустить оба в течение определенного периода времени, пока отключаем старые цепи. Всего имеется 4 подключения к Интернету, каждая пара использует BGP.

Затем каждый из них направляется на Cisco ASA, который подключен к коммутатору, у которого есть несколько серверов, подключенных к этой подсети.

На диаграмме выше левая часть - это то, что существует сегодня, и я хочу добавить правую часть.

Я подключил ASA, и оба они находятся в подсети 10.20.20.0/24, с первым интерфейсом ASA как 10.20.20.1 и вторым интерфейсом ASA как 10.20.20.254.

Проблема здесь в том, что все серверы имеют 10.20.20.1 в качестве маршрута по умолчанию, и я бы очень хотел направить трафик обратно таким же образом, каким он пришел. То есть Интернет -> ASA # 2 -> сервер -> обратно на ASA №2. Как и сегодня, он, конечно, отправляет ответ обратно в ASA # 1 и не находит для него перевода.

Я ошибаюсь?

Изменить: я должен упомянуть, что Outside # 1 и Outside # 2 имеют разные общедоступные / 24 сети. Мы переходим с блока, предоставленного интернет-провайдером, на наш собственный блок.

Вот что я в итоге сделал:

#!/bin/sh
echo 200 asa1 >> /etc/iproute2/rt_tables
echo 201 asa2 >> /etc/iproute2/rt_tables
ip route add table asa1 default via 10.20.20.1 dev eth0 metric 100
ip route add table asa2 default via 10.20.20.254 dev eth0 metric 100
ip rule add prio 100 from all fwmark 1 lookup asa1
ip rule add prio 110 from all fwmark 2 lookup asa2
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
iptables -t mangle -A OUTPUT -j CONNMARK --restore-mark
iptables -t mangle -A INPUT -m mac --mac-source $(MAC_ASA1) -j MARK set-mark 1
iptables -t mangle -A INPUT -m mac --mac-source $(MAC_ASA2) -j MARK --set-mark 2
iptables -t mangle -A INPUT -j CONNMARK --save-mark

Заменить MAC_ASA1 / MAC_ASA2 с аппаратным адресом подключенного интерфейса на ASA. Это можно получить из таблицы ARP.

Вам также следует помнить об имени устройства Ethernet, особенно если вы используете systemd с именами интерфейсов в новом стиле.