Законы превращения трафика в маршрутизаторах

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

Сегодня мы разберем следующие понятия: маршрутизация (routing), трансляция адресов (NAT), проброс портов (port forwarding).

Маршрутизация

Начнем с маршрутизации (роутинга). Чтобы было проще понять текст, я нарисовал схему:

Такая схема не часто используется на практике, но для объяснения лучше не придумаешь. Предположим, у нас есть две локальных сети, которые выходят в интернет каждая через свой роутер. И есть еще один роутер, который служит для соединения двух сетей напрямую. Первый вопрос, который обычно задают новички — если мы соединяем сети напрямую, то зачем нам вообще нужен роутер №3 (см рисунок).
Ответ: в двух сетях разное адресное пространство, поэтому компьютеры не увидят друг друга, если сети соединить напрямую. Нужно что-то, что будет объяснять компам сети №1, какие адреса у компов в сети №2 и наоборот. Роль этого «объяснялки» как раз выполняет роутер №3.
Как это работает на практике:
Возьмем компьютеры из сети №1 и посмотрим их сетевые настройки. У них шлюз по умолчанию стоит роутер №1. Но как же тогда трафик будет уходить в сеть №2? Для этого на всех компьютерах сети №1 нужно прописать частный маршрут. В Windows это будет выглядеть вот так:
route add 192.168.2.0 mask 255.255.255.0 192.168.1.100
Здесь говорится следующее: маршрут добавить сеть 192.168.2.0 с маской 255.255.255.0 через шлюз 192.168.1.100
Для второй сети команда будет иметь вид:
route add 192.168.1.0 mask 255.255.255.0 192.168.2.100
Этот частный маршрут (еще его называют правилом маршрутизации) будет храниться в так называемой таблице маршрутизации компьютера. Когда комп собирается отправить данные в сеть, он смотрит эту таблицу и определяет куда нужно слать данные. При этом таблица маршрутизации перебирается в поисках наиболее подходящего маршрута. Сначала ищутся частные маршруты, если их нет или они не подходят, то тогда данные отправляются на шлюз по умолчанию. Однако, таблица маршрутизации будет удалена после перезагрузки компа. Если вы хотите оставить её на совсем, то между командами route и add надо вставить параметр -p, получится вот так: route -p add. Чтобы удалить ненужный маршрут вместо add пишем delete.
Тут есть один важный ньанс. Если мы пропишем частный маршрут только на компах сети №1 и попытаемся связаться с компьютерами из сети №2, то у нас ничего не получится, потому что компы второй сети не знаю куда отправлять ответ. Они будут слать его на шлюз по умолчанию, т.е. в интернет, потому что в их таблице маршрутизации отсутствует запись о сети №1. Таким образом, чтобы передача информации осуществлялась, нам нужно создать частное правило маршрутизации в сторону сети №1. Так же надо отметить, что на роутере №3 скорей всего есть фаервол, на котором надо разрешить прохождение трафика.
Однако, чаще всего используется другая схема сети, которая представлена на рисунке ниже:

Как видите, здесь две локальных сети, они объединены одним роутером, через который осуществляется доступ в интернет. В этом случае трафик между локальными сетями будет ходить без дополнительных частных правил маршрутизации, потому что шлюз по умолчанию является еще и шлюзом в соседнюю сеть. Если у вас подобная схема, но трафик между локальными сетями не передается, то вам нужно смотреть настройки фаервола на роутере — нужно добавить разрешающее правило. Кстати, очень часто новички думают, что трафик не передается потому, что надо настроить маршрутизацию и начинают ковырять настройки роутера совсем не в том направлении. Так вот, это не так. Все что может мешать прохождению трафика при такой схеме соединения — это фаервол.

Трансляция адресов (NAT)

Изначально нужно было решить всего одну проблему. Большинство локальных сетей работают в одинаковых адресных пространствах, я имею ввиду адреса вида 192.168.1.x и т.п. Вы можете в своей локальной сети назначать адреса какие вам заблагорассудится и никто вам слова не скажет. Все эти адреса называют «серыми», их много и из-за этого маршрутизировать их через интернет невозможно. Интернет имеет свое адресное пространство, где каждому узлу выделен отдельный IP-адрес. В интернете нет повторяющихся адресов, благодаря этому маршрутизация работает, сами адреса специально регистрируются провайдерами и они стоят денег. По совокупности всех этих факторов интернет-адреса называют «белыми». Так вот, чтобы решить проблему прохождения трафика из «серых» сетей с любыми адресами в интернет придумали механизм трансляции адресов. Суть его в том, что с помощью NAT можно целую сеть «спрятать» за узлом с «белым» адресом, где в качестве узла выступает ваш роутер.
Рассмотрим по этапам прохождение трафика. Например, я набираю в броузере адрес какого-нибудь сайта. Компьютер этот запрос отправляет на шлюз по умолчанию в локальной сети, т.е. на роутер. Получив запрос, роутер записывает у себя это как событие, где ваш комп обозначается инициатором соединения. Затем, ваш пакет с запросом выбрасывается и в это же самое время роутер формирует аналогичный запрос, только не от имени вашего компа, а от своего имени и затем со своего «белого» адреса отправляет запрос в интернет. Так запрос доходит до получателя, там обрабатывает и отправляется ответ. Ответ приходит на «белый» адрес роутера. Роутер смотрит все свои записанные события и пересылает полученный из интернета ответ на нужный комп локальной сети. Круг замкнулся. Сначала может показаться, что это такой не быстрый процесс, но на самом деле все это происходит очень быстро и часто.

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

Проброс портов (port forwarding)

Как мы с вами поняли, трансляция адресов решила одну важную проблему, но вместе с этим породила одну дополнительную. Например, внутри моей локальной сети есть FTP сервер, к которому я хотел бы дать доступ из интернета, но сделать это не могу, потому что вся локальная сеть «спрятана» за NAT. Для таких случаев придумали механизм port forwarding. Специальным правилом на роутере мы говорим, что любое входящее соединение из интернета по протоколу FTP нужно пересылать на FTP-сервер в локальную сеть. Довольно простой механизм, а ньанс заключается только в том, что эта штука на роутере всегда настраивается вручную, т.е. создается само правило проброса плюс разрешающие правила на фаерволе.
На этом пока всё, если я что-то забыл рассмотреть, пишите в комменты, добавим!

admin

7 комментариев к “Законы превращения трафика в маршрутизаторах”

Вы можетеоставить отзыв или Обратную ссылку эта запись.
  1. Alex - Апрель 12, 2014 Ответить

    Спасибо большое, очень простым и понятным языком все растолковали!

  2. Джин - Июнь 5, 2014 Ответить

    Здравствуйте. Да, действительно всё хорошо расписано. Но про проброс хочу добавить что соединения например для FTP из интернета могут приходить не на стандартный порт FTP, а на какой-нибудь другой, а уже потом система пересылает на стандартный 21-ый (при условии что этот порт используется для FTP).
    Не хватает конкретных правил фаерволла и NAT. Например, для PfSense или Zeroshell.

  3. Pharao - Июнь 23, 2014 Ответить

    Маршрутизация, схема 1. Можно обойтись без 3 роутера, соединив роутер 1 с роутером 2 напрямую. И на каждом настроить роутинг адресов в соседнюю сеть.

  4. Александр - Октябрь 24, 2014 Ответить

    А каким образом можно присвоить одному роутеру два физических адреса? (Рис. 2)

  5. sergey - Октябрь 28, 2015 Ответить

    Толково описано, спасибо автору

  6. Сергей - Январь 10, 2016 Ответить

    присваиваются адреса портам роутера, а роутеры бывают разные(с двумя и более портами)

  7. Аноним - Февраль 10, 2016 Ответить

    это же азы.

Оставить отклик

Ваш адрес эл.почты не будет опубликован.