Существует два типа NAT:
Источник NAT или srcnat. Этот тип NAT выполняется на пакетах, которые исходят из натированной сети. Маршрутизатор NAT заменяет частный исходный адрес IP-пакета новым публичным IP-адресом По мере прохождения через маршрутизатор. Обратная операция применяется к ответным пакетам, перемещающимся в другом направлении.
Пункт назначения NAT или dstnat. Этот тип NAT выполняется для пакетов, предназначенных для натированной сети. Он чаще всего используется для того, чтобы сделать хосты в частной сети доступными из интернета. Маршрутизатор NAT, выполняющий dstnat, заменяет IP-адрес назначения IP-пакета, когда он проходит через маршрутизатор к частной сети.
Хосты за маршрутизатором с поддержкой NAT не имеют истинного сквозного подключения. Поэтому некоторые интернет-протоколы могут не работать в сценариях с NAT. Службы, требующие инициализации TCP-соединения из-за пределов частной сети или протоколов без состояния, таких как UDP, могут работать неправильно. Кроме того, некоторые протоколы изначально несовместимы с NAT, ярким примером является протокол AH из пакета IPsec.
Для преодоления этих ограничений RouterOS включает в себя ряд так называемых помощников NAT, которые позволяют выполнять обход NAT для различных протоколов.
NAT action=masquerade является уникальной субверсией action=srcnat, он был разработан для конкретного использования в ситуациях, когда публичный IP может случайным образом изменяться, например DHCP-сервер меняет его, или PPPoE - туннель после отключения получает другой IP, короче говоря-когда публичный IP динамичен.
Каждый раз, когда интерфейс отключается и/или его IP-адрес изменяется, маршрутизатор очищает все маскированные записи отслеживания соединений, которые отправляют пакет из этого интерфейса, таким образом улучшая время восстановления системы после изменения публичного ip-адреса.
К сожалению, это может привести к некоторым проблемам, когда action=masquerade используется в установках с нестабильными соединениями/ссылками, которые маршрутизируются по другому каналу, когда первичный не работает. В таком сценарии могут произойти следующие вещи:
- при отключении все связанные записи отслеживания соединений удаляются;
- следующий пакет из каждого очищенного (ранее замаскированного) соединения будет поступать в брандмауэр как connection-state=new, и, если основной интерфейс не вернулся, пакет будет маршрутизирован по альтернативному маршруту (если он у вас есть), создавая таким образом новое соединение;
- первичный канал возвращается, маршрутизация восстанавливается по первичному каналу, поэтому пакеты, принадлежащие существующим соединениям, отправляются по первичному интерфейсу без маскировки утечки локальных IP-адресов в общедоступную сеть.
Вы можете обойти это, создав маршрут blackhole в качестве альтернативы маршруту, который может исчезнуть при отключении).
Когда action=srcnat он используется вместо этого, записи отслеживания соединений остаются, и соединения могут просто возобновиться.
Свойства используемые при создании NAT правил:
Характеристика | Описание |
action (имя действия; по умолчанию:accept) |
Действие, которое необходимо предпринять, если пакет соответствует правилу:
|
address-list (строка; по умолчанию: ) |
Имя используемого списка адресов. Применимо, если действие является add-dst-to-address-list или add-src-to-address-list |
address-list-timeout (none-dynamic | none-static / time; по умолчанию: none-dynamic) |
Интервал времени, по истечении которого адрес будет удален из списка адресов, указанного address-list параметром. Используется в сочетании с add-dst-to-address-list add-src-to-address-list действиями.
|
chain (имя; по умолчанию: ) | Указывает, к какому правилу цепочки будет добавлено правило. Если входные данные не совпадают с именем уже определенной цепочки, будет создана новая цепочка. |
comment (строка; по умолчанию: ) | Описательный комментарий к правилу. |
connection-bytes (integer-целое число; по умолчанию: ) |
Сопоставляет пакеты только в том случае, если заданное количество байтов было передано через конкретное соединение. 0 - означает бесконечность, например connection-bytes=2000000-0 означает, что правило совпадает, если через соответствующее соединение было передано более 2 МБ |
connection-limit (целое число, netmaks; по умолчанию: ) |
Сопоставляет соединения по адресу или блоку адресов после достижения заданного значения. |
connection-mark (no-mark / string; по умолчанию: ) |
Соответствует пакетам, помеченным через средство mangle, с определенной меткой соединения. Если параметр no-mark не установлен, правило будет соответствовать любому немаркированному соединению. |
connection-rate (Целое число 0..4294967295; по умолчанию: ) |
Скорость соединения - это сопоставитель брандмауэра, который позволяет захватывать трафик на основе текущей скорости соединения.
|
connection-type (ftp | h323 / irc | pptp / quake3 / sip | tftp; по умолчанию: ) |
Сопоставляет пакеты от связанных соединений на основе информации от их помощников по отслеживанию соединений. Соответствующий помощник подключения должен быть включен в разделе / ip firewall service-port |
content (строка; по умолчанию: ) | Сопоставьте пакеты, содержащие указанный текст |
dscp (целое число: 0..63; по умолчанию: ) |
Соответствует полю заголовка IP-адреса DSCP. |
dst-address (Диапазон IP / netmask / IP; по умолчанию: ) |
Сопоставляет пакеты, назначение которых равно указанному IP-адресу или попадает в указанный диапазон IP-адресов. |
dst-address-list (имя; по умолчанию: ) |
Сопоставляет адрес назначения пакета с определяемым пользователем списком адресов |
dst-address-type (одноадресная / локальная / широковещательная / многоадреснаяпередача ; по умолчанию: ) |
Соответствует типу адреса назначения:
|
dst-limit (integer [/time], integer, dst-address | dst-port | src-address [/time]; по умолчанию: ) |
Сопоставляет пакеты до тех пор, пока не будет превышен заданный предел pps. В отличие от limitmatcher, каждый IP-адрес назначения / порт назначения имеет свой собственный предел. Параметры записываются в следующем формате: count [/time], burst, mode [/expire].
|
dst-port (целое число [- integer]: 0..65535; по умолчанию: ) |
Список номеров портов назначения (через запятую) или диапазонов номеров портов |
fragment (да / нет; по умолчанию: ) |
Соответствует фрагментированным пакетам. Первый (стартовый) фрагмент не считается. Если отслеживание соединений включено, то фрагментов не будет, так как система автоматически собирает каждый пакет |
hotspot (auth | from-client / http / local-dst | to-client; по умолчанию: ) |
Сопоставляет пакеты, полученные от клиентов HotSpot, с различными Сопоставителями HotSpot.
|
icmp-options (integer:целое число; по умолчанию: ) |
Соответствует типу ICMP:кодовые файлы |
in-bridge-port (name; по умолчанию: ) |
Фактический интерфейс c которого пакет вошел в маршрутизатор, если входящий интерфейс является мостом |
in-interface (name; по умолчанию: ) |
Интерфейс с которого пакет вошел в маршрутизатор |
ingress-priority (целое число: 0..63; по умолчанию: ) |
Соответствует входному приоритету пакета. Приоритет может быть получен из VLAN, WMM или MPLS EXP bit.
|
ipsec-policy (вход | выход, ipsec / нет; по умолчанию: ) |
Соответствует политике, используемой IpSec. Значение записывается в следующем формате: direction, policy. Направление используется для выбора соответствия политике, используемой для декапсуляции, или политике, которая будет использоваться для инкапсуляции.
Например, если маршрутизатор получает инкапсулированный Ipsec пакет GRE, то правило ipsec-policy=in, ipsec будет соответствовать пакету GRE, но правило ipsec-policy=in, none будет соответствовать пакету ESP. |
ipv4-options (any / loose-source-routing | no-record-route | no-router-alert | no-source-routing | no-timestamp | none / record-route / router-alert | strict-source-routing | timestamp; по умолчанию: ) |
Соответствует параметрам заголовка IPv4.
|
jump-target (имя; по умолчанию: ) |
Имя целевой цепочки, к которой нужно перейти. Применимо только в том случае, если action=jump |
layer7-protocol (имя; по умолчанию: ) |
Имя фильтра Layer7 определяется в меню протокола layer7. |
limit (integer, time, integer; по умолчанию: ) |
Сопоставляет пакеты до тех пор, пока не будет превышен заданный предел pps. Параметры записываются в следующем формате: count [/time], burst.
|
log-prefix (строка; по умолчанию: ) |
Добавляет указанный текст в начало каждого сообщения журнала. Применимо, если action=log |
nth (целое число, integer; по умолчанию: ) |
Соответствует каждому N-му пакету.
|
out-bridge-port (имя; по умолчанию: ) |
Фактический интерфейс пакет покидает маршрутизатор, если исходящий интерфейс является мостом |
out-interface (; По умолчанию: ) |
Интерфейс пакет покидает маршрутизатор |
packet-mark (no-mark / string; по умолчанию: ) |
Соответствует пакетам, помеченным через средство mangle, с определенной меткой пакета. Если не установлен знак, правило будет соответствовать любому немаркированному пакету. |
packet-size (целое число [- integer]: 0..65535; по умолчанию: ) |
Соответствует пакетам указанного размера или диапазона размеров в байтах. |
per-connection-classifier (ValuesToHash: Denominator/Remainder; По Умолчанию: ) |
PCC matcher позволяет разделить трафик на равные потоки с возможностью сохранения пакетов с определенным набором опций в одном конкретном потоке. |
port (целое число [- integer]: 0..65535; по умолчанию: ) |
Соответствует, если какой-либо порт (исходный или конечный) соответствует указанному списку портов или диапазонам портов. Применимо только в том случае, если используется протокол TCP или UDP |
protocol (имя или идентификатор протокола; по умолчанию: tcp) |
Соответствует определенному IP-протоколу, определяемому именем или номером протокола |
psd (integer, time, integer, integer; по умолчанию: ) |
Попытки обнаружить сканирование TCP и UDP. Параметры представлены в следующем формате WeightThreshold, DelayThreshold, LowPortWeight, HighPortWeight
|
random (целое число: 1..99; по умолчанию: ) |
Сопоставляет пакеты случайным образом с заданной вероятностью. |
routing-mark (строка; по умолчанию: ) |
Сопоставляет пакеты, помеченные средством mangle, с определенной меткой маршрутизации |
same-not-by-dst (yes | no; по умолчанию: ) |
Указывает, следует ли учитывать или не учитывать IP-адрес назначения при выборе нового исходного IP-адреса. Применимо, если action=same |
src-address (Ip / Netmaks, диапазон Ip; по умолчанию: ) |
Сопоставляет пакеты, источник которых равен указанному IP-адресу или попадает в указанный диапазон IP-адресов. |
src-address-list (имя; по умолчанию: ) |
Сопоставляет исходный адрес пакета с определяемым пользователем списком адресов |
src-address-type (одноадресная / локальная / широковещательная / многоадреснаяпередача ; по умолчанию: ) |
Соответствует типу адреса источника:
|
src-port (целое число [- integer]: 0..65535; по умолчанию: ) |
Список исходных портов и диапазоны исходных портов. Применимо только в том случае, если протокол TCP или UDP. |
src-mac-address (MAC-адрес; по умолчанию: ) |
Соответствует исходному MAC-адресу пакета |
tcp-mss (целое число [- integer]: 0..65535; по умолчанию: ) |
Соответствует значению TCP MSS IP пакета |
time (время-время, СБ / пт / чт | СР | Вт | Пн / Вс; по умолчанию: ) |
Позволяет создать фильтр, основанный на времени и дате прибытия пакетов или, для локально генерируемых пакетов, времени и дате отправления |
to-addresses (IP-адрес[-IP-адрес]; по умолчанию: 0.0.0.0) |
Замените исходный адрес указанным. Применимо, если действие dst-nat, netmap, same, src-nat |
to-ports (целое число [- integer]: 0..65535; по умолчанию: ) |
Замените исходный порт на указанный. Применимо, если действие-dst-nat, redirect, masquerade, netmap, same, src-nat |
ttl (целое число: 0..255; по умолчанию: ) | Соответствует значению TTL пакетов |
Бета версия перевода официального WiKi MikroTik