Что такое NAT, как его настроить и использовать — NAT, PAT, Static NAT, Dynamic NAT

Доброго времени суток, дорогие читатели! Ну, что давайте про NAT.

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

В большей степени эта проблема касается тех, кто играет в многопользовательские игры и коротко эта проблема звучит примерно так: "ПОЧЕМУ КО МНЕ НИКТО НЕ ЗАХОДИТ?". Для других эта проблема выглядит несколько иначе, а именно:

  • Почему не качает торрент?
  • Почему пользователи/друзья/знакомые/неизвестные личности не могут подключиться к FTP, WEB, VOIP (TS, Mamble, ведро) и прочим серверам, которые вы так долго пытались настроить и даже проверяли что у вас все работает?
  • Почему ваш личный домашний сервер пустует? Может это вселенский заговор?

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

NAT - иконка статьи

Если коротко, то пользователи из интернета просто не могут к вам подключиться, потому что ваш роутер их не пускает, но он делает это не просто из прихоти, а потому, что не знает о том, что все эти люди хотят подключиться именно к вам. Вот он и думает, что они что-то хотят от него самого.

Да, только что я вам обрисовал для чего нужен NAT. А теперь о том, что это такое.


Общее определение

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

NAT присутствует во всех роутерах и серверных операционках в том или ином виде. В роутерах это обычно называется port forwarding, в линуксах iptables, на виндовых серверах  - в специальной оснастке. А теперь давайте поговорим о различных типах NAT.

к содержанию ↑

Тип первый, Static NAT

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

Т.е. происходит преобразование адресов 1-1 (один внешний IP назначается одному внутреннему серверу). При такой настройке ваши серверы всегда будут доступны из интернета на любом порту.

Кстати говоря о портах, попробую несколько углубиться в эту тему, но не слишком сильно. Дело в том, что любой сервис, любая программа обращается к компьютеру, серверу, роутеру или сервису (будь то почта, веб-страничка или любой другой сервис) не только по IP адресу, но и по порту. Например, чтобы вам открыть страничку google.com со своего компьютера, вам надо ввести две вещи: IP адрес (DNS имя) и.. порт.

Но постойте, возмутитесь вы, ведь никакого порта вы не вводите и все отлично открывается!

к содержанию ↑

Так в чем же дело в статике?

Дело в том, что, нет, в DNS записи порт не прячется, как некоторые могли бы подумать, этот самый порт ваш браузер сам подставляет в адресную строку вместо вас. Вы можете легко это проверить. Введите в адресной строке google.com:80 и увидите, что страничка гугла открылась, но волшебные ":80" внезапно исчезли.

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

При статическом NAT вам будет фиолетово какой порт использует сервер или программа, т.к. сервер становится полностью доступен из интернета. Чтобы уже ограничить используемые порты, настраивается на этом сервере межсетевой экран.

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

к содержанию ↑

Схема работы статического NAT

Попробую рассказать о схеме работы статического NAT.

Static NAT (SNAT)

Например, провайдер выдал вам четыре IP адреса 87.123.41.11, 87.123.41.12, 87.123.41.13, 87.123.41.14, а у вас есть три сервера и роутер. Вы назначаете роутеру, например, первый адрес из этого диапазона (87.123.41.11), а остальные делите между серверами (сервер 1 - .12, сервер 2 - .13, сервер 3 - .14).

Чтобы пользователи из интернета могли подключаться на эти серверы, им достаточно будет ввести внешние IP адреса серверов. Например, когда пользователь подключается на адрес 87.123.41.12, то роутер перенаправляет его на сервер 1 и пользователь уже общается с сервером, хотя не знает что реальный адрес сервера на самом деле другой (192.168.1.2). Такая запись в NAT таблице роутера будет храниться всегда.

Преимущества данного способа:

  • реальные адреса серверов будут скрыты;
  • Ваши серверы всегда будут видны в интернете.

Недостатки:

  • Злоумышленники могут на них попытаться пробиться или осуществлять какие-нибудь атаки;
  • Требуется несколько внешних адресов, что может быть затратно.
к содержанию ↑

Тип второй, Dynamic NAT

Динамический NAT отличается от статического немногим. Он используется почти также, но с тем лишь исключением, что ваши сервера не видны из интернета, но самим серверам этот интернет нужен. Суть его в том, что вам также выдаются несколько внешних IP адресов от провайдера, после чего роутер сам распределяет адреса между "нуждающимися".

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

При этом срок жизни такой записи длится очень короткое время и как только сервер/компьютер перестал требовать доступ в интернет, этот адрес удаляется из таблицы NAT роутера.

Существенный недостаток в том, что количество серверов и компьютеров, которым требуется доступ в интернет, не должен сильно превышать кол-во выданных провайдером внешних адресов.

к содержанию ↑

Недостаток и преимущества динамики

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

Dymanic NAT (DNAT)

В данном примере провайдер выдал нам всего два внешних адреса: 87.123.41.11 и 87.123.41.12. В этом случае мы IP 87.123.41.11 назначаем роутеру, а оставшийся адрес будет автоматически отдаваться тому серверу, который первым попросит доступ в интернет (в данном примере это был сервер 2), остальные серверы будут ждать, когда первый закончит и этот IP адрес освободится.

Преимущества данного способа:

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

Недостатки:

  • Требуется несколько внешних адресов;
  • Кол-во хостов в вашей сети не должно быть сильно больше, чем выданных провайдером IP адресов.
к содержанию ↑

Тип третий, Port Address Translation (PAT), также известный как NAT Overload или NAT Masquerading

Это именно то, что актуально для обычного рядового пользователя. Суть данного метода в том, что вам провайдер выдает только один внешний адрес (например 87.123.41.12), при этом вы каждому компьютеру или серверу назначаете какой-нибудь порт.

Например, нам нужно, чтобы пользователи из интернета могли подключаться к торрент-клиенту на ПК 1 и 2, к серверу Teamspeak на сервере 1, серверу FTP на сервере 2, веб-сайту на сервере 3 (по протоколу http и https), плюс ко всему на ПК 1 и 2 нужен будет удаленный доступ. Теперь затронем немного тему внутренних и внешних портов (да, такое тоже есть).

Внутренний порт - это порт, который использует программа на том компьютере или сервере, на котором находится. Внешний порт - это порт, который вы хотите открыть на роутере, чтобы на него подключались пользователи. Часто внутренний и внешний порты совпадают, но далеко не всегда.

к содержанию ↑

Еще немного про порты и другие нюансы

Многие программы (не только лишь все) имеют вшитые порты без возможности перенастройки, либо, к примеру, у вас есть два Веб-сервера на винде (так называемый IIS), которые работают на 80 порту каждый и вам нужно дать доступ из интернета на оба сервера.

Здесь вы откроете на роутере одному серверу порт 80, а оставшемуся вам придется выбрать другой порт (например 8080).

Итого, на роутере мы настраиваем порты таким образом:

ИмяПриложениеВнутренний IPВнутренний портВнешний IPВнешний порт
Сервер 1Teamspeak192.168.1.29987*87.123.41.129987
Сервер 2FTP сервер192.168.1.321*87.123.41.1221000
Сервер 3Веб-сервер192.168.1.480*87.123.41.1280
Сервер 3Веб-сервер192.168.1.4443*87.123.41.12444
ПК 1uTorrent192.168.1.102600087.123.41.1226000
ПК 2Bit-Torrent192.168.1.202610087.123.41.1226100
ПК 2Game Server192.168.1.2027015*87.123.41.1227015
ПК 1RDP192.168.1.103389**87.123.41.1233891
ПК 2RDP192.168.1.203389**87.123.41.1233892

Где * - стандартный порт, который использует программа (т.е. вы ее установили и ничего не настраивали);

** - стандартный порт, который использует сервис и который нельзя сменить.

Наглядная схемка ниже:

Port Address Translation (PAT)

Теперь я постараюсь объяснить почему я написал именно эти порты.

к содержанию ↑

Немного деталей про порты

Суть:

  1. Для сервера Teamspeak (TS) я порт не менял, т.к. такой сервер у нас один и пользователям не придется вообще вводить его порт. Они просто вбивают у себя адрес 87.123.41.12 и попадают на наш сервер TS, удобно и практично;
  2. Для FTP сервера я порт поменял, т.к., строго говоря, FTP-сервер не должен быть доступен по стандартному порту, на него могут лазить недобросовестные люди. А так вы говорите тем, кому надо, чтобы подключались на 87.123.41.12:21000 и они попадут на ваш FTP-сервер;
  3. Для Веб-сервера я http порт не менял опять же из-за удобства, чтобы пользователям не надо было вводить адрес вместе с портом в адресной строке. Они просто вводят 87.123.41.12 и подключаются на ваш Веб-сервер. Порт HTTPS же я поменял для наглядности. Пользователям, чтобы попасть на ваш Веб-сервер по защищенному каналу, придется вводить в адресной строке адрес 87.123.41.12:444;
  4. С торрентами в общем-то все просто, какой порт настроен в самой программе, такой и настраивается на роутере;
  5. Порт игрового сервера, где в качестве примера я взял обычный стимовский игровой сервер (Dedicated Server), я также не менял, а оставил стандартный;
  6. А вот с RDP ситуация интересная. Дело в том, что на каждом компьютере служба RDP работает по порту 3389 и это никак не поменять без своего RDP сервера (такие тоже бывают). Поэтому, чтобы иметь возможность подключаться на ПК 1 и 2 я задал на роутере порты 33891 и соотв. 33892, ибо так проще помнить где какой используется. Таким образом, введя в RDP клиенте адрес 87.123.41.12:33891 мы попадем на ПК 1, а введя 87.123.41.12:33892 мы соотв. попадем на ПК 2.

Подытожив все это получаем, что удаленным пользователям всеравно какие у нас внутренние порты, они о них не знают и знать не могут. Эта информация нужна только нашему роутеру, чтобы он мог пересылать запросы туда, куда они и должны попадать.

к содержанию ↑

Преимущества и недостатки третьего варианта

Теоретически, вы можете назначить одному IP адресу до 131072 (2 * 2^16) приложений. Почему я говорю "приложений", а не компьютеров/серверов?

Потому что один комп или сервер, как вы уже заметили выше,  может использовать несколько различных приложений (при этом одно приложение может использовать несколько портов), при этом каждый порт может быть двух типов: TCP и UDP.

Углубляться в это в рамках этой статьи я не буду, в этом нет необходимости.

Для любой программы есть хелп, в котором написано какие порты ей нужны для работы, если их нельзя сменить. Многие приложения позволяют вам самим назначить какие порты какого типа использовать, таким образом упрощая вашу задачу. Для остальных же есть такой замечательный ресурс, как portforward.com.

  • Преимущество такого метода в том, что вы открываете доступ из интернета именно для определенной программы на определенном компьютере/сервере, все остальные порты компьютера/сервера остаются закрытыми;
  • Недостаток в том, что требуется все порты открывать вручную (иногда программы делают это за вас при помощи технологии UPnP, но такое бывает не всегда).
к содержанию ↑

Послесловие

Получилось несколько сумбурно, да и тема довольно непростая, но надеюсь теперь при слове NAT вас не будет бросать в дрожь :)

Как и всегда, если есть какие-то вопросы, мысли, дополнения и всё такое прочее, то добро пожаловать в комментарии к этой записи.

PS: За существование статьи отдельное спасибо другу проекта и члену нашей команды под ником “barn4k“

Sonikelf's Project's логотип Sonikelf's Project's логотип Космодамианская наб., 32-34 Россия, Москва (916) 174-8226
Sonikelf

Мощь!.. :)

Сергей

Спасибо, просто и доступно для многих. С интересом прочитал про "Тип третий":)

Sonikelf

Рады, что пригодилось :)

Максим

Ваще огонь,,,,,,,,,,,,,,,,,,

Sonikelf

Ну, автор старался :)

Sol

Во круто, То что мне как раз нужно =)

Sonikelf

Всегда пожалуйста :)

Александр

Палец вверх за статью, с удовольствием прочитал.

Sonikelf

Отлично, спасибо! :)

Вадим

Спасибо за статью !
В принципе понятно что NAT позволяет нескольким компьютерам пользоваться одним внешним адресом,
видимо из-за нехватки адресов по IPv4 , интересно останется эта технология при полном переходе на IPv6 ?

Sonikelf

Попробуйте перечитать статью и описание NAT'а как такового :)

Вадим

А что не так ? использование NAT прежде всего обусловлено нехваткой IP адресов ,
для админа это ещё безопасность и администрирование .
Андрей , я о другом , если каждая машина получит свой IP то всё станет открыто и прозрачно :)

Sonikelf

Нехваткой адресов? Правда? Или тем, что в рамках локалки устройствам нафиг не нужны внешние адреса?
Т.е Вы предлагаете каждому устройству давать чистый айпиншник, внезависимости от того, чья это сеть?
Я даже боюсь пытаться объяснить абсурдность связать NAT с количеством адресов.
Ни в коем случае не в обиду, но Вы говорите о NAT из какой-то своей карты мира, примерно так же как системник называют процессором.

Неуловимый_Джо

Стареет братан... :-)

toscha_sv

Вы имели ввиду применение NAT провайдерами. Провайдерам выделяется некий диапазон ip, а те уже внутри локальной сети клиентов дают свои адреса, а абоненты находятся за NAT.

Settera

Спасибо, Sonik, просто и понятно ) Как раз по этой теме копала инфу.

Sonikelf

Спасибо не столько мне, сколько Михаилу, члену команды (ссылка на его профиль нашего форума есть в конце статьи).
Но приятно, стараемся.

Неуловимый_Джо

Надо писать 10 в степени 4к!
Он заслужил... :-)

chapenkov11

Спасибо, в голове еще больше прояснилось. Значит, любой роутер для раздачи интернета в локальной сети использует NAT, а процесс настройки портов для приложений еще называют "проброс порта"? Или я путаю маршрутизатор с файерволлом.

Sonikelf

Да, направление мысли верное

chapenkov11

Вот я сейчас подключен к интернету через USB-модем Мегафона. В свойствах интерфейса IP адрес 10. . . , локальный, насколько я понимаю. Значит подключен через NAT. Значит нахожусь в локальной сети с другими пользователями мегафона. Внутри локальной сети все программы должны работать нормально. Может поэтому иногда все же появляются в торренте скачивающие у меня.

chapenkov11

Еще стоило бы добавить, что IP адрес назначается сетевому интерфейсу, а не компьютеру. Т.е. если в компьютер вставлен WiFi-адаптер, то у него один адрес, а у проводной сетевой карты другой. Когда узнал, для меня это было настоящим откровением.

Sonikelf

Мне казалось это логичным :) Сложно.. ммм.. дать разрешение.. ммм.. компьютеру, а не монитору. Тоже самое с IP.
Но что поделились - спасибо, учтем может в будущем

Вася

Какая то статья для нубов

Sonikelf

И?

Алексей

На внешнем айпи 443 порт, надо полагать для подключения к роутеру?
Спасибо хорошая статья.

Sonikelf

443-тий это HTTPS

DocenT

Спасибо barn4k за статью. Вот так переклинит, что есть NAT, а тут сразу зашёл, прочитал, освежил в памяти.

Sonikelf

Угу, здорово получилось, даже я с удовольствием несколько раз перечитал :)

TrasserZero

А продолжением можно про IPOE? Там с пробросом портов совсем всё печально или что-то всё-таки можно сделать?

Александр

спасибо

Sonikelf

Пожалуйста

shark

про SNAT(да и DNAT) не понял, на какой интерфейс вы предлагаете вешать остальные внешние адреса? алиасами на тот же?

Игорь

спасибо за статью. а в каком ПО нарисованы ваши схемы?

Егор

Большое спасибо за статью! Очень доходчиво и толково рассказано про NAT! Я примерно представлял себе, что это такое -- но вот общей схемы работы этой технологии в голове не было -- теперь появилась, спасибо! =)

Sonikelf

Большое пожалуйста :)

Anton

Спасибо за статью! У моего провайдера есть настройка в личном кабинете включить/выключить NAT, если я при этом подключен через роутер, на котором я так понимаю тоже есть NAT, не получается ли при этом двойного NAT, и не могут ли возникнуть проблемы в многопользовательских играх??

Sonikelf

NAT на роутере провайдера и у Вас это NAT в двух разных местах. Его не может быть много :)
А вот будут ли проблемы надо смотреть в конкретных играх.

Alex

Спасибо большое, крайне простое и понятное разъяснение. Вики до такой подачи материала еще далеко =)

barn4k

Рады, что пригодилось!

Sonikelf

Пожалуйста :)

ALEX_EST

Всё-таки не совсем для меня сообразительно.
Вот при SNAT-e. Провайдер присвоил четыре адреса. Один роутеру, три других серверам. Они всегда видны в сети. Набираем адрес первого сервера - это .12
Вначале запрос попадает на роутер. Но у роутера адрес - .11 !!!
Так какого...запрос попрётся на адрес .11, если запрос послан на адрес .12?
Получается, что все адреса видны из Сети у самого провайдера? А если так, то зачем в этой цепочке тогда лишний роутер?
Вот на DNAT-e понятно, что роутер необходим для местной коммуникации (переключения-присвоения адреса серверам), а на SNAT-e что-то не стыкуется.

barn4k

Так у серверов в любом случае серые адреса. Белые использует роутер, чтобы перенаправить запросы на реальные адреса серверов.
Что по поводу "почему запрос с адресом .12 попадает на роутер .11", то тут в общем-то никакой магии нет. Когда провайдер выделял вам эти белые адреса, то он прописал на своем оборудовании соответствующий маршрут в вашу сторону для этих адресов. Что-то типа "запросы с адресами .11, .12, .13 отправлять Васе". А у Васи первым делом на границе с провайдером стоит именно роутер, который и принимает все запросы, а дальше думает что с ними делать. Соответственно, если у роутера в NAT таблице присутствует адрес .12, то он пересылает запрос на сервер. Если нету, то дропает его.

TonnyOne

Спасибо, очень доступно для понимания!!!

Александр

Здравствуйте. Такой вопрос при использовании сайта чат рулетка, вместо собеседников вижу только черные экраны, (при общении в skype такой проблемы нет) в интернете нашел информацию, что во всем может быть виноват NAT, скажите так ли это на самом деле, как узнать именно мой тип NAT и можно ли все исправить и вернуть на круги своя?

Sonikelf

Приветствую.
А Вы через роутер воткнуты?
Проблема наблюдается во всех браузерах?
Какие расширения установлены?
Вообще редко, чтобы дело было в NAT'е в этом плане.

Marsnow

Тут написали "Значит, любой роутер для раздачи интернета в локальной сети использует NAT"
Вот это я не понял, я думал, что для этого используется DHCP, у меня на wi-fi роутере активирован DHCP, который раздает адреса, вида 192.169.1.*, а каким образом тут nat задействован?

Marsnow

О как, жалко, что об этом нигде не пишут, т.е nat работает по умолчанию, хотя он у меня в админке роутера не активирован. Интересно, а зачем вообще нужен dhcp, если nat может сам адреса раздавать. Я раньше думал, что dhcp раздает адреса и выполняет функцию nat, а сам nat нужен, чтобы связывать локальные сети.

Egor

Ребят, с удовольствием прочитал статью, очень интересно, но в связи с непониманием основ...понятно совсем немногое, разьяснить не прошу, но прошу ответить на такой вопрос)
Начну с предыстории) Мой сын играет в игру injustice 2(файтинг). Так вот при подключении к сопернику, постоянно выкидывает из игры с сообщением "данная сессия более не доступна". Путем, неизвестно каким, мои подозрения пали именно на НАТ, т.к. у меня на данный момент динамический IP, роутер и выделенная линия, а сервер игры находится в Америке. Вопрос в том, изменится ли что то, если я подключу статический IP?
п.с. Прошу прощения за сумбурность написанного текста.

barn4k

Добрый день!

Думаю, проблема не в NAT.
Т.к. здесь именно вы подключаетесь к другому игроку, а не он к вам, то NAT здесь не играет роли. Проблема с большой долей вероятности именно в задержках между вами и игровым сервером. Плюс ко всему, игра только-только вышла (судя по дате выхода в стиме) и там хватает жалоб на сетевую игру. Так что либо сервер очень далеко от вас, либо игра плохо оптимизирована под игру по сети (что довольно часто бывает, и приходится ждать по пол года, пока разработчики выпустят патч).

Egor

Да, вы правы про патчи и плохой нет-код. Но меня смущает то, что даже с игроками с низким пингом такая проблема, даже с соседним городом. Пинг с сервером 160, что в принципе допустимо и не особо критично т.к. задержка включена принудительно и гораздо более высокая. Сервер смотрел в мониторе ресурсов, в ТСР-соединениях. Проверял трассировку...полные потери в нескольких точках маршрута. Так же задавая такой вопрос на форумах игры...с такой проблемой из 100 человек 5.

Egor

В любом случае спасибо за ответ) Удачного вам дня и хороших людей на пути)

Роман

Уважаемый автор, вы сами придумали статик и динамик? в интернетах кроме вас никто такого не пишет...

Общепринятая расшифровка:
SNAT - Source NAT
DNAT - Destination NAT

dex888

Вестчъ!... :)

Sonikelf

Таки да