Apache Forwarding — проброска портов веб-сервера

Что такое Forwarding

Чтобы понимать, что такое Forwarding и для чего это нужно, вспомним как устроено подключение большинства домашних компьютеров. Обычно у большинства из нас дома установлен роутер, к которому подключён кабель Интернет-провайдера. От этого роутера наши домашние устройства — компьютеры, телефоны, планшеты, умные телевизоры и другие — подключаются к Интернету через Wi-Fi или кабель. То есть у нас дома функционирует локальная сеть, в которой у каждого из устройств есть свой локальный (серый) IP адрес.

Представим, что на одном из компьютеров вы установили и настроили веб-сервер Apache. И вы хотите, чтобы к этому веб-серверу можно было подключаться из Интернета. Самый простой способ это сделать — набрать в адресной строке внешний IP адрес.

Кстати, вот вы сидите за компьютером, который через роутер подключён к Интернету, у меня к вам вопрос, какой внешний IP адрес у компьютера? Вы можете зайти на один из многочисленных сервисов показа вашего IP адреса, но суть в том, что любой ответ будет неправильным. Дело в том, что у вашего компьютера, который подключён к Интернету через роутер, вообще нет внешнего IP! Этот внешний IP есть только у вашего роутера (и то не всегда — об этом в этой же статье, но позже).

Если вашему компьютеру нужно выйти в Интернет, то он по локальной сети обращается к роутеру, роутер для него делает запрос, и затем также по локальной сети отправляет полученный ответ. То есть роутер выходит в Интернет, а ваш компьютер — нет. У роутера есть внешний IP адрес, а у вашего компьютера — нет.

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

Вот именно эту проблему и решает Forwarding, который ещё называют «переадресацией» портов, «проброской портов», «перенаправлением портов».

Для чего нужна проброска портов. Что делает Forwarding

Перенаправление портов заключается в следующем: на роутере (или на другом сетевом устройстве) устанавливается правило, суть которого примерно в следующем

«трафик, пришедший на порт 80 отправить на IP адрес 192.168.1.30 на порт 80».

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

В результате получается, что можно сделать HTTP запрос к роутеру, указав его глобальный IP, роутер получит этот запрос и отправит его веб-серверу в локальной сети. Благодаря переадресации портов веб-сервер без внешнего IP оказывается доступным за пределами локальной сети.

Перенаправление портов для Apache

Как бы это не было странно, но именно в настройках Apache ничего для перенаправления портов делать не надо.

Настройка роутера требует добавления одной записи, в которой нужно указать локальный IP адрес, на который будет переадресовываться пришедший запрос. По умолчанию в роутерах используется DHCP — если коротко, благодаря этому протоколу любое подключившееся к роутеру устройство автоматически получает IP адрес. Это удобно — не нужно делать настройки. Но дело в том, что устройству выдаётся любой не занятый IP в локальной сети. Поэтому у компьютера с веб-сервером может меняться IP адрес при каждом переподключении, в результате, настроенная переадресация портов перестанет работать из-за смены IP веб-сервера.

То есть начать нужно с того, чтобы настроить статичный локальный IP адрес для компьютера. Это можно сделать двумя способами: 1) на компьютере с веб-сервером, 2) в роутере

Для изменения на компьютере, откройте Панель управления → Сеть и Интернет → Центр управления сетями и общим доступом → Изменение параметров адаптера:

Правой кнопкой мыши откройте контекстное меню интересующего вас подключения, найдите там пункт IP версии 4 (TCP/IPv4):

Нажмите Свойства и пропишите нужные параметры в зависимости от настроек вашей сети (Основной шлюз — это IP адрес вашего роутера):

Некоторые роутеры поддерживают выдачу статичных IP адресов определённым устройствам сети — они их запоминают на основе MAC-адреса устройства. У всех роутеров это настраивается чуть по-разному, но обычно нужно искать в настройках DHCP. Некоторые роутеры не поддерживают эту возможность.

Переадресация портов для Apache в роутере

Теперь, когда компьютеру с веб-сервером назначен постоянный локальный IP, нужно добавить правило перенаправления портов. В роутерах это может называться Forwarding, «Перенаправление портов», «Переадресация портов» и т. д. Иногда в роутерах имеются заготовленные настройки и можно выбрать из списка название службы, для которой вы хотите сделать переброску портов. Для Apache выберите службу HTTP:

В качестве портов назначения и перенаправления запроса укажите 80. На скриншоте видно, что можно установить не один порт, а диапазон портов. Если вы хотите настроить только один порт, то укажите одно и то же значение в качестве начала диапазона и конца диапазона.

В качестве Local (локальный IP, адрес, куда будет перенаправлен запрос) укажите IP веб-сервера. External (внешний IP) указывать не нужно.

Активируйте созданное правило перенаправления портов.

Теперь все запросы, пришедшие на 80 порт роутера, будут перенаправлены на указанный IP адрес и указанный порт. Аналогичные настройки можно сделать для любых служб — для FTP сервера, SSH и так далее. То есть к этим службам появиться доступ из внешней сети.

Делая такие настройки, всегда помните о безопасности. Теперь служба становится доступной из глобальной сети, и хакеры могут атаковать её.

Когда не нужен Forwarding

Если у вас кабель Интернет-провайдера напрямую подключается к компьютеру с веб-сервером, то вам не нужен форвардинг. При аренде VPS сервера также не нужен форвардинг, так как у таких серверов прямой (белый) IP адрес.

Если Интернет провайдер использует NAT

NAT — это технология, которая позволяет множеству устройств выходить в Интернет используя один и тот же IP адрес. Кстати, в вашей локальной сети, в которой имеется роутер, уже применяется NAT — именно благодаря этому все ваши устройства могут выходить в Глобальную сеть и не нужно каждому из них иметь внешний IP.

Как вы понимаете, это часто используемая технология. Возможно, вы много лет ею пользуетесь, даже не зная про неё. Она действительно приносит очень много пользы, но у неё есть недостаток — она позволяет делать подключения «в одну сторону». То есть если ваш компьютер инициализировал подключение к Интернету, то он отправит его роутеру, роутер сделает две вещи: 1) запомнит, что запрос пришёл с определённого устройства и 2) отправить этот запрос в Интернет. Когда придёт ответ, роутер всё ещё «помнит», что этот запрос был сделан для определённого устройства в локальной сети, и отправит ответ именно этому устройству. И так происходит каждый раз.

Но вот если на роутер придёт новый HTTP запрос из Глобальной сети (не ответ на запрос, а именно новый запрос), то роутер банально не знает, для кого в локальной сети он предназначен (если не настроена переадресация портов). Поэтому с этим поступившим запросом роутер ничего не делает. Мы уже рассмотрели эту проблему и даже нашли решение — переадресация портов. Но многие Интернет-провайдеры также используют NAT. И работа происходит по точно такому же принципу — ваши HTTP запросы уходят в Глобальную сеть и вы без проблем получаете HTTP ответы, но новые запросы из Интернета к вашему компьютеру не могут пройти через NAT.

И поэтому даже если вы на своём роутере правильно настроили форвардинг портов, может получиться так, что вы всё равно не сможете подключится к нему из Интернета. Выход из такой ситуации только один — аренда белого IP у Интернет-провайдера.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *