Как правильно пробросить порты на роутере. Как работает переадресация портов (Port Forwarding)

Чаще всего проброс трафика используется, если мы находимся в локальной сети и от внешнего мира отделены шлюзом. Для того, чтобы открыть доступ для локальных служб (ssh, web, ftp), нам необходимо пробросить порты. Поскольку в качестве шлюза мы будем использовать сервер на Linux, то осуществлять данные действия будем с помощью iptables.

Определимся с переменными, которые будут использоваться в статье:

$EXT_IP - внешний, реальный IP-адрес шлюза;
$INT_IP - внутренний IP-адрес шлюза, в локальной сети;
$LAN_IP - внутренний IP-адрес сервера, предоставляющего службы внешнему миру;
$SRV_PORT - порт службы. Для веб-сервера равен 80, для SMTP - 25 и т.д.;
eth0 - внешний интерфейс шлюза. Именно ему присвоен сетевой адрес $EXT_IP ;
eth1 - внутренний интерфейс шлюза, с адресом $INT_IP ;

Проброс портов

На шлюз приходит пакет, который мы должны перенаправить на нужный сервер в локальной сети перед принятием решения о маршрутизации, то есть - в цепочке PREROUTING таблицы nat.

Рассмотрим пример

iptables -I FORWARD 1 -i eth0 -o eth1 -d 192.168.0.22 -p tcp -m tcp --dport 80 -j ACCEPT

Пропустить пакет, который пришёл на внешний интерфейс, уходит с внутреннего интерфейса и предназначен веб-серверу (192.168.1.50:80) локальной сети.

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

Допустим, 192.168.1.31 - ip-адрес клиента внутри локальной сети.

  1. Пользователь вводит в адресную строку браузера адрес example.com;
  2. Сервер обращается к DNS и разрешает имя example.com в адрес 1.2.3.4;
  3. Маршрутизатор понимает, что это внешний адрес и отправляет пакет на шлюз;
  4. Шлюз, в соответствии с нашим правилом, подменяет в пакете адрес 1.2.3.4 на 192.168.1.50, после чего отправляет пакет серверу;
  5. Веб-сервер видит, что клиент находится в этой же локальной сети (обратный адрес пакета - 192.168.1.31) и пытается передать данные напрямую клиенту, в обход шлюза;
  6. Клиент игнорирует ответ, потому что он приходит не с 1.2.3.4, а с 192.168.1.50;
  7. Клиент и сервер ждут, но связи и обмена данными нет.

Есть два способа избежать данной ситуации.

Первый - разграничивать обращения к серверу изнутри и извне, для этого создать на локальном DNS-сервере А-запись для example.com указывающую на 192.168.1.50

Второй - с помощью того же iptables заменить обратный адрес пакета.
Правило должно быть добавлено после принятия решения о маршрутизации и перед непосредственной отсылкой пакета. То есть - в цепочке POSTROUTING таблицы nat .

Рассмотрим пример

iptables -t nat -A POSTROUTING --dst 192.168.1.50 -p tcp --dport 80 -j SNAT --to-source 192.168.1.1

Если пакет предназначен веб-серверу, то обратный адрес клиента заменяется на внутренний адрес шлюза.
Этим мы гарантируем, что ответный пакет пойдёт через шлюз.

Надо дополнительно отметить, что это правило важно только для внутренних клиентов. Ответ внешним клиентам пойдёт через шлюз в любом случае.

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

Исправляем это:

Рассмотрим пример

iptables -t nat -A OUTPUT --dst 1.2.3.4 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.50

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

rules.sh

#!/bin/bash

EXT_IP="xxx.xxx.xxx.xxx" # внешний, реальный IP-адрес шлюза;

INT_IP="xxx.xxx.xxx.xxx" # См. выше.

EXT_IF=eth0 # Внешний и внутренний интерфейсы.

INT_IF=eth1 # Для шлюза они вряд ли изменятся, поэтому можно прописать вручную.

LAN_IP=$1 # Локальный адрес сервера передаём скрипту первым параметром,

SRV_PORT=$2 # а тип сервера, в смысле какой порт (или набор портов) открывать - вторым

iptables -t nat -A PREROUTING --dst $EXT_IP -p tcp --dport $SRV_PORT -j DNAT --to-destination $LAN_IP

iptables -t nat -A POSTROUTING --dst $LAN_IP -p tcp --dport $SRV_PORT -j SNAT --to-source $INT_IP

iptables -t nat -A OUTPUT --dst $EXT_IP -p tcp --dport $SRV_PORT -j DNAT --to-destination $LAN_IP

iptables -I FORWARD 1 -i $EXT_IF -o $INT_IF -d $LAN_IP -p tcp -m tcp --dport $SRV_PORT -j ACCEPT

Теперь, чтобы обеспечить доступ извне к локальному FTP по адресу 192.168.1.52, достаточно набрать в консоли от имени суперпользователя:

./rules.sh 192.168.1.52 20,21

Перенаправление портов

Перенаправление портов нужно в том случае, если мы хотим «замаскировать» внутреннюю службу, обеспечив к ней доступ извне не по стандартному, а совсем по другому порту.

Трансляция порт-адреса (англ. Port address translation, PAT) - технология трансляции сетевого адреса в зависимости от TCP/UDP- порта получателя. Является частным случаем NAT. Также может использоваться термин DNAT (Destination NAT). Это говорит Википедия, а простыми словами проброс портов - открытие внешнего доступа к вашей внутренней сети из Интернета с помощью обозначения на роутере или маршрутизаторе точек их "соприкосновения".


Схема удалённого подключения к IP-камере через Интернет

Зачем это нужно?

Проброс портов даёт возможность получить настраиваемый доступ к вашей локальной сети из сети Интернет, что позволяет, например, находясь вдали от объекта наблюдения снимать данные с камер с помощью обычного веб-браузера, приложения наблюдения IVMS-4200 или мобильного приложения IVMS-4500.


Удалённое подключение к IP-камере через IVMS-4200


Удалённое подключение к IP-камере через IVMS-4500

Как реализовать?

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

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

Серые IP-адреса:

    10.0.0.0 - 10.255.255.255

    172.16.0.0 - 172.31.255.255

    192.168.0.0 - 192.168.255.255

Настройка роутера/маршрутизатора

Вы счастливый обладатель статического IP? Поздравляем! Для получения прямого доступа к камере нужно настроить роутер способом "проброса" на нём портов или "маршрутизации". Настройка роутера (NAT) выполняется по инструкции от производителя маршрутизатора. Для простоты предположим, что мы имеем дело с роутером (для маршрутизатора всё обстоит подобным образом). Как зайти в настройки роутера зависит от конкретной модели. Проще всего найти видеоинструкцию по запросу "проброска портов на "название и модель роутера" .

В общих чертах это выглядит следующим образом.

Заходите на внутренний IP роутера ("192.168.0.1", или "10.0.0.1", или любой другой, он указан в инструкции к роутеру), вводите логин и пароль (стандартный логин и пароль указан на нижней части роутера). Находите пункт "Настройка NAT/DNAT"/ "Port forwarding"/"Виртуальный сервер".




Примеры страниц настройки портов в веб-интерфейсах роутеров

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

Порты для доступа к камере:

    80 - веб-­интерфейс;

    554 - RTSP-порт для прямого получения потока с камеры;

    8000 - SDK­-порт, необходим для подключения к ПО IVMS и регистраторам;

    8200 - порт данных, сервисный порт. Определяется автоматически (порт №4 = порт №3 + 200).

В настройках камеры порты можно изменить на другие. Это может быть необходимо, если в одной локальной сети находится несколько устройств, требующих для себя отдельные порты. К примеру, если на первой камере порты 80, 554, 8000 и 8200, то на второй камере необходимо проставить порты 81, 555, 8001 и 8201. После проброса портов по своему внешнему IP-адресу можно зайти на устройство из Интернета в окне браузера. При изменении 8000 порта на другой, порт 8200 изменится автоматически (порт №4 = порт №3 + 200).

Пример: при изменении 8000 порта в камере на 8004, порт 8200 автоматически изменится на 8204.

Как использовать?

Если по какой-то причине вам понадобилось обратиться к конкретному порту из браузера (например, зайти на веб-интерфейс камеры), это можно сделать, введя в адресную строку нынешний адрес веб-интерфейса камеры по форме:

"IP адрес":"номер порта", например, 111.111.111.111:80.


Страница входа веб-интерфейса камеры при удалённом доступе

Некоторые программы для своей корректной работы требуют открыть определенные порты. К таким программам относятся, например, серверы и определенные онлайн-игры. Когда из Интернета на определенный порт придет запрос, маршрутизатор перенаправит его на указанный Вами компьютер. Если при прямом подключении компьютера к сети Интернет проблемы с доступом к порту может вызвать только Firewall/Брандмауэр, то при подключении через маршрутизатор (router), для корректной работы вышеупомянутых программ, потребуется настройка Перенаправления портов (Port Forwarding). В данной статье мы предоставим инструкцию по перенаправлению портов для большинства распространённых марок и моделей маршрутизаторов.



Аннотация

Port Fowarding

Port Forwarding - это технология, которая позволяет обращаться из Интернет к компьютеру во внутренней сети за маршрутизатором, использующим NAT (NAPT). Доступ осуществляется при помощи перенаправления трафика определенных портов с внешнего адреса маршрутизатора на адрес выбранного компьютера в локальной сети. Такое перенаправление нужно если Вы, к примеру, используете пиринговые сети, или хотите развернуть на локальном компьютере сервер с доступом из Интернет. Также перенаправление иногда требуется для многопользовательских игр.

Как узнать порт, на котором работает программа StrongDC++


Рисунок 3. Настройки соединения 2


Рисунок 4. Узнать IP адрес

Нас интересуют значения «TCP» и «UDP» в графе «Порт», это и есть TCP и UDP порты, которые нам необходимо перенаправить. Все остальные действия производились для предварительной настройки клиента для работы с сетью через маршрутизатор.

Веб-интерфейс маршрутизатора

Прежде, чем приступить к настройке перенаправления портов, требуется зайти в веб-интерфейс Вашего маршрутизатора. Для этого вам требуется знать ip адрес Вашего маршрутизатора. Есть два основных способа узнать его:



a. Зайдите в меню «Пуск», «Панель управления», «Сетевые подключения».
b. Нажмите на подключении правой кнопкой мыши и выберите пункт состояние.
c. В появившемся окне выберите вкладку «Поддержка» и нажмите кнопку «Подробности».
d. В следующем окне будут отображены параметры подключения. Нас интересует значение параметра «Шлюз по умолчанию», данное значение и является ip адресом маршрутизатора.

Термин «переадресация портов » относится к процессу передачи сетевого порта с одного компьютера на другой. Этот способ обычно применяется, когда получающая машина соединена посредством маршрутизатора. Существует это с целью дать возможность пользователям, находясь вне локальной сети, к которой они принадлежат, подсоединиться в сеть. Теперь любая машина имеет, по крайней мере, один IP-адрес, использующийся для идентификации конкретного компьютера или устройства.

Каждый IP-адрес разделен на множество портов. Порты предназначены для ‘общения’ машин друг с другом, например, компьютер А отправляет некоторые данные компьютеру В, и поэтому переброс порта также увеличит скорость передачи данных между двумя устройствами.

Устройство Маршрутизации

Теперь давайте взглянем на то, как машины подключены к интернету при помощи маршрутизатора. Маршрутизатор подключается к интернету, назовем его внешний IP. Тогда роутер будет иметь свой собственный внутренний IP-адрес (каждая машина/устройство будет иметь по крайней мере один IP, чтобы определить его самостоятельно). Тогда маршрутизатор назначит индивидуальный IP-адрес для каждого компьютера, к нему подключенному. Затем IP-адрес маршрутизатора будет выступать в качестве шлюза для всех машин, находящихся в сети. Если определенная машина в сети захочет послать данные на другую, то необходимо сначала будет пройти через шлюз до того, как маршрутизатор отправит данные получателю. Однако получатель не сможет определить, кто в сети посылает ему данные, так как интернет будет показывать только внешний IP-адрес. Кроме того, когда другая машина, находящаяся вне сети, передает информацию получателю внутри сети, то передача данных будет передаваться на внешний IP-адрес, а не напрямую получателю. Тогда роутер будет решать, какой компьютер должен получить переданные данные. К счастью, NAT (переадресование сетевых адресов) в маршрутизаторе заботится о большинстве перенаправлений, кроме тех программ, с которыми NAT не предназначен для работы. Это тот момент, когда порт следует на свое место. Описанный простой процесс — всего лишь способ для пользователей сообщить маршрутизатору, что машина, подключенная к локальной сети, является получателем и что данные должны быть направлены именно ей. Вам потребуется настроить правила переадресации портов для каждого из используемых, и кое-какие правила установить для определенного порта.


Одним из важных факторов является тот, что порт может быть использован в любой момент времени только с помощью программы. Например, когда компьютер А использует порт 6000, это значит, что этот порт идет на внутренний IP-адрес. Если вы настроили правило пересылки для компьютера А порт 6000, внешний IP-адрес также задействован. Это означает, что вы можете использовать только порт 6000 на одном компьютере в сети. Через порт 6000 на двух машинах одновременно нарушает правило программы, и ваши данные будут испорчены.

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

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

Интернет, маршрутизатор и NAT

Большинство домашних сетей, наподобие изображенной выше: у вас есть свои устройства, такие как смартфон, планшетный, компьютер, телевизор и т.д., подключенные напрямую или по беспроводной сети к маршрутизатору, который подключен к Интернету. Однако у вас есть только один IP-адрес для подключения, который является уникальным в Интернете, тогда как все эти устройства подключаются и используют только один адрес?

Вот где вступает в действие ваш маршрутизатор. Он позволяет устройствам в локальной сети связываться с устройствами в Интернете с помощью NAT (Network Address Translation). Так что же такое NAT? Мы не будем вдаваться в подробности, но в общем, это выглядит так – все IP-адреса в вашей локальной сети являются частными или защищенными адресами. Это означает, что они могут быть использованы только в частной сети. Пример частных адресов: 10.x.x.x, 192.x.x.x и т.д.

Каждое устройство в сети получает назначенный ему частный адрес маршрутизации через сервис под названием DHCP. Это сетевой протокол, который конфигурирует устройства в сети с адресами, так что они могут взаимодействовать друг с другом. С другой стороны маршрутизатор подключается к Интернету. В этом интерфейсе, маршрутизатор имеет IP-адрес, назначенный провайдером, который является уникальным.

Как вы можете видеть, IP-адрес здесь начинается по другому (99.108.xx). Теперь начинает работу NAT. Если компьютер в вашей локальной сети попытается отправить данные через Интернет, ничего не произойдет пока трафик не будет маршрутизироваться. Любой трафик с частного адреса в Интернет отбрасывается. Так вместо этого, компьютер посылает данные на маршрутизатор, который затем “переводит” эти данные и отправляет их через Интернет.

Чтобы объяснить это немного более понятно, приведем пример: компьютер внутри сети хочет подключиться к компьютеру в Интернете, то есть попасть на сайт Google.com из веб-браузера. Этот запрос передается в маршрутизатор, который является шлюзом по умолчанию.

Теперь маршрутизатор просто берет эти данные и изменяет адрес источника в локальной сети и заменяет его на IP для общественного маршрутизатора. При этом также делается запись в NAT таблице, что этот компьютер сделал запрос на определенный порт для этого интернет-ресурса. Когда внешний сервер отвечает, он будет посылать данные обратно к маршрутизатору. Маршрутизатор проверит NAT таблицу и посмотрит, какой компьютер инициировал эту связь. Затем он направляет эти данные в порт на локальном компьютере, который запрашивал данные.

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

Перенаправление портов

Так это все великолепно работает для просмотра веб-страниц, отправки электронной почты, и т.д., потому что в почтовых клиентов и веб-браузеров порты предопределены. Например, HTTP-трафик всегда идет через порт 80. Это регламентируется IANA и все должны следовать этому. SMTP, который используется для отправки электронной почты, использует порт 25 по умолчанию. Однако то, что происходит, когда кто-то пытается подключиться к маршрутизатору из Интернета на порт 80, например?

По умолчанию, если вы не настроили переадресации портов и ваш брандмауэр включен, что соединение просто будет прекращено. Если вы хотите запустить веб-сервер в локальной сети, вам придется пересылать трафик, поступающий в порт 80 на местной IP-адрес машины под управлением веб-сервера. Другой пример, если вы используете игровой сервер в локальной сети, и вы хотите, чтобы ваши друзья имели возможность присоединиться к вам в игре, вы можете принимать новые подключения на порт 55202. Это значит, что вы должны направить данные, поступающие в порт 55202 в маршрутизаторе к IP адресу игрового сервера в локальной сети. IP камера, например, может использовать порт как 5000 для входящих соединений.

Как вы можете видеть, переадресация портов, не так сложна. Вы даете устройству имя (Netcam, RDP, и т.д.), затем задаете начальные и конечные номера портов. Обычно они являются одинаковыми. Это означает, что данные, поступающие в порт 5000 из-за пределов сети будут направлены на порт 5000 на локальном компьютере внутри сети. После того как вы выбираете номера портов, введите в IP-адрес устройства, которое собирается ожидать данные по этому номеру порта.

Статьи по теме: