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

416027
KronoS

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

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

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

197
Я думаю, что это достаточно хорошо: http://portforward.com/help/portforwarding.htm Koray Tugay 9 лет назад 1

1 ответ на вопрос

292
jcrawfordor

Основы

Чтобы по-настоящему объяснить переадресацию портов, сначала нужно немного больше понять, что делает ваш маршрутизатор . Ваш интернет-провайдер назначает один 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 на эту машину. Используя переадресацию портов, обе машины могут работать в одной сети одновременно.

Port forwarding example graph

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

Записка о безопасности

Одна из приятных особенностей NAT заключается в том, что он обеспечивает некоторую простую встроенную защиту. Многие люди бродят по Интернету в поисках уязвимых компьютеров ... и делают это, пытаясь открыть соединения с различными портами. Это входящие соединения, поэтому, как обсуждалось выше, маршрутизатор их отбросит. Это означает, что в конфигурации NAT только сам маршрутизатор уязвим для атак с участием входящих подключений. Это хорошо, потому что маршрутизатор намного проще (и, следовательно, менее подвержен уязвимости), чем компьютер, на котором установлена ​​полная операционная система с большим количеством программного обеспечения. Поэтому вы должны иметь в виду, что, DMZing компьютер внутри вашей сети (устанавливая его в качестве пункта назначения DMZ), вы теряете этот уровень безопасности для этого компьютера: теперь он полностью открыт для входящих подключений из Интернета, так что вам нужно защитить его, как если бы он был напрямую подключен. Конечно, каждый раз, когда вы пересылаете порт, компьютер на принимающей стороне становится уязвимым на этом конкретном порту. Поэтому убедитесь, что вы используете современное программное обеспечение, которое хорошо настроено.

You briefly mentioned it, but you may want to expound on the importance of DMZ-style uses of port forwarding. I can't think of a single instance where it'd be a good idea, under a production environment, to expose something like an sql server (or whatever) to the outside world. Port forwarding can make it possible to get at protected resources without seriously compromising security. Brian Vandenberg 12 лет назад 2
Одна деталь, которая не раскрывается в разделе NAT, заключается в том, что если компьютеры в вашей сети используют DHCP для получения своих внутренних не маршрутизируемых частных IP-адресов, возможно, что назначенный им компьютер будет меняться, и в этом случае переадресация портов будет запутаться. Лучше всего этого избежать, настроив сетевую адресацию каждого компьютера вручную. portforward.com подчеркивает важность этого и имеет руководство, описывающее, как настроить статический IP-адрес в системе, однако они не упоминают о необходимости также настроить DHCP маршрутизатора, чтобы избежать этих теперь зарезервированных адресов NAT. martineau 12 лет назад 11
@jcrawfordor, Привет, не могли бы вы объяснить, * как * полностью автоматизирован UPnP? Что такое UPnP и как оно работает? Pacerier 7 лет назад 2
@martineau резервирование адресов DHCP - хороший способ сделать это. Некоторые маршрутизаторы вы можете перенаправлять на конкретные клиенты, а не на адреса, что еще более предпочтительно. Baldrickk 5 лет назад 1
@Baldrickk: Возможность добавить такой уровень косвенности через клиента _name_ было бы неплохо, но мой собственный маршрутизатор не настолько сложен, так что то, что я делаю, более или менее противоположно этому, а именно - конфигурирует его сервер DCHP только динамически обслуживать адреса выше 192.168.0.100, эффективно резервируя 100 адресов ниже этого. Затем я вручную настраиваю любых клиентов, которым требуется неизменный IP-адрес в этом нижнем, неофициально зарезервированном диапазоне. martineau 5 лет назад 0
@martineau Ух ты, я не ожидал ответа на это! Это похоже на то, что я делал раньше, хотя я не устанавливал диапазон DCHP и вручную назначал адреса под ним - включение и отключение DHCP было проблемой при переходе на другие сети на ноутбуке. Вместо этого я использовал резервирование DHCP на моем старом маршрутизаторе, и порт перенаправлялся на эти зарезервированные адреса - эквивалентно, но я должен был оставить включенным DHCP. Baldrickk 5 лет назад 1
@Baldrickk: DHCP всегда включен в маршрутизаторе (настроен, как указано выше), и что касается моего ноутбука, я тоже оставляю его там, так как мне обычно не нужны перенаправленные порты на него - но я вижу вашу точку зрения , martineau 5 лет назад 1
Часть ответа, которая гласит: «Порт - это просто число, и это часть того, как компьютер знает, что такое пакет». вводит в заблуждение. Фиксирование номера порта для приложения - это соглашение, оно не является фактором, определяющим тип пакета. В лучшем случае пакет, предназначенный для порта 80, может * угадываться * как HTTP, и ничего более, он будет полностью зависеть (на уровне приложений) от приложения, прослушивающего порт 80. codeman48 5 лет назад 2
@martineau Резервирование DHCP - действительно лучшее решение, потому что вам не нужно изменять какие-либо настройки на компьютере (просто убедитесь, что DHCP включен), и вам не нужно беспокоиться о том, что настройки компьютера не соответствуют маршрутизатор, потому что он сообщает маршрутизатору, «когда этот компьютер подключается и запрашивает IP-адрес, назначьте ему этот конкретный адрес». wjandrea 5 лет назад 0
@wjandrea: Действительно, это было бы лучшее решение, но опять же мой относительно недорогой домашний маршрутизатор не поддерживает его. В таких ситуациях (как это [статья в Lifehacker] (https://lifehacker.com/5822605/how-to-set-up-dhcp-reservations-so-you-never-have-to-check-an-ip-address - снова) я обнаружил состояния): «Если по какой-то причине вы не можете использовать резервирование DHCP, вы можете вместо этого установить статический IP-адрес на каждом из ваших компьютеров, но это наш предпочтительный метод». martineau 5 лет назад 0

Похожие вопросы