Здравствуйте. Есть задача: резервирование Интернет-каналов.
Описание: есть 3 Интернет-канала.
xxx.xxx.xxx.1 - шлюз 1-го провайдера
yyy.yyy.yyy.1 - шлюз 2-го провайдера
yyy.yyy.yyy.2 - шлюз 3-го провайдера
Настраиваю IP SLA Object Tracking:
ip sla 1
icmp-echo 1.1.1.1 source-ip xxx.xxx.xxx.2
timeout 1000
frequency 3
ip sla schedule 1 life forever start-time now
ip sla 2
icmp-echo 1.1.1.1 source-ip yyy.yyy.yyy.12
timeout 1000
frequency 3
ip sla schedule 2 life forever start-time now
ip sla 3
icmp-echo 1.1.1.1 source-ip yyy.yyy.yyy.13
timeout 1000
frequency 3
ip sla schedule 3 life forever start-time now
!
track 1 rtr 1 reachability
!
track 2 rtr 2 reachability
!
track 3 rtr 3 reachability
!
interface FastEthernet0/0
ip address xxx.xxx.xxx.2 255.255.255.248
ip nat outside
!
interface FastEthernet0/1
ip address yyy.yyy.yyy.12 255.255.255.0 secondary
ip address yyy.yyy.yyy.13 255.255.255.0 secondary
ip address yyy.yyy.yyy.10 255.255.255.0
ip nat outside
!
interface FastEthernet0/1
ip address aaa.bbb.ccc.ddd 255.255.255.0
ip nat inside
!
ip local policy route-map GW_SLA
!
ip access-list standard SLA_1
permit xxx.xxx.xxx.2
ip access-list standard SLA_2
permit yyy.yyy.yyy.12
ip access-list standard SLA_3
permit yyy.yyy.yyy.13
!
route-map GW_SLA permit 10
match ip address SLA_1
set ip next-hop xxx.xxx.xxx.1
!
route-map GW_SLA permit 20
match ip address SLA_2
set ip next-hop yyy.yyy.yyy.1
!
route-map GW_SLA permit 30
match ip address SLA_3
set ip next-hop yyy.yyy.yyy.2
Все нормально, все работает. Каналы мониторятся пингами на 1.1.1.1 (выбранный адрес в Интернет), состояние объектов анализируется.
Далее, есть 3 ACL в которых находятся списки хостов, которые должны ходить в нормальном режиме по своему каналу, и в аварийном переключатся на живые. Те хосты, которых ни в одном списке нет - выхода в Интернет не имеют.
!
ip access-list extended CUST1
permit ip host yyy.yyy.yyy.101 any
ip access-list extended CUST2
permit ip host yyy.yyy.yyy.102 any
ip access-list extended CUST3
permit ip host yyy.yyy.yyy.103 any
!
route-map GW_SELECT permit 10
match ip address CUST1
set ip next-hop verify-availability xxx.xxx.xxx.1 10 track 1
set ip next-hop verify-availability yyy.yyy.yyy.1 20 track 2
set ip next-hop verify-availability yyy.yyy.yyy.2 30 track 3
!
route-map GW_SELECT permit 20
match ip address CUST2
set ip next-hop verify-availability yyy.yyy.yyy.1 10 track 2
set ip next-hop verify-availability yyy.yyy.yyy.2 20 track 3
set ip next-hop verify-availability xxx.xxx.xxx.1 30 track 1
!
route-map GW_SELECT permit 30
match ip address CUST3
set ip next-hop verify-availability yyy.yyy.yyy.2 10 track 3
set ip next-hop verify-availability yyy.yyy.yyy.1 20 track 2
set ip next-hop verify-availability xxx.xxx.xxx.1 30 track 1
!
route-map GW_SELECT permit 40
set default interface Null0
Все нормально, все работает. При падении какого канала все маршрутизируется в следующий по списку next-hop если он живой.
Теперь собственно проблема: все провадеры дают блок из 4 белых адресов . Хостов внутри сети очень много. Соответсветнно нужен NAT на внешних интерфейсах fa0/0 и fa0/1. Попытки включить трансляцию приводят к отказу IP SLA (либо sla1 либо sla2-3 перестают корректно определять состояния) в результате того, что пакеты с source sla1 или из блока допустим 1-го провайдера начинают идти в канал 2-го и наоборот. Точной закономерности не устанавливал. Т.е. необходима работа NAT на всех каналах + резервирование с использованием тех же IP SLA.
Трансляцию пробовал включать по разному, в том числе и так:
ip nat inside source route-map ISP_MAIN interface FastEthernet0/0 overload
ip nat inside source route-map ISP_EXTRA interface FastEthernet0/1 overload
!
route-map ISP_EXTRA permit 10
match ip address CUST1 CUST2 CUST3
!
route-map ISP_EXTRA permit 10
match ip address CUST1 CUST2 CUST3
!
Понятно, что этот вариант это совсем не правильно. Как правильно?
Заранее спасибо за ответы.