NAT

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

NAT (від англ. Network Address Translation — «перетворення мережевих адрес») — це механізм у мережах TCP/IP, котрий дозволяє змінювати IP-адресу у заголовку пакету, котрий проходить через пристрій маршрутизації трафіку. Також має назви IP Masquerading, Network Masquerading і Native Address Translation.

Функціонування[ред. | ред. код]

Перетворення адреси методом NAT може відбуватися майже будь-яким маршрутизуючим пристроєм — маршрутизатором[1], сервером доступу, міжмережевим екраном (фаєрволом). Найбільш популярним є SNAT, суть механізму котрого складається у заміні адреси джерела ( англ. source ) при проходженні пакету в одну сторону і зворотній заміні адреси призначення ( англ. destination ) у зворотному пакеті. Поряд з адресами джерело/призначення можуть також замінюватися номера портів джерела і призначення.

Приймаючи пакет від локального комп'ютера, роутер переглядає IP-адресу призначення. Якщо це локальна адреса, то пакет пересилається іншому локальному комп'ютерові. Якщо ні, то пакет слід переслати назовні до інтернету. Але зворотною адресою у пакеті вказана локальна адреса комп'ютера, котра з інтернету буде недоступна. Тому роутер «на льоту» транслює (підміняє) зворотню IP-адресу пакету на свою зовнішню (видиму з інтернету) IP-адресу, а також міняє номер порту (щоб розрізняти зворотні пакети, адресовані різним локальним комп'ютерам). Комбінацію, потрібну для зворотної підстановки, роутер зберігає у себе у тимчасовій таблиці. Через деякий час після того, як клієнт і сервер закінчать обмінюватися пакетами, роутер зітре у себе в таблиці запис про n-м порт за строком давнини.

Окрім source NAT (надання користувачам локальної мережі з внутрішніми адресами доступу до мережі Інтернет) часто застосовується також destination NAT, коли трафік ззовні транслюється міжмережевим екраном на комп'ютер користувача у локальній мережі, котрий має внутрішню адресу і тому недоступний ззовні мережі безпосередньо (без NAT).

Існує 3 базових концепції трансляції адрес: статична (Static Network Address Translation), динамічна (Dynamic Address Translation), перевантажена (NAPT, NAT Overload, PAT).

Статичний NAT — відображення незареєстрованої IP-адреси на зареєстровану IP-адресу на основі один до одного. Особливо корисно, коли пристрій повинен бути доступним зовні мережі.

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

Перевантажений NAT (NAPT, NAT Overload, PAT, маскарадинг) — форма динамічного NAT, котрий перетворює декілька незареєстрованих адрес у єдину зареєстровану IP-адресу, використовуючи різноманітні порти. Відомий також як PAT (Port Address Translation). При перевантаженні кожен комп'ютер у приватній мережі транслюється у ту ж саму адресу, але з різним номером порту.

Механізм NAT визначений у RFC 1631, RFC 3022.

Типи NAT[ред. | ред. код]

Класифікація NAT, часто зустрічається у зв'язку з VoIP.[2] Термін «з'єднання» використаний у значенні «послідовний обмін пакунками UDP».

Симетричний NAT (Symmetric NAT) — трансляція, при якій кожне з'єднання, ініційоване парою «внутрішня адреса: внутрішній порт» перетворюється у вільну унікальну, випадково вибрану пару «публічна адреса: публічний порт». При цьому, ініціація з'єднання з публічної мережі неможлива.

Cone NAT, Full Cone NAT — однозначна (взаємна) трансляція між парами «внутрішня адреса: внутрішній порт» і «публічна адреса: публічний порт». Кожен зовнішній хост може ініціювати з'єднання з внутрішнім хостом (якщо це дозволене у правилах міжмережевого екрана (брандмауера).

Address-Restricted cone NAT, Restricted cone NAT — постійна трансляція між парою «внутрішня адреса: внутрішній порт» і «публічна адреса: публічний порт». Кожне з'єднання, ініційоване з внутрішньої адреси, дозволяє надалі отримувати йому пакети з будь-якого порту того публічного хоста, до якого він відправляв пакет(ти) раніше.

Port-Restricted cone NAT — трансляція між парою «внутрішня адреса: внутрішній порт» і «публічна адреса: публічний порт», при якій пакети що надходять до внутрішнього хосту тільки з одного порту публічного хоста — того, на котрий внутрішній хост вже відправляв пакет.

Переваги[ред. | ред. код]

NAT виконує три важливі функції.

  1. Дозволяє заощаджувати IP-адреси (тільки у разі використання NAT у режимі PAT), транслюючи декілька внутрішніх IP-адрес в одну зовнішню публічну IP-адресу (або у декілька, але все ж в меншу кількість, ніж внутрішніх). За таким принципом побудована більшість мереж у світі: на невеликий район домашньої мережі місцевого провайдера або на офіс виділяється одна публічна (зовнішня) IP-адреса, за котрою працюють і отримують доступ інтерфейси з приватними (внутрішніми) IP-адресами.
  2. Дозволяє запобігти або обмежити обіг ззовні до внутрішніх хостів, залишаючи можливість обігу зсередини назовні. При ініціації з'єднання зсередини мережі створюється трансляція. Відповідні пакети, які надходять зовні, відповідають створеній трансляції і тому пропускаються. Якщо для пакетів, які надходять ззовні, відповідної трансляції не існує (а вона може бути створеною при ініціації з'єднання або статичною), вони не пропускаються.
  3. Дозволяє приховати визначені внутрішні сервіси внутрішніх хостів/серверів. По суті, виконується та ж, вказана вище, трансляція на визначений порт, але можна підмінити внутрішній порт офіційно зареєстрованої служби (наприклад, 80-й порт TCP (HTTP-сервер) на зовнішній 54055-й). Тим самим, зовні, на зовнішній IP-адресі після трансляції адрес на сайт (або форум) для обізнаних відвідувачів можна буде потрапити за адресою http://example.org:54055, але на внутрішньому сервері, який знаходиться за NAT, він буде працювати на звичайному 80-му порту. Підвищення безпеки і приховування «непублічних» ресурсів.

Недоліки[ред. | ред. код]

  1. Старі протоколи. Протоколи, розроблені до масового впровадження NAT, не в змозі працювати, якщо на шляху між взаємодіючими хостами є трансляція адрес. Деякі міжмережеві екрани, які здійснюють трансляцію IP-адрес, можуть виправити цей недолік, відповідним чином замінюючи IP-адреси не тільки в заголовках IP, але і на більш високих рівнях (наприклад, в командах протоколу FTP). Див. Application-level gateway[en].
  2. Ідентифікація користувачів. Через трансляції адрес «багато в один» з'являються додаткові складнощі з ідентифікацією користувачів і необхідність зберігати повні логи трансляцій.
  3. Ілюзія DoS-атаки. Якщо NAT використовується для підключення багатьох користувачів до одного і того ж сервісу, це може викликати ілюзію DoS-атаки на сервіс (безліч успішних і неуспішних спроб). Наприклад, надмірна кількість користувачів ICQ за NAT приводить до проблеми з підключенням до сервера деяких користувачів через перевищення допустимої швидкості підключень. Частковим вирішенням проблеми є використання пулу адрес (групи адрес), для яких здійснюється трансляція.
  4. Пірингові мережі. У NAT-пристроях, які не підтримують Universal Plug & Play, в деяких випадках, необхідна додаткова настройка (див. Трансляція порт-адреси) при роботі з піринговими мережами і деякими іншими програмами, в яких необхідно не тільки ініціювати вихідні з'єднання, але також приймати вхідні...

Приклад[ред. | ред. код]

Трансляція локальної мережі з діапазоном адрес 172.16.14.0/24 у глобальну мережу буде здійснюватися через одну зовнішню IP-адресу (адресу маршрутизатора, котра виконує трансляцію).

NAT loopback[ред. | ред. код]

Сенс технології NAT loopback (або NAT hairpinning) простий: якщо пакет надходить з внутрішньої мережі на зовнішню IP-адресу маршрутизатора, він вважається надійшовшим ззовні — а значить, працюють правила брандмауера, що відносяться до зовнішніх з'єднань. І якщо пакет успішно пройде крізь брандмауер, спрацює NAT, взявши на себе посередництво між двома внутрішньомережевими машинами. Це дає дві речі

  1. Прямо зсередини локальної мережі можна перевірити, як налаштовані мережеві служби.
  2. Доступ до сервера, що знаходиться в локальній мережі, по доменному імені. Без NAT loopback довелося б правити файл hosts на кожній машині для кожного задіяного домену та піддомену.

Недоліком NAT loopback можна вважати підвищене навантаження на хаб і маршрутизатор (в порівнянні з прямим доступом до серверу).

NAT Traversal[ред. | ред. код]

NAT Traversal (проходження або автоналаштування NAT) — це набір можливостей, що дозволяє мережевим додаткам визначати, що вони перебувають за пристроєм, забезпеченим NAT, дізнаватися зовнішню IP-адресу цього пристрою і виконувати зіставлення портів для пересилання пакунків з зовнішнього порту NAT на внутрішній порт, використовуваний додатком; все це виконується автоматично, користувачу немає необхідності вручну налаштовувати співставлення портів або вносити зміни у будь-які інші параметри. Однак існують запобіжні заходи у довірі до таких додатків — вони отримують широкий контроль над пристроєм, з'являються потенційні вразливості.

Програмна реалізація NAT[ред. | ред. код]

При наявності вже існуючого сервера під управлінням серверної ОС можливо організовувати трансляцію адрес без необхідності закупівлі додаткових, апаратних пристроїв.

З точки зору відмовостійкості, гнучкості і продуктивності, використовують операційні системи сімейства UNIX (більшість GNU/Linux, BSD-системи, а також OpenSolaris і т. ін.). У багатьох з них NAT доступний «з коробки», в інших можлива реалізація за рахунок додавання модулів у поєднанні з міжмережевими екранами з функціями трансляції адрес (IPFW, IPtables #і т. ін.). Також, NAT працює «з коробки» у сімействі операційних систем Windows Server.

Див. також[ред. | ред. код]

Примітки[ред. | ред. код]

  1. Network Protocols Handbook. — 2. — Javvin Technologies Inc. — С. 27. — ISBN 9780974094526.
  2. Андрей Жуков. Типы Network Address Translation (NAT) [Архівовано 8 травня 2020 у Wayback Machine.]