Як налаштувати NAT MikroTik

Типи NAT MikroTik, та як налаштувати NAT MikroTik.

Хочу попередити, що тема NAT, це дуже обширна тема, її дуже складно пояснити в двох словах, тому тут буде багато теорії перемішаної з практикою, тож наберіться терпіння і дочитайте до кінця. Перед тим як ми перейдемо до розгляду цих функцій, давайте коротенько поговоримо про те, що таке NAT і навіщо він взагалі потрібен.

nat setup

NAT, або Network Address Translationце технологія, яка дозволяє багатьом пристроям у локальній мережі використовувати одну публічну IP-адресу для виходу в мережу інтернет. NAT потрібен з кількох важливих причин:

Економія IP-адрес:
  • Справа в тому що кількість публічних адрес IPv4 обмежена. Їх кількість складає всього 4 294 967 296 і цього явно не достатньо для всіх пристроїв наявних у світі. Враховуючи це, робочим рішенням став NAT, який дозволяє багатьом пристроям у локальній мережі використовувати одну, або декілька публічних IP-адрес для виходу в мережу Інтернет. Як приклад ціла офісна мережа з сотнями комп’ютерів може використовувати лише одну публічну IP-адресу, для доступу до мережі інтернет.
Безпека:
  • Пряме підключення пристроїв до інтернету може бути небезпечним, так як мільярди вразливих пристроїв користувачів будуть легко доступні для зловмисників. Просто уявіть собі цей потік зламаних девайсів, якщо всі користувачі будуть мати публічні адреси на всіх своїх пристроях. NAT в нашій схемі приховує внутрішню структуру мережі, ускладнюючи прямий доступ ззовні.
Сумісність між різними мережами:
  • Проблема полягає в тому, що різні мережі можуть використовувати однакові діапазони приватних IP-адрес.
  • В такому випадку NAT дозволяє таким мережам взаємодіяти через інтернет без конфліктів.
  • Як приклад дві компанії з однаковими внутрішніми IP-діапазонами можуть спілкуватися через мережу інтернет завдяки NAT.

Підсумовуючи все вищесказане, можна стверджувати – NAT є критично важливою технологією в сучасних мережах, яка вирішує ряд проблем, пов’язаних з обмеженістю IP-адрес, безпекою та гнучкістю управління мережею. Тепер давайте перейдемо безпосередньо до практики.

Запускаємо WinBox і переходимо до вкладки IP -> Firewall -> NAT. Як каже нам вікі у MikroTik є два основні типи NAT:vstavlene zobrazhennya 5

  • Source NAT (SRC-NAT) – змінює адресу відправника
  • Destination NAT (DST-NAT) – змінює адресу отримувача

Але це не зовсім так, Бо починаючи з RouterOS v7, у NAT з’явилися два нові ланцюжки INPUT та OUTPUT, які обробляють пакети, що доставляються до локальних додатків та відправляються від них: Віки дає не багато інформації про ці NAT, лише коротенькі пояснення, які звучать так:

NAT input (вхід):
  • Використовується для обробки пакетів, що входять у маршрутизатор через один з інтерфейсів, з IP-адресою призначення, яка є однією з адрес маршрутизатора.
  • Пакети, що проходять через маршрутизатор транзитом, не обробляються правилами ланцюжка input.
NAT output (вихід):
  • Використовується для обробки пакетів, що виникли на самому маршрутизаторі і залишають його через один з інтерфейсів.
  • Пакети, що проходять через маршрутизатор транзитом, не обробляються правилами ланцюжка output.

Тут варто прояснити ситуацію стосовно аналогічних ланцюжків у firewall на вкладці Filter rules: Filter rules та NAT rules виконують різні функції:

  • Filter rules – використовуються для фільтрації трафіку (дозволити, заборонити, логувати тощо).
  • NAT rules – використовуються для зміни адрес джерела або призначення пакетів.

Практичне застосування NAT input/output може бути менш поширеним, ніж використання стандартних srcnat та dstnat, але вони надають додаткові можливості для складних мережевих конфігурацій. Наприклад:

  • Зміна адреси джерела для певних служб на маршрутизаторі.
  • Перенаправлення вхідного трафіку на певні порти маршрутизатора на інші адреси або порти.
  • Реалізація складних схем NAT, які включають трафік самого маршрутизатора.

Це може бути корисно в певних сценаріях:

  • NAT input приклад: Припустимо, у вас є кілька публічних IP-адрес, і ви хочете, щоб доступ до веб-інтерфейсу маршрутизатора здійснювався через одну конкретну адресу, незалежно від того, на яку з публічних адрес надійшов запит:

/ip firewall nat/ add chain=input dst-address=203.0.113.1-203.0.113.5 protocol=tcp dst-port=80 action=dst-nat to-addresses=10.0.0.1 to-ports=8080

(Це правило перенаправляє всі HTTP-запити, що надходять на публічні IP-адреси 203.0.113.1-5 на порт 80, на внутрішню адресу маршрутизатора 10.0.0.1 і порт 8080)

  • NAT output приклад: Якщо ви хочете, щоб усі вихідні з’єднання від самого маршрутизатора (наприклад, оновлення часу NTP) використовували конкретну публічну IP-адресу:

/ip firewall nat/ add chain=output src-address=10.0.0.1 action=src-nat to-addresses=203.0.113.5

(Це правило змінює вихідну адресу всіх пакетів, що генеруються маршрутизатором з локальної адреси 10.0.0.1, на публічну адресу 203.0.113.5)

Загалом, використання NAT input/output менш поширене, ніж srcnat/dstnat, але може бути корисним у специфічних сценаріях налаштування мережі. Йдемо далі, варто згадати також про Masquerade – особливий тип, або підтип SNAT, я би його теж відніс до типів NAT. Розглянемо кожен тип детальніше.

Source NAT (srcnat) або NAT джерела:
  • Цей тип NAT застосовується до пакетів, що виходять з мережі, яка використовує NAT.
  • Маршрутизатор NAT замінює приватну адресу джерела IP-пакету на нову публічну IP-адресу, коли пакет проходить через маршрутизатор.

Як це працює:

  • Пристрій у локальній мережі відправляє пакет з приватною IP-адресою.
  • Маршрутизатор змінює цю адресу на свою публічну IP-адресу.
  • Коли приходить відповідь, маршрутизатор змінює адресу призначення назад на приватну адресу пристрою.

Найчастіше це потрібно для доступу з локальної мережі в інтернет. Такий тип NAT можна використовувати, коли ви маєте публічну IP адресу, яка за вами закріплена, тобто ви знаєте, що вона не зміниться. Давайте тестово налаштуємо SNAT:

  • Натискаємо ‘+‘ для створення нового правила
  • У вкладці ‘General‘ вибираємо Chain: srcnat, Out. Interface: ваш WAN інтерфейс
  • У вкладці ‘Action‘ вибираємо Action: src-nat, To Addresses: вписуємо вашу публічну IP адресу, тобто ту що вам видав провайдер.
  • Застосовуємо зміни Тепер всі пакети, що виходять в інтернет, будуть мати вашу публічну IP.”
  • Також тут можна конкретно вказувати яким адресам, або підмережам можна виходити в інтернет, прописавши їх в полі src.
Destination NAT (dstnat) або NAT призначення:
  • Цей тип NAT застосовується до пакетів, які призначені для мережі, що використовує NAT.
  • Найчастіше використовується для того, щоб зробити хости в приватній мережі доступними з Інтернету.
  • Маршрутизатор NAT змінює IP-адресу призначення пакету, коли той проходить через маршрутизатор у напрямку приватної мережі, тобто з інтернету у вашу локальну мережу

Як це працює:

  • Пакет з Інтернету приходить на публічну IP-адресу маршрутизатора.
  • Маршрутизатор змінює адресу призначення на приватну IP-адресу конкретного пристрою в локальній мережі.
  • Це дозволяє направляти зовнішні запити до конкретних пристроїв у приватній мережі.

Це корисно для port forwarding (Так званий прокид портів) Це можна використовувати коли, до прикладу у вас в локальній мережі піднятий веб сервер, який працює до прикладу на 80 порту. Показую як це виглядає на практиці. Налаштуємо port forwarding для умовного веб-сервера, який знаходиться у нас в локальній мережі:

Створюємо нове правило:
  • General: Chain: dstnat, Protocol: 6 (TCP), Dst. Port: 80
  • Action: dst-nat, To Addresses: IP вашого умовного веб-сервера, Якщо ви не змінюєте порт, тобто і зовнішній і внутрішній порт 80, то в полі To Ports: нічого не вписуєте, якщо ж у вас сервер має доступ на іншому порті, наприклад 8080, тоді вказуєте той порт який вам потрібно.
  • Застосовуємо Тепер запити на 80 порт вашої публічної IP будуть перенаправлятися на веб-сервер. Це типовий “прокид портів” як кажуть в народі. Також у нас є можливість прокидати одночасно декілька портів. наприклад 80 і 443 в такому випадку, to Ports не потрібно вказувати, прокид буде здійснюватись з порта в порт. Ще один нюанс, якщо служба запущена на 80 порту, то на вкладці Action — dst-nat, to Ports не потрібно вказувати 80 порт. Це, по суті, буде повторення однієї й тієї ж дії. Роутер буде в заголовках сегмента міняти TCP 80 на TCP 80, що хоч і не значно, але все ж таки вплине на продуктивність. Тому в ситуації прямого прокидання, поле to ports залишаємо пустим. З цим я сподіваюсь зрозуміло.

Тепер давайте розберемось з тим, що таке Masquerade. Masqueradeце особливий вид SNAT, Але на відміну від SNAT, Де ми вказуємо відому нам IP адресу, Masquerade автоматично використовує IP-адресу вихідного інтерфейсу. Тобто коли ви використовуєте masquerade, маршрутизатор автоматично виявляє публічну адресу. Це корисно, коли ваша публічна IP може змінюватися, тобто провайдер видав вам динамічну адресу. Зазвичай більшість користувачів використовують в налаштуваннях, саме цей тип NAT в незалежності динамічна чи статична у нього публічна адреса.

Налаштовується masquerade просто.

  • Нове правило
  • General: Chain: srcnat, Out. Interface: ваш WAN інтерфейс.
  • Action: masquerade Просто і ефективно!”

Також варто додати, що MikroTik підтримує й інші корисні функції NAT: Наприклад Hairpin NAT. Hair-pinning: дозволяє доступ до ваших публічних сервісів які знаходяться у вашій локальній мережі з вашої ж локальної мережі.

Проблема “hairpin NAT”:
  • Виникає, коли клієнт з тієї ж мережі, що й сервер, намагається отримати доступ не через локальну адресу, а через публічну IP-адресу.
  • Сервер в свою чергу відповідає напряму клієнту, минаючи маршрутизатор, що призводить до відкидання пакету клієнтом.

До прикладу у вас є веб сервер в локальній мережі, який має доступ через мережу інтернет і ви знаходитесь в тій самій локальній мережі. В такому випадку, часто виникає ситуація, коли після прокидання порту та спроби звернутися з локальної мережі за зовнішньою IP адресою завершується невдачею, тобто у вас не має доступу до хоста, на який ви хочете потрапити. Суть методу Hairpin NAT полягає в тому, щоб звернення на зовнішні адреси переадресовувалося на локальний порт. Тобто, весь трафік просто завертався зі заміною адрес.

Де це може знадобитись, наприклад, доступ до відеоспостереження, або сайту, розміщеному у локальній мережі, через зовнішню IP адресу.

Давайте налаштуємо правила hair-pinning:
  1. Створюємо правило DNAT як раніше:

/ip firewall nat/ add action=dst-nat chain=dstnat dst-address=ваша публічна IP dst-port=80,443 protocol=tcp to-addresses=192.168.1.10

  1. Додаємо ще одне правило SNAT для зміни адреси відповіді назад на публічну:

/ip firewall nat/ add action=masquerade chain=srcnat dst-address=192.168.1.10 dst-port=80,443 protocol=tcp

Готово! Пам’ятайте, порядок правил NAT дуже важливий – вони застосовуються зверху вниз. Є звісно і інший варіант вирішення такої проблеми, наприклад якщо ви в Mikrotik в статичні записи DNS додасте правило:

/ip dns static/ add address=192.168.1.10 name=domain.ua (Де 192.168.1.10 це адреса веб сервера)

І ваші клієнти будуть використовувати роутер як DNS-сервер, то в такому випадку, всі пакети, які будуть відправлені на domain.ua відразу перенаправляється на адресу 192.168.1.10 Таким чином вони потраплять на веб-сервер, минаючи маршрутизатор, і ваш веб-сервер відповість безпосередньо комп’ютеру з мережі. Але недоліком такого методу можна вважати те, що обов’язково потрібно використовувати Mikrotik як головний і єдиний DNS-сервер. З цим розібрались…

Давайте коротенько пробіжимося по пунктах які є у випадаючому списку action. Пункт обраний тут означає Дію, яку необхідно вжити, якщо пакет відповідає правилу:
  • accept – Означає прийняти пакет. Пакет не передається до наступного правила NAT.
  • add-dst-to-address-list – додати адресу призначення до списку адрес, вказану address-list, правило яке додає якусь адресу в створений вами список.
  • add-src-to-address-list – додати вихідну адресу до списку адрес, вказаних address-list. Практично те саме, тільки для вихідних списків.
  • dst-nat – замінює адресу призначення та/або порт IP-пакету на значення, задані в to-addresses та to-ports Це ми вже розібрали.
  • Endpoint-Independent NAT – незалежний від кінцевої точки, створює відображення у вихідному NAT і використовує те саме відображення для всіх наступних пакетів із тією самою вихідною IP-адресою та портом.  Застосування незалежного від кінцевої точки NAT для UDP-трафіку через інтерфейс WAN. Це відображення створюється за таким правилом:

/ip firewall nat/ add chain=srcnat out-interface=WAN protocol=udp action=endpoint-independent-nat

Це зіставлення дозволяє запускати незалежну від джерела фільтрацію, яка дозволяє пересилати пакети з будь-якого джерела з WAN на зіставлені внутрішні IP та порт. А Наступне правило дозволяє фільтрувати:

/ip firewall nat/ add action=endpoint-independent-nat chain=dstnat in-interface=WAN protocol=udp

Недоліки:

  • Може бути менш безпечним, ніж інші типи NAT, оскільки дозволяє вхідні з’єднання з будь-якої зовнішньої адреси, якщо внутрішній хост ініціював з’єднання.
  • Може споживати більше ресурсів маршрутизатора, оскільки потрібно підтримувати більше відкритих з’єднань.
  • Працює лише з UDP, що обмежує його застосування для інших протоколів.
  • Може конфліктувати з деякими політиками безпеки, які вимагають більш жорсткого контролю над вхідними з’єднаннями.

jump – перехід до користувальницького ланцюжка, заданого значенням jump-target параметра. Тобто ви можете створити, якийсь свій ланцюжок і направити туди трафік, а там вже проводити якісь маніпуляції з ним в цьому ланцюжку.

Приклад: Перехід до спеціального ланцюга для додаткової обробки трафіку, що надходить на порт 22 (SSH).

/ip firewall filter/ add chain=input protocol=tcp dst-port=22 action=jump jump-target=ssh-traffic

/ip firewall filter/ add chain=ssh-traffic action=log

Опис: Це правило переадресовує трафік на порт 22 до ланцюга ssh-traffic, де він потім буде зафіксований. Або як приклад Відомий ланцюжок перевірки ICMP.

  • log – додає повідомлення до системного журналу, що містить такі дані: in-interface, out-interface, src-mac, protocol, src-ip: port і таке інше. Після того, як пакет зіставлений, він передається наступному правилу в списку.

Приклад: Логування всього виходу з IP-адреси 192.168.1.50.

/ip firewall filter/ add chain=output src-address=192.168.1.50 action=log

Опис:  Це правило веде журнал всіх пакетів, що виходять з IP-адреси 192.168.1.50

  • masquerade – замінює вихідний порт IP-пакета на вказаний to-ports параметром та замінює вихідну адресу IP-пакета на IP, визначений засобом маршрутизації. Це ми теж вже розглянули.
  • netmap – створює статичне відображення 1:1, одного набору IP-адрес на інший. Часто використовується для розподілу публічних IP адрес хостам у приватних мережах

Приклад: Статичне відображення публічних IP-адрес на приватні IP-адреси.

/ip firewall nat/ add chain=srcnat src-address=10.0.0.0/24 action=netmap to-addresses=192.168.1.0/24

Опис:  Це правило замінює приватні IP-адреси 10.0.0.0/24 на публічні 192.168.1.0/24 при виході в Інтернет. Тобто ви руками вказуєте, що на що замінити.

  • passthrough – якщо пакет відповідає цьому правилу, він передасть обробку до наступного правила збільшивши лічильник (корисно для статистики).

Приклад: Збільшення лічильника та передача всього трафіку через основний ланцюг.

/ip firewall filter/ add chain=input action=passthrough

Опис: Це правило передає пакет для подальшої обробки в наступне правило та може використовуватися для збору статистики.

  • redirect – замінює порт призначення IP-пакета на вказаний to-ports параметром, а адресу призначення на одну з локальних адрес маршрутизатора

Приклад: Перенаправлення HTTP-запитів на локальний веб-сервер.

/ip firewall nat/ add chain=dstnat dst-port=80 action=redirect to-ports=8080

Опис:  Це правило перенаправляє весь HTTP-трафік на порт 80 на локальний порт 8080 маршрутизатора.

  • return – передає управління назад у ланцюжок, звідки стався стрибок. Його як правило використовують в зв’язці з Джамп, щоб повернути трафік який пройшов через окремий ланцюжок в основний ланцюжок.

Приклад: Повернення трафіку назад в основний ланцюг після обробки в спеціальному ланцюгу.

/ip firewall filter/ add chain=input action=jump jump-target=custom-chain

/ip firewall filter/ add chain=custom-chain action=return

Опис:  Це правило обробляє трафік в ланцюзі custom-chain і повертає його назад в основний ланцюг.

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

Приклад: Забезпечення постійної IP-адреси джерела для певних з’єднань.

/ip firewall nat/ add chain=srcnat src-address=192.168.1.0/24 action=same

Опис: Це правило надає однакову IP-адресу джерела для всіх з’єднань з діапазону 192.168.1.0/24

  • src-nat – замінює вихідну адресу IP-пакета на значення, задані to-addresses та to-ports параметром. Цей пункт ми теж розглянули.

Оце в принципі і все. Якщо у вас виникли якісь питання чи зауваження по NAT MikroTik, напишіть про це в коментарях. 

0 0 votes
Rating
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Scroll to Top