Як працює NAT / PortForwarding / TCP / IP?


12

Нещодавно я прочитав статтю під назвою роботи NAT . Деякі речі досі залишаються мені незрозумілими. Буду вдячний, якби хтось міг пояснити.

Нижче наведена частина статті про DynamicNAT, яка є найбільш заплутаною:

Комп'ютер у домені заглушки намагається підключитися до комп'ютера поза мережею, наприклад веб-сервера.

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

Коли пакет повертається з цільового комп'ютера, маршрутизатор перевіряє адресу призначення в пакеті. Потім він загляне в таблицю перекладу адрес, щоб побачити, до якого комп'ютера в домені заглушки належить пакет.

1) Як NAT знає, що пакет "повертається" до цільового комп'ютера?

2) Що робити, якщо інші комп'ютери в локальній мережі підключені до того ж сервера? Як NAT знає, який пакет повинен "повернутися" куди?

3) Чи дозволяє модифікація заголовка пакетів здійснювати атаку в Інтернеті, в якій "джерело IP" замінюється IP-адресою жертви, а сервер-відповідь заповнює жертву небажаними пакетами?

Я думаю, що потрібно буде залучити декількох нападників ...

4) Чи StaticNAT еквівалентний PortForwarding всіх портів?

Відповіді:


11

Існує загальна помилка між NAT (трансляція мережевих адрес) та PAT (переклад адрес порта), саме це ми використовуємо в домашніх маршрутизаторах.

NAT
Припустимо, у нас є мережа з такою топологією:

Private_Network <-------> Маршрутизатор <-------> The_Internet

Інтерфейс маршрутизатора, який підключений до Private_Network, має приватну IP-адресу , тобто ту, яка не є унікальною у The_Internet . З іншого боку, в разі NAT , маршрутизатор має кілька інтерфейсів , підключених до The_Internet . Кожен інтерфейс має унікальну IP-адресу в The_Internet . Тепер припустимо, що Host_A та Host_B перебувають у Private_Network, і вони обидва хочуть отримати доступ до Website_X у The_Internet одночасно. IP-адреси та порти Host_Aпакет буде:

Джерело IP: Host_A 's приватний IP
Source Port: Порт на Host_A
призначення IP: Website_X Загальнодоступна / унікальний IP
Destination Port: Порт , де Website_X сервер «s слухає

і таким же чином для пакета, що надходить від Host_B .
Якщо вихідний IP залишити без змін, Website_X відповість на приватну IP-адресу, тобто не унікальну, і тому пакет ніколи не зможе знайти його назад. Щоб вирішити цю проблему, маршрутизатор перевіряє, чи не використовується одна з його унікальних IP-адрес, підключених до The_Internet . Якщо це так, воно здійснює таке відображення:

Host_A «S приватний IP ======= Router's_unique_IP_K

і тепер пакет, який почався з Host_A, перейшов до Website_X і тепер залишає інтерфейс маршрутизатора, підключеного до The_Internet , матиме форму:

Джерело IP: Router's_unique_IP_K
Source Port: Порт на Host_A
призначення IP: Website_X Загальнодоступна / унікальний IP
порт призначення: порт , де Website_X 'сервер s слухає

Таким чином, ви можете зрозуміти, що існує приватна асоціація від приватних ІС до публічних ІС. Тому, коли пакет прибуває з Website_X до маршрутизатора , ця асоціація перевіряється і IP-адреса пункту призначення змінюється назад на приватну та успішно доставляється правильному хосту.
Як бачите, цей спосіб досить простий, але має один великий недолік: кожен приватний хост повинен мати унікальну IP-адресу, зарезервовану, що дорого, тому ми вибираємо менше унікальних IP-адрес, ніж хостів у приватній мережі. Тому якщо всі приватні хости намагаються отримати доступ до The_Internet одночасно, лише їх підмножина, що дорівнює кількості доступних загальнодоступних IP-адрес, які маршрутизаторматиме, матиме доступ, а решті буде відмовлено.
Щоб протистояти тому, що ми створили PAT .

PAT
PAT - це те, чим користується переважна більшість наших домашніх маршрутизаторів. Основне обмеження полягає в тому, що маршрутизатор має єдину унікальну IP-адресу, за допомогою якої він підключається до The_Internet , але ми все ще хочемо дозволити декільком хостам з приватної мережі одночасно отримати доступ до The_Internet .
Як ми це робимо, "схожий" з тим, як NAT робить це з ключовою різницею: замість того, щоб маршрутизатор тримав пул IP-адреси, він містить пул номерів портів. Точніше, пакет, що надходить на маршрутизатор з Host_A в Private_Network, призначений для Website_X вThe_Internet матиме такий формат:

Джерело IP: Host_A 's приватний IP
Source Port: Порт на Host_A
призначення IP: Website_X Загальнодоступна / унікальний IP
Destination Port: Порт , де Website_X сервер «s слухає

Тепер маршрутизатор виконає два завдання:

  1. Він змінить вихідний IP на унікальний загальнодоступний IP- маршрутизатор І
  2. Він змінить вихідний порт на порт з пулу, який підтримує маршрутизатор і не використовується, наприклад, Port_Z

і тепер пакет, який почався з Host_A, перейшов до Website_X і тепер залишає інтерфейс маршрутизатора, підключеного до The_Internet , матиме форму:

Джерело IP: Router's_unique_IP_K
Порт джерела: Port_Z
Destination IP: Website_X Загальнодоступна / унікальний IP
Destination Port: порт , де Website_X 'сервер s слухає

і маршрутизатор збереже таке відображення:

Host_A приватний IP «s і порт на Host_A ======= Port_Z

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

Що робити, якщо я запускаю кілька додатків на одному хості?
Різні програми матимуть різні порти за визначенням, таким чином вони будуть відображені в інший порт від маршрутизатора .

Що робити, якщо кілька хостів намагаються отримати доступ до The_Internet одночасно, і всі вони використовують один і той же додаток?
У різних хостів будуть різні приватні IP-адреси за визначенням, таким чином вони будуть відображені в інший порт від маршрутизатора .

PAT небезпечно балансує в сірому просторі поперечного шару. Номери портів є частиною транспортного протоколу, в той час як маршрутизатори можуть працювати відповідно до Інтернет-протоколу. Тож технічно кажучи, це те, що протоколи не дозволяють. Тому існують, принаймні теоретично, потенційні небезпеки: пул портів обмежений. Тому, якщо моя приватна мережа складається з 1000 хостів, і кожен з них працює port_pool / 10 додатків, у таблиці відображення на маршрутизаторі не вистачає доступних записів, і доступ до програм буде заборонено.

Ця відповідь значно перевищила мою заплановану тривалість, але я сподіваюся, що вона була корисною.


2
Кілька зауважень. По-перше, ви використовуєте термін "NAT" для перегляду того, що RFC називають "Basic NAT" і "PAT", щоб повторити те, що RFC називають "NAPT". RFC зазвичай використовують "NAT" як парасольовий термін, що охоплює і "Basic NAT", і "NAPT". По-друге, навіть "Basic NAT" повинен змінювати заголовок TCP / UDP, оскільки заголовок TCP / UDP містить контрольну суму, яка охоплює IP-адреси.
Пітер Грін

@PeterGreen, але суть відповіді точна?
lpydawa

6

Маршрутизатор знає, куди належать пакети, тому що The router saves ... an address translation table.він запам'ятовує, які переклади адрес, що знаходяться всередині нього. Таким чином, одна внутрішня адреса дорівнює одній зовнішній адресі, а місце призначення в мережі Інтернет не має значення. Це, звичайно, ігнорує брандмауер, присутній практично в кожному маршрутизаторі NAT, який відстежує повне з'єднання:

(inside) src:ip+port,dst:ip+port <-> (outside) src:ip+port,dst:ip+port

NAT може змінити будь-яку комбінацію ip та / або порту.

№3 - будь-яка абсолютно інша тема: підробка

№4 "Статичний NAT" або "1-to-1" - це карта лише для адрес. Отже, порт (і навіть протокол: tcp, udp, gre тощо) не має значення.


2) Що робити, якщо інші комп'ютери в локальній мережі підключені до того ж сервера? Як NAT знає, який пакет повинен "повернутися" куди?
користувач2449761

1 і 2 - та сама відповідь: адже це відстеження з'єднань / перекладів. Два внутрішніх хости не будуть відображені в одній зовнішній адресі; тому будь-який пакет, що прибуває за картографічною зовнішньою адресою, автоматично має лише одне внутрішнє призначення. Якщо у вас є лише одна зовнішня (публічна) адреса, це не "NAT", а PAT (переклад порту)
Ricky Beam
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.