Cisco %NAT-6-MEM_EXHAUST: NAT translation memory allocation failure — фикс
Маршрутизатор отправляет в журнал сообщение %NAT-6-MEM_EXHAUST: NAT translation memory allocation failure: could not allocate memory for translation table. Новые TCP/UDP соединения пользователей не открываются, сайты не загружаются, вывод show ip nat translations зависает из-за сотен тысяч активных записей.
1. Анализ текущего состояния таблицы трансляций NAT
show ip nat statistics
show ip nat translations count
show memory statistics | include Processor2. Агрессивная оптимизация таймаутов неактивных сессий
По умолчанию таймауты TCP (24 часа) и UDP (5 минут) приводят к исчерпанию DRAM при торрентах или сканировании:
configure terminal
ip nat translation timeout 300
ip nat translation tcp-timeout 3600
ip nat translation udp-timeout 60
ip nat translation finrst-timeout 10
ip nat translation syn-timeout 15
ip nat translation dns-timeout 10
ip nat translation icmp-timeout 10
end3. Ограничение максимального количества сессий на хост / глобально
Установите жесткие лимиты на максимальное число записей PAT (Port Address Translation):
configure terminal
ip nat translation max-entries 150000
! Лимит трансляций на один IP-адрес источника:
ip nat translation max-entries host 192.168.1.0 255.255.255.0 500
end4. Экстренная принудительная очистка зависших трансляций
clear ip nat translation *5. Расширение пула динамических публичных адресов
Если используется один Overload IP (PAT Exhaustion), добавьте дополнительный IP пул:
configure terminal
ip nat pool POOL_PUBLIC 203.0.113.10 203.0.113.15 netmask 255.255.255.248
ip nat inside source list 100 pool POOL_PUBLIC overload
end Частые вопросы (FAQ)
Сколько памяти RAM занимает одна NAT трансляция?
В среднем одна запись NAT в Cisco IOS занимает от 160 до 320 байт памяти. 500 000 активных трансляций могут потребовать более 150-200 MB непрерывной Processor RAM.
В чем опасность выполнения команды 'clear ip nat translation *'?
Команда мгновенно разрывает абсолютно все текущие активные TCP и UDP сессии пользователей, проходящие через маршрутизатор.
Что такое finrst-timeout?
Это время жизни сессии после получения завершающих TCP флагов FIN или RST. Снижение его до 10 секунд освобождает память мгновенно после закрытия соединения.
Как найти хост, забивающий всю таблицу NAT?
Выполните команду: show ip nat translations | include <порт_или_IP> либо отсортируйте через Tcl/Bash скрипт топ talkers по источнику.