Тема: Все, что вы хотели знать о NAT, но боялись спросить [NAT, PAT, SNAT, DNAT]  (Прочитано 610 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Tyr0I{

  • Учитель
  • ****
  • Сообщений: 1045
  • Поблагодарили: 4 раз(а)
  • Уважение: +1/-0
  • Пол: Мужской
    • Просмотр профиля
Доброго времени суток, дорогие читатели!

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

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

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


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

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

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

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

Тип первый, Static NAT (SNAT)

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

Кстати говоря о портах, попробую несколько углубиться в эту тему, но не слишком сильно. Дело в том, что любой сервис, любая программа обращается к компьютеру, серверу, роутеру или сервису (будь то почта, веб-страничка или любой другой сервис) не только по IP адресу, но и по порту. Например, чтобы вам открыть страничку google.com со своего компьютера, вам надо ввести две вещи: IP адрес (DNS имя) и.. порт. Но постойте, возмутитесь вы, ведь никакого порта вы не вводите и все отлично открывается! Дело в том, что, нет, в DNS записи порт не прячется, как некоторые могли бы подумать, этот самый порт ваш браузер сам подставляет в адресную строку вместо вас. Вы можете легко это проверить. Введите в адресной строке google.com:80 и увидите, что страничка гугла открылась, но волшебные «:80» внезапно исчезли. Так вот, чтобы пользователям из интернета вас видеть и иметь возможность к вам подключаться, они должны знать две вещи: ваш IP адрес и ваш порт, на котором расположен ваш сервис. При статическом NAT вам будет фиолетово какой порт использует сервер или программа, т.к. сервер становится полностью доступен из интернета. Чтобы уже ограничить используемые порты, настраивается на этом сервере межсетевой экран.

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

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


Например, провайдер выдал вам четыре 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 таблице роутера будет храниться всегда.

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

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

Недостатки:

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

Тип второй, Dymanic NAT (DNAT)

Динамический NAT отличается от статического немногим. Он используется почти также, но с тем лишь исключением, что ваши сервера не видны из интернета, но самим серверам этот интернет нужен. Суть его в том, что вам также выдаются несколько внешних IP адресов от провайдера, после чего роутер сам распределяет адреса между «нуждающимися». Т.е. как только сервер или компьютер захотел выйти в интернет, роутер смотрит на свой список внешних адресов, выданных провайдером, и выдает один адрес из этого списка, при этом помечает что вот он выдал такой-то внешний адрес такому-то серверу или компьютеру (таблица NAT). При этом срок жизни такой записи длится очень короткое время и как только сервер/компьютер перестал требовать доступ в интернет, этот адрес удаляется из таблицы NAT роутера. Существенный недостаток в том, что количество серверов и компьютеров, которым требуется доступ в интернет, не должен сильно превышать кол-во выданных провайдером внешних адресов. Ведь как только у роутера закончатся адреса в списке, он не сможет пустить новые компьютеры или серверы в интернет, пока не освободится хотя бы один внешний адрес.


В данном примере провайдер выдал нам всего два внешних адреса: 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).

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


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

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

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


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

  • Для сервера Teamspeak (TS) я порт не менял, т.к. такой сервер у нас один и пользователям не придется вообще вводить его порт. Они просто вбивают у себя адрес 87.123.41.12 и попадают на наш сервер TS, удобно и практично;
  • Для FTP сервера я порт поменял, т.к., строго говоря, FTP-сервер не должен быть доступен по стандартному порту, на него могут лазить недобросовестные люди. А так вы говорите тем, кому надо, чтобы подключались на 87.123.41.12:21000 и они попадут на ваш FTP-сервер;
  • Для Веб-сервера я http порт не менял опять же из-за удобства, чтобы пользователям не надо было вводить адрес вместе с портом в адресной строке. Они просто вводят 87.123.41.12 и подключаются на ваш Веб-сервер. Порт HTTPS же я поменял для наглядности. Пользователям, чтобы попасть на ваш Веб-сервер по защищенному каналу, придется вводить в адресной строке адрес 87.123.41.12:444;
  • С торрентами в общем-то все просто, какой порт настроен в самой программе, такой и настраивается на роутере;
  • Порт игрового сервера, где в качестве примера я взял обычный стимовский игровой сервер (Dedicated Server), я также не менял, а оставил стандартный;
  • А вот с 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, но такое бывает не всегда).
Хорошие люди принесут вам счастье, плохие наградят вас опытом, худшие - дадут вам урок, а лучшие - подарят воспоминания. Цените каждого!
 


 


Поиск

 
SimplePortal 2.3.6 © 2008-2014, SimplePortal