CG-NAT и NAT (услуга 11)

Описание продукта

DPI

Чтобы абонент гарантированно получил свой белый адрес, необходимо чтобы в пуле адресов было не меньше, чем рабочих потоков (в типовой конфигурации это 2 для СКАТ-6 и 4 для СКАТ-10 и выше). Узнать число рабочих потоков можно командой

expr $(ps -p `pidof fastdpi` H -o comm|grep wrk|wc -l) / $(ps -p `pidof fastdpi` H -o comm|grep rx|wc -l)

Если в пуле всего один адрес, то он может быть назначен не всем абонентам, а только тем, которые попадут под алгоритм балансировки

fdpi_ctrl list status --service 11 --ip 192.168.4.20
Описание параметров по ссылке

lifetime_flow_long=600 — время жизни в секундах неактивных TCP-сессий

lifetime_flow=60 — время жизни в секундах остальных сессий

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

tcp keep-alive

tcp keep-alive

Пример/etc/ssh/ssh_config

ServerAliveInterval 60

Пример~/.ssh/config

Host * ServerAliveInterval 60
ssh -o TCPKeepAlive=yes -o ServerAliveInterval=60 user@example.com

Пример/etc/sysctl.conf

net.ipv4.tcp_keepalive_time = 600 net.ipv4.tcp_keepalive_intvl = 60 net.ipv4.tcp_keepalive_probes = 20
Рекомендуется поддерживать соотношение от 1:10 (лучше) до 1:100 (хуже).

При подключении 11 услуги абоненту назначается Public IP исходя из алгоритма распределения

Когда абонент начинает устанавливать сессии, порты берутся из общей очереди СКАТ DPI и закрепляются с определенными тайм-аутами

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

Абонентов, которые находятся в блокировке (5 услуга + полисинг), помещать в отдельный NAT Pool, чтобы они не влияли на работу активных абонентов. Так ведет себя, например, IPhone устанавливает множество сессий в поиске рабочего сервиса.

Создавать разряженные пулы и разделять клиентов в разные NAT Pool по типу: Физические лица и Юридические лица.

Осуществлять мониторинг клиентов, которые создают большую нагрузку и проводить с ними работу. Для приема, обработки и хранения NetFlow с DPI предлагаем использовать программный продукт для сбора статистики QoE Store и графический интерфейс DPIUI2. Вы сможете провести анализ трафика абонента и сделать вывод, что его ПК заражен.

Описание параметров по ссылке

Изменение лимита на количество сессий:

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 }'

Используется команда создания пула, идентичного прежнему, но с другими настройками nat_tcp_max_sessions и nat_udp_max_sessions

Добавление дополнительных адресов в пул:

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 }'

Используется команда создания пула, идентичного прежнему, но с дополнительным пулом, указанным через запятую.

Уменьшение пула

В текущей версии не поддерживается динамическое уменьшение размеров пула и исключение из него адресов. В этом случае потребуется освободить пул, удалить и создать его с новыми параметрами.
yum install epel-release yum-utils yum-config-manager --disable epel yum --enablerepo epel install jq
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
Описанный ниже способ неактуален при rx_dispatcher=1

DPI

белый_адрес_абонента & mask = серый_адрес_абонента & mask

при 4 рабочих потоках mask=3 (типично для СКАТ >= 10)

при 2 рабочих потоках mask=1 (типично для СКАТ <= 6)

DPI

grep nat_hash_mask /var/log/dpi/fastdpi_alert.log

service fastdpi reload

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

Пример для СКАТ-20:

Назначаем адрес абоненту командой:

fdpi_ctrl load profile --ip 10.0.0.15 --service 11 --profile.json '{ "nat_ip_pool" : "188.99.99.27/32", "nat_type" : 1 }'

Описание параметров по ссылке
Описание параметров по ссылке

1) Требование неактуально, если rx_dispatcher=1 или rx_dispatcher=2

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)

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

fdpi_ctrl list all status --service 11 --profile.name nat_pool |grep whiteip|cut -f7|sort|uniq -c|sort -n

fdpi_ctrl list all status --service 11 --profile.name nat_pool | awk 'BEGIN {FS="[=| }\t]+"} $15>$P {print $1, $14, $15}' | wc -l

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