Расшифровка кодов ошибок ядра Windows с 0xC00002C9 по 0xC00002D2
Описание ошибок NTSTATUS
STATUS_REG_NAT_CONSUMPTION
Код ошибки: 0xC00002C9
{ИСКЛЮЧЕНИЕ}
Регистрация ошибок потребления NaT.
Значение NaT потребляется на не наблюдающую инструкцию.
STATUS_TRANSPORT_FULL
Код ошибки: 0xC00002CA
Элемент транспортера сменщика носителей содержит носитель, который вызвал ошибку этой операции.
STATUS_DS_SAM_INIT_FAILURE
Код ошибки: 0xC00002CB
Ошибка инициализации диспетчера учетных записей безопасности:
hs
Состояние ошибки: 0xx.
Завершите работу системы и перезагрузитесь в режиме восстановления служб каталогов, подробная информация содержится в журнале событий.
STATUS_ONLY_IF_CONNECTED
Код ошибки: 0xC00002CC
Эта операция поддерживается только при наличии подключения к серверу.
STATUS_DS_SENSITIVE_GROUP_VIOLATION
Код ошибки: 0xC00002CD
Только администратор может изменить список членов группы администраторов.
STATUS_PNP_RESTART_ENUMERATION
Код ошибки: 0xC00002CE
Устройство было удалено, поэтому перечисление необходимо выполнить заново.
STATUS_JOURNAL_ENTRY_DELETED
Код ошибки: 0xC00002CF
Из журнала удалена запись.
STATUS_DS_CANT_MOD_PRIMARYGROUPID
Код ошибки: 0xC00002D0
Невозможно изменить основной идентификатор группы для учетной записи контроллера домена.
STATUS_SYSTEM_IMAGE_BAD_SIGNATURE
Код ошибки: 0xC00002D1
(Неустранимая системная ошибка)
Образ системы s не подписан должным образом. Этот файл был заменен подписанным файлом. Система завершает работу.
STATUS_PNP_REBOOT_REQUIRED
Код ошибки: 0xC00002D2
Устройство не будет запущено без перезагрузки.
Навигация
- Предыдущая страница 0xC00002B8 — 0xC00002C8;
- Следующая страница 0xC00002D3 — 0xC00002DC;
- В начало.
Copyright © 2016- Программирование Native API и расширенные возможности NTFS
По вопросам сотрудничества и другим вопросам по работе сайта пишите на cleogroup[собака]yandex.ru
Время на прочтение8 мин
Количество просмотров22K
Для того чтобы наши устройства из частной сети могли выходить в Интернет, им нужен общедоступный (публичный) IP-адрес. При этом внутри нашей собственной локальной сети мы можем спокойно использовать частные IP-адреса. В этой ситуации на помощь приходит Network Address Translation (NAT) (преобразование сетевых адресов) — технология, которая позволяет множеству устройств в локальной сети получать доступ к Интернету через один общий публичный IP-адрес.
Идея NAT заключается в том, чтобы осуществлять перевод частного локального IP-адреса в общедоступный глобальный IP-адрес и наоборот. Это необходимо для обеспечения доступа к Интернету локальным узлам, использующим частные адреса.
Также в данном процессе выполняется преобразование номеров портов. В контексте сетевых протоколов, таких как TCP и UDP, порт — это числовой идентификатор, который определяет, с каким приложением или службой должен быть ассоциирован определенный сетевой пакет. То есть номер порта устройства внутри локальной сети маскируется (заменяется) другим номером порта в пакете данных, который будет направлен к месту назначения. Таким образом, даже если несколько устройств в локальной сети используют один и тот же общедоступный IP-адрес, перевод портов позволяет отличать трафик от каждого устройства.
После выполнения перевода IP-адресов и портов, NAT создает соответствующие записи в своей таблице. Эта таблица содержит информацию о соответствии между локальными и глобальными адресами, а также номерами портов.
В основном, NAT реализуется на маршрутизаторах или брандмауэрах, которые являются центральными узлами в сети. Они отслеживают и управляют этими переводами адресов, обеспечивая тем самым удобство использования частных адресов внутри сети, сохраняя при этом единственный общедоступный адрес для взаимодействия с внешним миром.
Принцип работы Network Address Translation (NAT)
Как правило, граничный маршрутизатор настроен для NAT, то есть маршрутизатор, который имеет один интерфейс в локальной (внутренней, inside) сети и один интерфейс в глобальной (внешней, outside) сети. Когда пакет проходит за пределы локальной (inside) сети, NAT преобразует локальный (частный, private) IP-адрес в глобальный (публичный, public) IP-адрес. Когда пакет входит в локальную сеть, глобальный (public) IP-адрес преобразуется в локальный (private) IP-адрес. Граничный маршрутизатор выступает в роли шлюза между внутренней корпоративной сетью и внешней сетью, например, Интернетом.
Если у NAT заканчиваются адреса, то есть в пуле не осталось ни одного адреса, то пакеты будут отброшены, и отправителю будет отправлен пакет Internet Control Message Protocol (ICMP) (протокола управления сообщениями в Интернете) с уведомлением о недоступности хоста.
Зачем маскировать номера портов?
Предположим, в сети подключены два хоста A и B. Затем оба они использовали один и тот же номер порта в своих запросах к внешнему узлу или ресурсу в Интернете, например, порт 1000. Поскольку номера портов уникально идентифицируют процессы или соединения, использование одного и того же порта A и B может создать конфликт при последующей обработке ответов от удаленного ресурса.
Когда NAT видит такие запросы с одинаковыми исходными номерами портов от разных хостов, то он сталкивается с проблемой отслеживания, конкретно какому из них принадлежит каждый ответ от удаленного сервера. Это может вызвать путаницу, поскольку NAT использует данные исходные номера портов для определения, куда направлять входящие пакеты внутри локальной сети.
Для решения проблемы, NAT маскирует (изменяет) исходные номера портов вместе с IP-адресами при выполнении трансляции, чтобы гарантировать уникальность идентификаторов каждого хоста в локальной сети. Это также позволяет NAT создавать соответствующие записи в своей таблице, чтобы правильно направлять ответы на определенный хост внутри локальной сети.
Внутренние и внешние адреса NAT
Внутренние адреса — это адреса, которые должны быть преобразованы. Внутренние адреса присваиваются устройствам, находящимся внутри границ локальной сети, и они не уникальны в глобальном масштабе. Внешние адреса находятся за пределами локальной сети и не управляются самой организацией. Внутренние адреса (Inside) должны быть переведены во внешние адреса (Outside), чтобы устройства в локальной сети могли взаимодействовать с внешними ресурсами, такими как веб-сайты в Интернете. Процесс перевода адресов (NAT) позволяет использовать набор приватных внутренних адресов для нескольких устройств в локальной сети и предоставлять им доступ в Интернет через один или несколько общедоступных внешних адресов.
-
Внутренний локальный адрес — IP-адрес, назначенный хосту во внутренней (локальной) сети. Обычно это приватный IP-адрес, который не является общедоступным в Интернете. Например, адрес вашего компьютера в домашней сети.
-
Внутренний глобальный адрес — IP-адрес, который представляет один или несколько внутренних локальных IP-адресов внешнему миру (в глобальной сети). Когда внутренний хост из локальной сети отправляет запрос в Интернет, его внутренний локальный адрес заменяется на внутренний глобальный адрес, который виден снаружи. Внутренний глобальный адрес является тем адресом, который виден для внешних устройств и сетей. Внутренний глобальный адрес служит маскировкой внутренних локальных адресов, обеспечивая взаимодействие устройств внутри локальной сети с внешней сетью, сохраняя при этом приватность внутренних адресов от внешнего воздействия.
-
Внешний локальный адрес — видимый из внешней сети адрес получателя. Он становится видимым для внешних сетей после прохождения процесса трансляции адресов при использовании NAT. Этот адрес служит для корректного маршрутизирования ответов от внешнего ресурса обратно в локальную сеть. Когда устройство в локальной сети отправляет запрос в Интернет, NAT изменяет его локальный IP-адрес на временный внешний локальный адрес. Этот временный адрес используется внутри сети и является адресом, к которому направляется ответ от внешнего ресурса после прохождения NAT.
-
Внешний глобальный адрес — IP-адрес внешнего хоста, видимый из внешней сети. Этот адрес представляет вашу локальную сеть в глобальной сети (например, Интернете) и используется для идентификации вашей сети во внешнем мире. Внешний глобальный адрес — это адрес маршрутизатора или шлюза, соединенного с Интернетом. Когда устройство из вашей локальной сети отправляет запрос в Интернет, маршрутизатор использует свой внешний глобальный адрес в качестве отправителя запроса. Этот адрес остается постоянным для внешних ресурсов и позволяет им отправлять ответы обратно в вашу локальную сеть. Часто совпадает с локальным внешним адресом.
Типы трансляции сетевых адресов (NAT)
Есть 3 способа настройки NAT:
-
Статический NAT — В этом случае один незарегистрированный (частный, Private) IP-адрес мапирован с официально зарегистрированным (публичным, Public) IP-адресом, т.е. происходит прямое отображение (один к одному) между локальным и глобальным адресами. Обычно используется для веб-хостинга. Однако в организациях статический NAT не практичен, поскольку требует покупки публичных IP-адресов для каждого устройства, нуждающегося в доступе в Интернет.
Допустим, если есть 3000 устройств, которым нужен доступ в Интернет, организации придется купить 3000 публичных адресов, что очень дорого.
-
Динамический NAT (Dynamic NAT) — несколько локальных устройств используют общий пул зарегистрированных глобальных (Public) IP-адресов для доступа в Интернет. Если в пуле нет свободного IP-адреса, то пакет будет отброшен, так как только фиксированное количество частных IP-адресов может быть преобразовано в публичные.
Допустим, если в пуле содержится 2 публичных IP-адреса, то в данный момент времени могут быть транслированы только 2 частных IP-адреса. Если третий частный IP-адрес хочет получить доступ в Интернет, то пакет будет отброшен, так как доступен только ограниченный пул общедоступных IP-адресов. Поэтому множество частных IP-адресов сопоставляется с пулом общедоступных IP-адресов. Применение Network Address Translation (NAT) имеет смысл, когда количество пользователей, желающих выходить в Интернет, фиксировано. Однако такой подход становится затратным, поскольку организации приходится приобретать большое количество глобальных IP-адресов для формирования пула.
Используется в случаях, когда необходимо обеспечить доступ в Интернет для нескольких устройств, но не требуется прямого однозначного соответствия локальных и глобальных адресов.
-
Трансляция с использованием портов PAT (Port Address Translation) — этот способ также известен как перегрузка (overload) NAT. PAT является разновидностью динамического NAT, где несколько устройств в локальной сети применяют один зарегистрированный IP-адрес, а номера портов используются для идентификации конкретных соединений. Данный способ используется наиболее часто, поскольку он экономически эффективен, так как тысячи пользователей могут быть подключены к Интернету, используя только один реальный глобальный (public) IP-адрес.
Преимущества Network Address Translation (NAT)
-
Экономия официально зарегистрированных IP-адресов.
NAT позволяет экономить официально зарегистрированные IP-адреса, которые являются ограниченным и важным ресурсом. Вместо того чтобы каждому устройству в локальной сети присваивать уникальный общедоступный IP-адрес, NAT использует набор частных IP-адресов внутри сети, а затем выполняет трансляцию этих адресов в один или несколько публичных IP-адресов при выходе в Интернет.
-
Обеспечение конфиденциальности.
NAT позволяет обеспечить конфиденциальность, так как IP-адрес устройства, отправляющего и принимающего трафик, скрывается. Внутренние устройства в локальной сети используют частные IP-адреса, и при взаимодействии с внешними ресурсами их IP-адреса транслируются в публичный адрес.
-
Устраняет перенумерацию адресов в процессе развития сети.
NAT избавляет от необходимости перенумерации адресов при изменении сетевой архитектуры или добавлении новых устройств в сеть. Так как внутренние устройства могут использовать частные IP-адреса, изменения внутри локальной сети не требуют изменения глобальных IP-адресов, используемых для взаимодействия с внешними сетями.
Недостатки Network Address Translation (NAT)
-
Задержки в пути из-за преобразования.
Процесс перевода IP-адресов в рамках NAT может вносить дополнительные задержки при передаче данных. Так происходит из-за того, что каждый сетевой пакет, покидающий локальную сеть и направляющийся в Интернет, должен пройти процесс перевода адресов на граничном маршрутизаторе. Это дополнительное действие может увеличивать время передачи данных.
-
Некоторые приложения не функционируют при включенном NAT.
Например, приложения, которые применяют передачу данных с использованием определенных портов или требуют прямого взаимодействия с уникальными IP-адресами, могут столкнуться с проблемами при работе через сеть с включенным NAT.
-
Сложности с туннелированием протоколов, таких как IPsec.
Протоколы туннелирования, такие как IPsec (IP Security), могут испытывать сложности при работе с сетями, использующими NAT. Причина в том, что NAT изменяет заголовки пакетов, а это может привести к проблемам с корректной передачей зашифрованных данных.
-
Манипуляции с портами на уровне маршрутизатора.
Маршрутизатор, будучи устройством сетевого уровня, не должен изменять номера портов (транспортный уровень), но ему приходится это делать из-за NAT, он вынужден манипулировать портами для поддержки перевода адресов. Это может создавать сложности при использовании приложений, которые полагаются на конкретные порты для правильной работы.
В целом, хотя NAT предоставляет ряд преимуществ, включая экономию IP-адресов, обеспечение конфиденциальности и упрощение изменений в сети, он также сопровождается рядом недостатков, которые могут повлиять на производительность и функциональность определенных приложений и протоколов.
В завершение приглашаем всех желающих на открытое занятие сегодня вечером, на котором поговорим об использовании /31 префикса в IPv4. Записаться на урок можно на странице онлайн-курса «Network Engineer».
Здравствуйте форумчане. Я сразу говорю, что я только начинающий настройщик микротиков, всегда настраивал обычные домашние роутеры. В корпорациях не работал, только маленькие офисы, где не требуется особо мощных устройств, но я стремлюсь и пытаюсь познавать, так что сильно не ругайтесь. В общем ситуация такая. У меня на компе настроено подключение к VPN-сервер IKEv2/IPsec, который находится в другом городе, сделано для удаленной помощи хорошим людям. Сервер настроен на Keenetic Extra (KN-1710). У меня ранее стоял роутер Asus RT-AX56U и через него все отлично подключалось, клиента настроен на Windows 10. Но вот недавно вместо Asus поставил Mikrotik hEX S. Потому что асус начал барахлить, ну и интересно было разобраться с микротом.Получилось настроить выход в интернет, настроить проброс портов, но вот с VPN не могу разобраться, я понимаю не хватает знаний сетевых технологий, с NAT вообще не понимаю, как и что. Проброс портов настраивал по инструкциям в инете. Но вот по поводу подключения пользователя через миктротик ничего не найти блин. По логам на кинеетике увидел такую картину(скрин прилагаю). В конце лога пишет «06[IKE] remote host is behind NAT «, получается что мой хост находится за NAT, значит проблема в настройками NAT у меня в микротике, я правильно понимаю? Помогите пожалуйста с настройками, очень все это интересно, но вот «тямы» не хватает, к сожалению
Изображение:
В офисе работает, что нужно, в интернет люди ходят и им более не надо. Этот ВПН это мое личное, подключаюсь и удаленно помогаю хорошим людям, находятся очень далеко. Из дома подключаюсь без проблем, но вот когда на работе, не могу подключится. Вот ковыряю интернет.Решил обратиться на форум, может найдутся добрые люди и на форуме подскажут, как настроить или хотя бы направят меня в нужном направлении. Может просто в теории, что не хватает в настройках маршрутизатора. Я немного не могу понять, что такое NAT, по определению так то вроде понятно, а что и как надо и кому подменять при соединении, не врубаюсь что-то не никак , помогите пожалуйста или направьте меня в нужном направлении
В этой серии статей мы рассмотрим поиск и устранение неисправностей NAT (трансляции сетевых адресов) / PAT (трансляции адресов портов), DHCP и FHRP (протоколы избыточности при первом переходе).
NAT/PAT может быть проблемным, и не потому, что настройка несколько сложна (хотя и в этом тоже могут быть проблемы). Но в основном потому, что мы можем столкнуться с проблемами маршрутизации, так как мы периодически меняем IP-адреса. Во второй части этой серии мы рассмотрим наиболее распространенные проблемы DHCP и, наконец, закончим серию статей некоторыми проблемами FHRP.
Урок 1
В этом сценарии у нас есть 3 устройства. Маршрутизатор с левой стороны называется «Хост», и он представляет компьютер из нашей локальной сети. Предполагается, что устройство с правой стороны — это какой-то веб-сервер — это то, что мы пытаемся найти в Интернете. В середине мы видим наш маршрутизатор, который настроен для NAT и/или PAT.
Пользователи из нашей локальной сети жалуются на то, что они ничего не могут найти в Интернете. Они подтвердили, что их IP-адрес и шлюз по умолчанию в порядке. Давайте изучим маршрутизатор NAT:
Хорошая идея, чтобы проверить, может ли маршрутизатор NAT достичь веб-сервера, попробовав простой пинг. Если это не работает, вы, по крайней мере, знаете, что у вас есть проблемы с маршрутизацией или, что веб-сервер не работает (или, возможно, просто блокирует ICMP-трафик).
Поскольку это веб-сервер, лучше попробовать подключиться к TCP-порту 80. Вы видите, что это работает, так что маршрутизация между маршрутизатором NAT и веб-сервером + подключение к TCP-порту не является проблемой.
Мы можем использовать команду show ip nat translations
, чтобы увидеть, происходит ли что-нибудь. Мы видим, что NAT-маршрутизатор что-то транслирует, но если вы посмотрите внимательно, то увидите, что это выглядит не совсем правильно. Внешние локальные и глобальные IP-адреса ссылаются ко внутреннему IP-адресу. Давайте посмотрим на конфигурацию …
show ip nat statistics
— хорошая команда для проверки вашей конфигурации. Вы можете видеть, что внутренние и внешние интерфейсы поменялись местами. FastEthernet 0/0 должен быть inside, а FastEthernet 1/0 должен быть outside.
NAT(config)#interface fastEthernet 0/0 NAT(config-if)#ip nat inside NAT(config)#interface fastEthernet 1/0 NAT(config-if)#ip nat outside
Введем команды, которые позволяют исправить настройки, чтобы у нас были правильные внутренние и внешние интерфейсы.
Трафик с хоста на веб-сервер теперь работает!
Вот как должна выглядеть таблица трансляции NAT. Внутренний локальный IP-адрес — наш внутренний хост. Внутренний глобальный IP-адрес — это то, что мы настроили на внешней стороне нашего маршрутизатора NAT (FastEthernet 1/0). Внешний локальный и глобальный IP-адрес — наш веб-сервер … проблема решена!
Итог урока: убедитесь, что у вас имеются правильные внутренние и внешние интерфейсы.
Урок 2
Та же топология, другая проблема! Опять пользователи нашей локальной сети жалуются, что они не могут связаться с веб-сервером. Давайте проверим наш маршрутизатор NAT:
NAT#show ip nat translations
Сначала мы проверим, транслирует ли маршрутизатор что-либо. Как видите, тихо ничего не происходит!
Мы убедились, что внутренний и внешний интерфейсы были настроены правильно. Однако никаких трансляций не происходит. Внутренний источник был определен с помощью списка доступа 1. Давайте поближе рассмотрим этот ACL:
Ааа, смотрите … кажется, кто-то испортил ACL! Устраним эту неполадку:
NAT(config)#no access-list 1 NAT(config)#access-list 1 permit 192.168.12.0 0.0.0.255
Мы создадим ACL так, чтобы он соответствовал 192.168.12.0/24.
Теперь мы можем связаться с веб-сервером с нашего хоста.
Мы видим Hits, если просмотреть NAT statistics.
И я вижу трансляцию … проблема решена!
Итог урока: убедитесь, что вы используете правильный список доступа, соответствующий вашим внутренним хостам.
Теперь почитатей продожение статьи про устранение неисправностей с DHCP.
Задача: имея внешний пул IP-адресов (например, два префикса /24), организовать трансляцию приватных адресов на имеющиеся реальные адреса. В этой статье приватными адресами будут 100.64.0.0/16, а реальными 198.51.100.0/24 и 203.0.113.0/24.
При написании этой заметки использовался виртуальный маршрутизатор CSR1000V (IOS-XE 3.13.01.S), программный эквивалент оборудования Cisco ASR 1000 Series. Минимальная конфигурация для реализации этой схемы:
interface GigabitEthernet1 ip address 192.0.2.1 255.255.255.252 ip nat outside ! interface GigabitEthernet2 ip address 100.64.0.1 255.255.255.252 ip nat inside ! ip route 0.0.0.0 0.0.0.0 192.0.2.2 ip route 100.64.0.0 255.255.0.0 100.64.0.2 ip route 198.51.100.0 255.255.255.0 Null0 ip route 203.0.113.0 255.255.255.0 Null0 ! ip access-list extended nat-cust permit ip 100.64.0.0 0.0.255.255 any ! ip nat translation syn-timeout 10000 //исключительно для удобства тестирования ip nat translation max-entries 512000 //лимит по умолчанию всего 128к ip nat pool nat-pool prefix-length 24 address 198.51.100.0 198.51.100.255 address 203.0.113.0 203.0.113.255 ip nat inside source list nat-cust pool nat-pool overload //задаёт какие серые адреса в какие белые NAT-ить
Далее возникает вопрос, каким образом будут распределяться реальные адреса, будет ли постоянна связки customer source ip и external source ip, каким образом логировать трансляции и сопутствующие вопросы.
Если внешний IP для одного и того же серого адреса будет “плавающим”, то это может привести к проблемам с некоторыми сервисами/приложениями, которые привязывают IP к “сессии”. Проверим работу такой конфигурации NAT с помощью 4101 tcp syn-пакета, имеющих 4 различных(случайных) ip.source и случайный ip.destination, отправив этот трафик в интерфейс Gi2(от абонента).
for x in range(0, 4100): ip = IP() ip.src = "100.64.%i.%i" % (random.randint(1,4),0) ip.dst = "200.%i.%i.%i" % (random.randint(0,255),random.randint(0,255),random.randint(0,255)) tcp = TCP() tcp.sport = random.randint(1,65535) tcp.dport = random.randint(1,65535) tcp.flags = 'S' send(ip/tcp, verbose=0) sys.stdout.write(".") sys.stdout.flush()
Запуск: “cat synflood.py | scapy”. Смотрим результат:
nat#show ip nat translations Pro Inside global Inside local Outside local Outside global ... tcp 203.0.113.5:835 100.64.4.0:6571 200.41.6.219:40643 200.41.6.219:40643 tcp 203.0.113.6:995 100.64.4.0:26565 200.161.156.237:25669 200.161.156.237:25669 tcp 203.0.113.0:652 100.64.2.0:4714 200.79.143.230:28084 200.79.143.230:28084 ...
Отсюда видно, что в одной tcp-сессии ip.src 100.64.4.0 транслировался в 203.0.113.5, а в другой в 203.0.113.6. Это уже не очень хорошо. Теперь попробуем понять как внешний IP будет зависеть от IP адреса назначения(ip.dst). Сгенерируем 10001 tcp syn-пакет, у которых будут 4 различных(случайных) ip.src и примерно 2К различных(случайных) ip.dst. Для этого нужно исправить скрипт следующим образом:
for x in range(0, 10000): ... ip.dst = "200.%i.%i.%i" % (0,random.randint(0,7),random.randint(0,255)) ...
Проверив всего несколько ip.dst, находится пример, подтверждающий, что внешний адрес не является детерминированной функцией от внутреннего ip.src и ip.dst:
nat#show ip nat trans | i 200.0.0.142 tcp 203.0.113.1:961 100.64.4.0:27343 200.0.0.142:59773 200.0.0.142:59773 tcp 203.0.113.2:722 100.64.3.0:39613 200.0.0.142:36955 200.0.0.142:36955 tcp 203.0.113.13:830 100.64.4.0:39848 200.0.0.142:58626 200.0.0.142:58626 tcp 203.0.113.12:1026 100.64.3.0:32046 200.0.0.142:51226 200.0.0.142:51226 tcp 203.0.113.9:552 100.64.2.0:20313 200.0.0.142:15225 200.0.0.142:15225
(см. на пары строк (2,4) и (3,5)).
И наконец, проверим сценарий, когда tcp.dport фиксированный, например равен 80. Проверив несколько ip.dst опять же находится подтверждение тому, что внешний ip для одного и того же абонента, обращающегося к одному и тому же ip.dst:tcp.dport, является “плавающим”:
nat#show ip nat trans | i 200.0.6.214 tcp 203.0.113.4:793 100.64.2.0:21889 200.0.6.214:80 200.0.6.214:80 tcp 203.0.113.2:645 100.64.3.0:7375 200.0.6.214:80 200.0.6.214:80 tcp 203.0.113.13:698 100.64.4.0:8859 200.0.6.214:80 200.0.6.214:80 tcp 203.0.113.2:778 100.64.4.0:46802 200.0.6.214:80 200.0.6.214:80 tcp 203.0.113.1:731 100.64.2.0:39387 200.0.6.214:80 200.0.6.214:80
Здесь видно, что 100.64.2.0 транслировался в 203.0.113.4 и 203.0.113.1 (строки 2 и 6), а 100.64.4.0 в 203.0.113.13 и 203.0.113.2 (строки 4 и 5). Многие онлайн банки такому посетителю точно рады не будут и тут можно расчитывать лишь на http(s) keep-alive.
Таким образом, many-to-many NAT с настройками как в этом примере можно смело забраковать. В качестве workaround-а можно явно задавать маппинги серая сеть->белый ip, например 100.64.0.0/24->203.0.113.0, 100.65.0.0/24->203.0.113.1, но такой подход не очень удобен для оператора, т.к. требуется оценка распределения(заполнения) серых ip-адресов и коррекция маппингов при её изменении(если требуется более-менее равномерное распределение абонентов по IP-адресам). Для предприятий же такая явная схема распределения внешних IP-адресов, чаще всего, подходит.
Почему же нельзя всех абонентов занатить в 1 внешний IP? В самом деле, есть одно фундаментальное ограничение, на один и тот же ip.dst:tcp.dport может быть не более 65К tcp-сессий, т.е. если у вас 65К абонентов онлайн и все они одновременно полезли на какой-нибудь сайт (у которого всего 1 IP-адрес у DNS-имени), то этот ресурс исчерпается. Но куда быстрее вы столкнётесь с другой неприятностью – капчей (картинкой из букв) у поисковых систем и некоторых других ресурсов. Тут даже не нужно иметь 65К абонентов онлайн, даже 500 абонентов за одним IP могут добиться капчи, а могут и не добиться, зависит от их активности и наличия вирусов на компьютерах, делающих поисковые запросы. Именно по этой причине задача NAT many-to-many является актуальной в ISP.
PAP (Paired-Address-Pooling)
Начиная с IOS-XE 3.9S появилась возможность связывания inside local и inside global адресов (т.е. серого и реального адресов), как бы решающая проблему “плавающего” внешнего адреса абонента. Механизм работает следующим образом: при создании первой трансляции от абонента, происходит привязка внутреннего адреса к внешнему и эта привязка действует до тех пор, пока есть хотя бы одна запись в таблице трансляций, относящася к этому абоненту. Перефразировать это можно следующим образом, “пока есть активность от абонента, его внешний ip-адрес остаётся постоянным”, а дальше всё упирается в сконфигурированные таймауты, позволяющие делать абоненту паузы между потреблением трафика и при этом не меняя внешней IP абоненту. Команда для включения этого функционала:
ip nat settings pap
После того как не останется ни одной трансляции, относящейся к рассматриваемому абоненту, внешний IP может изменится. Кроме очевидных таймаутов (tcp, tcp-syn, dns и т.п.) есть один интересный таймаут за счёт которого поддерживается связывание внутреннего и внешнего адреса, а именно finrst-timeout(“ip nat translation finrst-timeout”), который сохраняет трансляцию в течение заданного времени, хотя tcp-соединение уже завершено или сброшено (по умолчанию равен 60 секундам). Такие трансляции выглядят следующим образом:
#show ip nat translations verbose Pro Inside global Inside local Outside local Outside global tcp 203.0.113.11:1024 100.64.0.2:56767 192.0.2.2:5001 192.0.2.2:5001 create: 11/04/14 15:00:06, use: 11/04/14 15:00:48, timeout: 00:00:59 Map-Id(In): 1 Flags: timing-out Appl type: none Mac-Address: 0000.0000.0000 Input-IDB: GigabitEthernet2 entry-id: 0xe89bef50, use_count:1
Кроме связывания адресов, PAP даёт возможность (от которой нельзя отказаться) ограничения количества внутренних адресов на один внешний (по умолчанию этот лимит равен 120). Конфигурируется с помощью команды “ip nat settings pap limit LIMIT”.
Логирование трансляций с помощью syslog
Это наиболее простой способ, но далеко не самый эффективный с точки зрения потребления ресурсов самого NAT-устройства и syslog-сервера, который собирает эти логи. В первом приближении настраивается так:
no logging console ip nat log translations syslog logging host 192.0.2.2
При этом логи будут попадать на сервер 192.0.2.2 и локальный log-buffer. loghost-сообщения выглядят следующим образом:
192.0.2.1.50425 > 192.0.2.2.514: [udp sum ok] SYSLOG, length: 210 Facility local7 (23), Severity info (6) Msg: 253: *Nov 4 15:26:06.187: %IOSXE-6-PLATFORM: F0: cpp_cp: QFP:0.0 Thread:000 TS:00000077488544760730 %NAT-6-LOG_TRANSLATION: Deleted Translation ICMP 100.64.0.2:4761 203.0.113.11:1 1.1.1.1:4761 1.1.1.1:1 0 192.0.2.1.50425 > 192.0.2.2.514: [udp sum ok] SYSLOG, length: 210 Facility local7 (23), Severity info (6) Msg: 254: *Nov 4 15:26:06.414: %IOSXE-6-PLATFORM: F0: cpp_cp: QFP:0.0 Thread:000 TS:00000077488775891403 %NAT-6-LOG_TRANSLATION: Created Translation ICMP 100.64.0.2:4761 203.0.113.11:1 1.1.1.1:4761 1.1.1.1:1 0
Логирование трансляций с помощью netflow v9
Это значительно более эффективный способ логирования по сравнению с классическим syslog за счёт того, что используется бинарный формат сообщения, а также в одном udp-пакете помещается сразу несколько записей о трансляциях. Настройка:
ip nat log translations flow-export v9 udp destination 192.0.2.2 10000
После чего на 192.0.2.2:10000 будет отправляться информация о трансляциях. Шаблон netflow v9 отправляется периодически. Если будете работать с wireshark, то нужно дождаться пока будет отправлен шаблон, чтобы wireshark понял как именно интерпретировать информацию о flow. Ниже представлены два скриншоты flow-потоков из wireshark (1ый с созданием трансляций(nat event: 1), 2ой с удалением(nat event: 2))
Таймауты и лимиты
Cisco ASR1k/CSR1000V позволяют конфигуририровать таймауты трансляций и различные ограничения по утилизации таблицы трансляций. Особых разъяснений здесь не требуется, достаточно вызвать подсказку “ip nat translation ?” и “ip nat translation max-entries ?”. Посмотреть текущие таймауты можно командой “show platform hardware qfp active feature nat datapath time”.
CGN NAT44
Зачем нужен режим CGN? В случае с ASR1k, это даёт в 2 раза больше трансляций, например для ESP40 в обычном режиме (описанном выше) имеем 2М трансляций, а в CGN mode 4М трансляций(архив). На первый взгляд не ясно много это или мало и как это соотнести с производительностью ESP-карты. Из практики – на 10G-in+10G-out трафика приходится порядка 800К трансляций, т.е. если загрузить ESP40 на 30G-in+30G-out(с чем эта карта справится), то получим примерно 2.5М трансляций при ограничении в 2М. Поэтому придётся включать режим CGN.
Включается режим CGN так:
ip nat settings mode cgn no ip nat settings support mapping outside
(вторая команда должна появиться сама, после ввода первой)
А трансляции при этом выглядят несколько иначе, в отличии от обычного NAT:
nat#show ip nat translations Pro Inside global Inside local Outside local Outside global tcp 203.0.113.5:1033 100.64.36.5:11538 --- --- tcp 203.0.113.5:1029 100.64.35.5:28479 --- ---
За счёт отсутствия destination ip-адреса в трансляции достигается бо’льшее количество трансляций. Исходя из этого становится очевидно, что в режиме CGN на один внешний IP-адрес может приходится не более 65К трансляций.
В режиме CGN внешний IP-адрес является плавающим (чтобы не наскучивать скриптами для scapy не буду это демонстрировать). Для предотвращения такого поведения, по аналогии с default mode, нужно использовать функционал PAP. При включении функционала PAP, например с limit=60, 60 абонентов делят ресурс 65К трансляций, т.е. жётского лимит в ~1К трансляций на абонента при этом нет. Каким-то абонентам нужно всего 100 трансляций, а другим 3000. Однако рекомендуется установить верхний лимит трансляций на абонента, например 5000, чтобы один абонент не смог израсходовать все 65К трансляций и тем самым мешать работать другим своим “соседям” по внешнему IP.
Именно из-за лимита в 65К трансляций на 1 внешний IP, функционал CGN может быть не применим для enterprise’а имеющего всего 1 внешний адрес, можно упереться в это ограничение.
BPA (Bulk Port Allocation), логирование в syslog и netflow
Второе, что нам даёт CGN это выделение портов блоками, что в свою очередь позволяет реализовать очень эффективное логирование трансляций (начиная с версии IOS-XE 3.10S). Например, выделяя по 512 портов за раз, не нужно логировать каждую отдельную трансляцию, достаточно залогировать сам факт выделения этого блока портов абоненту. Пример настройки:
ip nat settings pap limit 60 bpa set-size 512
(О значении параметров bpa можно прочитать здесь(архив))
К сожаленью, логирование bpa не реализовано с помощью syslog. При включении bpa логи трансляций выглядят точно также как и в default mode:
Nov 4 17:20:08.937: %IOSXE-6-PLATFORM: F0: cpp_cp: QFP:0.0 Thread:000 TS:00000084331300685347 %NAT-6-LOG_TRANSLATION: Created Translation TCP 100.64.34.10:50328 203.0.113.5:23553 200.0.1.65:80 200.0.1.65:80 0
Т.е. логируется каждая создаваемая трансляция (также стоит заметить, что в логе трансляции присутствует destination ip, хотя в таблице трансляций в cgn mode его нет).
В netflow же всё как надо:
Нераспознанные аттрибуты это и есть информация о портах. type 361 = Port block start, type 363 = Port block step size, type 364 = Number of ports in the block (По этому поводу отправлен bug report разработчикам wireshark). На пример из скриншота, для flow 1: port-block-start=0x3000=12288, step-size=1, block-size=0x200=512.
С учётом того, что на абонента приходится порядка 200 трансляций (в среднем), то получаем снижение объёма данных логирования примерно в 200 раз. Остаётся лишь научить коллектор понимать такие flow-потоки.
P.S. Выражаю благодарность Егору Сюндюкову за проделанную работу по настройке NAT на ASR1k, конфигурация которого легла в основу эту статьи.