Значение nat потребляется на не наблюдающую инструкцию

Расшифровка кодов ошибок ядра 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: 

  1. Статический NAT — В этом случае один незарегистрированный (частный, Private) IP-адрес мапирован с официально зарегистрированным (публичным, Public) IP-адресом, т.е. происходит прямое отображение (один к одному) между локальным и глобальным адресами. Обычно используется для веб-хостинга. Однако в организациях статический NAT не практичен, поскольку требует покупки публичных IP-адресов для каждого устройства, нуждающегося в доступе в Интернет. 

Допустим, если есть 3000 устройств, которым нужен доступ в Интернет, организации придется купить 3000 публичных адресов, что очень дорого.

  1. Динамический NAT (Dynamic NAT) — несколько локальных устройств используют общий пул зарегистрированных глобальных (Public) IP-адресов для доступа в Интернет. Если в пуле нет свободного IP-адреса, то пакет будет отброшен, так как только фиксированное количество частных IP-адресов может быть преобразовано в публичные. 

Допустим, если в пуле содержится 2 публичных IP-адреса, то в данный момент времени могут быть транслированы только 2 частных IP-адреса. Если третий частный IP-адрес хочет получить доступ в Интернет, то пакет будет отброшен, так как доступен только ограниченный пул общедоступных IP-адресов. Поэтому множество частных IP-адресов сопоставляется с пулом общедоступных IP-адресов. Применение Network Address Translation (NAT) имеет смысл, когда количество пользователей, желающих выходить в Интернет, фиксировано. Однако такой подход становится затратным, поскольку организации приходится приобретать большое количество глобальных IP-адресов для формирования пула. 

Используется в случаях, когда необходимо обеспечить доступ в Интернет для нескольких устройств, но не требуется прямого однозначного соответствия локальных и глобальных адресов.

  1. Трансляция с использованием портов 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 устройства.

В этом сценарии у нас есть 3 устройства. Маршрутизатор с левой стороны называется «Хост», и он представляет компьютер из нашей локальной сети. Предполагается, что устройство с правой стороны — это какой-то веб-сервер — это то, что мы пытаемся найти в Интернете. В середине мы видим наш маршрутизатор, который настроен для NAT и/или PAT.

Пользователи из нашей локальной сети жалуются на то, что они ничего не могут найти в Интернете. Они подтвердили, что их IP-адрес и шлюз по умолчанию в порядке. Давайте изучим маршрутизатор NAT:

ICMP-трафик

Хорошая идея, чтобы проверить, может ли маршрутизатор NAT достичь веб-сервера, попробовав простой пинг. Если это не работает, вы, по крайней мере, знаете, что у вас есть проблемы с маршрутизацией или, что веб-сервер не работает (или, возможно, просто блокирует ICMP-трафик).

Поскольку это веб-сервер, лучше попробовать подключиться к TCP-порту 80. Вы видите, что это работает, так что маршрутизация между маршрутизатором NAT и веб-сервером + подключение к TCP-порту не является проблемой.

show ip nat translations

Мы можем использовать команду show ip nat translations, чтобы увидеть, происходит ли что-нибудь. Мы видим, что NAT-маршрутизатор что-то транслирует, но если вы посмотрите внимательно, то увидите, что это выглядит не совсем правильно. Внешние локальные и глобальные IP-адреса ссылаются ко внутреннему IP-адресу. Давайте посмотрим на конфигурацию …

show ip nat statistics

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

Введем команды, которые позволяют исправить настройки, чтобы у нас были правильные внутренние и внешние интерфейсы.

повторный пинг

Трафик с хоста на веб-сервер теперь работает!

show ip nat translations заработал

Вот как должна выглядеть таблица трансляции NAT. Внутренний локальный IP-адрес — наш внутренний хост. Внутренний глобальный IP-адрес — это то, что мы настроили на внешней стороне нашего маршрутизатора NAT (FastEthernet 1/0). Внешний локальный и глобальный IP-адрес — наш веб-сервер … проблема решена!

Итог урока: убедитесь, что у вас имеются правильные внутренние и внешние интерфейсы.


Урок 2

Топология

Та же топология, другая проблема! Опять пользователи нашей локальной сети жалуются, что они не могут связаться с веб-сервером. Давайте проверим наш маршрутизатор NAT:

NAT#show ip nat translations

Сначала мы проверим, транслирует ли маршрутизатор что-либо. Как видите, тихо ничего не происходит!

show ip nat statistics

Мы убедились, что внутренний и внешний интерфейсы были настроены правильно. Однако никаких трансляций не происходит. Внутренний источник был определен с помощью списка доступа 1. Давайте поближе рассмотрим этот ACL:

рассмотрим этот ACL access-list

Ааа, смотрите … кажется, кто-то испортил 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.

пинг

Теперь мы можем связаться с веб-сервером с нашего хоста.

show ip nat statistics

Мы видим Hits, если просмотреть NAT statistics.

show ip nat translations

И я вижу трансляцию … проблема решена!

Итог урока: убедитесь, что вы используете правильный список доступа, соответствующий вашим внутренним хостам.

Теперь почитатей продожение статьи про устранение неисправностей с DHCP.

Задача: имея внешний пул IP-адресов (например, два префикса /24), организовать трансляцию приватных адресов на имеющиеся реальные адреса. В этой статье приватными адресами будут 100.64.0.0/16, а реальными 198.51.100.0/24 и 203.0.113.0/24.

Cisco ASR1k / CSR1000V network scheme

При написании этой заметки использовался виртуальный маршрутизатор 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))

Screenshot - wireshark - nat-nfl-v9-create-translation

Screenshot - wireshark - nat-nfl-v9-delete-translation

Таймауты и лимиты

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 же всё как надо:

Screenshot - wireshark - nat-nfl-v9-bpa

Нераспознанные аттрибуты это и есть информация о портах. 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, конфигурация которого легла в основу эту статьи.

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Мегафол инструкция по применению для цветов
  • Декспантенол мазь инструкция по применению для чего применяется взрослым 5 процентный инструкция
  • Мультиварка redmond rmc pm4506 инструкция по применению на русском
  • Моноприл инструкция по применению при каком давлении можно принимать отзывы аналоги
  • Инструкция по эксплуатации nail polisher dm 202