Приветствую всех читателей данной статьи!
Данная статья будет полезна как новичкам в IT сфере, так и неопытным системным администраторам/ сетевым инженерам. Здесь затрагиваются понятия и принцип работы технологии NAT, ее значение в наше время, виды и создание с конфигурированием в программе-симуляторе Cisco Packet Tracer.
Введение
Интернет - всемирная система, состоящая из объединенных компьютерных сетей на базе протокола TCP/IP.
Сейчас интернет - это не просто сеть, а целая информационная вселенная, подчиняющаяся техническим, социальным и государственным законам в различных ее частях. В современном мире люди не обходятся без доступа во всемирную паутину. Интернет открывает множество возможностей получения информации из любой точки мира.
На данный момент в интернете больше всего распространены IP адреса версии - IPv4. Это позволяет создать 4.3 млрд. IP-адресов. Однако этого, казалось бы, большого количества критично не хватает. Чтобы решить эту проблему - был создан механизм преобразования сетевых адресов - NAT.
С задачей объединения устройств в единую сеть помогают различные компании, занимающиеся разработкой и внедрением сетевого оборудования.На сей момент на рынке сетевого оборудования доминируют компании Cisco Systems и Huawei. В данной статье будем вести работу с оборудованием Cisco.
Cisco Systems разработала собственную специальную межсетевую ОС для работы с оборудованием под названием IOS (Internet Operating System). IOS - многозадачная операционная система, выполняющая функции сетевой организации, маршрутизации, коммутации и передачи данных. ОС IOS представляет собой сложную операционную систему реального времени, состоящую из нескольких подсистем и имеющую множество возможных параметров конфигурирования.
В операционной системе IOS представлен специфичный интерфейс командой строки CLI (Command Line Interface). В этом интерфейсе возможно использовать некоторое количество команд. Количество зависит от выбранного режима и от уровня привилегий пользователя (пользовательский, привилегированный, глобальной конфигурации и специфической конфигурации).
Нехватка IP адресов. Технология NAT
В 80х годах ХХ века заложили основу IPv4, позволяющую создавать ~4.3 млрд. адресов, но никто не предполагал, что этот запас так быстро иссякнет. С каждым годом появлялось все больше и больше пользователей и с 25 ноября 2019г. в России и в Европе официально закончились IP адреса. Лимит исчерпан.
Для решения этой проблемы было придумано несколько способов:
Первый способ заключается в усилении контроля за IP адресами.
Пусть существует некоторый сайт N с IPv4 xxx.xxx.xxx.xxx, и его хост решил прекратить его поддержание данного сайта. Сайт заброшен, а IP продолжает числиться как занятый и таких случаев может быть очень много. То бишь необходимо провести "инвентаризацию" IP адресов и изъять неиспользуемые/заброшенные.
Второй способ - в массовом использовании системы IPv6.
Протокол IPv6 разработан как преемник протокола IPv4. Основные преимущества IPv6 над IPv4 заключаются в увеличенном адресном пространстве (IPv4 имел 32 бита, что равнялось 232 адресам, а IPv6 имел 128 бит, что равнялось 2128 адресам), 6 версия протокола стала безопаснее (т.к. в v4 не предусматривались многие аспекты безопасности, ибо расчет был на сторонние ПО, а в v6 появились контрольные суммы и шифрование пакетов), однако это далеко не все преимущества IPv6 над IPv4.
Проблема, казалось бы, решена, однако перейти с протокола IPv4 на IPv6 вызывает трудности, потому что эти протоколы несовместимы. И изюминкой причины тяжелого перехода на 6 версию протокола является денежная стоимость. Многие кампании не готовы вложить достаточное кол-во средств для перехода, хоть и стоит отметить, что процесс перехода с 4 на 6 версию постепенно идет.
И третий способ - использование технологии трансляции сетевых адресов - NAT.
Cогласно документу RFC 1918, IANA зарезервировала 3 блока адресов для частных IP (серых) (рис 1), остальные же IP адреса носят название публичных адресов (белых).
Network Address Translation - это механизм в сетях TCP/IP, позволяющий изменять IP адрес в заголовке пакета, проходящего через устройство маршрутизации трафика.
Принимая пакет от локального компьютера, маршрутизатор смотрит на IP-адрес назначения. Если это локальный адрес, то пакет пересылается другому локальному компьютеру. Если нет, то пакет надо переслать наружу в интернет.
Маршрутизатор подменяет обратный IP-адрес пакета на свой внешний (видимый из интернета) IP-адрес и меняет номер порта (чтобы различать ответные пакеты, адресованные разным локальным компьютерам). Комбинацию, нужную для обратной подстановки, маршрутизатор сохраняет у себя во временной таблице. Через некоторое время после того, как клиент и сервер закончат обмениваться пакетами, маршрутизатор сотрет у себя в таблице запись об n-ом порте за сроком давности.
Основная функция NAT - сохранение публичных адресов, однако дополнительной функцией является конфиденциальность сети, путем скрытия внутренних IPv4 адресов от внешней.
Существует множество типов технологии NAT, однако основными принято считать: Статический NAT (Static Network Address Translation), Динамический NAT (Dynamic Network Address Translation) и Перегруженный NAT (Network Address Translation Overload).
Статический NAT применяют для отображения незарегистрированного IP-адреса на зарегистрированный IP-адрес на основании один к одному. Особенно полезно, когда устройство должно быть доступным снаружи сети.
Статический NAT используется чаще всего в корпоративных сетях, когда необходимо, чтобы какой-либо IP адрес всегда был доступен из глобальной сети. Зачастую статическим IP наделяют сервера и помещают их в DМZ (рис 2).
Динамический NAT отображает незарегистрированный IP-адрес на зарегистрированный адрес из группы зарегистрированных IP-адресов. Динамический NAT также устанавливает непосредственное отображение между незарегистрированными и зарегистрированными адресами, но отображение может меняться в зависимости от зарегистрированного адреса, доступного в пуле (pool - диапазон) адресов, во время коммуникации.
Перегруженный NAT. Этот тип NAT'a имеет множество названий:
NAT Overload, Many-to-One, PAT (Port Address Translation) и IP Masquerading, однако в большинстве источников указывается как NAT Overload. Перегруженный NAT - форма динамического NAT, который отображает несколько незарегистрированных адресов в единственный зарегистрированный IP-адрес, используя различные порты. При перегрузке каждый компьютер в частной сети транслируется в тот же самый адрес, но с различным номером порта.
Подготовка компьютерной сети
Логическая схема топологии сети будет выглядеть как показано на изображении (рис 3)
Отнесем PC - станции во VLAN 2, а сервер во VLAN 3. Для этого нужно настроить коммутатор S0 (рис 4). Для того, чтобы определить PC пользователей в отдельный VLAN, необходимо создать VLAN 2 и в 3 запихнуть сам сервер (удобства ради еще и обзовем VLAN'ы именами) (показано синим на рис 4), определить область портов коммутатора, которые будут входить во VLAN 2,3 и прописать соответствующие команды (показано красным на рис 4). Следующая задача – определить один порт типа trunk, для взаимодействия с маршрутизатором (показано зеленым рис 4). Таким образом, коммутатор выступает в роли "посредника" между оконечными устройствами и маршрутизатором.
Теперь нужно настроить непосредственно маршрутизатор. Технология sub-interface позволяет объединять несколько виртуальных интерфейсов в один и подключить их к физическому интерфейсу (на маршрутизаторе выбран физический интерфейс fa0/0). Необходимо дать для каждого VLAN'а свой под-интерфейс (показано красным на рис 5) и выдать им IP адрес (показано зеленым на рис 5).
Таким образом, в будущем мы будем NAT'ить трафик.
Дальше я бы посоветовал бы настроить протокол динамической выдачи IP адреса - DHCP, ибо прописывать каждому PC свой адрес - то еще "удовольствие"...
! Важно, чтобы сервер(а) всегда были со статичным IP адресом !
Дадим серверу статичный IP 192.168.3.2, а остальных оставим для динамического распределения адресов.
После настройки DHCP, нужно прописать на каждом саб-интерфейсе в R0 команду "ip helper-address 192.168.3.2", тем самым указывая, куда стоит обращаться для получения IP адреса.
После данной команды, устройства получат запрашиваемые IP адреса.
Пингуем с рандомного ПК сам сервер (1 пинг) и шлюзы маршрутизатора (2- 3 пинг) (рис 6).
Дальше для удобства будем эмулировать подключение к провайдеру, путем создания в программе-симуляторе РС провайдера, сервера Serv2 с IP 213.234.60.2 (эмулирующий остальную сеть интернет) и роутера R3.
Настройка NAT
Ну и наконец-то мы дошли до самой настройки NAT...
Для внедрения NAT нужно определиться какие порты будут внешними(outside), а какие внутренними(inside).
Статичный NAT сопоставляет внутренний и внешний адреса один к одному, поэтому настроим Serv2 таким образом, чтобы любой компьютер мог подключиться к серверу, а сервер к компьютеру - нет. Для этого необходимо прописать следующие команды (рис 7):
По итогу, любой компьютер, находящийся во 2 VLAN'е может пинговать сервер провайдера, а обратно - нет (рис 8). Аналогично проделываем для Serv1, находящимся во VLAN 3.
А теперь, на финал, внедрим NAT Overload на R0.
Для этого создадим ACL и пропишем там сети, которые должны "натиться" (показано синим на рис 9) и, показав что нужно "натить", активируем лист (показано красным на рис 9).
Таким образом, реализовав статическую и динамическую (типа PAT) настройку NAT, мы смогли защитить небольшую сеть от подключения извне.
Надеюсь вам понравилась данная статья.
Спасибо за ее чтение, всем хорошего настроения :)
P.S. Статью пишу впервые, не судите строго :)
Комментарии (43)
volchenkodmitriy
13.10.2021 11:14Спасибо за статью! Все четко и понятно. А команды вынесены на скриншоты чтобы не загружать текст как большинство это делает, путая читателей. Далеко не всем интересно разбираться в командах конкретного синтаксиса, который может быть разный при одном смысле. Сразу нашел в статье ясный и простой ответ на вопрос, который сам себе поднял и искал на него ответ довольно долго в свое время: как сервер понимает кому в локальной сети отправлять пакеты из интернета в режиме PAT.
vesper-bot
13.10.2021 11:23Вот не вижу ответа на этот вопрос в этой статье. Ответом является NAT-таблица динамических сопоставлений internalIP:internalPort в externalIP:externalPort, которую NAT-роутер строит и поддерживает по мере поступления запросов на соединение изнутри наружу, и когда приходит ответный пакет на externalIP:externalPort из этой таблицы выбирается internalIP:internalPort, на чей запрос изначально должен был этот ответ прийти.
volchenkodmitriy
14.10.2021 12:31+1"Перегруженный NAT - форма динамического NAT, который отображает несколько незарегистрированных адресов в единственный зарегистрированный IP-адрес, используя различные порты. При перегрузке каждый компьютер в частной сети транслируется в тот же самый адрес, но с различным номером порта."
vesper-bot
14.10.2021 13:06Слегка неграмотно. "Компьютер транслируется" в порт. Транслируется тут соединение, точнее, адрес сокета на стороне инициатора. Ну и из текста следует, что каждому компьютеру (читай IP-адресу локальной сети) соответствует ОДИН порт. Ну и вопрос, открыл ты в двух браузерах на таком компе один сайт, как роутер поймет, в какой сокет отдавать пакет, пришедший на тот самый единственный порт?
volchenkodmitriy
15.10.2021 12:35Я думаю отдаст пакет в один и тот же сокет как на компьютере с прямым внешним ip происходит. А там уже так как пакеты из разных TCP сессий они дойдут до разных браузеров.
vesper-bot
15.10.2021 13:25А вот на компе с прямым IP сокетов несколько, по одному на соединение. В этом весь нюанс. NAT (PAT) создает по одному псевдосокету с внешним IP-адресом на каждое соединение изнутри наружу, и занимается подменой TCP/UDP-заголовков при форвардинге пакетов. Снаружи ходят только пакеты с внешним(и) IP сервера NAT, внутри уже с внутренними IP клиентов, которые лезут в интернет. Поэтому в случае трансляции IP->порт не получится определить, в какой сокет клиента направить ответный пакет, если соединяться клиент будет с одним и тем же IP:port в Интернете, так как все 4 параметра пакета после NAT окажутся одинаковыми, а именно на них основывается механизм трансляции. Если транслировать в один порт соединения с разными dst ip:port, то можно определить правильный сокет на стороне клиента по источнику пакета, если это TCP- или UDP-соединение и если протокол гоняет все данные по одному и тому же соединению (например, FTP так не делает, у него одно соединение под команды, другое под данные, и для работы FTP поверх NAT нужна доп.обработка пакетов на уровне приложения, она же ALG. Туда же SIP/RTP, и ещё найдется наверняка что-либо). Оттого я в качестве примера неработающего варианта и привел ситуацию «1 ПК два браузера один и тот же сайт».
volchenkodmitriy
19.10.2021 09:52Понятно. Но тогда определение что Пара адрес и порт образует сокет является не совсем точным. На одном порту и адресе может быть несколько сокетов
vesper-bot
19.10.2021 10:41Два, я так понимаю — TCP и UDP. Т.е. сюда надо добавить протокол. И да, для UDP таблица NAT-трансляций тоже есть. А вот если можно больше сокетов, или больше одного на протокол — хотел бы знать как, я тоже могу тупить :(
volchenkodmitriy
20.10.2021 10:24Как же тогда компьютер работающий с одним сайтом, но из 2х браузеров при прямом выходе в интернет с внешним ip имеет разные сокеты, протокол то у обоих TCP). Видимо сокет это программная сущность, с которой все не так просто....
vesper-bot
20.10.2021 11:24Сокет=IP+протокол+порт. Если затеете собирать с такого ПК трафик, то увидите, что пакеты от одного браузера (разделять можно по активности) идут с одной пары IP:port, а в некоторых случаях теперь (TLS1.3+QUIC) ещё и по UDP, а от второго через другую, мало того, если сайт работает на HTTP/1.1, то и сокетов браузер откроет не один, а с десяток. curl/wget работают в один поток и один сокет, можно эмулировать два браузера запустив два curl — тоже увидите два сокета на клиенте.
В сущности с сокетом всё достаточно просто — клиент просит у ОС сокет на IP: протокол, она отдает "эфемерный" порт, клиент с него отправляет данные в сторону куда хочет, прилетать они будут в него же. Возможно, с тех пор, как я про сокеты читал, появилась возможность использовать оин клиентский сокет для работы с несколькими серверами и разделять потоки между собой, но в сущности можно считать каждый такой поток идущим к своему сокету. Для целей NAT'а такой клиентский сокет будет един, так как NAT-сервер разделять потоки данных не умеет, и запись в NAT-таблице будет одна.
volchenkodmitriy
21.10.2021 11:20Да, надо будет как-нибудь попробовать снять дамп трафика с компьютера при прямом доступе в интернет и двумя запущенными браузерами с одним сайтом.
Akina
13.10.2021 13:00+1Cогласно документу RFC 1918, IANA зарезервировала 3 блока адресов для частных IP (серых) (рис 1), остальные же IP адреса носят название публичных адресов (белых).
Вообще-то поболе (емнип, их аж 11). Ярчайший пример немаршрутизируемой подсети за пределами указанных - APIPA.
Для решения этой проблемы было придумано несколько способов:
...И третий способ - использование технологии трансляции сетевых адресов - NAT.
Вот мне как-то кажется, что NAT был придуман задолго до того, как в воздухе запахло недостатком адресов. Так что корректнее сказать не "было придумано", а что-нибудь типа "может использоваться".
Retributi0n Автор
13.10.2021 15:17Вот мне как-то кажется, что NAT был придуман задолго до того, как в воздухе запахло недостатком адресов
Проект по созданию технологии, сохраняющей ip адреса, начали разрабатывать после появления резкого спроса на адреса, а массово внедрили позже...
Akina
13.10.2021 16:07+1RFC 1631 "The IP Network Address Translator (NAT)" датирован маем 1994 года, когда мы не то что про недостаток IP-адресов, а ещё даже про проблему 2000 года не задумывались.
Что же до использования NAT именно как средства борьбы с исчерпанием адресов - так это, как по мне, сказки. По-моему, всё ограничилось двумя мерами - изъятие подсетей и поднятие цен. И те, кто раньше шиковал, беря целую /24 подсеть и раздавая белые адреса рабочим станциям (сам видел, на практике!), быстренько ограничивались /29-30, а то и вообще одним адресом, и прятали всех за NAT (впрочем, там ещё свою роль сыграло появление толп малолетних хацкеров со скачанными где-то эксплойтами наперевес, в этих условиях компьютер с XP на борту голым задом в Инете - не лучшее решение).
Retributi0n Автор
13.10.2021 17:40Технологии создают тогда, когда возникает потребность в чем-либо.
Проблему нехватки могли рассматривать практически сразу после введения в эксплуатацию адресов.
NAT способен сохранить ip, разбив их на "частный" и "публичный". Под 1 публичным номером может сидеть n-ое число устройств. Маршрутизатору необходимо только изменять ip-dest пакета на ходу и занести source/dest пакета в таблицу маршрутизации.
+ сохраняется конфиденциальность узлов. ПК извне не пропингует пк в определенной локальной сети, защищенной NAT'ом на граничном маршрутизаторе.
scruff
13.10.2021 17:44На сколько я помню в XP SP2 (а может даже и в SP1) был вполне таки годный файрвол. Всё настраивалось, лишнее закрывалось и работало годами на белом ИП, даже без всяких обнов, патчей и антивирусов. Без файрвола - да - жило от силы сутки со всеми патчами и антивирусами, что в принципе ожидаемо - дырявая SMBv1 - это было файспалмом еще в 2000-е. Переход на /29-30 сети до сих пор не укладывается у меня в голове - это же огромный оверхед ИП-адресов. Считай у каждого клиента 3 ИП адреса - коту под хвост (подсеть, шлюз, бродкаст). Что мешало раздавать клиентам не мелко-нарезанные подсети, а ИП поштучно, используя один шлюз сразу на несколько клиентов?
Starwalker
14.10.2021 06:58Не знаю насчет клиентов, но в корпоративных сетях активно используют /31 для p2p линков между маршрутизаторами. Хотя можно и еще строже подойти и вообще не использовать IP адреса на p2p линках между маршрутизаторами, т.н. "ip unnumbered" :)
mc2
14.10.2021 05:24Из nat rfc:
Abstract
The two most compelling problems facing the IP Internet are IP address depletion and scaling in routing. Long-term and short-term solutions to these problems are being developed. The short-term solution is CIDR (Classless InterDomain Routing). The long-term solutions consist of various proposals for new internet protocols with larger addresses.
none7
14.10.2021 09:42+1О проблеме исчерпания адресов задумались задолго до того как это стало проблемой. Потому, что изначально вообще существовали классы сетей A, B и C и при таком распределении не могло быть и речи о том, что адресов хватит каждому сетевому устройству в мире. Ведь уже тогда существовали факсы и сетевые принтеры. А компьютеры начали становиться доступными каждому бизнесу и любому человеку среднего класса. Академикам было очевидно, что для всего бизнеса в мире адресов не хватит, ведь IPv4 разрабатывался лишь для нужд армии США и их подрядчиков. А так же казалось, что умный дом, в каждом доме это неизбежное будущее, которое наступит в ближайшем XXI веке и всем этим умным устройствам будет нужен способ коммуникации. Но в нашем прекрасном настоящем все они коммуницируют через сервера корпораций и умирают при их отключении.
Old_Pepper
13.10.2021 15:17+1Cогласно документу RFC 1918, IANA зарезервировала 3 блока адресов для частных IP (серых)
на самом деле 4. Все забывают про несчастный 100.64.0.0/10
malykhin
13.10.2021 19:45А еще провайдеры любят раздавать эти адреса под видом "белых" - мало кто знает про этот диапазон.
Saaverdo
15.10.2021 08:49Ну, справедливости ради, это диапазон для CGN (Carrier Grade NAT), он был описан в RFC 6598. И предназначался как раз для провайдеров, позволяя экономить уже столь дефицитные белые адреса. Что, впрочем, никоим образом не препятствует использованию как ещё одной частной сети.
struva
15.10.2021 08:49А как на счет 127.0.0.1. -? Разве он не зарезервирован ?
Old_Pepper
15.10.2021 08:52+1Построить сеть на 127/8 может только самый опытный админ
struva
15.10.2021 12:33Выше говорили об 3 частных IP, потом уже о 4. Я же спрашиваю об еще одном - 127. Если он также зарезервирован, то их уже 5. По поводу опытного админа, что такого тяжелого в этом айпи?
pae174
16.10.2021 10:04что такого тяжелого в этом айпи
Адреса 127.0.0.0/8 не рутятся никуда. Это всё - предустановленная локальная сеть масштаба одного компьютера,в которой компьютеру принадлежит сразу 16 миллионов адресов. Пакеты с айпишниками из этого блока в принципе не должны попадать в физический интерфейс. Скорее всего это правило зашито на уровне кода операционной системы.
Выше говорили об 3 частных IP, потом уже о 4. Я же спрашиваю об еще одном - 127. Если он также зарезервирован, то их уже 5.
Зарезервированные блоки и частные блоки это разные вещи. Множество частных блоков входит в множество зарезервированных. Зарезервированных вообще достаточно много .
scruff
13.10.2021 14:07+2Правильно ли я понимаю, что самы "ходовой" это Перегруженный NAT? Например раздача инета с айфона "по воздуху" посредством включения мобильной точки доступа.
CodeHolder
14.10.2021 06:34Правильно. В iptables это называется маскарад. А static/dynamic nat в soho роутерах может быть вообще не представлен.
scruff
14.10.2021 06:35Полный хаос в звучании одной и той-же технологии в зависимости от вендора - весьмадоставляет )))
Starwalker
14.10.2021 07:06+1Так и есть. Хотя лично меня от названия "перегруженный нат" как-то коробит... PAT вполне нейтральное название отражающее механизм работы. А вот это "перегруженный" идет от аргумента "overload" команды "ip nat" в Cisco, что является их личной проблемой и другими вендорами не используется. В реальности у динамического НАТа есть два режима - NO-PAT и PAT. Если домашний интернет с одний айпишником от провайдера или с айфончика тетеринг, тогда это всегда PAT, без вариантов.
avengerweb
14.10.2021 02:00А если UDP как NAT узнаёт кому пакет принадлежит?
Maxim_Q
14.10.2021 02:24Не имеет значения какой протокол, TCP, UDP, ICMP и т.д. NAT работает с любым из них одинаково.
Starwalker
14.10.2021 06:29+1Строго говоря нет никакого "и т.д.", PAT работает только с TCP, UDP и ICMP:
Port Address Translation (also called NAT overload) only supports protocols whose port numbers are known; these protocols are Internet Control Message Protocol (ICMP), TCP, and UDP. Other protocols do not work with PAT because they consume the entire address in an address pool. https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/ipaddr_nat/configuration/xe-16/nat-xe-16-book/iadnat-addr-consv.html
Также многие протоколы работающие поверх TCP и UDP нуждаются в NAT ALG для корректной работы. Это тоже нужно учитывать.
Starwalker
14.10.2021 06:23+2Строго судить не буду, но Packet Tracer как-то контрастируют с фразой "не только" в заголовке ;-) Статья уж совсем для новичков, скорее похожа на запись в бложике студента курса CCNA. И очень странно, что говоря о NAT вы не рассмотрели таблицу трансляций адресов "show ip nat translation", мне кажется это необходимо для понимания "магии" NAT'a :-)
Ovsiannikov
что такое зарегистрированный адрес?
Fomos
Судя из теста, автор имеет ввиду "белый" ip адрес он же "чистый" ip адрес он же внешний ip адрес.
Retributi0n Автор
Верно)
Каждый кличет как хочет, так что нужно,наверное, ориентироваться на "частный" и на "публичный" в дальнейшем
---
ps в последующем учту :)
vesper-bot
Строго говоря, NAT не всегда строится между частной сетью и публичной, бывает и так, что делается NAT из частной в частную сеть, например, филиальный VPN может работать не в режиме маршрутизации, а в режиме трансляции адресов, и получится, что локальная сеть скажем 192.168.10.0/24 транслируется в локальный, но на другой стороне, адрес 10.10.10.187. (Дисклеймер про совпадения.jpg)