Тип нат 2 что значит
Гайд по настройке Wi-Fi роутера для стабильной работы игровых сервисов Статьи редакции
Как избавиться от некоторых проблем с PSN, Xbox Live и Steam.
Материал подготовлен при поддержке «Дом.ru»
Даже при очень хорошем интернете игровые сервисы и консоли могут вести себя странно. Из-за этого у пользователей возникают проблемы: медленно скачиваются игры, не получается присоединиться к друзьям или войти в голосовой чат. Причин этому много, и каждая из них может возникнуть на разных этапах пути от игрового сервера до консоли или компьютера.
Существенную часть этих проблем можно решить, покопавшись в настройках роутера. Казалось бы, устройство должно работать «из коробки», но в реальности всё не так просто.
В этой статье перечислены самые простые и распространённые способы заставить нормально работать PSN, Xbox Live, Steam и сетевые функции Nintendo Switch. Их советуют сами производители консолей и владельцы игровых сервисов, кроме того, они помогли многим пользователям.
Для примера в статье взяты роутеры провайдера «Дом.ru» серии Archer производства TP-Link — их интерфейс будет показан в скриншотах ниже. В ходе написания статьи ни один роутер не пострадал!
Главное правило геймера: провод — твой друг. Если есть возможность подсоединить консоль, ПК, ТВ-приставку, телевизор и другие сетевые устройства через Ethernet-кабель — это стоит сделать. Из-за безумной загрузки диапазона частот в современных домах Wi-Fi на частоте 2,4 ГГц будет захлёбываться уже в соседней комнате. А 5 ГГц может просто не пройти через три железобетонные стены из-за короткой длины радиоволны.
Не стоит забывать и о том, что в старых PS4 («толстушках») был очень плохой Wi-Fi-модуль, качество приёма у которого оставляло желать лучшего. В новых PS4 Slim и Pro такой проблемы уже нет.
Кроме того, довольно слабый Wi-Fi-модуль стоит в Nintendo Switch. Он тоже может легко потерять сигнал буквально в соседней комнате. И если в случае со старой PS4 ещё можно воспользоваться проводом, то Switch спасёт только переходник с USB на Ethernet, но это подходит только для стационарного режима игры.
Первое, что нужно сделать для настройки — зайти в панель управления роутера. Достаточно подсоединиться к нему с помощью Wi-Fi или Ethernet-провода, а потом ввести его адрес в строке браузера. Адрес можно получить из информации о сетевом соединении в операционной системе. В большинстве случаев это адреса 192.168.1.1 или 192.168.0.1.
Информацию о том, какой именно адрес нужно набрать для доступа к роутеру, можно посмотреть в настройках сети.
Windows: Панель управления → Сеть и Интернет → Wi-Fi → Кликнуть по сети, к которой подключено устройство.
Mac: Приложение «Системные настройки» → Сеть → Выбрать соответствующее подменю
Роутер спросит логин администратора и пароль — если их никогда не меняли, то можно найти эту информацию в инструкции или на сервисной наклейке на самом устройстве.
Начать настройку стоит с присуждения статических IP-адресов всем игровым устройствам и ПК в домашней сети. По умолчанию роутеры выдают IP-адрес в сети на некоторый промежуток времени, а потом случайным образом меняют его на новый.
Для присуждения статического адреса PS4 нужно сначала найти и записать её MAC-адрес из карты сети на главной странице панели администратора роутера. Он выглядит примерно так — a0:b1:c2:d3:e4:f5. Если консоль не подсоединена или появились трудности с нахождением карты сети внутри админки, то можно включить PS4 и посмотреть в разделе «Информация» её параметры, там есть два MAC-адреса — для Wi-Fi и проводного соединения.
Далее нужно перейти в настройки Network роутера, а там найти пункт DHCP. В разделе статических IP следует выбрать уже подсоединённую PS4 или ввести её MAC-адрес вручную, а после этого присудить ей новый IP. Если пул адресов подсети выглядит как 192.168.1.XXX, то можно присудить PS4, например, вот такой адрес — 192.168.1.155. Если же пул адресов вида 192.168.0.XXX, то адрес PS4 будет такой — 192.168.0.155.
Число в конце может быть от 2 до 255 — обычно этот диапазон прописан тут же в настройках DHCP. Естественно, нужно разом присудить всем важным устройствам в доме статические IP.
Следующее, что нужно сделать — проверить, активен ли режим UPnP. По умолчанию он включён во всех современных роутерах. Но на всякий случай лучше найти UPnP в настройках NAT Forwarding и удостовериться, что он включен.
Теперь главное — разобраться с переадресацией портов. В домашней сети есть внешние порты, по которым идёт трафик из интернета. А ещё у каждого устройства внутри сети тоже есть порты. Роутер в большинстве случаев сам выбирает, куда перенаправлять трафик из внешнего порта сети во внутренний порт устройства. Для корректной работы всех сетевых сервисов нужно заставить роутер чётко выполнять инструкции и пускать весь трафик так, как было задумано, без самовольного распределения.
Тут начинается самое интересное. Каждый популярный игровой сервис рекомендует свой набор портов, которые нужно открывать внутри домашней сети для консолей или ПК. Более того, у всех популярных сетевых игр тоже есть свои пулы портов — их тоже стоит открыть. Начнём с открытия портов для консоли PS4. На сетевом жаргоне этот процесс называется «пробросить порты».
Внутри раздела «Переадресация портов» (NAT Forwarding) нужно найти меню «Виртуальный сервер» (Virtual Server), где предложено добавить в таблицу строки со следующими параметрами: IP-адрес устройства (который был присуждён ранее), первый порт, второй порт, тип порта (TCP, UDP или оба сразу).
В обеих графах портов нужно упоминать одни и те же числа, так как цель этого процесса как раз в соответствии внутреннего порта PS4 внутри сети и внешнего порта домашней сети. Для стабильной работы PSN нужно ввести туда следующие последовательности чисел:
Порты 3478 и 3479 нужно прописать как для TCP, так и для UDP. Если роутер это поддерживает, то можно указать позицию Both («оба»).
Порты 9ххх нужны для корректной работы функций Remote Play и Share Play. Они могут заработать и так, но если наблюдаются проблемы и ошибки с ними, то стоит открыть эти порты.
Теперь очередь за Xbox One. Нужно не забыть, что для него будет использоваться другой внутренний IP, а не тот же, что и для PS4 — распространённая ошибка при настройке открытия портов. Для корректной работы Xbox Live Microsoft советует¹ пробросить следующие порты:
Далее следует Switch — Nintendo предлагает² пробросить такой диапазон портов:
Стоит отметить, что здесь не единичные порты, а целый диапазон. Большинство роутеров воспринимает диапазон портов в формате xxxx:xxxx, то есть через двоеточие.
В случае со Steam нужно проявить осторожность. Дело в том, что консолям можно спокойно открывать порты, так как, с точки зрения цифровой безопасности, никаких проблем это не принесёт. Но Steam — это всё-таки приложение на ПК. Поэтому открывать порты на компьютере может быть опасно, ведь именно по ним может быть проведена атака — загружен вирус, перехвачен трафик и так далее.
Так что это стоит делать на свой — и риск. Ещё одно решение — открыть порты не внутри роутера, а через брендмауэр Windows для клиента Steam. Посмотреть, как это сделать, можно на сайте³ Microsoft.
Так или иначе, сама Valve советует⁴ пробросить следующие порты, причём с пометками о том, для чего это нужно.
Для корректной работы базовой части магазина и скачивания контента:
Для работы матчмейкинга Steam, домашнего стриминга игр с устройства на устройство (In-Home Streaming) и сервисных команд клиента:
Для корректной работы p2p-сети и голосового чата в Steam:
Далее приведён список портов, которые рекомендуется пробросить для корректной работы некоторых популярных сетевых игр. Если они совпадают с уже открытыми портами для консолей, то они не будут указаны ниже.
Что такое двойной NAT и как решить проблемы с ним?
Цифровой мир — это все адреса IP (интернет-протокола). Каждому устройству требуется IP-адрес для связи в Интернете или в частной сети. Учитывая, что для каждого подключенного к Интернету устройства ( по крайней мере, с IPv4 ) недостаточно публичных IP-адресов, эта мелочь, называемая NAT, становится чрезвычайно важной. Он означает трансляцию сетевых адресов (NAT) и является функцией, предоставляемой маршрутизаторами, позволяющей нескольким устройствам получать доступ к Интернету через один общедоступный IP-адрес.
Благодаря каждому публичному IP-адресу через NAT может быть сотни устройств с собственными частными IP-адресами. И почти все оборудование, предоставляющее функцию NAT, включает брандмауэр для защиты частных IP-адресов и устройств от общедоступных IP-адресов и устройств в Интернете. Также обычно предлагаются другие сетевые службы, такие как DHCP (динамический протокол управления хостом) для выдачи частных IP-адресов устройствам, которые подключаются к локальной сети.
Как получается двойной NAT
Однако наличие нескольких устройств, выполняющих NAT в частной сети, может вызвать проблемы с этой сетью. Некоторые пользователи, возможно, никогда не заметят, что делает их невостребованными для них. Но другие могут столкнуться с головными болями с определенными приложениями, услугами и ситуациями. Таким образом, всегда рекомендуется удалять двойной NAT, если он у вас есть.
Наличие нескольких устройств NAT обычно происходит, когда вы подключаете свой собственный маршрутизатор к шлюзу, установленному вашим провайдером интернет-услуг (ISP), который также включает функции NAT и маршрутизации. Некоторые интернет-провайдеры устанавливают только простой модем, в котором отсутствуют функции NAT и маршрутизации, что полностью устраняет проблему. Однако большинство интернет-провайдеров считают, что у своих клиентов нет маршрутизаторов, поэтому они предоставят вам комбо-устройство, хотите ли вы этого или нет.
Если вы не знаете, что провайдер предоставил вам, взгляните на коробку. Если есть только один порт Ethernet, это, скорее всего, простой модем (он же широкополосный шлюз). Но если есть несколько портов Ethernet или поддерживает Wi-Fi-соединения, это, скорее всего, выполняет NAT и маршрутизацию.
Какие проблемы может вызвать двойной NAT
Когда в вашей сети есть двойной NAT, вы можете столкнуться с проблемами с услугами, для которых требуется поддержка UPnP (Universal Plug-and-Play) или ручная переадресация портов. Это будет включать онлайн-игры на компьютерах или консолях, удаленный рабочий стол на компьютеры, подключение к VPN-серверу или доступ к каналам камеры безопасности. Такие службы иногда требуют, чтобы определенные порты открывались в брандмауэре маршрутизатора и направлялись на определенный компьютер или устройство в сети.
На этом снимке экрана показано, как я настроил свой маршрутизатор для перенаправления портов, чтобы я мог использовать удаленный SSH (Secure Shell) на сервере в локальной сети. Я не могу этого сделать, если мой шлюз также выполняет NAT (преобразование сетевых адресов).
Проблема с двойным NAT заключается в том, что если первый маршрутизатор в вашей сети не настроен для переадресации портов, входящий трафик прекратится там, даже если на втором маршрутизаторе настроен порт вперед. Даже если первый маршрутизатор имеет порт вперед, он не может перенаправить трафик на устройство, подключенное ко второму маршрутизатору. Он может перенаправлять только трафик на компьютеры и устройства, напрямую подключенные к этому первому маршрутизатору, который может быть либо беспроводным, либо проводным.
Двойной NAT также может усложнить любые ручные или автоматические элементы управления качеством обслуживания (QoS), которые определяют приоритетность трафика в вашей внутренней сети, чтобы обеспечить чувствительный к задержкам трафик (игра, голос или видео), которому присваивается более высокий приоритет, чем данные, связанные с файловыми передачами. Это особенно важно, если у вас есть устройства, подключенные к обоим маршрутизаторам, оба из которых имеют разные элементы управления QoS.
На этом снимке экрана отображаются параметры QoS (Quality of Service) моего маршрутизатора, которые я настроил для назначения приоритета VoIP (Voice over Internet Protocol).
Как обнаружить ситуацию с двойным NAT
Я уже упоминал, как быстро определить, имеет ли шлюз ISP возможности NAT и маршрутизации, но вы также можете посмотреть, действительно ли происходит двойной NAT, прежде чем тратить время на эту проблему. Иногда шлюзы обнаруживают двойной NAT и автоматически исправляют проблему для вас. Или иногда, если инсталляторы ISP хорошо осведомлены, они могут исправить это, когда они выходят, чтобы установить шлюз, и убедитесь, что у вас есть собственный маршрутизатор.
Для двух способов я покажу вам, как определить ситуацию с двойным NAT, вам нужно проверить свои IP-адреса и узнать, являются ли они частными или общедоступными. Это легко: частные адреса обычно находятся в диапазоне от 192.168.0.0 до 192.168.255.255, от диапазона 172.16.0.0 до 172.31.255.255 или от 10.0.0.0 до 10.255.255.255. Адресами за пределами этих диапазонов будут публичные (интернет-адреса).
Один быстрый способ, который обычно показывает, что двойной NAT существует, — это traceroute, который позволяет вам пинговать сервер или устройство в Интернете и видеть путь, который требуется между маршрутизаторами и серверами. Откройте командную строку (на ПК с ОС Windows, который подключен к Интернету, щелкните в меню «Пуск», введите «cmd» и нажмите Enter) и введите «tracert 8.8.8.8», чтобы увидеть трассировку на DNS-сервере Google. Если вы видите два личных IP-адреса, перечисленных в первых двух перелетах, у вас есть двойной NAT. Если вы видите только один частный адрес, а второй прыжок показывает общедоступный адрес, тогда вы все хорошо.
Вот traceroute, показывающий двойной NAT, о чем свидетельствуют частные IP-адреса в первых двух прыжках.
Еще один способ проверить двойной NAT — подключиться к веб-интерфейсу вашего маршрутизатора и посмотреть, является ли WAN (интернет) IP-адрес частным или общедоступным. Это должен быть публичный адрес. Если это частный адрес, у вас двойной NAT.
Больше доказательств двойной ситуации с NAT: IP-адрес моего маршрутизатора WAN является закрытым, а не публичным.
Как вы можете это исправить
Если вы подтвердили, что у вас двойной NAT, есть способы исправить это. Один простой способ — отключить любой дополнительный маршрутизатор и использовать только шлюз вашего интернет-провайдера. Если вы властный пользователь, и вы не можете расстаться с вашим любимым маршрутизатором, то этот вариант, вероятно, не для вас.
Если вы хотите сохранить свой маршрутизатор, посмотрите, можете ли вы перевести шлюз ISP в мостовой или транзитный режим. Это отключит функции NAT, брандмауэра и DHCP шлюза и уменьшит его до простого интернет-модема. Многие шлюзы предлагают эти настройки, но не все. Войдите в веб-интерфейс GUI шлюза и проверьте настройку NAT, сквозной или мостовой режим, но имейте в виду, что иногда он скрыт. Если вы этого не видите, найдите в Интернете подробную информацию о своей конкретной модели или обратитесь в службу технической поддержки вашего провайдера.
Мой шлюз Arris от TimeWarner (Spectrum) имеет параметры NAT в настройках LAN, но другие поставщики могут иметь его в WAN или другой области.
Если ваш шлюз ISP не предлагает никаких мостовых функций, подумайте о том, чтобы разместить маршрутизатор в DMZ (демилитаризованной зоне) шлюза. Если шлюз имеет DMZ, он будет в основном предоставлять маршрутизатору прямое подключение к Интернету, минуя NAT-шлюз шлюза, межсетевой экран и DHCP, чтобы ваши сетевые устройства получали эти значения непосредственно с вашего маршрутизатора.
Чтобы использовать DMZ, вы должны войти в веб-интерфейс графического интерфейса шлюза, найти настройку DMZ и ввести частный IP-адрес, назначенный вашему маршрутизатору. Кроме того, вы также должны увидеть, можете ли вы установить резервирование IP-адреса для своего маршрутизатора, поэтому ваш шлюз всегда дает тот же частный IP-адрес вашему маршрутизатору. Если шлюз не поддерживает резервирование IP-адресов, вы должны войти в веб-интерфейс маршрутизатора и вручную назначить ему статический частный IP-адрес (тот же, который вы настраиваете как хост DMZ) самостоятельно для своей глобальной сети (WAN); т.е. интернет).
Мой шлюз имеет настройки DMZ в настройках брандмауэра, как это типично для шлюзов.
Еще один вариант устранения двойного NAT при сохранении шлюза ISP и вашего маршрутизатора — это запустить Ethernet-кабель от шлюза к одному из портов LAN вашего маршрутизатора вместо порта WAN (интернет) маршрутизатора. Это в основном превратит ваш маршрутизатор в коммутатор, и любые компьютеры, подключенные через маршрутизатор (проводные или беспроводные), получат NAT, брандмауэр и DHCP от шлюза ISP. Это хороший вариант, если вы используете дополнительный маршрутизатор для улучшения Wi-Fi или потому, что вам нужно больше портов Ethernet. Если, с другой стороны, ваше стремление к другому маршрутизатору для лучшей перенаправления портов или улучшения контроля QoS, этот подход не поможет.
Так ли страшен Symmetric NAT
Задача прямого соединения машин, находящихся за NAT’ом стара как мир и я думаю, что многие слышали про UDP Hole Punching. Когда я только начинал интересоваться вопросом, я утвердился во мнении, что symmetric nat пробить невозможно и пытаться даже не стоит. Однако совсем недавно мне попалась статья в которой утверждалось, что симметричный нат — это не приговор.
Типы NAT
1) фильтр входящих пакетов;
2) правило маппинга портов.
Первая характеристика как раз описана в большинстве статей и означает, какие входящие пакеты передавать машине за NAT’ом: все (no filter – Full cone), с конкретного адреса (address-restricted) или с конкретного адреса и порта (port-restricted).
Вторая характеристика же присуще только симметричному НАТ’у, так как первые три типа пытаются сделать отражение один в один. Например, если клиент посылает пакет с внутреннего адреса 192.168.10.24:62145, то от роутера пакет пойдет с адреса 1.2.3.4:62145. Причем вне зависимости от адреса получателя.
Symmetric NAT
Выбирается тот самый порт случайно (ну или не случайно, а по очереди, но это не важно, так как повлиять на его выбор извне мы не можем). Но есть определенные правила, они похожи на фильтр входящих пакетов:
При этом есть еще и правила для выбора следующего порта:
Это может быть какая-то дельта (+1/-1 или +10/-10) или вообще каждый раз случайно.
Кроме того видел один NAT у которого каждый последующий порт отстоял от предыдущего на случайное число, но всегда кратное 4096.
Вместо заключения
Итак, понятного, что зная правило распределения портов и дельту можно угадать, с какого порта пойдет исходящий пакет, соответственно пробить тот самый симметричный NAT. Разумеется, в случае выбора порта совсем случайно, этот фокус не пройдет.
Ну что же мы подобрались к сути и цели статьи. Ответу на вопрос
«Можно ли определить правило распределения портов и дельту, находясь за NAT’ом?»
Поможет нам в этом STUN, конечно. Наша задача сделать четыре запроса к разным адресам и портами используя один сокет (один локальный порт) и оценить результаты:
Мы сможем понять каким образом распределяются исходящие порты (адрес или порт) и попробовать рассчитать ту самую дельту.
И тут я призываю хабрасообщество мне помочь со статистикой. На просторах Интернета был найден простенький stun клиент, немножко допилен кувалдой и вот что получилось:
Пользователи Линукса прекрасно знают как это скомпилировать.
Под винду отлично компилится студией, вот тут бинарник, если студии под рукой нет.
Да простит меня stun.counterpath.net за хабра эффект 🙂
Вот мои результаты, но у меня не симметричный НАТ и не интересно:
Results
tests: 1010
NAT present: 1
first preserved port: 1
preserves port: 0
type: Port restricted NAT
mapped ports: 55907 55907 55907 55907
Всем спасибо за помощь!
udp: Оставляйте, пожалуйста, ваши результаты в комментариях, даже если НАТ не симметричный. Ведь в любом случаю важно знать распиновку по типам.
NAT (обзор и примеры)
Содержание
Это абсолютно разные технологии. Не путайте их.
Что такое NAT
Существуют более узкие понятие SNAT, DNAT, маскарадинг, PAT, NAT-PT и т.д.
зачем нужен NAT, как его используют
Для вывода в интернет внутренней сети
Для подмены внешнего ip адреса другим (перенаправление трафика)
Для балансировки нагрузки между одинаковыми серверами с разными ip адресами.
Для объединения двух локальных сетей с пересекающейся внутренней адресацией.
как устроен NAT
port-mapping, прокидывание портов
Преимущества и недостатки
Несовместим с некоторыми протоколами. Конкретная реализация NAT должна поддерживать инспекцию требуемого протокола.
NAT обладает свойством «экранировать» внутреннюю сеть от внешнего мира, но его нельзя использовать вместо межсетевого экрана.
Настройка на Cisco IOS
Маршрутизаторы и межсетевые экраны Cisco поддерживают различные типы NAT, в зависимости от набора опций ПО. Наиболее используемым является метод NAT с привязкой внутренних локальных адресов в различные порты одного внешнего адреса (PAT в терминологии Cisco).
Для настройки NAT на маршрутизаторе требуется: o Определить трафик, который необходимо транслировать (при помощи access-list’ов или route-map);
Аксесс-лист LOCAL выбирает весь трафик из 10 сети.
Роут-мап INT1 выбирает трафик аксесс-листа LOCAL, выходящий через сабинтерфейс Fa 0/1.1
o Определить на какие внешние адреса проводить трансляцию. Выбрать пул внешних адресов. Для PAT достаточно одного адреса.
Задание пула внешних адресов с именем GLOBAL. В пуле всего один адрес.
o Включить NAT для выбранных внутренних и внешних адресов.
Включение NAT для трансляции адресов источника на внутреннем интерфейсе. Будет транслироваться только трафик попадающий под условия роут-мапа INT1. Внешний адрес будет браться из пула GLOBAL.
Статическое «прокидывание порта» или «публикация сервиса». В трафике идущем внутрь на адрес 212.192.64.74 на порт tcp 23 будет заменен адресат на адрес 10.0.0.1 и порт 23.
o Назначить внутренние и внешние интерфейсы.
Интерфейс Fa 0/0 назначен внутренним для NAT.
Сабинтерфейс Fa 0/1.1 назначен внешним для NAT.
o Отладка и диагностика:
Примеры
Приведем несколько демонстрационных примеров для эмулятора cisco Packet Tracer.
Простая схема вывода небольшой сети в интернет через пул внешних адресов http://k.psu.ru/disk/files/user/MoiseevVI/wiki/NAT_exapmles_Simple_SNAT.pkt
Порядок работы NAT
Порядок применения правил NAT различается у различных производителей и на различном оборудовании. Приведем порядок применения политик NAT для маршрутизаторов на cisco IOS:
Интернет-канал от одного провайдера через NAT
Простая схема реализации NAT с одним провайдером
Резервирование интернет-канала от двух провайдеров при помощи NAT, ip sla
Дано: мы получаем для нескольких компьютеров интернет от провайдера ISP1. Он выделили нам адрес 212.192.88.150. Выход в интернет организован с этого ip адреса через NAT.
В чем сложность задачи? clear ip nat translations?
Схема
Конфиг
1 clear ip nat translations *
Найден, оттестирован такой кусок EEM. Не на всех версиях IOS генерируется событие.. Надо уточнить.
2 При падении интерфейса на провайдера, велики шансы, что его шлюз будет пинговаться через второго
Разное
CGN (carrier grade nat) с особым пулом приватных адресов
Сети для самых маленьких. Часть пятая. ACL и NAT
Продолжаем развитие нашей маленькой уютной сети Лифт ми Ап. Мы уже обсудили вопросы маршрутизации и стабильности, и теперь, наконец, выросли для подключения к Интернету. Довольно заточения в рамках нашей корпоративной среды!
Но с развитием появляются и новые проблемы.
Сначала вирус парализовал веб-сервер, потом кто-то притаранил червя, который распространился в сети, заняв часть полосы пропускания. А ещё какой-то злодей повадился подбирать пароли на ssh к серверу.
А представляете, что начнётся, когда мы подключимся к Интернету?!
Итак, сегодня:
1) учимся настраивать различные списки контроля доступа (Access Control List)
2) пытаемся понять разницу между ограничением входящего и исходящего трафика
3) разбираемся с тем, как работает NAT, его плюсы, минусы и возможности
4) на практике организуем подключение к Интернету через NAT и увеличим безопасность сети, используя списки доступа.
Access Control List
Итак, что мы имеем сказать по спискам доступа? Вообще-то тема относительно простая и только ленивыми из курса CCNA не скопипащена. Но не разрывать же нам наше удивительное повествование из-за каких то предрассудков?
Каково предназначение списков доступа? Казалось бы, совершенно очевидный ответ — для ограничения доступа: кому-то что-то запретить, например. Вообще — это верно, но понимать нужно в более широком смысле: речь не только о безопасности. То есть, изначально, вероятно, так оно и было, отсюда permit и deny при настройке. Но на самом деле ACL — это универсальный и мощный механизм фильтрации. С их помощью можно определить на кого навешивать определённые политики, а на кого нет, кто будет участвовать в неких процессах, а кто нет, кого ограничиваем в скорость до 56k, а кого до 56M.
Чтобы было чуть-чуть понятнее, приведём простой пример. Опираясь на списки доступа, работает Policy-Based Routing (PBR). Можно сделать здесь так, чтобы пакеты приходящие из сети 192.168.1.0/24 отправлялись на next-hop 10.0.1.1, а из сети 192.168.2.0/24 на 10.0.2.1 (заметим, что обычная маршрутизация опирается на адрес назначения пакета и автоматически все пакеты отправляются на один next-hop):
В конце статьи пример настройки PBR и ограничения скорости на основе ACL.
Виды ACL
Ладно, забудем на время эту лирику.
Вообще говоря, списки доступа бывают разными:
— Стандартные
— Расширенные
— Динамические
— Рефлексивные
— Повременные
Мы своё внимание остановим сегодня на первых двух, а более подробно обо всех вы можете прочитать у циски.
Входящий и исходящий трафик
Для почину давайте-ка разберёмся с одной вещью. Что понимать под входящим и исходящим трафиком? Это нам в будущем понадобится. Входящий трафик — этот тот, который приходит на интерфейс извне.
Исходящий — тот, который отправляется с интерфейса вовне.
Список доступа вы можете применить либо на входящий трафик, тогда неугодные пакеты не будут даже попадать на маршрутизатор и соответственно, дальше в сеть, либо на исходящий, тогда пакеты приходят на маршрутизатор, обрабатываются им, доходят до целевого интерфейса и только на нём дропятся.
Стандартный список доступа проверяет только адрес отправителя. Расширенный- адрес отправителя, адрес получателя, а также порт. Стандартные ACL рекомендуется ставить как можно ближе к получателю (чтобы не порезать больше, чем нужно), а расширенные- ближе к отправителю (чтобы как можно раньше дропнуть нежелательный трафик).
Практика
Давайте сразу к практике. Что бы нам такого наограничивать в нашей маленькой сети “Лифт ми Ап”?
а) WEB-сервер. Разрешить доступ всем по порту TCP 80 (протокол HTTP). Для того устройства, с которого будет производиться управление (у нас же есть админ) нужно открыть telnet и ftp, но ему мы дадим полный доступ. Всем остальным отбой.
б) Файловый сервер. На него у нас должны попадать резиденты Лифт ми Ап по портам для общих папок, а все остальные по FTP.
в) Почтовый сервер. Тут у нас запущены SMTP и POP3, то есть порты TCP 25 и 110. Так же для админа открываем доступ на управление. Других блокируем.
г) Для будущего DNS-сервера нужно открыть порт UDP 53
д) В сеть серверов разрешить ICMP-сообщения
е) Поскольку сеть Other у нас для всех беспартийных, кто не вошёл в ФЭО, ПТО и Бухгалтерию, то мы их всех ограничим, а некоторым только дадим доступ (в числе них мы и админ)
ё) В сеть управления нужно пускать опять же только админа, ну и конечно себя любимого.
ж) Не будем строить препоны общению между собой сотрудников отделов.
а) Доступ на WEB-сервер
Тут у нас работает политика запрещено всё, что не разрешено. Поэтому нам сейчас надо кое-что открыть, а всё остальное закрыть.
Поскольку мы защищаем сеть серверов, то и лист будем вешать на интерфейс, идущий в сторону них то есть, на FE0/0.3 Вопрос только на in или на out нам нужно это делать? Если мы не хотим пускать пакеты в сторону серверов, которые уже оказались на маршрутизаторе, то это будет исходящий трафик. То есть адреса назначения (destination) у нас будут в сети серверов (из них мы будем выбирать на какой именно сервер идёт трафик), а адреса источников (source) могут быть любыми — как из нашей корпоративной сети, так и из интернета.
Ещё одно замечание: поскольку фильтровать мы будем в том числе по адресу назначения (на WEB-сервер одни правила, на почтовый — другие), то список контроля доступа нам понадобится расширенный (extended), только он позволяет делать это.
Правила в списке доступа проверяются по порядку сверху вниз до первого совпадения. Как только одно из правил сработало, независимо от того permit это или deny, проверка прекращается и обработка трафика происходит на основе сработавшего правила.
То есть если мы хотим защитить WEB-сервер, то в первую очередь нам нужно дать разрешение, потому что, если мы в первой же строке настроим deny ip any any — то оно всегда будет срабатывать и трафик не будет ходить вообще. Any — это специальное слово, которое означает адрес сети и обратную маску 0.0.0.0 0.0.0.0 и означает, что под правило подпадают абсолютно все узлы из любых сетей. Другое специальное слово — host — оно означает маску 255.255.255.255 — то есть именно один единственный указанный адрес.
Итак, первое правило: разрешить доступ всем по порту 80
msk-arbat-gw1(config)# ip access-list extended Servers-out
msk-arbat-gw1(config-ext-nacl)# remark WEB
msk-arbat-gw1(config-ext-nacl)# permit tcp any host 172.16.0.2 eq 80
msk-arbat-gw1(config)# int fa0/0.3
msk-arbat-gw1(config-subif)# ip access-group Servers-out out
Проверяем с любого из наших подключенных компьютеров:
Как видите страничка открывается, но что там у нас с пингом?
И так с любого другого узла?
Дело в том, что после всех правил в цисковских ACL в конце дописывается неявное deny ip any any (implicit deny). Что для нас это означает? Любой пакет, выходящий с интерфейса и не отвечающий ни одному правилу из ACL, подпадает под implicit deny и отбрасывается. То есть хоть пинг, хоть фтп, хоть что угодно здесь уже не пройдёт.
Идём дальше: надо дать полный доступ компьютеру, с которого будет производиться управление. Это будет компьютер нашего админа с адресом 172.16.6.66 из сети Other.
Каждое новое правило добавляется автоматически в конец списка, если он уже существует:
msk-arbat-gw1(config)# ip access-list extended Servers-out
msk-arbat-gw1(config-ext-nacl)# permit tcp host 172.16.6.66 host 172.16.0.2 range 20 ftp
msk-arbat-gw1(config-ext-nacl)# permit tcp host 172.16.6.66 host 172.16.0.2 eq telnet
Вот и всё. Проверяем с нужного узла (поскольку серверами в РТ не поддерживается телнет, проверяем на FTP):
То есть FTP-сообщение пришло на маршрутизатор и должно уйти с интерфейса FE0/0.3. Маршрутизатор проверяет и видит, что пакет подходит под добавленное нами правило и пропускает его.
А с постороннего узла
пакет FTP не попадает ни под одно из правил, кроме неявного deny ip any any и отбрасывается.
б)Доступ на файловый сервер
msk-arbat-gw1(config)# ip access-list extended Servers-out
msk-arbat-gw1(config-ext-nacl)# permit tcp 172.16.0.0 0.0.255.255 host 172.16.0.3 eq 445
msk-arbat-gw1(config-ext-nacl)# permit tcp any host 172.16.0.3 range 20 21
Тут мы повторно применили конструкцию range 20 21 — для того, чтобы в одной строке задать несколько портов. Для FTP, вообще говоря, недостаточно только 21-го порта. Дело в том, что если вы откроете только его, то авторизация у вас будет проходить, а передача файлов нет.
0.0.255.255 — обратная маска (wildcard mask). О том, что это такое, поговорим чуточку позже
в) Доступ на почтовый сервер
msk-arbat-gw1(config)# ip access-list extended Servers-out
msk-arbat-gw1(config-ext-nacl)#permit tcp any host 172.16.0.4 eq pop3
msk-arbat-gw1(config-ext-nacl)#permit tcp any host 172.16.0.4 eq smtp
г) DNS-сервер
msk-arbat-gw1(config)# ip access-list extended Servers-out
msk-arbat-gw1(config-ext-nacl)# permit udp 172.16.0.0 0.0.255.255 host 172.16.0.5 eq 53
д) ICMP
Осталось исправить ситуацию с пингом. Ничего страшного нет в том, чтобы добавить правила в конец списка, но как-то эстетически приятнее будет увидеть их вначале.
Используем несложный чит для этого. Для это можно воспользоваться текстовым редактором, например. Скопируйте туда из show run кусок про ACL и добавьте следующие строки:
no ip access-list extended Servers-out
ip access-list extended Servers-out
permit icmp any any
remark WEB
permit tcp any host 172.16.0.2 eq www
permit tcp host 172.16.6.66 host 172.16.0.2 range 20 ftp
permit tcp host 172.16.6.66 host 172.16.0.2 eq telnet
remark FILE
permit tcp 172.16.0.0 0.0.255.255 host 172.16.0.3 eq 445
permit tcp any host 172.16.0.3 range 20 21
remark MAIL
permit tcp any host 172.16.0.4 eq pop3
permit tcp any host 172.16.0.4 eq smtp
remark DNS
permit udp 172.16.0.0 0.0.255.255 host 172.16.0.5 eq 53
Первой строкой мы удаляем существующий список, далее создаём его заново и перечисляем все новые правила в нужном нам порядке. Командой в третьей строке мы разрешили проход всех ICMP-пакетов от любых хостов на любые хосты.
Далее просто копируем всё скопом и вставляем в консоль. Интерфейс интерпретирует каждую строку как отдельную команду и выполняет её. Таким образом, мы заменили старый список новым.
Проверяем, что пинг есть:
Данный “чит” хорош для первоначальной конфигурации или если вы точно понимаете, что делаете. На рабочей сети, когда вы настраиваете удалённо ACL, вы рискуете остаться без доступа на настраиваемую железку.
Чтобы вставить правило в начало или в любое другое нужное место, вы можете прибегнуть к такому приёму:
ip access-list extended Servers-out
1 permit icmp any any
Каждое правило в списке пронумеровано с определённым шагом и если перед словом permit/deny вы поставите число, то правило будет добавлено не в конец, а в нужное вам место. К сожалению, такая фича не работает в РТ.
Если будет вдруг необходимо (заняты все подряд идущие числа между правилами) вы всегда можете перенумеровать правила (в этом примере назначается номер первого правила 10(первое число) и инкремент 10):
ip access-list resequence Servers-out 10 10
В итоге Access List на серверную сеть будет выглядеть так:
ip access-list extended Servers-out
permit icmp any any
remark WEB
permit tcp any host 172.16.0.2 eq www
permit tcp host 172.16.6.66 host 172.16.0.2 range 20 ftp
permit tcp host 172.16.6.66 host 172.16.0.2 eq telnet
remark FILE
permit tcp 172.16.0.0 0.0.255.255 host 172.16.0.3 eq 445
permit tcp any host 172.16.0.3 range 20 21
remark MAIL
permit tcp any host 172.16.0.4 eq pop3
permit tcp any host 172.16.0.4 eq smtp
remark DNS
permit udp 172.16.0.0 0.0.255.255 host 172.16.0.5 eq 53
Сейчас наш админ имеет доступ только на WEB-сервер. Откройте ему полный доступ на всю сеть. Это первое домашнее задание.
е) Права пользователей из сети Other
До сих пор нам нужно было не впускать кого-то куда-то, поэтому мы обращали внимание на адрес назначения и список доступа вешали на исходящий с интерфейса трафик.
Теперь нам нужно не выпускать: никакие запросы от компьютеров из сети Other не должны выходить за пределы. Ну, конечно, кроме тех, которые мы специально разрешим.
msk-arbat-gw1(config)# ip access-list extended Other-in
msk-arbat-gw1(config-ext-nacl)# remark IAM
msk-arbat-gw1(config-ext-nacl)# permit ip host 172.16.6.61 any
msk-arbat-gw1(config-ext-nacl)# remark ADMIN
msk-arbat-gw1(config-ext-nacl)# permit ip host 172.16.6.66 any
msk-arbat-gw1(config)#int fa0/0.104
msk-arbat-gw1(config-subif)#ip access-group Other-in in
то есть все IP-пакеты от хоста с адресом 172.16.6.61 или 172.16.6.66 разрешено передавать куда бы они ни были предназначены. Почему мы тут используем тоже расширенный список доступа? Ведь, казалось бы, мы проверяем только адрес отправителя. Потому что админу мы дали полный доступ, а вот гостю компании “Лифт ми Ап”, например, который попадёт в эту же сеть совсем ни к чему доступ куда-либо, кроме как в Интернет.
ё) Сеть управления
msk-arbat-gw1(config)# ip access-list extended Management-out
msk-arbat-gw1(config-ext-nacl)# remark IAM
msk-arbat-gw1(config-ext-nacl)# permit ip host 172.16.6.61 172.16.1.0 0.0.0.255
msk-arbat-gw1(config-ext-nacl)# remark ADMIN
msk-arbat-gw1(config-ext-nacl)# permit ip host 172.16.6.66 172.16.1.0 0.0.0.255
msk-arbat-gw1(config)# int fa0/0.2
msk-arbat-gw1(config-subif)#ip access-group Management-out out
ж) Более никаких ограничений
Маска и обратная маска
До сих пор мы без объяснения давали странный параметр вида 0.0.255.255, подозрительно напоминающий маску подсети.
Немного сложная для понимания, но именно она — обратная маска — используется для определения хостов, которые подпадут под правило.
Чтобы понять что такое обратная маска, вы должны знать, что такое обычная.
Начнём с самого простого примера.
Обычная сеть на 256 адресов: 172.16.5.0/24, например. Что означает эта запись?
А означает она ровно следующее
IP-адрес. Десятичная запись | 172 | 16 | 5 | 0 |
IP-адрес. Двоичная запись | 10101100 | 00010000 | 00000101 | 00000000 |
Маска подсети. Двоичная запись | 11111111 | 11111111 | 11111111 | 00000000 |
Маска подсети. Десятичная запись | 255 | 255 | 255 | 0 |
IP-адрес — это параметр длиною 32 бита, поделенный на 4 части, который вы привыкли видеть в десятичной форме.
Маска подсети также имеет длину 32 бита — она фактически шаблон, трафарет, по которому определяется принадлежность адреса подсети. Там, где в маске стоят единицы, значение меняться не может, то есть часть 172.16.5 совершенно неизменна и она будет одинакова для всех хостов этой подсети, а вот та, где нули — варьируется.
То есть во взятом нами примере 172.16.5.0/24 — это адрес сети, а хосты будут 172.16.5.1-172.16.5.254 (последний 255 — широковещательный), потому что 00000001 — это 1, а 11111110 — 254 (речь о последнем октете адреса). /24 означает, что длина маски 24 бита, то есть у нас идёт 24 единицы — неизменная часть и 8 нулей.
Другой случай, когда маска у нас, например, 30 бит, а не 24.
К примеру 172.16.2.4/30. Распишем это так:
IP-адрес. Десятичная запись | 172 | 16 | 2 | 4 |
IP-адрес. Двоичная запись | 10101100 | 00010000 | 00000010 | 00000100 |
Маска подсети. Двоичная запись | 11111111 | 11111111 | 11111111 | 11111100 |
Маска подсети. Десятичная запись | 255 | 255 | 255 | 252 |
Как видите, для этой подсети могут меняться только последние два бита. Последний октет может принимать следующие 4 значения:
00000100 — адрес подсети (4 в десятичной системе)
00000101 — адрес узла (5)
00000110 — адрес узла (6)
00000111 — широковещательный (7)
Всё, что за пределами этого — уже другая подсеть
То есть теперь вам должно быть чуть-чуть понятно, что маска подсети — это последовательность 32-х бит, где сначала идут единицы, означающие адрес подсети, потом идут нули, означающие адрес хоста. При этом чередоваться нули и единицы в маске не могут чередоваться. То есть маска 11111111.11100000.11110111.00000000 невозможна
А что же такое обратная маска (wildcard)?
Для подавляющего большинства админов и некоторых инженеров — это не более, чем инверсия обычной маски. То есть нули вначале задают адрес части, которая должна совпадать обязательно, а единицы наоборот свободную часть.
То есть на взятом нами первом примере, если вы хотите отфильтровать все хосты из подсети 172.16.5.0/24, то вы зададите правило в Access-листе:
…. 172.16.5.0 0.0.0.255
Потому что обратная маска будет выглядеть так:
Во втором примере с сетью 172.16.2.4/30 обратная маска будет выглядеть так: 30 нулей и две единицы:
Обратная маска. Двоичная запись | 00000000 | 00000000 | 00000000 | 00000011 |
Обратная маска. Десятичная запись | 0 | 0 | 0 | 3 |
Соответственно параметр в access-листе будет выглядеть так:
…. 172.16.2.4 0.0.0.3
Позже, когда вы съедите собаку на просчётах масок и обратных масок, вы запомните самые употребляемые цифры, количество хостов в той или иной маске, поймёте, что в описанных ситуациях последний октет обратной маски получается вычитанием из 255 цифры последнего октета обычной маски (255-252=3) и т.д. А пока нужно много трудиться и считать)
Но на самом деле обратная маска — это несколько более богатый инструмент, здесь вы можете объединять адреса внутри одной подсети или даже объединять подсети, но самое главное отличие, вы можете чередовать нули и единицы. Это позволяет вам, например, отфильтровать определённый узел (или группу) в нескольких подсетях одной строкой.
Пример 1
Дано: сеть 172.16.16.0/24
Надо: отфильтровать первые 64 адреса (172.16.16.0-172.16.16.63)
Решение: 172.16.16.0 0.0.0.63
Пример 2
Дано: сети 172.16.16.0/24 и 172.16.17.0/24
Надо: отфильтровать адреса из обеих сетей
Решение: 172.16.16.0 0.0.1.255
Пример 3
Дано: Сети 172.16.0.0-172.16.255.0
Надо: отфильтровать хост с адресом 4 из всех подсетей
Решение: 172.16.16.0 0.0.255.4
Признаться ни разу в жизни не приходилось встречаться с последним сценарием применения. Это какие-то жутко специфические должны быть задачи.
Более подробно об обратных масках можно прочитать тут: http://habrahabr.ru/post/131712/
Работа ACL в картинках
1) На маршрутизаторе RT1 на интерфейсе FE0/1 на вход у нас разрешено всё, кроме ICMP.
2) На маршрутизаторе RT2 на интерфейсе FE0/1 на выход запрещены SSH и TELNET
Тесты
кликабельны
1) Пинг с компьютера ПК1 на Сервер1
2) TELNET с компьютера ПК1 на Сервер1
3) SSH с компьютера ПК1 на Сервер2
4) Пинг с Сервера2 на ПК1
Дополнения
1) Правила, действующие на исходящий трафик (out) не будут фильтровать трафик самого устройства. То есть, если нужно запретить самой циске доступ куда-либо, то вам придётся на этом интерфейсе фильтровать входящий трафик (ответный оттуда, куда надо запретить доступ).
2) C ACL надо быть аккуратнее. При небольшой ошибке в правиле, неправильном порядке настройки или вообще плохо продуманном списке вы можете остаться без доступа к устройству.
Например, вы хотите закрыть доступ куда угодно для сети 172.16.6.0/24, кроме своего адреса 172.16.6.61 и задаёте правила так:
deny ip 172.16.6.0 0.0.0.255 any
permit ip host 172.16.6.61 any
Как только вы примените ACL на интерфейс, вы сразу потеряете доступ к маршрутизатору, потому что вы попадаете под первое правило и второе даже не проверяется.
Вторая неприятная ситуация, которая может с вами приключиться: под ACL попадёт трафик, который не должен был попасть.
Вообразите такую ситуацию: у нас в серверной есть FTP-сервер в пассивном режиме. Для доступа к нему вы открыли 21-й порт в ACL Servers-out. После первичного установления соединения FTP-сервер сообщает клиенту порт, по которому он готов передавать/принимать файлы, например, 1523-й. Клиент пытается установить TCP-соединение на этот порт, но натыкается на ACL Servers-out, где такого разрешения нету — так и кончается сказка про успешный трансфер. В нашем примере выше, где мы настраивали доступ на файловый сервер, мы открыли доступ только по 20 и 21-му, потому что для примера этого достаточно. В реальной жизни придётся повозиться. Немного примеров конфигурации ACL для распространенных случаев.
access-list out permit tcp host 1.1.1.1 host 2.2.2.2 eq 80
access-list in permit tcp host 2.2.2.2 any eq 80
permit tcp host 2.2.2.2 any established.
Подробности такого решения в одной из следующих статей.
4) Говоря про современный мир, нельзя обойти такой инструмент, как объектные группы (Object-group).
Допустим, надо составить ACL, выпускающий три определенных адреса в интернет по трем одинаковым портам c перспективой расширения количества адресов и портов. Как это выглядит без знания объектных групп:
ip access-list extended TO-INTERNET
permit tcp host 172.16.6.66 any eq 80
permit tcp host 172.16.6.66 any eq 8080
permit tcp host 172.16.6.66 any eq 443
permit tcp host 172.16.6.67 any eq 80
permit tcp host 172.16.6.67 any eq 8080
permit tcp host 172.16.6.67 any eq 443
permit tcp host 172.16.6.68 any eq 80
permit tcp host 172.16.6.68 any eq 8080
permit tcp host 172.16.6.68 any eq 443
object-group service INET-PORTS
description Ports allowed for some hosts
tcp eq www
tcp eq 8080
tcp eq 443
object-group network HOSTS-TO-INET
description Hosts allowed to browse the net
host 172.16.6.66
host 172.16.6.67
host 172.16.6.68
ip access-list extended INET-OUT
permit object-group INET-PORTS object-group HOSTS-TO-INET any
на первый взгляд несколько угрожающе выглядит, но если разобраться, то это очень удобно.
4) Очень полезную для траблшутинга информацию можно получить из вывода команды show ip access-lists %имя ACL%. Кроме собственно списка правил указанного ACL, эта команда показывает количество совпадений по каждому правилу.
msk-arbat-gw1#sh ip access-lists nat-inet
Extended IP access list nat-inet
permit tcp 172.16.3.0 0.0.0.255 host 192.0.2.2 eq www
permit ip 172.16.5.0 0.0.0.255 host 192.0.2.3
permit ip 172.16.5.0 0.0.0.255 host 192.0.2.4
permit ip host 172.16.4.123 any
permit ip host 172.16.6.61 any
permit ip host 172.16.6.66 any (4 match(es))
permit ip host 172.16.16.222 any
permit ip host 172.16.17.222 any
permit ip host 172.16.24.222 any
А дописав в конце любого правила log, мы сможем получать сообщения о каждом совпадении в консоль. (последнее не работает в PT)
Network Address Translation — механизм в хозяйстве совершенно необходимый уже с 1994-го года. Много сессий об него сломано и пакетов потеряно.
Нужен он чаще всего для подключения вашей локальной сети к Интернету. Дело в том, что теоретически существует 255*255*255*255=4 228 250 625. 4 миллиарда адресов. Даже если бы у каждого жителя планеты был всего один компьютер, адресов бы уже не хватало. А тут разве что утюги к Интернету не подключаются. Умные люди сообразили это ещё в начале 90-х и как временное решение предложили разделить пространство адресов на публичные (белые) и приватные (частные, серые).
К последним относятся три диапазона:
10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
Их вы свободно можете использовать в своей частной сети, и поэтому, разумеется, они будут повторяться. Как же быть с уникальностью? Кому будет отвечать WEB-сервер, которому пришёл запрос с обратным адресом 192.168.1.1? Ростелекому? Компании Татнефть? Или вашему комнатному Длинку? В большом интернете никто ничего не знает о приватных сетях — они не маршрутизируются.
Тут и выходит на сцену NAT. По большому счёту, это обман, подстава. На натирующем устройстве ваш приватный адрес, грубо говоря, просто подменяется на белый адрес, который и будет фигурировать далее в пакете, пока он путешествует до WEB-сервера. А вот белые адреса очень даже хорошо маршрутизируются, и пакет точно вернётся обратно на натирующее устройство.
Но как оно в свою очередь поймёт, что с ним делать дальше? Вот с этим и разберёмся.
Типы NAT
Статический
В этом случае один внутренний адрес преобразуется в один внешний. И при этом все запросы, приходящие на внешний адрес будут транслироваться на внутренний. Словно бы этот хост и является обладателем этого белого IP-адреса.
Настраивается следующей командой:
Router (config)# ip nat inside source static 172.16.6.5 198.51.100.2
Что происходит:
1) Узел 172.16.6.5 обращается WEB-серверу. Он отправляет IP-пакет, где в качестве адреса получателя стоит 192.0.2.2, а отправителя 172.16.6.5.
2) По корпоративной сети пакет доставляется к шлюзу 172.16.6.1, где и настроен NAT
3) Согласно настроенной команде, маршрутизатор снимает текущий заголовок IP и меняет его на новый, где в качестве адреса отправителя уже фигурирует белый адрес 198.51.100.2.
4) По большому Интернету обновлённый пакет достигает сервера 192.0.2.2.
5) Тот видит, что ответ надо слать на 198.51.100.2 И подготавливает ответный IP-пакет. В качестве адреса отправителя собственно адрес сервера 192.0.2.2, адрес назначения — 198.51.100.2
6) Пакет обратно летит через Интернет, причём не факт, что тем же путём.
7) На натирующем устройстве указано, что все запросы на адрес 198.51.100.2 нужно перенаправлять на 172.16.6.5. Маршрутизатор снова раздевает спрятанный внутри TCP-сегмент и задаёт новый IP-заголовок (адрес отправителя не меняется, адрес назначения 172.16.6.5).
8) По внутренней сети пакет возвращается инициатору, которому даже и невдомёк, какие чудеса с ним творились на границе.
И так будет с каждым.
При этом если соединение инициируется из Интернета, пакеты автоматически, проходя через натирующее устройство, попадают на внутренний хост.
Такой подход бывает полезным, когда у вас есть сервер внутри вашей сети, к которому необходим полный доступ извне. Разумеется, этот вариант вы не можете использовать, если хотите триста хостов выпустить в Интернет через один адрес. Такой вариант NAT’а никак не поможет сохранить белые IP-адреса, но тем не менее он бывает полезен.
Динамический
Router(config)#ip nat pool lol_pool 198.51.100.3 198.51.103.14
Router(config)#access-list 100 permit ip 172.16.6.0 0.0.0.255 any
Router(config)#ip nat inside source list 100 pool lol_pool
Этой командой мы стыкуем созданный ACL и пул.
Этот вариант тоже не универсальный, своих 300 пользователей вы так же не сможете выпустить всех в Интернет, если у вас нет 300 внешних адресов. Как только белые адреса исчерпаются, никто новый уже не сможет получить доступ в Интернет. При этом те пользователи, что уже успели отхватить себе внешний адрес, будут работать. Скинуть все текущие трансляции и освободить внешний адреса вам поможет команда clear ip nat translation *
Помимо динамического выделения внешних адресов, этот динамически NAT отличается от статического тем, что без отдельной настройки проброса портов уже невозможно внешнее соединение на один из адресов пула.
Many-to-One
Следующий тип имеет несколько названий: NAT Overload, Port Address Translation (PAT), IP Masquerading, Many-to-One NAT.
Последнее название говорит само за себя — через один внешний адрес выходит в мир много приватных. Это позволяет решить проблему с нехваткой внешних адресов и выпустить в мир всех желающих.
Тут надо бы дать пояснение, как это работает. Как два приватных адреса транслируются в один можно представить, но как маршрутизатор понимает кому нужно переслать пакет, вернувшийся из Интернета на этот адрес?
Всё очень просто:
Предположим, что от двух хостов из внутренней сети приходят пакеты на натирующее устройство. Оба с запросом к WEB-серверу 192.0.2.2.
Данные от хостов выглядят так:
Адрес отправителя | Порт отправителя | Адрес получателя | Порт получателя |
172.16.6.5 | 23761 | 192.0.2.2 | 80 |
172.16.4.5 | 39800 | 192.0.2.2 | 80 |
Маршрутизатор расчехляет IP-пакет от первого хоста, извлекает из него TCP-сегмент, распечатывает его и узнаёт, с какого порта устанавливается соединение. У него есть внешний адрес 198.51.100.2, на который будет меняться адрес из внутренней сети.
Далее он выбирает свободный порт, например, 11874. И что он делает дальше? Все данные уровня приложений он упаковывает в новый TCP сегмент, где в качестве порта назначения по-прежнему остаётся 80 (именно на него ждёт коннектов WEB-сервер), а порт отправителя меняется с 23761 на 11874. Этот TCP-сегмент инкапсулируется в новый IP-пакет, где меняется IP-адрес отправителя с 172.16.6.5 на 198.51.100.2.
То же самое происходит для пакета от второго хоста, только выбирается следующий свободный порт, например 11875. “Свободный” означает, что он ещё не занят другими такими соединениями.
Данные, которые отправляются в интернет, теперь буду выглядеть так.
Адрес отправителя | Порт отправителя | Адрес получателя | Порт получателя |
198.51.100.2 | 11874 | 192.0.2.2 | 80 |
198.51.100.2 | 11875 | 192.0.2.2 | 80 |
В свою NAT-таблицу он заносит данные отправителей и получателей
Локальный адрес отправителя | Локальный порт отправителя | Глобальный адрес отправителя | Глобальный порт отправителя | Адрес получателя | Порт получателя |
172.16.6.5 | 23761 | 198.51.100.2 | 11874 | 192.0.2.2 | 80 |
172.16.4.5 | 39800 | 198.51.100.2 | 11875 | 192.0.2.2 | 80 |
Для WEB-сервера — это два совершенно разных запроса, которые он должен обработать каждый индивидуально. После этого он отсылает ответ, который выглядит так:
Адрес отправителя | Порт отправителя | Адрес получателя | Порт получателя |
192.0.2.2 | 80 | 198.51.100.2 | 11874 |
192.0.2.2 | 80 | 198.51.100.2 | 11875 |
Когда один из этих пакетов доходит до нашего маршрутизатора, тот сопоставляет данные в этом пакете со своими записями в NAT-таблице. Если совпадение найдено, происходит обратная процедура — пакету и TCP сегменту возвращаются его изначальные параметры только в качестве назначения:
Адрес отправителя | Порт отправителя | Адрес получателя | Порт получателя |
192.0.2.2 | 80 | 172.16.6.5 | 23761 |
192.0.2.2 | 80 | 172.16.4.5 | 39800 |
И теперь пакеты доставляется по внутренней сети компьютерам-инициаторам, которым и невдомёк даже, что где-то с их данными так жёстко обошлись на границе.
Каждое ваше обращение — это отдельное соединение. То есть попытались вы открыть WEB-страницу — это протокол HTTP, использующий порт 80. Для этого ваш компьютер должен установить TCP-сессию с удалённым сервером. Такая сессия (TCP или UDP) определяется двумя сокетами: локальный IP-адрес: локальный порт и удалённый IP-адрес: удалённый порт. В обычной ситуации у вас устанавливается одно соединение компьютер-сервер, в случае же NATа соединения будет как бы два:, маршрутизатор-сервер и компьютер думает, что у него есть сессия компьютер-сервер.
Настройка отличается совершенно незначительно: добавочным словом overload:
Router(config)#access-list 101 permit 172.16.4.0 0.0.0.255
Router(config)#ip nat inside source list 101 interface fa0/1 overload
Router(config)#ip nat pool lol_pool 198.51.100.2 198.51.103.14
Router(config)#access-list 100 permit 172.16.6.0 0.0.0.255
Router(config)#ip nat inside source list 100 pool lol_pool overload
Перенаправление портов
Router(config)#ip nat inside source static tcp 172.16.0.2 80 198.51.100.2 80 extendable
Router(config)# ip nat inside source static tcp 172.16.6.61 3389 198.51.100.2 3389
Router(config)# ip nat inside source static tcp 172.16.6.66 3389 198.51.100.2 3398
Тогда, чтобы попасть на компьютер 172.16.6.61 вы запускаете RDP-сессию на порт 198.51.100.2:3389, а на 172.16.6.66 — 198.51.100.2:3398. Маршрутизатор сам раскидает всё, куда надо.
Кстати, эта команда — частный случай самой первой: ip nat inside source static 172.16.6.66 198.51.100.2. Только в этом случае речь идёт о пробросе всего трафика, а в наших примерах — конкретных портов протокола TCP.
Вот так в общих чертах фунциклирует NAT. Про его особенности, плюсы/минусы написано куча статей, но не отметить их нельзя.
Слабости и силости NAT
— В первую очередь NAT позволяет сэкономить публичные IP-адреса. Собственно для этого он и был создан. Через один адрес, теоретически можно выпустить больше 65000 серых адресов (по количеству портов).
— Во-вторых, PAT и динамический NAT является в какой-то степени файрволом, препятствуя внешним соединениям доходить до конечных компьютеров, на которых может не оказаться своего файрвола и антивируса. Дело в том, что если извне на натирующее устройство приходит пакет, который тут не ожидается или не разрешён, он просто отбрасывается.
Чтобы пакет был пропущен и обработан, должны выполниться следующие условия:
1) В NAT-таблице должна быть запись для этого внешнего адреса, указанного как адрес отправителя в пакете
И
2) Порт отправителя в пакете должен совпадать с портом для этого белого адреса в записи
И
3) Порт назначения в пакете, совпадает с портом в записи.
ИЛИ
Настроен проброс портов.
Но не нужно рассматривать NAT именно как файрвол — это не более, чем дополнительная его плюшка.
— В-третьих, NAT скрывает от посторонних глаз внутреннюю структуру вашей сети — при трассировке маршрута извне вы не увидите ничего далее натирующего устройства.
Что ещё нужно знать?
— NAT применяется в основном для обеспечения доступа в Интернет хостам с приватными адресами. Но бывает и иное применение — связь между двумя частными сетями с пересекающимися адресными пространствами.
Например, ваша компания покупает себе филиал в Актюбинске. У вас адресация 10.0.0.0-10.1.255.255, а у них 10.1.1.0-10.1.10.255. Диапазоны явно пересекаются, настроить маршрутизацию никак не получится, потому что один и тот же адрес может оказаться и в Актюбинске и у вас в штаб-квартире.
В таком случае на месте стыка настраивается NAT. Поскольку серых адресов у нас не мерено, можно выделить, к примеру, диапазон 10.2.1.0-10.2.10.255 и делать трансляцию один-в-один:
10.1.1.1-10.2.1.1
10.1.1.2-10.2.1.2
…
10.1.10.255-10.2.10.255
— В больших игрушках для взрослых NAT может быть реализован на отдельной плате (и часто так и есть) и без неё не заработает. А на офисных железках, напротив, есть почти всегда.
— С повсеместным внедрением IPv6 необходимость в NAT’e будет сходить на нет. Уже сейчас большие заказчики начинают интересоваться функционалом NAT64 — это когда у вас выход в мир через IPv4, а внутренняя сеть уже на IPv6
— Разумеется, это лишь поверхностный взгляд на NAT и есть ещё море нюансов, не утонуть в котором вам поможет самообразование.
Практика NAT
Чего от нас требует реальность?
1) Сеть управления не имеет доступа в интернет вообще
2) Хосты из сети ПТО имеют доступ только к профильным сайтам, например, Linkmeup.ru
3) Милым дамам из бухгалтерии нужно вырубить окно в мир клиент-банков.
4) ФЭО не выпускать никуда, за исключением финансового директора
5) В сети Other наш компьютер и компьютер админа — им дадим полный доступ в интернет. Всем остальным можно открывать по письменному запросу.
6) Не забудем про филиалы в Питере и в Кемерово. Для простоты настроим полный доступ для эникиев из этих подсетей.
7) С серверами отдельная песня. Для них мы настроим перенаправление портов. Всё, что нам нужно:
а) WEB-сервер должен быть доступен по 80-му порту
б) Почтовый сервер по 25-му и 110-му
в) Файловый сервер доступен из мира по FTP.
8) Компьютеры админа и наш должны быть доступны из Интернета по RDP. Вообще-то это неправильный путь — для удалённого подключения нужно использовать VPN-подключение и уже будучи в локальной сети использовать RDP, но это тема отдельной совсем другой статьи.
Сначала подготовим тестовую площадку:
Подключение к Интернету будет организовано через существующий линк, который предоставляет провайдер.
Он уходит в сеть провайдера. Напоминаем, что всё в этом облаке — это абстрактная сеть, которая на деле может состоять из десятков маршрутизаторов и сотен коммутаторов. Но нам нужно нечто управляемое и предсказуемое, поэтому водружаем сюда ещё маршрутизатор. С одной стороны в него линк из коммутатора, с другой сервера в Интернете.
Сервера нам понадобятся следующие:
1. Два клиент-банка для бухгалтеров (sperbank.ru, mmm-bank.ru)
2. Linkmeup.ru для ПТОшников
3. яндекс (yandex.ru)
Для такого подключения мы поднимем ещё один влан на msk-arbat-gw1. Его номер, разумеется, согласуется с провайдером. Пусть это будет VLAN 6
Предположим, провайдер предоставляет нам подсеть 198.51.100.0/28. Первые два адреса используются для организации линка (198.51.100.1 и 198.51.100.2), а оставшиеся мы используем, как пул для NAT’a. Впрочем, никто совершенно нам не мешает использовать и адрес 198.51.100.2 для пула. Так и сделаем: пул: 198.51.100.2-198.51.100.14
Для простоты предположим, что публичные сервера у нас находятся в одной подсети:
192.0.2.0/24.
Как настроить линк и адреса вы вполне уже в курсе.
Поскольку у нас только один маршрутизатор в сети провайдера, и все сети подключены непосредственно к нему, то необходимости настраивать маршрутизацию нету.
А вот наш msk-arbat-gw1 должен знать куда отправлять пакеты в Интернет, поэтому нам нужен маршрут по умолчанию:
msk-arbat-gw1(config)# ip route 0.0.0.0 0.0.0.0 198.51.100.1
Во первых настроим пул адресов
msk-arbat-gw1(config)# ip nat pool main_pool 198.51.100.2 198.51.100.14 netmask 255.255.255.240
msk-arbat-gw1(config)# ip access-list extended nat-inet
1) Сеть управления
не имеет доступа в интернет вообще
Готово
2) Хосты из сети ПТО
msk-arbat-gw1(config-ext-nacl)# permit tcp 172.16.3.0 0.0.0.255 host 192.0.2.2 eq 80
3)Бухгалтерия
msk-arbat-gw1(config-ext-nacl)# permit ip 172.16.5.0 0.0.0.255 host 192.0.2.3
msk-arbat-gw1(config-ext-nacl)# permit ip 172.16.5.0 0.0.0.255 host 192.0.2.4
4) ФЭО
msk-arbat-gw1(config-ext-nacl)# permit ip host 172.16.4.123 any
5) Other
msk-arbat-gw1(config-ext-nacl)# permit ip host 172.16.6.61 any
msk-arbat-gw1(config-ext-nacl)# permit ip host 172.16.6.66 any
6) Филиалы в Санкт-Петербурге и Кемерово
msk-arbat-gw1(config-ext-nacl)# permit ip host 172.16.16.222 any
msk-arbat-gw1(config-ext-nacl)# permit ip host 172.16.17.222 any
msk-arbat-gw1(config-ext-nacl)# permit ip host 172.16.24.222 any
Вот так выглядит сейчас ACL полностью:
ip access-list extended nat-inet
remark PTO
permit tcp 172.16.3.0 0.0.0.255 host 192.0.2.2 eq www
remark ACCOUNTING
permit ip 172.16.5.0 0.0.0.255 host 192.0.2.3
permit ip 172.16.5.0 0.0.0.255 host 192.0.2.4
remark FEO
permit ip host 172.16.4.123 any
remark IAM
permit ip host 172.16.6.61 any
remark ADMIN
permit ip host 172.16.6.66 any
remark SPB_VSL_ISLAND
permit ip host 172.16.16.222 any
remark SPB_OZERKI
permit ip host 172.16.17.222 any
remark KMR
permit ip host 172.16.24.222 any
msk-arbat-gw1(config)# ip nat inside source list nat-inet pool main_pool overload
msk-arbat-gw1(config)# int fa0/0.101
msk-arbat-gw1(config-subif)# ip nat inside
msk-arbat-gw1(config)# int fa0/0.102
msk-arbat-gw1(config-subif)# ip nat inside
msk-arbat-gw1(config)# int fa0/0.103
msk-arbat-gw1(config-subif)# ip nat inside
msk-arbat-gw1(config)# int fa0/0.104
msk-arbat-gw1(config-subif)# ip nat inside
msk-arbat-gw1(config)# int fa0/1.6
msk-arbat-gw1(config-subif)# ip nat outside
Это позволит маршрутизатору понять откуда ждать пакеты, которые нужно будет обработать и куда их потом слать.
Чтобы сервера в интернете были доступны по доменному имени, нам бы неплохо было обзавестись DNS-сервером в нашей сети:
Естественно его, нужно прописать на тех устройствах, с которых будем проверять доступ:
С компьютера админа доступно всё:
Из сети ПТО есть доступ только на сайт linkmeup.ru по 80-му порту (HTTP):
В сети ФЭО в мир выходит только 4.123 (финдиректор)
В бухгалтерии работают только сайты клиент-банков. Но, поскольку разрешение дано полностью на протокол IP, то их можно и пинговать:
7) Cервера
Тут нам нужно настроить проброс портов, чтобы к ним можно было обращаться из Интернета:
a) Веб-сервер
msk-arbat-gw1(config)# ip nat inside source static tcp 172.16.0.2 80 198.51.100.2 80
msk-arbat-gw1(config)# int fa0/0.3
msk-arbat-gw1(config-subif)# ip nat inside
б) Файловый сервер
msk-arbat-gw1(config)# ip nat inside source static tcp 172.16.0.3 20 198.51.100.3 20
msk-arbat-gw1(config)# ip nat inside source static tcp 172.16.0.3 21 198.51.100.3 21
Вот для этого в ACL Servers-out мы открывали также и 20-21-й порты для всех
в) Почтовый сервер
msk-arbat-gw1(config)# ip nat inside source static tcp 172.16.0.4 25 198.51.100.4 25
msk-arbat-gw1(config)# ip nat inside source static tcp 172.16.0.4 110 198.51.100.4 110
Проверить также не сложно. Следуйте инструкциям:
Сначала настраиваем почтовый сервер. Указываем домен и создаём двух пользователей.
Далее вносим домен в DNS. Этот шаг необязательный — можно к серверу обращаться и по IP, но почему бы и нет?
Настраиваем компьютер из нашей сети:
На локальном хосте нажимаем Receive:
8) Доступ по RDP к компьютерам админа и нашему
msk-arbat-gw1(config)# ip nat inside source static tcp 172.16.6.61 3389 198.51.100.10 3389
msk-arbat-gw1(config)# ip nat inside source static tcp 172.16.6.66 3389 198.51.100.10 3398
Безопасность
На последок одно замечание. Скорее всего натирующее устройство, у вас смотрит своим ip nat outside интерфейсом наружу — в Интернет. Поэтому на этот интерфейс не помешало бы повешать ACL, где вы запретите, разрешите, то что вам нужно. На этом вопросе не будем останавливаться уже в данной статье.
На этом первое знакомство с технологией NAT можно считать законченным.
В качестве ещё одного ДЗ ответьте на вопрос, почему нет доступа в Интернет с компьютеров эникиев в Питере и в Кемерово. Ведь мы их добавили уже в список доступа.
Материалы выпуска
Бонусы
access-list 101 permit ip 192.168.2.0 0.0.0.255 any
Создаём карту маршрутов, где обозначаем, что если пакет из сети 192.168.2.0/24, то для него назначить next-hop 10.0.2.1 (вместо 10.0.1.1)
route-map CLIENT permit 5
match ip address 101
set ip next-hop 10.0.2.1
Router(config)# access-list 100 permit ip 192.168.1.0 0.0.0.255 any
Router(config)# access-list 101 permit ip 192.168.2.0 0.0.0.255 any
Router(config)# interface fa0/0
Router(config-if)# rate-limit output access-group 100 1544000 64000 64000 conform-action transmit exceed-action drop
Router(config-if)# rate-limit output access-group 101 64000 16000 16000 conform-action transmit exceed-action drop
Назревшие вопросы безхаберным людям можно реализовать в ЖЖ.
Спасибо моему соавтору thegluck
Отдельная благодарность за помощь в подготовке статьи JDima