{{indexmenu_n>2}}
======CGNAT. Трансляция сетевых адресов для IPv4======
**Зачем NAT применяется на практике:**
Технология NAT позволяет экономить адресное пространство IPv4 и снижает вероятность взлома устройств, находящихся в сети оператора связи. На СКАТ доступна настройка двух режимов:
* CGNAT — Трансляция сетевых адресов и портов позволяет совместно использовать публичный IPv4 адрес несколькими абонентами и продлевает использование ограниченного адресного пространства IPv4.
* NAT 1:1 — Трансляция сетевого адреса 1в1 позволяет назначить абоненту с приватным IP публичный IP адрес без изменения настроек на его оборудовании и на маршрутизаторе, где он терминируется.
**Проверим на тестах:**\\
[[dpi:dpi_brief:test_cases:nat#тест_1_настройка_cgnat_и_nat_11_через_cli|Тест 1. Настройка CGNAT и NAT 1:1 через CLI]]\\
[[dpi:dpi_brief:test_cases:nat#тест_2_настройка_cgnat_и_nat_11_через_gui|Тест 2. Настройка CGNAT и NAT 1:1 через GUI]]\\
[[dpi:dpi_brief:test_cases:nat#тест_3_настройка_выгрузки_nat_log_на_внешний_коллектор_и_локально_в_файл|Тест 3. Настройка выгрузки NAT log на внешний коллектор и локально в файл]]
fdpi_ctrl load profile --service 11 --profile.name cg_nat --profile.json '{ "nat_ip_pool" : "10.10.10.0/24", "nat_tcp_max_sessions" : 2000, "nat_udp_max_sessions" : 2000 }'
NAT 1:1:
fdpi_ctrl load profile --service 11 --profile.name bi_nat --profile.json '{ "nat_ip_pool" : "10.10.10.0/24", "nat_type": 1 }'
Значения в команде:
* ''load profile'' — создание профиля
* ''service 11'' — номер услуги на СКАТ, для услуги NAT это 11
* ''profile.name'' — название создаваемого профиля, ''cg_nat'' и ''bi_nat''
* ''profile.json '{ "nat_ip_pool" : "10.10.10.0/26", "nat_tcp_max_sessions" : 2000, "nat_udp_max_sessions" : 2000 }' '' — настройки профиля в формате json:
* ''nat_ip_pool'' — подсети NAT-пула через запятую. Если требуется исключить крайние адреса, можно добавить в конец ''~ (10.10.10.0/24~)'', тогда в пуле будут адреса с ''10.10.10.1'' по ''10.10.10.254''.
* ''nat_tcp_max_sessions'' — максимальное количество tcp сессий на одного абонента.
* ''nat_udp_max_sessions'' — максимальное количество udp трансляций на одного абонента.
* ''nat_type'' — режим работы NAT. 0 — для CGNAT, 1 — для NAT 1:1. По умолчанию 0, поэтому данное поле для CGNAT не указано.
====2. Назначение услуги NAT на абонента (CLI)====
===CGNAT===
Назначение услуги NAT на абонента возможно по IP или CIDR
Пример команды подключения услуги по IP:
fdpi_ctrl load --service 11 --profile.name cg_nat --ip 100.64.0.1
Пример подключения услуги на весь CIDR:
fdpi_ctrl load --service 11 --profile.name cg_nat --cidr 100.64.0.0/24
===NAT 1:1===
Пример команды подключения услуги по IP:
fdpi_ctrl load --service 11 --profile.name bi_nat --ip 100.64.0.1
Пример подключения услуги на весь CIDR:
fdpi_ctrl load --service 11 --profile.name bi_nat --cidr 100.64.0.0/24
//Этих команд достаточно для настройки NAT на СКАТ. При этом СКАТ по умолчанию работает в режиме прозрачного моста, то есть создает NAT трансляции и направляет трафик в обе стороны, но не участвует в маршрутизации.//
====3. Создание обратного маршрута (CLI)====
Чтобы обратный трафик в сторону NAT пула был смаршрутизирован к абонентам, потребуется создать маршрут к NAT-пулу на следующем за СКАТ маршрутизаторе и сделать этот маршрут известным остальным маршрутизаторам сети.\\
Рассмотрим ситуацию, когда на маршрутизаторах, между которыми стоит СКАТ, настроена стыковочная сеть 10.0.1.0/30, IP на интерфейсе маршрутизатора со стороны абонентов (R1) - 10.0.1.2, IP на интерфейсе маршрутизатора после СКАТ (R2) - 10.0.1.1 (см. схему).
{{ :dpi:dpi_brief:test_cases:nat_img10.png?nolink&700 |}}
На маршрутизаторе R2 потребуется настроить маршрут к NAT-пулу. Для cisco-like CLI настройка будет выглядеть так:
conf t
ip route 10.10.10.0 255.255.255.192 10.0.1.2
Также потребуется настроить редистрибуцию статических маршрутов, чтобы об этом маршруте было известно не только R2, но и в остальной сети оператора. В случае, если используется ospf:
router ospf 1
redistribute static subnets metric-type 1
Где ''1'' в ''router ospf 1'' — номер процесса OSPF на маршрутизаторе.
====4. Проверка прохождения трафика и ориентации интерфейсов (CLI)====
С тестового ПК провести проверку применения NAT:
* Проверить доступность роутера R2.
* Выполнить команду ''ping 10.0.1.2''. Если R2 недоступен, то необходимо проверить ориентацию интерфейсов СКАТ.
В In интерфейс подключены абоненты, в Out интерфейс подключен интернет. \\
Определить где какой интерфейс возможно путем перевода порта, подключенного к СКАТ, в состояние down на R1 и вывести статус интерфейсов на СКАТ.
fdpi_cli dev xstat|grep --no-group-separator -B1 "Link status"|paste - -|sort
Device 02:00.0: Link status: link down
Device 02:00.1: Link status: link up
Проверить соответствие в fastdpi.conf\\
При необходимости изменить направление и сделать рестарт сервиса через команду
service fastdpi restart
====5. Вывод информации о трансляциях (CLI)====
По каждому IP возможно сделать вывод текущего состояния услуги NAT.
Просмотр через ''fdpi_ctrl'' количества активных сессий и назначенного белого адреса для конкретного серого адреса:
fdpi_ctrl list status --service 11 --ip 192.168.4.20
**Результат:**\\
Абонентские приватные IP-адреса транслируются в Публичные IP-адреса.
=====Тест 2. Настройка CGNAT и NAT 1:1 через GUI=====
service fastdpi restart
{{:dpi:dpi_brief:test_cases:nat_img6.png?nolink&800|}}
====5. Вывод информации о трансляциях (GUI)====
По каждому IP возможно сделать вывод текущего состояния услуги NAT (GUI)
{{:dpi:dpi_brief:test_cases:nat_img7.png?nolink&500|}}
**Результат:**\\
Выводится информация по трансляции приватного адреса в публичный.
=====Тест 3. Настройка выгрузки NAT log на внешний коллектор и локально в файл=====
ajb_save_nat=1
ajb_save_nat_format=ts:ssid:event:login:proto:ipsrc:portsrc:ipsrcpostnat:portsrcpostnat:ipdst:portdst
ajb_nat_path=/var/dump/dpi
ajb_nat_ftimeout=30
где:
* ''ajb_save_nat=1'' — активировать запись трансляций в текстовый лог
* ''ajb_nat_path=/var/dump/dpi'' — место размещения файлов с записью логов (по умолчанию ''/var/dump/dpi'')
* ''ajb_nat_ftimeout=30'' периодичность записи
* ''ajb_save_nat_format=ts:ssid:event:login:proto:ipsrc:portsrc:ipsrcpostnat:portsrcpostnat:ipdst:portdst'' — список и порядок записываемых полей, где:
* ''ts'' — timestamp (временная метка)
* ''ssid'' — идентификатор сессии (для связи с данными Netflow/IPFIX по объемам)
* ''event'' — событие (создание или удаление сессии)
* ''login'' — логин абонента
* ''ipsrc'' — IP адрес источника запроса (абонента)
* ''portsrc'' — порт источника запроса (абонента)
* ''ipsrcpostnat'' — IP адрес источника запроса (абонента) после NAT трансляции
* ''portsrcpostnat'' — порт источника запроса (абонента) после NAT трансляции
* ''ipdst'' — IP адрес получателя запроса (хоста)
* ''portdst'' — порт получателя запроса (хоста)
:!: Файловая система для записи логов должна быть быстрой и локальной (никаких NFS и других remote), данный вариант журналирования рекомендуется только в целях кратковременной диагностики
====Вариант 2. Экспорт трансляций на внешние коллекторы в формате IPFIX====
Для анализа данных по совершенным NAT трансляциям на внешних системах можно экспортировать эти данных по сети в формате ipfix (aka netflow v10). Экспорт NAT трансляций настраивается следующими параметрами:
ipfix_dev=em1
ipfix_nat_udp_collectors=1.2.3.4:1500,1.2.3.5:1501
ipfix_nat_tcp_collectors=1.2.3.6:9418
где:
* ''em1'' — имя сетевого интерфейса для экспорта
* ''ipfix_nat_udp_collectors'' — адреса udp коллекторов
* ''ipfix_nat_tcp_collectors'' — адреса tcp коллекторов
====Настройка журнала трансляций через GUI====
Открываем раздел Управление DPI/Конфигурация. Добавляем в режиме редактора параметры записи локально в файл или выгрузки на внешний коллектор. Сохраняем и делаем рестарт сервиса.
{{:dpi:dpi_brief:test_cases:nat_img8.png?nolink&900|}}