NAT преобразование сетевых адресов
NAT (Network Address Translation - преобразование сетевых адресов) — это механизм в сетях Порты TCP. Что такое TCP / IP порт/IP, позволяющий преобразовывать IP- адреса транзитных пакетов. Также имеет названия IP Masquerading, Network Masquerading и Native Address Translation.
Терминология NAT:
- Внутренний локальный адрес (Inside local address). Это адреса IP, присвоенные узлам внутренней сети. Как правило, эти адреса не являются зарегистрированными NIC (Network Information Center) или поставщиком услуг.
- Внутренний глобальный адрес (Inside global address). Этот адрес выдается организации центром NIC или поставщиком услуг Интернет. Он представляет один или более внутреннихузлов во внешней сети.
- Внешний локальный адрес (Outside local address). Это адрес IP, присвоенный внешнему узлу и означающий, что внешний узел принадлежит внутренней сети. Этот адрес не нуждается в регистрации. Этот адрес должен принадлежать такому адресному пространству, которое имеет возможность маршрутизироваться во внутреннюю сеть.
- Внешний глобальный адрес (Outside global address). Это адрес IP, присвоенный узлу внешней сети владельцем данного узла. Этот адрес принадлежит глобальному адресному или сетевому пространству.
Читайте также: Настройка iptables и NAT, sysctl утилита, предназначенная для управления параметрами ядра
Тюнинг NAT в Linux
Операция NAT является одной из самых ресурсоёмких. NAT- сервер запоминает все соединения, которые через него проходят и сохраняет эти сведения в ОЗУ в памяти в специальной таблице. Когда сессия закрывается, информация о ней из таблицы удаляется. Размер этой таблицы фиксирован. Если сеть большая нужно настроить размеры таблицы хранения отслеживаемых соединений.
- Размер таблицы NAT
- Посмотреть текущий размер таблицы NAT утилитой sysctl:
# sysctl net.netfilter.nf_conntrack_max net.netfilter.nf_conntrack_max = 65536 или # sysctl -a | grep conntrack_max net.netfilter.nf_conntrack_max = 65536 net.ipv4.netfilter.ip_conntrack_max = 65536 net.nf_conntrack_max = 65536
- Посмотреть заполненность таблицы
# sysctl net.netfilter.nf_conntrack_count net.netfilter.nf_conntrack_count = 654
- Если будет принято решение об увеличение размера таблицы (sysctl утилита, предназначенная для управления параметрами ядра -w net.netfilter.nf_conntrack_max=ваше_значение), также нужно пропорционально увеличить hash- таблицу, в которой хранятся списки conntrack- записей. Размер hash- таблицы задается по правилам, которые например описаны здесь Conntrack tuning. Размер hash- таблиц задается в файле /sys/module/nf_conntrack/parameters/hashsize, задать новый размер можно при помощи утилиты echo, например
# echo 16384 > /sys/module/nf_conntrack/parameters/hashsize
- Timeout NAT. Информация о сессиях также может быть удалена по timeout. Т.е. если втечение долгого времени в рамках соединения обмена трафика нет - сессия закрывается и информация о ней так же удаляется из таблицы NAT. По умолчанию значения тайм-аутов стоят достаточно большие. Поэтому, при больших потоках трафика, даже если nf_conntrack_max установлен в максимальное значение, существует риск столкнуться с переполнением таблицы и разрывами соединений. Посмотреть установленные значения задержек (в секундах):
# sysctl -a | grep conntrack | grep timeout net.netfilter.nf_conntrack_generic_timeout = 600 - NAT- сервер будет хранить информацию о сессии даже в том случае, если будет проходит 1 пакет в 10 минут. net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 120 net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 60 net.netfilter.nf_conntrack_tcp_timeout_established = 432000 - TCP- сессию NAT- сервер будет отслеживать 5 дней(!), если даже за это период пройдет только 1 пакет, это может привести к быстрому заполнению nf_conntrack_max net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120 net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60 net.netfilter.nf_conntrack_tcp_timeout_last_ack = 30 net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120 net.netfilter.nf_conntrack_tcp_timeout_close = 10 net.netfilter.nf_conntrack_tcp_timeout_max_retrans = 300 net.netfilter.nf_conntrack_tcp_timeout_unacknowledged = 300 net.netfilter.nf_conntrack_udp_timeout = 30 net.netfilter.nf_conntrack_udp_timeout_stream = 180 net.netfilter.nf_conntrack_icmp_timeout = 30 net.netfilter.nf_conntrack_events_retry_timeout = 15 net.ipv4.netfilter.ip_conntrack_generic_timeout = 600 net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_sent = 120 net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_sent2 = 120 net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_recv = 60 net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 432000 net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120 net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60 net.ipv4.netfilter.ip_conntrack_tcp_timeout_last_ack = 30 net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120 net.ipv4.netfilter.ip_conntrack_tcp_timeout_close = 10 net.ipv4.netfilter.ip_conntrack_tcp_timeout_max_retrans = 300 net.ipv4.netfilter.ip_conntrack_udp_timeout = 30 net.ipv4.netfilter.ip_conntrack_udp_timeout_stream = 180 net.ipv4.netfilter.ip_conntrack_icmp_timeout = 30
Значения timeout рекомендуется ставить в пределах 30-120 секунд.
📌 Для тестирования скриптов, установщиков VPN, Python ботов рекомендуем использовать надежные VPS на короткий срок. Если вам нужна помощь с более сложными задачами, вы можете найти фрилансера, который поможет с настройкой. Узнайте больше о быстрой аренде VPS для экспериментов и о фриланс-бирже для настройки VPS, WordPress. 📌
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!
7 Самых Популярных Статей
- Как запустить скрипты и веб-приложения на Python
- Что такое страны TIER 1,2,3
- 7 способов сравнения файлов по содержимому в Windows или Linux
- Установка и тестирование веб-панели HestiaCP
- Китайский VPN Shadowsocks простая установка и настройка
- top, htop, atop определение загрузки ОС (Load average, LA)
- Использование rsync в примерах