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

From DD-WRT Wiki

Revision as of 05:33, 24 December 2019 by Atatob (Talk | contribs)
(diff) ←Older revision | Current revision (diff) | Newer revision→ (diff)
Jump to: navigation, search


Contents

[edit] Введение

Для устранения проблем с переадресацией портов см. статью Устранение неполадок переадресации портов.

Интернет работает, используя два основных адресных блока: IP-адрес и порт. Когда компьютер общается по Интернету - например, пытается загрузить сайт www.dd-wrt.com - он начинает с запроса IP-адреса компьютера-сервера, на котором расположен сайт www.dd-wrt.com. Но чтобы получить веб-страницу или файлы недостаточно знать только IP-адрес dd-wrt.com - это всё равно, что не указать номер квартиры при отправке письма по обычной почте. В дополнении к IP-адресу нужно указать порт 80 - стандартный порт веб-страницы. Сервер вернёт ответ обратно на IP-адрес компьютера через какой-то порт, который компьютер открыл для получения этих данных. Используя порты, компьютер может отслеживать, какой поток данных какой программе предназначен.

Например, при запросе веб-страницы с некоторым текстом и изображением браузер может запросить, чтобы текст страницы был отправлен обратно к нему через порт 10345, а изображение - порт 10548. Он также может получать мгновенные сообщения на другой порт и электронную почту на третий. Порты здесь не имеют значения, потому что компьютер просто создает их на лету. Что имеет значение, так это порты сервера. Веб-сервер не объявляет, что ожидает запросов на получение веб-страниц на 80-м порту, это просто заранее известно. Это стандарт. Фактически все порты с 1 по 1024 отведены для такой стандартизации.

В Интернете существует два типа IP-адресов: публичные (внешние, англ. public IP address) и частные (приватные, внутренние, англ. private IP address). Публичные IP-адреса - это адреса, доступные в Интернете. Они составляют большую часть всех IP-адресов. Адреса, начинающиеся с 10.x.y.z или 192.168.x.y (где x, y и z могут быть любыми числами от 0 до 255) и диапазон адресов от 172.16.0.0 до 172.31.255.255, являются строго частными адресами и не могут существовать в Интернете. Кроме того, 127.x.y.z является внутренним обратным адресом компьютера. При отправке запросов на адрес 127.x.y.z, компьютер обращается к самому себе. В большинстве случаев используется адрес 127.0.0.1, но это не обязательно должно быть именно он.

Возможно только 232 IP-адресов, но во всём мире существует более 232 сетевых устройств (компьютеров, принтеров, сканеров и т.д.), которые хотели бы иметь доступ в интернет и свой IP-адрес. Частные адреса и механизм преобразования сетевых адресов NAT предназначены для решения проблемы ограниченного числа (нехватки) IP-адресов. Новая версия интернет-протокола IPv6 предназначена для решения этой проблемы за счет увеличения количества адресов.

Преобразование сетевых адресов (англ. Network Address Translation, NAT, см. статью Википедии) работает так, что вся сеть устройств с частной адресацией выглядит как одно устройство в Интернете. Преобразование обычно выполняется внутри маршрутизатора, но также может работать на компьютере под управлением Linux, macOS или Windows, если у него более одного сетевого адаптера.

Когда компьютер, находящийся за устройством NAT (например, подключенный к маршрутизатору), выполняет запрос к адресу в Интернете, он отправляет свой пакет на устройство NAT так же, как если бы он собирался отправить его непосредственно в место назначения. Для компьютера устройство NAT выглядит как обычный маршрутизатор.

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

Пример:

Сервер www.dd-wrt.com ↔ Интернет ↔ Маршрутизатор (устройство NAT) ↔ Компьютер A
  207.234.129.65:80                Внешний адрес WAN: 64.125.x.y    Частный адрес: 192.168.1.100
                                   Частный адрес LAN: 192.168.1.1

1. Компьютер A пытается подключиться к www.dd-wrt.com, он отправляет пакет вроде:
     Кому=207.234.129.65:80,  От кого=192.168.1.100:16848,  Получить файл=Index.html

2. Маршрутизатор перехватывает этот пакет и в Интернет отправляет следующее:
     Кому=207.234.129.65:80,  От кого=64.125.15.256:15846
   и делает пометку:
     Всё, что получено на порт 15846, отправляется на адрес 192.168.1.100 на порт 16848.

3. Сервер www.dd-wrt.com отвечает:
     Кому=64.125.15.256:15846,  От кого=207.234.129.65:80,  <Содержимое файла Index.html>

4. Маршрутизатор видит, что информация адресована на порт 15846, поэтому отправляет:
     Кому=192.168.1.100:16848,  От кого=207.234.129.65:80,  <Содержимое файла Index.html>

Таким образом, ни сервер www.dd-wrt.com, ни компьютер А не знали, что они разговаривали друг с другом не напрямую.
(все порты, кроме 80, были представлены просто для иллюстрации,
адрес 64.125.15.256 является выдуманным и недействителен)

[edit] Переадресация портов

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

А о переадресации портов (ещё называют "проброс портов") обычно говорят, когда вы вручную задаете правило в маршрутизаторе для отправки всех данных, полученных на некоторый порт со стороны Интернета (разъем WAN), на порт и IP-адрес на стороне локальной сети (разъемы LAN или беспроводные антенны).

Настраивать переадресацию портов нужно, когда компьютер во внутренней сети за маршрутизатором открывает порт для получения подключений из Интернета. Например, если на компьютере запущен веб-сервер (порт 80), FTP-сервер (21), SSH-сервер (22) и т.д., которые вы хотели бы видеть в Интернете. Многие игры открывают порты, чтобы другие игроки подключались для совместной игры, и эти порты, возможно, нужно указать маршрутизатору для переадресации.

[edit] Настройка переадресации портов

Рекомендуется задать статические IP-адреса для любых компьютеров, на которые вы хотите перенаправлять порты. Это можно сделать с помощью резервирования DHCP на маршрутизаторе или путем ручной настройки IP-адреса в операционной системе компьютера. Обязательно выбирайте статические IP-адреса вне диапазона адресов, автоматически присваемого по DHCP. В DD-WRT по умолчанию этот диапазон включает адреса 192.168.1.100-192.168.1.149.

Для получения дополнительных инструкций и списка стандартных портов см. #Внешние ссылки.

[edit] Переадресация портов с использованием веб-интерфейса

Отчасти это сложно, пока вы не привыкнете к требуемой последовательности действий.

Например, если вам нужно 5 записей для переадресации 5 портов, нажмите кнопку "Add" («Добавить») 5 раз, чтобы добавить 5 пустых строк для заполнения. Когда они появятся, нажмите "Save" («Сохранить»).

Введите информацию в одну строку, нажмите "Save" («Сохранить»), введите в другую, нажмите "Save" и т.д.

Когда закончите, нажмите "Save" еще раз на всякий случай, затем нажмите кнопку "Apply settings" («Применить настройки»).

То же самое касается переадресации диапазона портов.

[edit] Предупреждение

Кажется, при включенной UPnP переадресации портов заданные выше записи статической переадресации игнорируются. Если они важны - отключите UPnP.

[edit] Переадресация диапазона портов

Переадресация портов для веб-сервера и торрент-клиента
Переадресация портов для веб-сервера и торрент-клиента

Переадресация диапазона портов (англ. Port Range Forwarding) - это наиболее распространенная форма переадресации портов, которая всегда перенаправляет порты на один и тот же компьютер (IP-адрес) сети.

  • Перейдите в веб-интерфейс маршрутизатора.
  • Нажмите на вкладку "NAT / QoS".
  • Нажмите на вложенную вкладку «Port Range Forward».
  • Введите любое название для правила переадресации в поле Application. Оно предназначено только для напоминания вам, зачем нужно правило и не имеет значения для маршрутизатора.
  • В поле Start введите начальный порт диапазона, который вы хотите переадресовать.
  • В поле End введите конечный порт диапазона, который вы хотите переадресовать. Если нужно просто перенаправить один порт, задайте в оба поля одинаковое значение.
  • В поле IP Address введите IP-адрес компьютера в локальной сети, на который должны приходить подключения из сети Интернет.
  • Установите флажок "Enable", чтобы включить переадресацию для этого диапазона портов.

Если компьютер, на который должны пересылаться данные, настроен на получение автоматического IP-адреса по прототколу DHCP, придётся периодически обновлять поле IP Address, чтобы задать текущий IP-адрес устройства в локальной сети.

На изображении справа можно увидеть, что подключение из интернета к IP-адресу маршрутизатора на порт 80 приведет к веб-серверу на компьютере с внутренним адресом 192.168.1.2, а подключение к любому порту между 6881 и 6889 - к клиенту BitTorrent с адресом 192.168.1.2.

[edit] Triggered Port Forwarding

Динамическое перенаправление портов для обмена файлами в IM-клиенте AIM
Динамическое перенаправление портов для обмена файлами в IM-клиенте AIM

Динамическое перенаправление портов (анлг. Dynamic или Triggered Port Forwarding, triggering) отличается от статической переадресации диапазона портов и автоматически открывает порты для каждого компьютера, который подключился к удаленному серверу в интернете через определенный заданный порт-триггер (Trigger Port). Преимущество динамического перенаправления в том, что оно работает полуавтоматически и не заботится о статических IP-адресах. Например, его можно использовать для переадресации портов, которые используются при обмене файлами программой обмена мгновенными сообщениями AOL Instant Messenger (AIM) для любого компьютера локальной сети, который подключается к серверам AIM, а не только для компьютера, адрес которого был жестко задан в настройках маршрутизатора.

  • Откройте веб-интерфейс DD-WRT.
  • Перейдите на вкладку "NAT/QoS" → "Port Triggering".
  • Введите любое название для правила переадресации в поле Application. Оно предназначено только для напоминания вам, зачем нужно правило и не имеет значения для маршрутизатора.
  • В поля Start и End группы Triggered Port Range введите начальный и конечный порты диапазона, при подключении к которому локального компьютера сработает перенаправление. Если нужно просто перенаправить один порт, задайте в оба поля одинаковое значение.
  • Из раскрывающегося списка Protocol выберите сетевой протокол перенаправляемого трафика.
  • В поля Start и End группы Forwarded Port Range введите начальный и конечный порты диапазона, которые будут открыты на маршрутизаторе со стороны глобальной сети. Если нужно просто перенаправить один порт, задайте в оба поля одинаковое значение.

На изображении справа можно увидеть, что когда компьютер в локальной сети подключается к любому удаленному IP-адресу глобальной сети WAN с портом назначения 5190, маршрутизатор откроет для него один из портов со стороны интерфейса WAN в диапазоне 4117-4443 и перенаправит данные на удаленный сервер через этот порт. Данные от удаленного сервера, полученные на порты 4117-4443 маршрутизатора, будут перенаправлены обратно на порт 5190 локального компьютера. Поскольку серверы AOL Instant Messenger прослушивают соединения на порту 5190, это означает, что как только локальный компьютер попытается подключиться к серверам AIM, на маршрутизаторе будут открыты порты, которые будут использоваться для передачи файлов между программой-клиентом и сервером. Полученные через них данные будут автоматически перенаправлены на локальный компьютер.

Ключевым моментом в динамическом перенаправлении портов является то, что у внутри сети должно быть приложение, которое отправит пакет на заданный порт-триггер маршрутизатора, получив который маршрутизатор откроет внешний порт. Динамическое перенаправление портов имеет два основных преимущества. Во-первых, два компьютера локальной сети могут в разное время использовать одни и те же порты на маршрутизаторе. Например, если вы используете AIM на одном компьютере утром, а другом - днем, это будет прекрасно работать. Однако нельзя использовать на обоих компьютерах одновременно. Маршрутизатор будет выполнять перенаправление только на последний компьютер, который отправил пакет через порт-триггер. Второе преимущество - это преимущество безопасности, заключающееся в минимизации времени открытия порта. DD-WRT будет держать порт открытым в течение 10 минут с тех пор, как через него перестанут ходить пакеты данных, поэтому у злоумышленников в глобальной сети будет ограниченное время, чтобы попытаться использовать эти открытые порты. По истечении этого времени порты закрываются автоматически.

Динамическое перенаправление портов уже давно и в значительной степени заменено на uPnP. В качестве примера, AIM, используемый в качестве примера выше, теперь поддерживает uPnP, поэтому нет необходимости делать что-либо из вышеперечисленного. Но т.к. некоторые приложения до сих пор не поддерживают uPnP, можно использовать динамическое перенаправление.


[edit] Переадресация портов с использованием UPnP

[edit] Автоматически

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

[edit] На стороне маршрутизатора
  • В веб-интерфейсе маршрутизатора откройте вкладку NAT/QoSUPnP.
  • Выберите Enable UPnP Service.
  • Выберите Clear port forwards at startup.
  • Нажмите Apply.
[edit] В Windows
  • В Windows XP откройте Панель управления → Установка и удаление программ.
  • В списке слева нажмите Добавить или удалить компоненты Windows.
  • Выберите Сетевые службы и нажмите кнопку Сведения.
  • Установите флажок рядом с Пользовательский интерфейс UPnP. Если доступно, также установите флажок Клиент обнаружения и управления шлюзами Интернета.
  • Нажмите OK, затем нажмите Далее. Запуститься установка компонентов.

ПРИМЕЧАНИЕ. Возможно, потребуется вставить компакт-диск, содержащий файлы для установки Windows.

Windows ME и выше включают в себя поддержку uPnP, и её можно установить похожим образом. В Windows 98 она может быть установлена ​​с компакт-диска Windows XP с помощью мастера настройки сети.

Кроме того, не ожидайте увидеть открытые с помощью UPnP порты в разделе NAT/QoS веб-интерфейса DD-WRT. Также убедитесь, что приложение, порты которого вы пытаетесь перенаправить, не заблокировано брандмауэром Windows!

[edit] Инструкция

В Сетевом окружении или Сетевых подключениях, в зависимости от версии Windows, вы должны увидеть значок "Интернет-шлюз" или "Подключение к Интернету". Если нет, перезагрузите маршрутизатор и компьютер.

Скорее всего, «Подключение к Интернету» показывает, что оно отключено, и если вы дважды нажмёте на него, ничего не произойдет. Однако, если вы нажмёте на него правой кнопкой мыши, то сможете получить доступ к диалоговому окну "Свойства". Оттуда нажмите на значок «Настройки». Не то, чтобы вы не могли добавлять диапазоны портов, но вы можете настроить сопоставление портов. По моему опыту, сопоставление портов через UPnP не было успешным. Я всегда устанавливаю как внутренний, так и внешний порт в одно и то же значение и делаю обычную переадресацию портов. Кажется, это работает лучше всего.

Одно замечание: не нужно вводить IP-адрес для ручной переадресации UPnP. Можно просто ввести имя компьютера Windows, и ваши порты будут перенаправлены на ваш компьютер независимо от его текущего IP-адреса. Другие операционные системы, поддерживающие UPnP, возможно, позволяют задать доменное имя каким-либо способом. Хотя, я не уверен.


[edit] Переадресация портов с использованием командной строки

Здесь я специально покажу сопоставление портов, но то же самое можно сделать для переадресации портов, если задать одинаковые внутренний и внешний порты.

iptables - это тема отдельной статьи, но вот команды, которые можно использовать:

iptables -t nat -I PREROUTING -p tcp --dport <EXTERNAL_PORT> -j DNAT --to <INTERNAL_IP>:<INTERNAL_PORT>
iptables -I FORWARD -p tcp -d <INTERNAL_IP> --dport <INTERNAL_PORT> -j ACCEPT [-s <EXTERNAL_IP>]

В указанных командах замените следующие шаблоны значениями:
<EXTERNAL_PORT> - внешний порт
<INTERNAL_PORT> - внутренний порт
<INTERNAL_IP> - внутренний IP-адрес
Параметр [-s <EXTERNAL_IP>] не является обязательным (не вводите квадратные скобки [ ], они просто обозначают то, что параметр не является обязательным). Этот параметр позволяет ограничить правило так, чтобы подключения принимались только от <EXTERNAL_IP>, который может быть именем сети, доменным именем компьютера, IP-адресом или диапазоном IP-адресов.

Пример: для сопоставления порта 81 с внутренним портом 80 на 192.168.1.2 введите команду:

iptables -t nat -I PREROUTING -p tcp --dport 81 -j DNAT --to 192.168.1.2:80
iptables -I FORWARD -p tcp -d 192.168.1.2 --dport 80 -j ACCEPT

Недостатком этого способа является то, что он не так очевиден, как другие, но вы можете использовать программу Firewall Builder, чтобы сделать это проще. Эти настройки также пропадут при перезагрузке маршрутизатора, если вы не разместите эти команды внутри автоматически запускаемого сценария.

[edit] Внешние ссылки

http://www.portforward.com