CG-NAT и NAT (услуга 11) [Документация VAS Experts]

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
dpi:faq:cgnat:start [2024/09/04 07:18] elena.krasnobryzhdpi:faq:cgnat:start [Дата неизвестна] (текущий) – удалено - внешнее изменение (Дата неизвестна) 127.0.0.1
Строка 1: Строка 1:
-====== CG-NAT и NAT (услуга 11)====== 
-{{indexmenu_n>4}} 
-<note>[[dpi:opt_cgnat:start|Описание продукта]]</note> 
-<accordion autoclose> 
-<accordion-item title="1. Почему рекомендуется создавать пул не менее чем из 2х или 4x адресов?"> 
-Неблокирующий алгоритм диспетчеризации в DPI, распределяющий сессии по рабочим потокам накладывает ограничение на то, какой белый IP-адрес может быть назначен абоненту из пула: 
-  - Чтобы абонент гарантированно получил свой белый адрес, необходимо чтобы в пуле адресов было не меньше, чем рабочих потоков (в типовой конфигурации это 2 для СКАТ-6 и 4 для СКАТ-10 и выше). Узнать число рабочих потоков можно командой <code bash>expr $(ps -p `pidof fastdpi` H -o comm|grep wrk|wc -l) / $(ps -p `pidof fastdpi` H -o comm|grep rx|wc -l)</code> 
-  - Если в пуле всего один адрес, то он может быть назначен не всем абонентам, а только тем, которые попадут под алгоритм балансировки 
-</accordion-item> 
- 
-<accordion-item title="2. Как определить, какой белый адрес из пула получит абонент?"> 
-Посмотреть, какой белый адрес был назначен серому, можно командой<code bash>fdpi_ctrl list status --service 11 --ip 192.168.4.20</code> 
-В NAT 1:1 белый адрес выделяется сразу при назначении услуги, в CG-NAT в момент начала сессии. Также выделенный абоненту белый адрес рапортуется в Radius Accounting в целях его логирования в биллинге. 
- 
-Заранее предсказать, какой именно адрес будет выдан абоненту из пула невозможно: это зависит от разных факторов и в частности от текущей загрузки пула. 
-</accordion-item> 
- 
-<accordion-item title="3. После подключения NAT стали закрываться неактивные SSH сессии"> 
-<note>Описание параметров [[dpi:opt_cgnat:сgnat_settings:start#параметры_и_возможные_значения|по ссылке]]</note> 
-Действительно, время жизни сессии в NAT ограничено, так как количество сессий у абонента — ограниченный ресурс и большое количество неактивных сессий в пуле уменьшает производительность NAT и общую.  
- 
-У NAT нет возможности отличить, сессия стала неактивной в результате аварии или просто в ней нет никакой активности, и закрывает такие долго висящие сессии по таймауту неактивности. Такое поведение предусмотрено стандартом и поддержано большинством производителей CG-NAT.  
- 
-В СКАТ время жизни сессий можно корректировать следующими параметрами: 
-  * ''lifetime_flow_long=600'' — время жизни в секундах неактивных TCP-сессий 
-  * ''lifetime_flow=60'' — время жизни в секундах остальных сессий 
- 
-<note warning>Не следует задавать этим параметрам слишком большие значения, так как тогда может слишком разрастись таблица сессий и это повлияет на производительность CG-NAT, а также у абонента может закончится лимит сессий. 
-(который задается в параметрах nat пула).</note> 
- 
-Поэтому при необходимости поддержания длительных неактивных соединений рекомендуется использовать механизм ''tcp keep-alive'', когда периодически в сессии передается пустой пакет, который сигнализирует, что сессия все еще активна.  
- 
-Настроить ''tcp keep-alive'' можно как индивидуально для приложения на стороне сервера или клиента, так и на уровне операционной системы для всех приложений сразу. 
- 
-**Пример** настройки на ssh сервере: в файл ''/etc/ssh/ssh_config'' добавить строку: 
-<code bash> 
-ServerAliveInterval 60 
-</code> 
- 
-**Пример** настройки на ssh клиенте: в файл ''~/.ssh/config'' добавляем строки: 
-<code bash> 
-Host * 
-  ServerAliveInterval 60 
-</code> 
-или в командной строке: 
-<code bash> 
-ssh -o TCPKeepAlive=yes -o ServerAliveInterval=60 user@example.com 
-</code> 
- 
-**Пример** настройки для всех приложений в CentOS: в файл ''/etc/sysctl.conf'' добавить строки: 
-<code bash> 
-net.ipv4.tcp_keepalive_time = 600 
-net.ipv4.tcp_keepalive_intvl = 60 
-net.ipv4.tcp_keepalive_probes = 20 
-</code> 
-</accordion-item> 
- 
-<accordion-item title="4. Сколько "серых" IP-адресов можно спрятать за одним "белым" в CG-NAT?"> 
-<note important>Рекомендуется поддерживать соотношение от 1:10 (лучше) до 1:100 (хуже).</note> 
- 
-Подробнее: 
- 
-По умолчанию на одном белом IP для CG-NAT доступны 64512 портов (65535-1023, первые 1024 порта не используются, т.к. являются системными), каждый порт — это одна TCP сессия и одна UDP. Количество сессий, которое создают абоненты отличается: физ. лица создают меньше сессий, юр. лица больше (поэтому для юр. лиц нужно использовать отдельный пул с другим лимитами на количество сессий), абонент с торрентом может создать в пике до 1000 сессий. 
- 
-В среднем физическое лицо создает 50-60 одновременно работающих сессий, т.е. 64512/60=1075 физ. лиц можно спрятать за одним серым IP, но на практике такую значительную переподписку использовать не рекомендуется, т.к. многие популярные сервисы (почта, видео, поиск) используют защиту от атак ботнет сетей, основанную на IP-адресах. Поэтому если с одного адреса им придет слишком много запросов, они могут принять это за атаку и заблокировать часть запросов или включить капчу, что создаст неудобства для абонентов. 
- 
-Также необходимо учесть особенность механизма освобождения портов в NAT Pool: 
-  - При подключении 11 услуги абоненту [[dpi:faq:cgnat:start#как_определить_какой_белый_адрес_из_пула_получит_абонент|назначается Public IP исходя из алгоритма распределения]] 
-  - Когда абонент начинает устанавливать сессии, порты берутся из общей очереди СКАТ DPI и [[dpi:faq:cgnat:start#после_подключения_nat_стали_отваливаться_неактивные_ssh_сессии|закрепляются с определенными тайм-аутами]] 
-  - В случае, если на конкретном Public IP находится много абонентов, которые начинают конкурировать за свободные порты, у абонентов могут начаться проблемы с доступом.   
- 
-Рекомендации при создании и эксплуатации NAT Pool: 
-  - Абонентов, которые находятся в блокировке (5 услуга + полисинг), помещать в отдельный NAT Pool, чтобы они не влияли на работу активных абонентов. Так ведет себя, например, IPhone устанавливает множество сессий в поиске рабочего сервиса. 
-  - Создавать разряженные пулы и разделять клиентов в разные NAT Pool по типу: Физические лица и Юридические лица. 
-  - Осуществлять мониторинг клиентов, которые создают большую нагрузку и проводить с ними работу. Для приема, обработки и хранения NetFlow с DPI предлагаем использовать [[dpi:dpi_components:qoestor:start|программный продукт для сбора статистики QoE Store]] и [[dpi:dpi_components:dpiui:start|графический интерфейс DPIUI2]]. Вы сможете провести анализ трафика абонента и сделать вывод, что его ПК заражен. 
-</accordion-item> 
- 
-<accordion-item title="5. Как поменять параметры уже существующего и используемого пула?"> 
-<note>Описание параметров [[dpi:opt_cgnat:сgnat_settings:start#параметры_и_возможные_значения|по ссылке]]</note> 
-  - Изменение лимита на количество сессий:<code bash>fdpi_ctrl load profile --service 11  --profile.name test_nat_2000 --profile.json '{ "nat_ip_pool" : "111.111.111.0/24", "nat_tcp_max_sessions" : 2000, "nat_udp_max_sessions" : 2000, "nat_type" : 0 }'</code>Используется команда создания пула, идентичного прежнему, но с другими настройками ''nat_tcp_max_sessions'' и ''nat_udp_max_sessions'' 
-  - Добавление дополнительных адресов в пул:<code bash>fdpi_ctrl load profile --service 11  --profile.name test_nat_2000 --profile.json '{ "nat_ip_pool" : "111.111.111.0/24,222.222.222.0/25", "nat_tcp_max_sessions" : 2000, "nat_udp_max_sessions" : 2000, "nat_type" : 0 }'</code>Используется команда создания пула, идентичного прежнему, но с дополнительным пулом, указанным через запятую. 
-  - Уменьшение пула 
- 
-<note important>В текущей версии не поддерживается динамическое уменьшение размеров пула и исключение из него адресов.\\  
-В этом случае потребуется освободить пул, удалить и создать его с новыми параметрами.</note> 
- 
-Для удобства установим jq (утилиту для работы с данными в формате JSON): 
-<code bash> 
-yum install epel-release yum-utils 
-yum-config-manager --disable epel 
-yum --enablerepo epel install jq 
-</code> 
- 
-После чего сохраним информацию об абонентах текущего пула, удалим и создадим пул и подключим к нему абонентов: 
-<code bash> 
-fdpi_ctrl list all --service 11 --profile.name test_nat_4000 --outformat json|jq '.lservices[] | .login | select(. != null)' > save_users.txt 
-fdpi_ctrl list all --service 11 --profile.name test_nat_4000 --outformat json|jq -r '.lservices[] | .ipv4 | select(. != null)' >> save_users.txt 
-fdpi_ctrl del all --service 11 --profile.name test_nat_4000 
-fdpi_ctrl del profile --service 11 --profile.name test_nat_4000 
-fdpi_ctrl load profile --service 11  --profile.name test_nat_4000 --profile.json '{ "nat_ip_pool" : "111.111.111.0/30", "nat_tcp_max_sessions" : 4000, "nat_udp_max_sessions" : 4000, "nat_type" : 0 }' 
-fdpi_ctrl load --service 11 --profile.name test_nat_4000 --file save_users.txt 
-</code> 
-Не забудьте изменить в командах имя пула и его новые параметры на нужные вам. 
-</accordion-item> 
- 
-<accordion-item title="6. Как выдать конкретный адрес абоненту с NAT 1:1?"> 
-Если у абонента всего один серый адрес и требуется выдать абоненту конкретный белый адрес, то нужно учитывать зависимость между серыми и белыми адресами, которая накладывается алгоритмом неблокирующей диспетчеризации адресов в DPI. 
- 
-<code>белый_адрес_абонента & mask = серый_адрес_абонента & mask</code> 
- 
-где mask зависит от числа рабочих потоков: 
-  * при 4 рабочих потоках mask=3 (типично для СКАТ >= 10) 
-  * при 2 рабочих потоках mask=1 (типично для СКАТ <= 6)  
- 
-Фактически для младших версий СКАТ абонентам с четными серыми адресами нужно выдавать четные белые адреса, а нечетными — нечетные. Достаточно учитывать только младший байт NNN в IP адресе XXX.YYY.ZZZ.NNN 
- 
-Соответственно для старших версий нужно учитывать равенство 2 младших бит IP адреса. 
- 
-При одном рабочем потоке зависимость между адресами исчезает. 
- 
-Точное значение маски можно посмотреть в логе DPI: 
-<code>grep nat_hash_mask /var/log/dpi/fastdpi_alert.log</code> 
-Если старт был давно, то выполнить reload 
-<code>service fastdpi reload</code> 
- 
-<note important>Т.е. такая частично детерминистическая схема распределения фактически предполагает, что серые адреса тоже будут выдаваться абоненту статически. 
-И в случаях когда в договоре прописана выдача конкретного белого IP адреса и текущий серый адрес абонента не подпадает по указанную выше формулу, то потребуется поменять серый адрес абонента на тот, что формуле соответствует.</note> 
- 
-**Пример для СКАТ-20:** 
-абоненту с серым адресом 10.0.0.15 требуется выдать белый адрес 188.99.99.27\\  
-маска=3\\  
-15&3=3 равно 27&3=3 - это значит, такой адрес выдать можно (в противном случае пришлось бы поменять или выдаваемый абоненту серый адрес, или назначаемый ему белый) 
- 
-**Назначаем адрес абоненту командой:** 
-<code>fdpi_ctrl load profile --ip 10.0.0.15 --service 11 --profile.json '{ "nat_ip_pool" : "188.99.99.27/32", "nat_type" : 1 }'</code> 
- 
-<note>Описание параметров [[dpi:opt_cgnat:сgnat_settings:start#параметры_и_возможные_значения|по ссылке]]</note> 
-</accordion-item> 
- 
-<accordion-item title="7. Диагностика NAT"> 
-<note>Описание параметров [[dpi:opt_cgnat:сgnat_settings:start#параметры_и_возможные_значения|по ссылке]]</note> 
- 
-1. В профиле должны быть пулы одного размера((Требование неактуально, если ''rx_dispatcher=1'' или ''rx_dispatcher=2'')).  
-Правильно: 
-<code> 
-type_profile=1, ref_cnt=0       d3      { "nat_ip_pool" : "1.1.2.0/28,1.1.3.0/28", "nat_tcp_max_sessions" : 2000, "nat_udp_max_sessions" : 2000, "nat_type" : 0 }            11      (0x400) 
-</code> 
-Неправильно: 
-<code> 
-type_profile=1, ref_cnt=0       d3      { "nat_ip_pool" : "1.1.2.0/28,1.1.3.0/26", "nat_tcp_max_sessions" : 2000, "nat_udp_max_sessions" : 2000, "nat_type" : 0 }            11      (0x400 
-</code> 
- 
-2. Для абонентов которые в блокировке, следует подключать другой профиль, с другими пулами. Многие сетевые устройства, при блокировке, могут генерировать большое количество запросов, что приводит к использованию свободных портов у публичного адреса. 
- 
-3. Посмотреть равномерность распределения приватных адресов по публичным адресам в профиле. 
-<code> 
-fdpi_ctrl list all status --service 11 --profile.name nat_pool |grep whiteip|cut -f7|sort|uniq -c|sort -n 
-</code> 
- 
-4. Посмотреть количество абонентов, которые используют порты сверх значения переменной $P. В среднем абонент использует около 600 портов.  
-<code> 
-fdpi_ctrl list all status --service 11 --profile.name nat_pool | awk 'BEGIN {FS="[=| }\t]+" $15>$P {print $1, $14, $15}' | wc -l 
-</code> 
- 
-5. Посмотреть, как распределились адреса по пулам (подсетям) в профиле. 
-<code> 
-fdpi_ctrl list all status --service 11 --profile.name nat_pool |grep whiteip|cut -f7|cut -d"." -f1,2,3|sort|uniq -c|sort -n 
-</code> 
- 
-</accordion-item> 
-</accordion>