Что такое перенаправление портов и для чего оно используется?

215

Есть много вопросов о «переадресации портов» , но, похоже, нет такого, который бы четко указывал, что это такое и для чего он используется. Так:

  1. Что такое переадресация портов?

  2. Для чего он используется и зачем он мне нужен?

James Mertz
источник
1
Я думаю, что это достаточно хорошо: portforward.com/help/portforwarding.htm
Корай Тугай

Ответы:

318

Основы

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

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

NAT - Что это? Почему мы это используем?

Ваш домашний маршрутизатор имеет встроенную функцию трансляции сетевых адресов или NAT. Внутри вашей сети компьютеры имеют такие адреса, как 192.168.1.100. Все адреса в диапазоне 192.168. * (Или в диапазоне 10. *) являются « частными » или « зарезервированными » адресами. Эти адреса официально назначены IANA для использования внутри частных сетей. Ваш маршрутизатор автоматически назначает такой адрес каждому компьютеру, подключенному через DHCP . Эти адреса - это то, как компьютеры в вашей сети взаимодействуют с маршрутизатором и друг с другом.

Ваш маршрутизатор имеет отдельный сетевой интерфейс, который подключает его к Интернету. Этот интерфейс имеет совершенно другой адрес, который назначается вашим провайдером. Это тот адрес, который я упоминал ранее, и ваш маршрутизатор использует его для связи с другими компьютерами в Интернете. Компьютеры в вашей сети имеют не маршрутизируемые частные IP-адреса, что означает, что если они отправляют пакеты напрямую в Интернет, пакеты будут автоматически отбрасываться (пакеты с частными адресами не могут проходить через Интернет по соображениям стабильности). Но у вашего роутера есть маршрутизируемый адрес. Преобразование сетевых адресов, как следует из его названия, переводит между этими двумя типами адресов, позволяя нескольким компьютерам в вашей сети появляться в Интернете как один компьютер с одним адресом.

Детали

Хотя это может показаться сложным, на самом деле довольно просто, как это делает ваш маршрутизатор. Каждый раз, когда компьютер в вашей сети хочет подключиться к компьютеру в Интернете, он отправляет запрос на подключение к маршрутизатору (он знает, чтобы отправить его на маршрутизатор, поскольку его параметр Default Gateway установлен на адрес маршрутизатора). Затем маршрутизатор принимает этот запрос на соединение («запрос SYN» в TCP / IP) и изменяет исходный адрес («ответный» или обратный адрес) и изменяет его с частного IP-адреса компьютера на публичный IP-адрес маршрутизатор, так что ответ будет отправлен на маршрутизатор. Затем в базе данных (называемой таблицей NAT ) записывается, что соединение было инициировано, и запоминает его позже.

Когда ответ возвращается с удаленного компьютера («SYN-ACK»), маршрутизатор просматривает свою таблицу NAT и видит, что подключение к этому хосту на этом порту ранее было инициировано частным компьютером в вашей сети, изменяет назначение адрес на частный адрес компьютера, и пересылает его внутри вашей сети. Таким образом, пакеты могут продолжать проходить назад и вперед между сетями, при этом маршрутизатор прозрачно меняет адреса, чтобы он работал. Когда соединение разорвано, маршрутизатор просто удаляет его из таблицы NAT.

Или думать об этом так

Это может быть немного проще визуализировать с помощью метафоры - скажем, вы экспедитор в США, работающий с китайскими клиентами. Они должны отправлять посылки многим клиентам в США, но по таможенным / бумажным причинам проще отправлять посылки только в одно место. Таким образом, пакет приходит к вам от одного из ваших клиентов в Китае (в данном примере это частная сеть) с фактическим пунктом назначения где-то в США (Интернет). Вы изменяете метку адреса на коробке на американский (общедоступный) адрес, и вы меняете обратный адрес на свой собственный публичный адрес (так как он не может быть возвращен прямо в Китай без причинения неудобств клиенту) и передаете его почтовой службе , Если клиент возвращает товар, он приходит к вам. Вы просматриваете это в своих записях и видите, из какой компании в Китае это произошло,

Это прекрасно работает, но есть небольшая проблема. Что, если клиенту нужно что-то отправить компании, скажем, денежный перевод за что-то? Или, скажем, компьютер в Интернете инициирует соединение с маршрутизатором (запрос SYN), скажем, к веб-серверу, который находится в сети. Письмо / пакет имеет только публичный адрес маршрутизатора, поэтому маршрутизатор фактически не знает, куда его отправить! он может быть предназначен для любого из компьютеров в частной сети или ни для одного из них. Возможно, вы столкнулись с этой проблемой, когда звоните кому-то на домашний телефон - когда они звонят вам, это не проблема, но когда вы звоните им, у них нет возможности узнать, кому звонят, поэтому не тот человек может ответить.

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

И наконец мы добираемся до переадресации портов

Переадресация портов - это то, как мы решаем эту проблему: это способ сообщить вашему маршрутизатору, на какой компьютер в сети должны быть направлены входящие соединения. У нас есть три разных способа сделать это:

  • Faux-DMZ : многие маршрутизаторы имеют функцию под названием DMZ. Это означает Демилитаризованную Зону, которая является своего рода конфигурацией безопасности сети. DMZ на домашних маршрутизаторах часто называют faux-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), вы теряете этот уровень безопасности для этого компьютера: теперь он полностью открыт для входящих подключений из Интернета, так что вам нужно защитить его, как если бы он был напрямую подключен. Конечно, каждый раз, когда вы перенаправляете порт, компьютер на принимающей стороне становится уязвимым на этом конкретном порту. Поэтому убедитесь, что вы используете современное программное обеспечение, которое хорошо настроено.

jcrawfordor
источник
2
Вы кратко упомянули об этом, но, возможно, захотите пояснить важность использования переадресации портов в стиле DMZ. Я не могу вспомнить ни одного случая, когда в производственной среде было бы неплохо представить что-то вроде сервера sql (или чего-то еще) для внешнего мира. Переадресация портов может позволить получить доступ к защищенным ресурсам без серьезной угрозы безопасности.
Брайан Ванденберг
11
Одна деталь, которая не раскрывается в разделе NAT, заключается в том, что если компьютеры в вашей сети используют DHCP для получения своих внутренних не маршрутизируемых частных IP-адресов, возможно, что назначенный им компьютер будет меняться, и в этом случае переадресация портов будет запутаться. Лучше всего этого избежать, настроив сетевую адресацию каждого компьютера вручную. portforward.com подчеркивает важность этого и имеет руководство, описывающее, как настроить статический IP-адрес в системе, однако они не упоминают о необходимости также настроить DHCP маршрутизатора, чтобы избежать этих теперь зарезервированных адресов NAT.
Мартино
2
@jcrawfordor, Привет, не могли бы вы объяснить, как именно UPnP полностью автоматический? Что такое UPnP и как оно работает?
Pacerier
1
@martineau резервирование адресов DHCP - хороший способ сделать это. Некоторые маршрутизаторы вы можете перенаправлять на конкретные клиенты, а не на адреса, что еще более предпочтительно.
Болдрикк
2
Часть ответа, которая гласит: «Порт - это просто число, и это часть того, как компьютер знает, что такое пакет». вводит в заблуждение. Фиксирование номера порта для приложения является соглашением, оно не является фактором, определяющим тип пакета. В лучшем случае можно предположить, что пакет, предназначенный для порта 80, будет HTTP, и ничего более, он будет полностью зависеть (на уровне приложений) от приложения, прослушивающего порт 80.
codeman48