Меню
Контакты
109147, Москва, ул.Воронцовская, 35Б, корп.2 офис.11, 4 этаж
Пн-Пт: с 9-00 до 17-00   Сб-вс: выходной
Интернет-магазин
сетевого оборудования
Москва +7 (495) 103-41-03 +7 (915) 420-28-94
109147, Москва, ул.Воронцовская, 35Б, корп.2 офис.11, 4 этаж
Пн-Пт: с 9-00 до 17-00   Сб-вс: выходной
Заказать звонок

NAT - технология преобразования множества внутренних IP-адресов сети в один

 02 Июнь 2010    MikroTik, Firewall

   Резюме  

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

  Спецификации   

Требуемые пакеты: system

Необходимая лицензия: level1, level3

Уровень меню: /ip firewall nat

Стандарты и технологии: IP, RFC1631, RFC2663

Аппаратное обеспечение: Увеличивается с количеством правил.

  NAT   

Трансляция сетевых адресов – это Интернет стандарт для установки соединений из локальной сети в глобальную, через один IP адрес и наоборот – установки соединений из глобальной сети в локальную. Локальная сеть, использующая NAT, относится к natted сетям. Для функционирования NAT необходимо наличие NAT-шлюза в каждой natted сети. NAT шлюз (NAT маршрутизатор) перезаписывает путь следования пакета от/к Локальной сети.

Существует два типа NAT:

• исходящий NAT или srcnat. Этот тип NAT выполняется для пакетов, исходящих из natted сети. NAT маршрутизатор, при прохождении через него, заменяет персональный IP адрес исходящего пакета на новый общедоступный IP адрес. Обратная операция применяется к пакетам, следующим в противоположном направлении.

• входящий NAT или dstnat. Это тип NAT применяется для пакетов, которые следуют в natted сеть. В большинстве случаев применяется для того, чтобы сделать доступными хосты приватной сети для сети Интернет. NAT маршрутизатор, применяя действие dstnat, подменяет IP адреса назначения всех IP пакетов идущих через маршрутизатор в приватную сеть.

  Недостатки NAT  

У хостов, находящихся за NAT-маршрутизатором, нет возможности установить реальное соединение от хоста к хосту. Поэтому, некоторые Интернет протоколы могут не работать через NAT. Службы, требующие инициализации TCP соединения извне приватной сети или протоколы без запоминания состояния, такие как UPD, могут быть деструктированы. Более того, некоторые протоколы изначально не совместимы с NAT. Например, AH протокол из набора IPsec.

RouterOS включает в себе множество, так называемых, NAT помощников, которые включают NAT отслеживания для различных протоколов.

  Redirect и Masquerade  

Redirect и Masquerade это специальные формы dstnat и srcnat, соответственно. Redirect подобен стандартному dstnat, так же как и Masquerade подобен srcnat. Masquerade является формой srcnat, но без необходимости уточнения to-address – IP адрес исходящего интерфейса назначается автоматически. Redirect является формой dstnat, без использования to-address – вместо него используется IP адрес входящего интерфейса. Примечание: для Redirect значащим правилом является to-ports, которое является портом службы на маршрутизаторе, способным ответить на этот запрос (как например web proxy).

Когда над пакетом производится действие dstnat (будь то action=nat или action=redirect), адрес назначения изменяется. Информация о трансляции адресов, включающая в себя настоящий адрес назначения, находится во внутренних таблицах маршрутизатора. Прозрачный web-прокси, работающий на маршрутизаторе (когда web запрос перенаправляется на порт прокси маршрутизатора), получает эту информацию из таблиц и, соответственно, получает из них и адрес web сервера. Если выполняется действие dstnat для других прокси серверов, то не существует другой возможности получить адрес web сервера из IP заголовка пакета (потому что адрес назначения IP пакета предварительно был изменен на адрес прокси сервера). Начиная с HTTP/1.1, используется специальный заголовок HTTP запроса, в котором находится адрес web сервера. Так прокси сервер может использовать его, вместо dst адреса IP пакета. Если нет этого заголовка (старые версии HTTP клиента), прокси сервер не может определить адрес web сервера и поэтому не может работать. 


Это средство делает не возможным правильно и прозрачно редиректить HTTP трафик от маршрутизатора к некоторым другим прозрачным прокси. Единственно правильным путём является добавление прозрачного прокси на маршрутизаторе и конфигурирование его таким образом, что бы «реальный» прокси являлся родительским прокси. В этой ситуации ваш "настоящий" прокси не может быть прозрачным, поскольку прокси на маршрутизаторе будет прозрачен и будет отправлять запросы прокси (в соответствии со стандартом; эти запросы включают всю необходимую информацию о web сервере) к "настоящему" прокси. 

 

  Описание свойств  

 action(accept | add-dst-to-address-list | add-src-to-address-list | dst-nat | jump | log | masquerade | netmap | passthrough | redirect | return | same | src-nat; default: accept) - предпринимаемое действие, если пакет соответствует правилу: 

 • accept - принять пакет. Ничего не делать, т.е. пакет проследует через маршрутизатор и не одно правило не будет применено к нему; 

 • add-dst-to-address-list - добавить адрес назначения IP пакета в список адресов, определенный параметром address-list; 

 • add-src-to-address-list - добавить адрес источника IP пакета в список адресов, определенный параметром address-list; 

 • dst-nat - подменить адрес назначения IP пакета на значение, определенное в параметре to-address и в to-ports; 

 • jump - переход в цепочку, определенную значением параметра jump-target; 

 • log - каждое правило, совпадающее с этим правилом, будет записано в системный журнал; 

 • masquerade - замена адреса источника IP пакета на автоматически определенный адрес средствами маршрутизации; 

 • netmap – часто используется для распределения общедоступных IP адресов между хостами локальной сети; 

 • passthrough - игнорировать это (текущее) правило и перейти к следующему; 

 • redirect - заменяет адрес назначения IP пакета на один из локальных адресов; 

 • return - вернуться назад в правило, из которого был произведен переход jump; 

 • same - выдать клиенту некоторый IP адрес источника/назначения из имеющегося диапазона для каждого соединения. Этот метод чаще всего используется для служб, ожидающих некоторого клиентского адреса для множественных подключений от одного клиента 

 • src-nat - заменяет адрес источника IP пакета на значение, определенное в параметрах to-address и to-ports. 

 address-list(name) – имя из списка адресов, в котором собранны IP адреса за правилом action=add-dst-to-address или action=add-src-to-address-list. Этот список адресов впоследствии может быть использован для согласования пакетов. 

 address-list-timeout(time; default: 00:00:00) – интервал, после которого, адрес будет удален из списка адресов, определенного в address-list. Используется в паре с действиями add-dst-to-address-list или add-src-to-address-list: 

 • 00:00:00 - оставить адрес в списке адресов навсегда. 

 chain(dstnat | srcnat | name) - добавление в цепочку определенного правила. То есть, в случае, когда различный трафик должен проходить через различные цепочки, всегда будьте осторожны при выборе правильной цепочки для нового правила. Если при вводе не будет совпадения с названием уже существующей цепочке, то будет создана новая цепочка: 

 • dstnat – правило, находящееся в этой цепочке, применяется до маршрутизации. Здесь находятся правила, подменяющие адреса назначения IP пакета; 

 • srcnat – правило, находящееся в этой цепочке, срабатывает после маршрутизации. Здесь находятся правила, подменяющие адреса исходящих IP пакетов. 

 comment(text) - наглядный комментарий к правилу. Комментарий может быть использован для идентификации правила из сценария. 

 connection-bytes(integerinteger) - соответствие пакетов в случае, если определенное количество байт было передано через определенное соединение: 

 • 0 – бесконечность. Например, connection-bytes=2000000-0 для проверки пакетов используется это правило, в том случае, если более чем 2Мб прошло через выбранное соединение. 

 connection-limit(integernetmask) - ограничить количество соединений по адресу или по блоку адресов (применяется, если определённое количество соединений уже было установлено). 

 connection-mark(name) - соответствие пакетов, промаркированных средством mangle специфической меткой соединения. 

 connection-type(ftp | gre | h323 | irc | mms | pptp | quake3 | tftp) - проверка пакетов из связанных соединений, использующих информацию о них (соединениях), получаемую от их трассирующих помощников. Соответствующие вспомогательные соединения должны быть разрешены в /ip firewall service-port. 

 content(text) – текст, который должны содержать текстовые пакеты для соответствия правилу. 

 dscp (integer: 0..63) - значение поля IP-заголовка DSCP (ex-ToS). 

 dst-address(IP adressnetmaskIP addressIP address) - выбранный диапазон адресов назначения IP пакета. Примечание: запись правильного сетевого адреса в консоли в формате address/netmask т.е.: 1.1.1.1/24 будет конвертирована в 1.1.1.0/24. 

 dst-address-list(name) - соответствие назначенного адреса пакета списку адресов, определенному пользователем. 

 dst-address-type(unicast | local | broadcast | multicast) - соответствие адреса назначения по типу одного из перечисленных IP пакетов: 

 • unicast - IP адрес, используемый одной точкой для соединения с другой точкой. В данном случае существует только один отправитель и один получатель; 

 • local - соответствующие адреса, прикрепленные к маршрутизатору; 

 • broadcast - IP пакет посылаемый от точки к другим точкам подсети; 

 • multicast - этот тип IP адресация используется для передачи от одной или более точек к другим точкам. 

 dst-limit(integertimeintegerdst-address | dst-port | src-addresstime) - ограничение количества пакетов в секунду, направленных на IP адрес или порт назначения. Каждый IP адрес/порт назначения владеет собственным ограничением. Опции перечислены ниже (в порядке появления): 

 • Count - максимальная средняя интенсивность потока, измеряемая количеством пакетов в секунду (pps), если не сопровождается опцией Time; 

 • Time - определяет временной интервал, в течении которого будет измеряться интенсивность потока пакетов; 

 • Burst - число пакетов соответствующих пику; 

 • Mode - классификатор для ограничения интенсивности пакетов; 

 • Expire - определенный интервал времени, по истечении которого записанный IP адрес/порт будет удален. 

 dst-port(integer: 0..65535 integer: 0..65535) – номер или диапазон номеров порта назначения. 

 fragment(yes|no) - является ли пакет фрагментом IP пакета. Стартовый пакет(т.е первый фрагмент) не учитывается. Примечание: при включенном трассировщике соединений, фрагментов не будет, так как система автоматически присоединит каждый пакет. 

 hotspot(multiple choice: from-client | auh | local-dst) - соответствие пакетов, полученных от клиентов при различных Hot-Spot условиях. Все значения могут быть отвергнуты: 

 • auth – правда, если пакет пришел от аутентифицированного клиента; 

 • from-client – правда, если пакет пришел от HotSpot клиента; 

 • http - правда, если HotSpot клиент посылает пакет на адрес и порт, ранее определенный как его прокси сервер (Universal Proxy technique) или если порт назначения 80 и включено прозрачное проксирование для данного клиента; 

 • local-dst – правда, если пакет имеет локальный IP-адрес назначения; 

 • to-client - правда, если пакет посылается клиенту. 

 icmp-options(integerinteger) - соответствие ICMP типу: кодовое поле. 

 in-bridge-port(name) - актуальный интерфейс, на который заходит пакет, следующий через маршрутизатор (если интерфейсом является мост, то это свойство соответствует актуальному порту моста, пока in-interface ? мост). 

 in-interface(name) - интерфейс, на который заходит пакет, следующий через маршрутизатор (если интерфейсом является мост, то исходящий из мостового интерфейса пакет создастся самостоятельно).

 ingress-priority(integer: 0..63) – INGRESS (полученный) приоритет пакета, если установлен (в противном случае ? 0). Приоритет может быть получен также от VLAN или WMM. 

 ip4-options(any | loose-source-routing | no-record-route | no-route-alert | no-source-routing) - соответствующие опции заголовков ipv4: 

 • any - соответствие не менее чем одному заголовку ipv4; 

 • loose-source-routing – пакеты, соответствующие опции маршрутизация через заданные узлы. Эта опция используется для маршрутизации интернет дейтаграмм, базирующихся на информации поставляемой источником; 

 • no-record-route – определяет пакеты без опции записи маршрута. Эта опция используется для маршрутизации интернет дейтаграмм, базирующихся на информации, поставляемой источником; 

 • no-route-alert - пакеты, соответствующие предупреждению «нет маршрута»; 

 • no-source-routing - пакеты, соответствующие опции «нет источника маршрутизации»; 

 • no-timestamp - соответствие пакетов опции отсутствия временной отметки; 

 • record-route – соответствие пакетов опции записи; 

 • route-alert - соответствие пакетов опции записи маршрута; 

 • strict-source-routing - соответствие пакета опции статического маршрута; 

 • timestamp – соответствие пакетов опции временной отметки. 

 jump-target(dstnat | srcnat name) - название цепочки в которую совершается переход, если используется опция action=jump. 

 layer7-protocol(name) - Layer 7 – название фильтра, установленного в меню /ip firewall layer7-protocol. Предостережение: при использовании необходима большая вычислительная мощность. 

 limit(integertimeinteger) - ограничивает интенсивность пакетов, согласно заданному лимиту. Используется для уменьшения количества записей в системном журнале: 

 • Count - максимальная средняя интенсивность пакетов, измеряется в пакетах в секунду(pps), если не сопровождается опцией Time; 

 • Time - определяет временной интервал, в течение которого будет происходить измерение интенсивности пакетов; 

 • Burst - количество пакетов, соответствующих пику. 

 log-prefix(text) - все сообщения будут включать в себя префикс описанный здесь. Используется в паре с action=log. 

 nth(integerinteger: 0…15integer) - определенный Nth пакет, полученный в соответствии с правилом. Может использоваться один из 16 доступных счетчиков пакетов: 

 • Every - каждое соответствие Every+1th пакету. Для примера, если Every=1, тогда правило соответствия отрабатывается на каждом 2-ом пакете; 

 • Counter - счётчик. Счётчик инкрементируется каждый раз, когда в правиле содержится соответствие n-ому пакету; 

 • Packet - соответствие отдельно взятого пакета. Значение должно находится между 0 и Every. Если эта опция использована для конкретно взятого счетчика, тогда правило должно срабатывать для не менее чем Every+1th вместе с этой опцией, перекрывая тем самым все значения между 0 и Every включительно. 

 out-bridge-port(name) - актуальный интерфейс, через который транзитный пакет покидает маршрутизатор (если это мост, то это свойство соответствует актуальному порту моста до тех пор, пока out-interface является мостом). 

 out-interface(name) – интерфейс, через который пакет покидает маршрутизатор (если интерфейс настроен как мост, то пакет самостоятельно появится, чтобы уйти через мостовой интерфейс). 

 packet-mark(name) - соответствие пакетов, промаркированных средствами mangle специфическими метками пакетов. 

 packet-size(integer: 0..65535integer: 0..65535) - соответствие пакета определенному размеру или диапазону размеров, указанном в байтах: 

 • Min - значение, определяющее нижнюю границу диапазона или конкретное значение; 

 • Max - значение, определяющее верхнюю границу диапазона. 

 port(port) – соответствует, если любой (источник или назначение) порт соответствует определенному списку портов или диапазону портов (примечание: при этом должен быть выбран протокол, также как и при использовании соответствий src-port и dst-port). 

 protocol(ddp | egp | encap | ggp | gre | hmp | icmp | idrp -cmtp | igmp | ipencap | ipip | ipsec -ah |ipsec-esp | iso-tp4 | ospf | pup | rdp | rspf | st | tcp | udp | vmtp | xns -idp | xtp | integer) - соответствие IP протоколу, определенному по имени или по номеру. Для определения портов необходимо определить протокол. 

 psd(integertimeintegerinteger) - попытки обнаружения TCP и UDP сканеров. Этот механизм рекомендуется применять для назначения более низкого приоритета портам с более высоким номером, чтобы уменьшить частоту отрицательных ответов, как например, при пассивном режиме передачи через FTP: 

 • WeightTreshold - общий объем последних TCP/UDP пакетов, пришедших на порты, отличные от портов назначения, от одного хоста должны быть обработаны как сканер портов; 

 • DelayThreshold - задержка пакета, пришедшего на порт, отличный от порта назначения и пришедшие от одного хоста должны быть обработаны как сканер портов; 

 • LowPortWeight - объем пакетов с привилегированными(<=1024) портами назначения; 

 • HighPortWeight - объем пакетов, не имеющих привилегий к портам назначения. 

 random(integer) - согласовывает пакеты случайно, с заданной вероятностью. 

 routing-mark(name) - соответствия пактов промаркированных средствами mangle, с маркировкой маршрута. 

 same-not-by-dst(yes | no) - менять или не менять адрес назначения для пакетов, отобранных по правилам action=same 

 src-address(IP addressnetmaskIP addressIP address) - определяет диапазон адресов, от которых пришел IP-пакет. Примечание: консоль конвертирует ввод значения address/netmask в действительный адрес, т.е. 1.1.1.1/24 конвертируется в 1.1.1.0/24. 

 src-address-list(name) - - соответствие адреса источника пакета списку адресов, определенному пользователем. 

 src-address-type(unicast | local | broadcast | multicast) – соответствие типа адреса источника IP-пакета, одному из: 

 • unicast - IP адрес, использующийся для передачи от одной точки к другим. В данном случае есть только один отправитель и один получатель; 

 • local - соответствие адресов, назначенных интерфейсам маршрутизатора; 

 • broadcast – IP-пакет, посылаемый от одной точки ко всем другим точкам IP-подсети; 

 • multicast - этот тип IP адресации предназначен для передачи от одной или более точек к множеству других точек. 

 src-mac-address(MAC address) - MAC адрес источника 

 src-port(integer: 0..65535integer: 0..65535) - номер или диапазон номеров порта источника. 

 tcp-mss(integer: 0..65535) - соответствия значению TCP MSS IP пакета. 

 time(timetimesat | fri | thu | wed | tue | mon | sun) - позволяет создать фильтр, основанный на дате и времени поступления пакета или на дате и времени отправления для локально сгенерированных пакетов. 

 to-addresses(IP addressIP address; default: 0.0.0.0) - адрес или диапазон адресов, предназначенных для подмены оригинального адреса IP пакета. 

 to-ports(integer: 0..65535-integer: 0..65535) - порт или диапазон портов, предназначенных для подмены оригинального порта IP пакета. 

  

NAT приложения  

 В этой секции будет описаны NAT приложения и примеры к ним. 
 Предположим, что вы хотите, чтобы ваш маршрутизатор делал следующее: 
 • "скрывал" локальную сеть одним адресом; 
 • предоставлял общественный (Public) IP локальному серверу; 
 • создать отображение 1:1 сетевых адресов. 

 Пример исходящего NAT(Masquerading) 

Если вы хотите "скрыть" локальную сеть 192.168.0.0/24 одним адресом 10.5.8.109, выданным вам представителем Интернет услуг, вам необходимо использовать трансляцию адреса источника. Например, при помощи (masquerading) средства MikroTik маршрутизатора. Masquerading будет подменять IP адрес и порт источника пакета, порожденного в сети 192.168.0.0/24, на адрес маршрутизатора 10.5.8.109, когда пакет будет проходить через него. Для использования masquerading, в конфигурацию межсетевого экрана необходимо добавить действие 'masquerading': 

 /ip firewall nat add chain=srcnat action=masquerade out-interface=Public 

 Во всех исходящих соединениях из сети 192.168.0.0/24 адрес источника будет изменен на адрес маршрутизатора 10.5.8.109 и порт источника будет выше 1024. Доступ к локальным адресам из Интернета не возможен. Если вы хотите разрешить соединения к серверу в локальной сети, то вам необходимо использовать трансляцию адреса назначения(DST -NAT). 

 

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

Если вы хотите выставить наружу хост с адресом 192.168.0.109 так, чтобы он выглядел как 10.5.8.200, то вам необходимо использовать трансляцию адреса назначения. Если вы хотите позволить локальному серверу общаться с внешним IP адресом, то вам необходимо использовать трансляцию исходящего адреса.  

Для начала добавляем реальный IP адрес на внешний интерфейс: 

 /ip address add address=10.5.8.200/ 32 interface=Public

 Добавляем правило, разрешающее доступ к локальному серверу из внешней сети: 

 /ip firewall nat add chain=dstnat dst -address=10.5.8.200 action=dst –nat \

to-addresses=192.168.0.109

 Добавляем правило для трансляции исходящего адреса локального сервера а адрес 10.5.8.200: 

 /ip firewall nat add chain=srcnat src -address=192.168.0.109 action=src-nat \

to-addresses=10.5.8.200

 

  Пример отображения сетевых адресов

Если вы хотите объединить сеть 11.11.11.0/24 с сетью 2.2.2.0/24, то вам необходимо использовать трансляцию адреса источника и адреса назначения в паре с действием action=netmap 

 /ip firewall nat add chain=dstnat dst -address=11.11.11.1-11.11.11.254 \

action=netmap to-addresses=2.2.2.1-2.2.2.254

/ip firewall nat add chain=srcnat src-address=2.2.2.1-2.2.2.254 \

action=netmap to-addresses=11.11.11.1-11.11.11.254