Що таке переадресація порту і для чого вона використовується?


215

Є багато питань щодо "переадресації порту" , але, здається, не існує жодного, який чітко визначає, що це таке і для чого воно використовується. Тому:

  1. Що таке переадресація порту?

  2. Для чого він використовується, і навіщо він мені потрібен?


1
Я думаю, що це досить добре: portforward.com/help/portforwarding.htm
Koray Tugay

Відповіді:


318

Основи

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

Якщо ви знаєте, що це таке, і просто хочете знати, як це зробити : http://portforward.com/ має інструкцію із скріншотами для буквально сотні різних маршрутизаторів. Документація там захована за рекламною сторінкою для їх автоматичного інструменту portconfig. (Просто натисніть трохи, і ви знайдете його.)

NAT - що це? Для чого ми його використовуємо?

Ваш домашній маршрутизатор має вбудовану функцію під назвою Переклад мережевих адрес або NAT. Всередині вашої мережі комп'ютери мають адреси, такі як 192.168.1.100. Усі адреси в діапазоні 192.168. * (Або в діапазоні 10. *) - це " приватні " або " зарезервовані " адреси. Ці адреси IANA офіційно призначає для використання у приватних мережах. Ваш маршрутизатор автоматично призначає таку адресу кожному комп'ютеру, підключеному через DHCP . Ці адреси - це те, як комп'ютери у вашій мережі спілкуються з маршрутизатором і один з одним.

Ваш маршрутизатор має окремий мережевий інтерфейс, який підключає його до Інтернету. Цей інтерфейс має зовсім іншу адресу, яку призначає ваш Інтернет-провайдер. Це та адреса, яку я згадував раніше, і ваш маршрутизатор використовує її для спілкування з іншими комп’ютерами в Інтернеті. На комп'ютерах у вашій мережі є приватні IP-адреси, що не підлягають маршрутизації , тобто, якщо вони надсилають пакети безпосередньо до Інтернету, пакети автоматично будуть відкинуті (пакети з приватними адресами не дозволяють просувати Інтернет через причини стабільності). Але ваш маршрутизатор має адресу маршрутизації . Переклад мережевих адрес, як випливає з назви, перекладається між цими двома типами адрес, що дозволяє декільком комп'ютерам у вашій мережі з’являтися в Інтернеті як один комп'ютер з однією адресою.

Деталі

Хоча це може здатися складним, насправді досить просто, як це робить ваш маршрутизатор. Кожен раз, коли комп'ютер у вашій мережі хоче підключитися до комп'ютера в Інтернеті, він надсилає запит на з'єднання маршрутизатору (він знає, що надіслати його до маршрутизатора, оскільки його параметр Шлюз за замовчуванням встановлений на адресу маршрутизатора). Потім маршрутизатор приймає цей запит на з'єднання ("запит SYN" в TCP / IP) і змінює адресу джерела ("відповідь-відповідь" або повернення адреси) і змінює її з приватного IP-адреси комп'ютера на загальнодоступний IP-адресу маршрутизатор, так що відповідь буде надіслана маршрутизатору. Потім він зазначає в базі даних (називається таблицею NAT ), що з'єднання було ініційоване, щоб потім запам'ятати його.

Коли відповідь повертається з віддаленого комп'ютера ("SYN-ACK"), маршрутизатор заглядає в свою таблицю NAT і бачить, що з'єднання з цим хостом на цьому порту раніше було ініційоване приватним комп'ютером у вашій мережі, змінює призначення адресу на приватну адресу комп’ютера та пересилає її всередині вашої мережі. Таким чином, пакети можуть продовжувати переміщатися вперед і назад між мережами, при цьому маршрутизатор прозоро змінює адреси, щоб він працював. Коли з'єднання припиняється, маршрутизатор просто видаляє його з таблиці NAT.

Або подумай про це так

Це може бути трохи простіше уявити метафорою - скажімо, ви експедитор у США, який працює з китайськими клієнтами. Їм потрібно надсилати пакунки багатьом клієнтам у США, але митніше / з паперових причин простіше відправляти пакунки лише в одне місце. Отже, пакет приходить до вас від одного з ваших клієнтів у Китаї (приватна мережа, у цьому прикладі) з фактичним пунктом призначення десь у США (Інтернет). Ви змінюєте мітку адреси на коробці на адресу США (загальнодоступну), а зворотну адресу ви змінюєте на власну загальнодоступну адресу (оскільки її неможливо повернути прямо в Китай без незручності клієнта) і передаєте її поштовій службі . Якщо замовник поверне товар, він приходить до вас. Ви дивитесь це у своїх записах і бачите, з якої компанії в Китаї він взявся,

Це чудово працює, але є проблема. Що робити, якщо клієнту потрібно щось надіслати компанії, скажімо, грошовий переказ в оплату за щось? Або скажімо, що комп'ютер в Інтернеті ініціює з'єднання з маршрутизатором (запит SYN), скажімо, на веб-сервер, який знаходиться в мережі. Лист / пакет містить лише публічну адресу маршрутизатора, тому маршрутизатор насправді не знає, куди його надіслати! це може бути призначене для будь-якого з комп'ютерів приватної мережі або для жодного з них. Можливо, ви зіткнулися з цією проблемою, коли ви телефонуєте комусь на домашній телефон - коли вони дзвонять вам, це не проблема, але коли ви телефонуєте їм, немає ніякого способу дізнатися, на кого дзвонить, тому невірна людина може відповісти.

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

І нарешті ми дістаємось до Port Forwarding

Переадресація портів - це те, як ми вирішуємо цю проблему: це спосіб сказати маршрутизатору, на який комп’ютер всередині мережі вхідні з'єднання слід спрямовувати. У нас є три різні способи:

  • Faux-DMZ : багато маршрутизаторів мають функцію під назвою DMZ. Це означає, що Демілітаризована зона, яка є своєрідною конфігурацією безпеки мережі. DMZ на домашніх маршрутизаторах часто називають штучним DMZ, оскільки у ньому відсутні особливості фактичного DMZ. Це робиться - це найпростіший вид обробки вхідних з'єднань: всі запити на вхідні з'єднання будуть надіслані одному, вказаному у вашій мережі. Це просто мертво - ви вводите IP-адресу у конфігурацію вашого маршрутизатора, і всі вхідні з'єднання проходять там. Однак це не завжди працює, оскільки у вас може бути кілька комп’ютерів, яким потрібно приймати вхідні з'єднання. Для цього ми маємо ...
  • Переадресація порту : Усі запити на підключення до мережі включають "порт". Порт - це просто число, і це частина того, як комп'ютер знає, що таке пакет. IANA уточнила, що порт 80 використовується для HTTP. Це означає, що вхідний пакет, який повідомляє номер порту 80, повинен бути запитом, призначеним для веб-сервера. Переадресація портів на маршрутизаторі дозволяє ввести номер порту (або, можливо, діапазон або комбінацію номерів, залежно від маршрутизатора) та IP-адресу. Усі вхідні з'єднання з відповідним номером порту будуть передані на внутрішній комп'ютер з цією адресою.
  • Порт UPnP вперед : Переадресація UPnP працює точно так само, як і переадресація портів, але замість того, щоб налаштувати його, програмне забезпечення на комп'ютері всередині мережі автоматично встановлює маршрутизатор для перенаправлення трафіку на даний порт до нього.

Приклад

Давайте розглянемо приклад використання. Багато ігор для багатьох гравців (наприклад, Counter Strike) дозволяють запустити на своєму комп’ютері ігровий сервер, до якого можуть підключитися інші люди, щоб грати з вами. Ваш комп'ютер не знає всіх людей, які хочуть грати, тому він не може з ними підключитися - натомість їм доведеться надсилати нові запити на підключення до вашого комп’ютера з Інтернету.

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

Іншим прикладом може бути локальна мережа з двома машинами, де друга з IP 192.168.1.10 розміщує веб-сайт за допомогою Apache. Тому маршрутизатор повинен направити вхідний порт 80 запитів на цю машину. Використовуючи переадресацію портів, обидва машини можуть одночасно працювати в одній мережі.

Приклад графіка переадресації портів

Відеоігри, мабуть, найпоширеніші місця, з якими щоденні користувачі стикаються з переадресацією портів, хоча більшість сучасних ігор використовують UPnP, так що вам не доведеться робити це вручну (натомість це повністю автоматично). Вам потрібно буде робити це завжди, коли ви хочете мати можливість безпосередньо підключитися до чогось у вашій мережі (а не через якогось посередника в Інтернеті). Це може включати запуск власного веб-сервера або підключення через протокол віддаленого робочого столу до одного з ваших комп'ютерів.

Примітка про безпеку

Однією з приємних речей щодо NAT є те, що він забезпечує певну вбудовану безпеку. Дуже багато людей блукають по Інтернету, шукаючи вразливих машин ... і роблять це, намагаючись відкрити з'єднання з різними портами. Це вхідні з'єднання, тому, як було сказано вище, маршрутизатор відкине їх. Це означає, що в NAT-конфігурації лише сам маршрутизатор вразливий до атак, що включають вхідні з'єднання. Це гарна річ, адже маршрутизатор набагато простіший (і, таким чином, менш вразливий), ніж комп'ютер із повноцінною операційною системою з великою кількістю програмного забезпечення. Тоді слід пам’ятати, що DMZing комп'ютером у вашій мережі (встановивши його як призначення DMZ) ви втрачаєте цей рівень безпеки для цього комп’ютера: він тепер повністю відкритий для вхідних з'єднань з Інтернету, тому вам потрібно закріпити його так, ніби він безпосередньо підключений. Звичайно, щоразу, коли ви пересилаєте порт, комп'ютер на кінці прийому стає вразливим на цьому конкретному порту. Тому переконайтеся, що ви запускаєте сучасне програмне забезпечення, яке добре налаштоване.


2
Ви коротко згадали про це, але, можливо, ви захочете пояснити важливість використання DMZ-стилю для переадресації портів. Я не можу придумати жодного екземпляра, де було б гарною ідеєю у виробничих умовах викрити щось на зразок sql-сервера (чи будь-якого іншого) зовнішньому світу. Переадресація портів дозволяє зробити доступ до захищених ресурсів без серйозного погіршення безпеки.
Брайан Ванденберг

11
Ще одна деталь, не розгорнута в розділі NAT, полягає в тому, що якщо комп'ютери у вашій мережі використовують DHCP для отримання своїх внутрішніх нерутологічних приватних IP-адрес, можливо, одна з призначених їм змін може змінюватися, і якщо це станеться, переадресація порту буде заплутатися Краще уникати цього, встановлюючи мережеву адресацію кожного комп'ютера вручну. portforward.com наголошує на важливості цього і має посібник, що описує, як налаштувати статичну IP-адресу в системі, однак вони не згадують про необхідність також налаштовувати DHCP маршрутизатора, щоб уникнути цих зарезервованих NAT-адрес.
martineau

2
@jcrawfordor, Привіт, Ви не проти пояснити, як саме UPnP повністю автоматичний? Що таке UPnP і як це працює?
Pacerier

1
@martineau резервування DHCP-адрес - це хороший спосіб зробити це. Деякі маршрутизатори, які ви можете переадресувати до конкретних клієнтів, а не адреси, що ще краще.
Балдрікк

2
Частина відповіді, яка говорить: "Порт - це просто число, і це частина того, як комп'ютер знає, що таке пакет". вводить в оману. Закріплення номера порту для програми є умовою, це не є фактором у визначенні типу пакету. У кращому випадку пакет, призначений для порту 80, можна припустити, що це HTTP, нічого більше, це повністю залежатиме від (на рівні програми) програми, яка прослуховує порт 80.
codeman48
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.