Какой вариант сетевой трансляции адресов и портов используется на межсетевом экране

Обновлено: 16.05.2024

Трансляция сетевых адресов (NAT) используется многими сервис провайдерами и частными пользователями для решения проблемы нехватки реальных IP-адресов и обеспечения безопасности локальных сетей подключенных к Интернету. Например. Предприятие может иметь выделенный диапазон реальных IP-адресов, но гораздо большее количество компьютеров имеющих локальные IP-адреса которым необходим доступ в Интернет. Для решения этой проблемы используется технология трансляции адресов, которая позволяет компьютерам локальной сети взаимодействовать с сетью Интернет, используя всего один внешний реальный IP-адрес. NAT решает эту проблему с помощью подмены локального IP-адреса на наружный общедоступный адрес. Заменяя внутренний IP-адрес и порт на внешний IP-адрес и порт, NAT сохраняет таблицу соответствия, затем при получении ответного пакета производится обратное преобразование.
К локальным IP-адресам относятся следующие диапазоны адресов: 10.ххх.ххх.ххх, 192.168.ххх.ххх, 172.16.ххх.ххх - 172.32.ххх.ххх.
Схема работы NATа

Типы трансляторов сетевых адресов (NAT)

Трансляторы адресов подразделяются на 4 типа:
1. Symmetric NAT.
2. Full Cone NAT.
3. Address Restricted Cone NAT (он же Restricted NAT).
4. Port Restricted Cone NAT (или Port Restricted NAT)

В первых трех типах NATа разные IP-адреса внешней сети могут взаимодействовать с адресом из локальной сети используя один и тот же внешний порт. Четвертый тип, для каждого адреса и порта использует отдельный внешний порт.
NATы не имеют статической таблицы соответствия адресов и портов. Отображение открывается, когда первый пакет посылается из локальной сети наружу через NAT и действует определенный промежуток времени (как правило, 1-3 минуты), если пакеты через этот порт не проходят, то порт удаляется из таблицы соответствия. Обычно NAT распределяют внешние порты динамически, используется диапазон выше 1024.

1.Symmetric NAT.
До недавнего времени это была наиболее распространённая реализация. Его характерная особенность – в таблице NAT маппинг адреса IL на адрес IG жёстко привязан к адресу OG, то есть к адресу назначения, который был указан в исходящем пакете, инициировавшем этот маппинг. При указанной реализации NAT в нашем примере хост 192.168.0.141 получит оттранслированные входящие UDP-пакеты только от хоста 1.2.3.4 и строго с портом источника 53 и портом назначения 1053 – ни от кого более. Пакеты от других хостов, даже если указанные в пакете адрес назначения и порт назначения присутствуют в таблице NAT, будут уничтожаться маршрутизатором. Это наиболее параноидальная реализация NAT, обеспечивающая более высокую безопасность для хостов локальной сети, но в некоторых случаях сильно усложняющая жизнь системных администраторов. Да и пользователей тоже.

2. Full Cone NAT.
Эта реализация NAT – полная противоположность предыдущей. При Full Cone NAT входящие пакеты от любого внешнего хоста будут оттранслированы и переправлены соответствующему хосту в локальной сети, если в таблице NAT присутствует соответствующая запись. Более того, номер порта источника в этом случае тоже не имеет значения – он может быть и 53, и 54, и вообще каким угодно. Например, если некое приложение, запущенное на компьютере в локальной сети, инициировало получение пакетов UDP от внешнего хоста 1.2.3.4 на локальный порт 4444, то пакеты UDP для этого приложения смогут слать также и 1.2.3.5, и 1.2.3.6, и вообще все до тех пор, пока запись в таблице NAT не будет по какой-либо причине удалена. Ещё раз: в этой реализации NAT во входящих пакетах проверяется только транспортный протокол, адрес назначения и порт назначения, адрес и порт источника значения не имеют.

3. Address Restricted Cone NAT (он же Restricted NAT).
Эта реализация занимает промежуточное положение между Symmetric и Full Cone реализациями NAT – маршрутизатор будет транслировать входящие пакеты только с определенного адреса источника (в нашем случае 1.2.3.4), но номер порта источника при этом может быть любым.

4.Port Restricted Cone NAT (или Port Restricted NAT).
То же, что и Address Restricted Cone NAT, но в этом случае маршрутизатор обращает внимание на соответствие номера порта источника и не обращает внимания на адрес источника. В нашем примере маршрутизатор будет транслировать входящие пакеты с любым адресом источника, но порт источника при этом обязан быть 53, в противном случае пакет будет уничтожен маршрутизатором.

NAT и Интернет телефония с использованием SIP протокола

Существует три основных проблемы прохождения через NAT звонков с использованием SIP протокола.
1. Наличие локальных адресов в SIP сигнализации.

v=0
o=root 3303 3304 IN IP4 192.168.0.21
s=session
c=IN IP4 192.168.0.21
t=0 0
m=audio 40358 RTP/AVP 8 101
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=silenceSupp:off - - - -
a=sendrecv

Содержание

Методология

Оригинальное использование преобразования сетевых адресов состоит в отображении каждого адреса одного адресного пространства в соответствующий адрес в другом пространстве, например, в случае, когда предприятие изменило провайдера Интернет-услуг и не имеет средств на то, чтобы объявить об этом публике. Преобразование сетевых адресов все чаще используется еще начиная с 1990-х, когда началось истощение обозримого глобального IP-адресного пространства. Вместе с ним используется и IP-маскировка, которая представляет собой метод, скрывающий все IP-адресное пространство, которое, как правило, состоит из IP-адресов частной сети и IP-адреса в другой, как правило, общественной сети. Этот механизм реализован в маршрутизаторе, который использует таблицы перевода с сохранением состояния для отображения "скрытые" адреса в один IP-адрес и переадресует исходящие IP-пакеты на выход. В обратном канале связи, ответы отображаются в обратном исходному IP-адресу порядке. Данный метод позволяет осуществлять связь через маршрутизатор только тогда, когда разговор происходит в замаскированной сети, так как это создает таблицы перевода. Например, веб-браузер в замаскированной сети может просматривать веб-сайт за пределами, но веб-браузер снаружи не может просматривать веб-сайт, размещенный в сети, которая замаскирована. Тем не менее, большинство устройств NAT сегодня позволяют сетевому администратору конфигурировать записи таблицы перевода для постоянного пользования. Эта функция часто упоминается как "статический NAT" или перенаправление портов, позволяющее отобразить трафик, исходящий в "внешней" сети на сеть замаскированную [2] .

Термин NAT стал практически синонимом IP маскировки.

Так как преобразование сетевых адресов изменяет информацию адреса IP в пакеты, она имеет серьезные последствия для качества подключения к Интернету и требует пристального внимания к деталям процесса реализации.

Основной тип преобразования сетевых ресурсов

Простейший тип преобразования сетевых ресурсов (NAT) обеспечивает трансляцию IP-адресов один-к-одному. RFC 2663 относится к этому типу NAT в качестве основного NAT; его часто также называют NAT один-к-одному. В этом типе NAT, только IP-адреса, IP-заголовка контрольной суммы и любых высших контрольных сумм уровня, которые включают в себя измененный IP-адрес. Основные NAT можно использовать для соединения двух IP-сетей, у которых несовместимы адресации.

Назначение NAT

  1. Вывод в интернет внутренней сети через пул внешних адресов; один внешний адрес;
  2. Для подмены внешнего IP-адреса другим (перенаправление трафика);
  3. Для балансировки нагрузки между одинаковыми серверами с разными IP-адресам;
  4. Для объединения двух локальных сетей с пересекающейся внутренней адресацией.

Концепции трансляции адресов NAT

Существует 3 базовых концепции трансляции адресов: статическая (Static Network Address Translation), динамическая (Dynamic Address Translation), маскарадная(NAPT, NAT Overload, PAT).

Статический NAT

132806-NON - Static NAT ос.jpg

Динамический NAT

Dynamicnat1 ос.jpg

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

Практический пример действия NAT

Адресация в закрытой сети и трансляция сетевых адресов (NAT) — это два взаимосвязанных метода, которые способствуют резкому сокращению потребности в использовании открытых IP-адресов. В основе этих методов лежит простой принцип. Хостам закрытой сети присваиваются адреса, которые не используются в общедоступной сети (Internet). При возникновении необходимости организовать обмен данными между хостом в закрытой сети и хостом в открытой сети первый посылает запрос в сетевой шлюз, который преобразует закрытый IP-адрес в открытый IP-адрес. Благодаря этому уменьшается потребность в использовании открытых IP-адресов, поскольку не приходится присваивать открытый IP-адрес каждому хосту, для которого необходимо обеспечить работу в Internet. Вместо этого присваивается один (или несколько) адресов устройству NAT, которое обеспечивает доступ к Internet.

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


Как показано на рис. 2, хост посылает запрос по адресу www.cisco.com из закрытой сети. Он имеет адрес закрытой сети, поэтому должен обратиться к устройству NAT, чтобы выйти в Internet. В данном случае функции устройства NAT (т.е. трансляцию сетевых адресов) выполняет маршрутизатор. А компьютер просто применяет к адресу получателя маску сети с помощью операции "И" и определяет, что пакет предназначен для другой сети и передает его в шлюз, предусмотренный по умолчанию (маршрутизатор с поддержкой NAT). При поступлении в маршрутизатор пакет имеет следующие поля [3] .


Рис. 2 Схема сети, рассматриваемой в примере с применением метода NAT

Теперь маршрутизатор с поддержкой NAT принимает пакет и заменяет в нем адрес отправителя своим открытым IP-адресом (в данном примере 70.14.1.1), а также вводит другой номер порта, чтобы иметь возможность отличить пакет, переданный в ответ отправителю (по адресу 192.168.1.10), от других пакетов, например, передаваемых в ответ на компьютер с адресом 192.168.1.200. Маршрутизатор вносит сведения о выполненных им преобразованиях в таблицу трансляции и отправляет пакет на Web-сервер. К этому времени заголовок пакета содержит данные, приведенные ниже.

Преобразуется и IP-адрес этого компьютера (192.168.1.200), и после преобразования заголовок пакета содержит данные, перечисленные ниже.

После выполнения всех этих действий устройство NAT формирует таблицу трансляции, которая приведена в табл. 1.

Таблица 1. Таблица трансляции NAT
IP-адрес отправителя
Порт отправителя
Оттранслированный IP-адрес
Оттранслированный номер порта
192.168.1.10
44000
70.14.1.1
60000
192.168.1.200
55555
70.14.1.1
50600

Трансляция сетевых адресов может выполняться маршрутизатором, но чаще всего этот процесс осуществляется в специализированном устройстве, который принято называть прокси-сервером. Прокси-сервер выполняет основные функции трансляции сетевых адресов NAT, а также обеспечивает выполнение целого ряда других процессов. В частности, прокси-сервер обеспечивает хеширование информационного наполнения (записывает файлы, как правило, Web-страницы, к которым часто происходит доступ на своем жестком диске, чтобы при получении повторного запроса к этим данным с другого хоста не приходилось снова выполнять их загрузку из Internet), преобразование пакетов других протоколов (таких как IPX/SPX) в пакеты IP и фильтрацию пакетов (принимает или отбрасывает пакеты с учетом таких критериев, как IP-адрес отправителя или номер порта). Но независимо от того, каким устройством осуществляется трансляция сетевых адресов, метод NAT применяется более эффективно при использовании пула IP-адресов, а не отдельного адреса, поскольку при наличии нескольких IP-адресов устройству NAT не приходится слишком часто выполнять трансляцию номеров портов [4] .

Хотя метод NAT может применяться при использовании любой структуры IР адресов (включая открытые адреса), обычно лучше использовать пространство адресов, зарезервированное для закрытой сети. Причина этого очень проста — если в закрытой сети применяются открытые адреса, то общедоступный ресурс, обозначенный этим адресом (а также все другие ресурсы, обозначенные применяемой маской), станут недоступными из закрытой сети. Например, если организация использует в своей внутренней сети адрес 207.46.230.0/24, то ее сотрудники не смогут обратиться к любому компьютеру в Internet, находящемуся в сети 207.46.230.0 (которая принадлежит Microsoft), поскольку хост локальной сети будет рассматривать такой адрес получателя в пакете как локальный адрес и не отправит пакет в устройство NAT.

В связи с этим, для каждого класса сети (от А до С) определен блок адресов, предназначенный для использования в закрытой сети. Именно эти адреса, перечисленные ниже, должны использоваться в сочетании со средствами NAT.

  • 10.0.0,0.
  • 172.16.0.0 до 172.31.0.0 (16 сетей).
  • 192.168.0.0 до 192.168.255.0 (256 сетей).

Метод адресации в закрытой сети определен в документе RFC 1918, а метод NAT — в документе RFC 3022.

Трансляция сетевых адресов по английский Network Address Translation (NAT) это технология замены ip адресов и портов в заголовке ip пакета. Чаще всего nat используется, чтобы заменить ip адрес внутренней сети на ip адрес из внешней сети. Это делается, чтобы преодолеть нехватку адресов IPv4.

p, blockquote 1,0,0,0,0 -->


p, blockquote 2,0,0,0,0 -->

Внутренние и внешние IP адреса

Внешние ip адреса это обычные адреса, которые можно применять в интернет. Они должны быть уникальными во всём мире, их нельзя использовать просто так. Нужно получать разрешение у корпорации ICANN, у одного из ее региональных регистраторов.

p, blockquote 3,0,0,0,0 -->

Проблема с внешними адресами в протоколе ipv4 в том, что их не хватает для современного масштаба интернет. Адресов ipv4 примерно 4 млрд., а сейчас устройств в интернете гораздо больше.

p, blockquote 4,0,0,0,0 -->

Внутренние IP адреса это три специальных, диапазонов ip адресов, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 которые можно использовать для создания внутренних или частных сетей. Диапазоны определены в документе RFC 1918. Эти адреса не могут использоваться в интернет, зато их можно применять в своей сети без обращения в ICANN. Разные частные сети, могут использовать одни и те же диапазоны внутренних ip адресов.

p, blockquote 5,0,0,0,0 -->

Пример использования NAT

Как работает технология NAT для преобразования внутренних адресов во внешние? Предположим, у нас есть сеть организации в которой используются внутренние адреса из диапазона 192.168.1.0. Есть Интернет в котором такие адреса использовать нельзя и внутренняя сеть подключаемая к интернет через устройство NAT.

p, blockquote 6,0,0,0,0 -->

Устройство nat

p, blockquote 7,0,0,0,0 -->

Устройство NAT имеет один внешний ipv4 адрес 184.86.48.128 и когда компьютеры из внутренней сети хотят подключиться к интернету, устройство NAT преобразует ip адреса из внутренней сети в ip адрес внешней сети.

p, blockquote 8,0,0,0,0 -->

Типы NAT

Есть достаточно много разных вариантов технологии NAT. Мы рассмотрим 3 типа, которые используются чаще всего. Однако, кроме них есть и другие возможные варианты.

p, blockquote 9,0,0,0,0 -->

Статический NAT

Первый тип это статическое отображение ip адресов один к одному. В этом случае, нам нужно иметь столько же внешних адресов, сколько и компьютеров во внутренней сети. т.е. 4 компьютера и 4 ip адреса в нашем случае. И у нас фиксированное отображение внутренних адресов во внешние ip адреса.

p, blockquote 10,0,0,0,0 -->

Статический nat

p, blockquote 11,0,0,0,0 -->

Такая схеме используетя редко и она возможна, когда Вы подключаете сеть организации не к интернет, а к какой-то другой организации, где тоже используются внутренние ip адреса и возможен конфликт ip адресов.

p, blockquote 12,0,1,0,0 -->

Динамический NAT

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

p, blockquote 13,0,0,0,0 -->

Динамический nat

p, blockquote 14,0,0,0,0 -->

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

p, blockquote 15,0,0,0,0 -->

Один ко многим (masquerading)

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

p, blockquote 16,0,0,0,0 -->

Рассмотрим, как работает вариант NAT one-to-many, потому что с его помощью, можно подключать к интернет большие сети организаций, используя один внешний ip адрес (184.86.48.128). Именно это позволяет частично смягчить проблему нехватки адресов ipv4.

p, blockquote 17,0,0,0,0 -->

masquerading

p, blockquote 18,0,0,0,0 -->

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

p, blockquote 19,0,0,0,0 -->

Таблица nat

p, blockquote 20,0,0,0,0 -->

Работа NAT

Как работает nat в режиме masquerading? Предположим, что первый компьютер решил зайти на сайт. Он отправляет пакет, в ip адресе указывается ip адрес компьютера из внутренней сети (192.168.1.2), в поле порт указывается динамический порт, выданный браузеру операционной системой (57160). И пакет предназначен для 80 порта адреса Веб-сайта.

p, blockquote 21,0,0,0,0 -->

Работа nat

p, blockquote 22,0,0,0,0 -->

Но, так как адреса из внутренней сети не могут использоваться в интернет, то устройству nat нужно заменить ip адрес из внутренней сети в заголовке пакета в адресе отправителя (192.168.1.1), на ip адрес из внешней сети (184.86.48.128).

p, blockquote 23,0,0,0,0 -->

Как это делает устройство nat? После того, как устройство nat получило пакет, оно записывает внутренний ip адрес и внутренний порт в таблицу и генерирует пару внешний адрес и внешний порт для замены в пакете. Так как у нас всего лишь один внешний адрес, то именно он записывается в поле внешний ip. Внешний порт генерируется случайным образом. Устройство нат сгенерировало адрес пота 48202.

p, blockquote 24,0,0,0,0 -->

Работа nat

p, blockquote 25,1,0,0,0 -->

На следующем этапе происходит трансляция, т.е. замена ip адреса и порта. IP адрес и порт отправителя удаляются из пакета и на их место записываются новые данные из таблицы nat. Внешний ip адрес устройства nat и внешний порт, которое устройство nat сгенерировало случайным образом.

p, blockquote 26,0,0,0,0 -->

Работа nat

p, blockquote 27,0,0,0,0 -->

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

p, blockquote 28,0,0,0,0 -->

указывается ip адрес устройства nat

p, blockquote 29,0,0,0,0 -->

Но в реальности эти данные предназначены не для устройства nat, а для компьютера внутренней сети. Поэтому устройство нат должно понять к какому компьютеру во внутренней сети предназначены данные. Затем изменить ip адрес и порт, передать данные нужному компьютеру. Это делается, с помощью таблицы nat.

p, blockquote 30,0,0,0,0 -->

В таблице nat ищется запись в которой внешний ip адрес и внешний порт, такие же как в поступившем пакете. Пока у нас в таблице одна запись, поэтому устройство nat берет из этой записи внутренний ip адрес интересующего нас компьютера и его порт. Устройство nat сново производит замену ip адреса и порта в пакете и в в таком виде передает пакет во внутреннюю сеть.

p, blockquote 31,0,0,0,0 -->

передает пакет во внутреннюю сеть

p, blockquote 32,0,0,0,0 -->

p, blockquote 33,0,0,0,0 -->

ip адрес устройства nat

p, blockquote 34,0,0,0,0 -->

Адрес и порт из внутренней сети меняются на адрес и порт из внешней сети. И в таком виде пакет передается в интернет.

p, blockquote 35,0,0,0,0 -->

Адрес и порт из внутренней сети меняются на адрес и порт из внешней сети

p, blockquote 36,0,0,0,0 -->

Когда приходит ответ от веб-сервера, снова выполняется поиск пары внешний ip адрес и внешний порт. В таблице nat ищется соответствующие им внутренний ip адрес и внутренний порт. Производится замена в заголовке пакета и пакет передается во внутреннюю сеть. Можете посмотреть видео, если что-то было не ясно.

p, blockquote 37,0,0,0,0 -->

p, blockquote 38,0,0,1,0 -->

Преимущества NAT

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

p, blockquote 39,0,0,0,0 -->

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

p, blockquote 40,0,0,0,0 -->

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

p, blockquote 41,0,0,0,0 -->

Недостатки NAT

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

p, blockquote 42,0,0,0,0 -->

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

p, blockquote 43,0,0,0,0 -->

Некоторые протоколы, которые разрабатывались в ранние годы создания интернет, и рассчитаны на то, что каждое устройство может соединиться с каждым, в случае с nat работают плохо. Например, плохо работает протокол FTP, который использует два соединения, одно для управления, другое для передачи данных. Соединение для передачи данных обычно устанавливается сервером, если клиент находится за устройством nat, то сервер FTP не может установить с ним соединение для передачи данных.

p, blockquote 44,0,0,0,0 -->

Плохо работают протоколы, которые не устанавливают соединения. Для которых нет возможности сохранить запись в таблице nat на всё время жизни соединения.

p, blockquote 45,0,0,0,0 -->

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

p, blockquote 46,0,0,0,0 -->

Решение проблем с NAT

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

p, blockquote 47,0,0,0,0 -->

Можно использовать отображение один к одному, но для этого нужно иметь несколько внешних ip адресов.

p, blockquote 48,0,0,0,0 -->

Также можно использовать статическое отображение для портов. Например, порт 80 на устройстве nat отображается во внутренний адрес сервера и порт 80. Порт 25, который используется для электронной почты отображается во внутренний адрес почтового сервера и порт 25. В этом случае у нас есть один ip адрес, но разные его порты отображаются в разные пары, ip адрес и порт, во внутренней сети.

p, blockquote 49,0,0,0,0 -->

Есть технология NAT Traversal, которая позволяет устанавливать соединения с компьютерами во внутренней сети без интернет. Она определена в стандарте RFC 3489. Есть и другие варианты такой технологии. Такая технология часто используется в приложениях для передачи видео и голоса, например Skype.

p, blockquote 50,0,0,0,0 -->

Итоги

Рассмотрели технологию трансляции сетевых адресов NAT, она используется, чтобы в заголовке ip пакета преобразовать ip адрес внутренней или частно сети в ip адрес внешней сети, которая может использоваться в интернет. Технология nat реализуется с помощью маршрутизаторов, межсетевых экранов и другие сетевые устройства.

1. NAT решает проблему ограниченного диапазона IP-адресов, она существенна до тех пор, пока не произойдёт окончательный переход на IPv6.

2. Позволяет ограничить общение снаружи ко внутренним хостам, при этом возможность общаться изнутри наружу остаётся.

Компьютер может быть подключен к Интернету напрямую (белый IP-адрес, обычно при подключении непосредственно к модему), либо через NAT — тогда компьютер имеет локальный IP-адрес, из Интернета недоступный (частный, серый). К серым адресам относятся адреса из следующих диапазонов:

Диапазон Количество хостов
10.0.0.0 - 10.255.255.255/8 16 777 216 хостов
172.16.0.0 - 172.31.255.255/12 1 048 576 хостов
192.168.0.0 - 192.168.255.255/16 65 536 хостов

Преобразование адреса методом NAT может производиться почти любым маршрутизирующим устройством — маршрутизатором, сервером доступа, межсетевым экраном. Принимая пакет от локального компьютера, роутер смотрит на IP-адрес назначения. Если это локальный адрес, то пакет пересылается другому локальному компьютеру. Если нет, то пакет надо переслать наружу в интернет. Но ведь обратным адресом в пакете указан локальный адрес компьютера, который из интернета будет недоступен. Поэтому роутер «на лету» транслирует (подменяет) обратный IP-адрес пакета на свой внешний (видимый из интернета) IP-адрес и меняет номер порта (чтобы различать ответные пакеты, адресованные разным локальным компьютерам). Комбинацию, нужную для обратной подстановки, роутер сохраняет у себя во временной таблице. Через некоторое время после того, как клиент и сервер закончат обмениваться пакетами, роутер сотрет у себя в таблице запись о n-ом порте за сроком давности.

NATExample2.jpg

Один внутренний адрес преобразуется в один внешний, все запросы, приходящие на внешний адрес будут транслироваться на внутренний, как будто хост и является обладателем белого IP-адреса. Такой подход бывает полезным, когда внутри частной сети есть сервер, к которому необходим полный доступ извне. Минус подхода в том, что он никак не помогает сохранить белые адреса.

Есть пул белых адресов, например, провайдер выделил сеть 198.51.100.0/28 с 16-ю адресами. Два из них (первый и последний) — адрес сети и широковещательный, ещё два адреса назначаются на оборудование для обеспечения маршрутизации. Двенадцать оставшихся адресов можно использовать для NAT и выпускать через них своих пользователей.

Ситуация похожа на статический NAT — один приватный адрес транслируется на один внешний, — но теперь внешний не чётко зафиксирован, а будет выбираться динамически из заданного диапазона. Проблема подхода такая же, как и в случае со статическим NAT — не решается проблема ограниченности белых адресов.

Следующий тип имеет несколько названий: NAT Overload, Port Address Translation (PAT), IP Masquerading, Many-to-One NAT. Суть этого типа в том, что через один внешний адрес выходит наружу много приватных. Этот подход, в отличие от предыдущих, позволяет решить проблему с нехваткой внешних адресов.

  • Принцип сетевых адресов никак не вписывается в архитектуру IP, которая подразумевает, что каждый IP-адрес уникальным образом идентифицирует только одну машину в мире.
  • NAT нарушает «сквозной» принцип, согласно которому каждый хост должен уметь отправлять пакет любому другому хосту в любой момент времени. Поскольку отображение адресов в NAT задается исходящими пакетами, входящие пакеты не принимаются до тех пор, пока не отправлены исходящие.
  • NAT превращает Интернет из сети без установления соединения в нечто подобное сети, ориентированной на соединение. Проблема в том, что NAT-блок должен поддерживать таблицу отображения для всех соединений, проходящих через него. Запоминать состояние соединения — дело сетей, ориентированных на соединение, но никак не сетей без установления соединений.
  • При использовании NAT нарушается одно из фундаментальных правил построения многоуровневых протоколов: уровень [math]k[/math] не должен строить никаких предположений относительно того, что именно уровень [math]k + 1[/math] поместил в поле полезной нагрузки.
  • Процессы в Интернете вовсе не обязаны использовать только TCP или UDP. Если пользователь машины [math]A[/math] решит придумать новый протокол транспортного уровня для общения с пользователем машины [math]B[/math] , то ему придется как-то бороться с тем, что NAT не сможет корректно обработать поле Порт источника TCP.

Hole punching — метод для прямого соединения двух хостов, которые находятся за NAT-ами. Для инициации соединения требуется третья сторона – сервер, который виден обоим компьютерам. Обычно используются публичные STUN-серверы.

STUN (сокр. от англ. Session Traversal Utilities for NAT, Утилиты прохождения сессий для NAT) — это сетевой протокол, который позволяет клиенту, находящемуся за сервером трансляции адресов (или за несколькими такими серверами), определить свой внешний IP-адрес, способ трансляции адреса и порта во внешней сети, связанный с определённым внутренним номером порта. Эта информация используется для установления соединения UDP между двумя хостами в случае, если они оба находятся за маршрутизатором NAT.

Если [math]A[/math] и [math]B[/math] находятся за одним и тем же NAT-ом, то они соединятся через приватные адреса, иначе через публичные. На картинке показан пример, когда [math]A[/math] и [math]B[/math] находятся за разными NAT-ами.

UDPHolePunching.jpg

  • Клиент [math]A[/math] использует TCP соединение с [math]S[/math] , чтобы попросить о помощи для подключения к [math]B[/math] .
  • [math]S[/math] отвечает [math]A[/math] , отправляя приватный и публичный адреса [math]B[/math] , и в то же время посылает [math]B[/math] приватный и публичный адреса [math]A[/math] .
  • Из тех же самых локальных портов TCP, которые [math]A[/math] и [math]B[/math] используют для соединения с [math]S[/math] , [math]A[/math] и [math]B[/math] каждый асинхронно совершают попытки подключения друг к другу по публичному и приватному адресам, и одновременно слушают эти порты на входящие соединения.
  • Когда TCP соединение устанавливается, клиенты идентифицируют друг друга, чтобы убедиться, что они подключены к нужному клиенту. Если проверка подлинности завершается неудачно, клиенты закрывают эту связь и продолжают ожидание. Клиенты используют первое успешное соединение.

В отличие от UDP, где каждый клиент только нуждается в одном сокете, чтобы взаимодействовать с [math]S[/math] и любым числом хостов одновременно, в TCP приложение должно управлять несколькими сокетами привязаными к одному локальному TCP порту на клиенте. Каждый клиент нуждается в сокете, который соединяет его с [math]S[/math] , слушающем сокете, который будет принимать входящие соединения, и в двух дополнительных сокетах, с помощью которых клиент будет инициировать исходящие соединения с публичными и приватными TCP адресами другого клиента.

Читайте также: