Различия

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

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

nat [2015/04/21 07:20]
nat [2020/11/18 19:10] (текущий)
Строка 1: Строка 1:
 +====== NAT ======
  
 +  * [[iptables#iptables_nat|Настройка iptables и NAT]]
 +
 +**NAT** (Network Address Translation - преобразование сетевых адресов) — это механизм в сетях [[TCP]]/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, присвоенный узлу внешней сети владельцем данного узла. Этот адрес принадлежит глобальному адресному или сетевому пространству.
 +
 +====== Тюнинг NAT в Linux ======
 +Операция NAT является одной из самых ресурсоёмких. NAT- сервер запоминает все соединения, которые через него проходят и сохраняет эти сведения в ОЗУ в памяти в специальной таблице. Когда сессия закрывается, информация о ней из таблицы удаляется. Размер этой таблицы фиксирован. Если сеть большая нужно настроить размеры таблицы хранения отслеживаемых соединений.
 +  * **Размер таблицы NAT**
 +  - Посмотреть текущий размер таблицы NAT:<file>
 +# 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
 +</file>
 +  - Посмотреть заполненность таблицы<file>
 +# sysctl net.netfilter.nf_conntrack_count
 +net.netfilter.nf_conntrack_count = 654
 +</file>
 +  - Если будет принято решение об увеличение размера таблицы ([[sysctl]] -w net.netfilter.nf_conntrack_max=ваше_значение), также нужно пропорционально увеличить hash- таблицу, в которой хранятся списки conntrack- записей. Размер hash- таблицы задается по правилам, которые например описаны здесь [[http://wiki.khnet.info/index.php/Conntrack_tuning|Conntrack tuning]]. Размер hash- таблиц задается в файле /sys/module/nf_conntrack/parameters/hashsize, задать новый размер можно при помощи утилиты [[echo]], например<file>
 +# echo 16384 >  /sys/module/nf_conntrack/parameters/hashsize
 +</file>
 +  * **Timeout NAT**. Информация о сессиях также может быть удалена по timeout. Т.е. если втечение долгого времени в рамках соединения обмена трафика нет - сессия закрывается и информация о ней так же удаляется из таблицы NAT. По умолчанию значения тайм-аутов стоят достаточно большие. Поэтому, при больших потоках трафика, даже если nf_conntrack_max установлен в максимальное значение, существует риск столкнуться с переполнением таблицы и разрывами соединений. Посмотреть установленные значения задержек (в секундах):<file>
 +# 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
 +</file>Значения timeout рекомендуется ставить в пределах 30-120 секунд.

Рейтинг курсов Английский язык по Скайп