Инструменты пользователя

Инструменты сайта


nat

Различия

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

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

nat [2015/04/21 03:20] (текущий)
Строка 1: Строка 1:
 +====== NAT ======
 +  * [[wpru>​NAT Traversal]] (NAT-T)
 +  * [[http://​aoz.com.ua/​2009/​01/​26/​nat-types/​|Типы Network Address Translation (NAT)]]
 +  * [[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 секунд.
загрузка...
nat.txt · Последние изменения: 2015/04/21 03:20 (внешнее изменение)