201

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


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

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

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

Ответов: 1

298

Основы

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

Вы кратко упомянули об этом, но, возможно, захотите пояснить важность использования переадресации портов в стиле DMZ. Я не могу вспомнить ни одного случая, когда в производственной среде было бы неплохо представить что-то вроде сервера sql (или чего-то еще) для внешнего мира. Переадресация портов может позволить получить доступ к защищенным ресурсам без серьезного ущерба для безопасности. (18 мая '11 в 18:52)

Одна деталь, которая не раскрывается в разделе NAT, - это тот факт, что если компьютеры в вашей сети используют DHCP для получения своих внутренних не маршрутизируемых частных IP-адресов, возможно, что назначенный им компьютер будет меняться, и в этом случае переадресация портов будет запутаться. Лучше всего этого избежать, настроив сетевую адресацию каждого компьютера вручную. portforward.com подчеркивает важность этого и имеет руководство, описывающее, как настроить статический IP-адрес в системе, однако они не упоминают о необходимости также настроить DHCP маршрутизатора, чтобы избежать этих теперь зарезервированных адресов NAT. (1 августа '11 в 3:56)

@jcrawfordor, Привет, не могли бы вы объяснить, как точно делает UPnP полностью автоматическим? Что такое UPnP и как оно работает? (26 ноября '16 в 21:37)

@martineau резервирование адресов DHCP - хороший способ сделать это. Некоторые маршрутизаторы вы можете перенаправлять на конкретные клиенты, а не на адреса, что еще более предпочтительно. (13 ноября '18 в 15:42)

@Baldrickk: Было бы неплохо добавить такой уровень косвенности через name клиента, но мой собственный маршрутизатор не настолько сложен, так что то, что я делаю, более или менее противоположно этому. - а именно, чтобы настроить его сервер DCHP для динамического обслуживания только адресов выше 192.168.0.100, эффективно резервируя 100 адресов ниже этого. Затем я вручную настраиваю любых клиентов, которым требуется неизменный IP-адрес в этом нижнем, неофициально зарезервированном диапазоне. (13 ноября '18 в 17:42)

@martineau Ух ты, я не ожидал ответа на это! Это похоже на то, что я делал раньше, хотя я не устанавливал диапазон DCHP и вручную назначал адреса под ним - включение и отключение DHCP было проблемой при переходе на другие сети на ноутбуке. Вместо этого я использовал резервирование DHCP на моем старом маршрутизаторе, и порт перенаправлялся на эти зарезервированные адреса - эквивалентно, но я должен был оставить включенным DHCP. (14 ноября '18 в 10:30)

@Baldrickk: DHCP всегда включен в маршрутизаторе (настроен, как указано ранее), и, если мой ноутбук работает, я тоже оставляю его там, так как мне обычно не нужны перенаправленные порты на него - но я вижу вашу точку зрения , (14 ноября '18 в 10:59)

Часть ответа, которая гласит: «Порт - это просто число, и это часть того, как компьютер знает, что такое пакет». вводит в заблуждение. Фиксирование номера порта для приложения является соглашением, оно не является фактором, определяющим тип пакета. В лучшем случае пакет, предназначенный для порта 80, можно угадать как HTTP, не более того, он будет полностью зависеть (на уровне приложений) от приложения, прослушивающего порт 80. (20 ноября ' 18 в 11:20)

@martineau Резервирование DHCP - действительно лучшее решение, потому что вам не нужно изменять какие-либо настройки на компьютере (просто убедитесь, что DHCP включен), и вам не нужно беспокоиться о том, что настройки компьютера не соответствуют маршрутизатор, потому что он сообщает маршрутизатору, «когда этот компьютер подключается и запрашивает IP-адрес, назначьте ему именно этот». (1 декабря '18 в 19:30)

@wjandrea: Действительно, это было бы лучшим решением, но опять же мой относительно недорогой домашний маршрутизатор не поддерживает его. В таких ситуациях (как это статья lifehacker Я обнаружил состояния):« Если по какой-то причине вы не можете использовать резервирование DHCP, вы можете вместо этого установить статический IP-адрес на каждом из ваших компьютеров, но это наш предпочтительный метод ". (1 декабря '18 в 21:01)

Дополнить ответ

Server-Help.Ru - 2019. The website content is licensed CC BY NC SA 4.0. <|> Политика Конфиденциальности