Записки IT специалиста
Технический блог специалистов ООО»Интерфейс»
- Главная
- Настраиваем проброс портов в Windows при помощи командной строки и Portproxy
Настраиваем проброс портов в Windows при помощи командной строки и Portproxy
Необходимость проброса портов весьма часто встающая перед системным администратором задача. Обычно для этой цели используют службы маршрутизации и удаленного доступа (RRAS), но в ряде случаев использование данного инструмента избыточно. В тоже время немногие знают о такой службе как Portproxy, которая управляется из командной строки при помощи команд Netsh. Тем не менее данная служба позволяет справиться с поставленной задачей проще, быстрее и удобнее, чем инструменты графического интерфейса.
Часто можно услышать совершенно неверное утверждение, что в части сетевых настроек операционные системы Windows значительно уступают своим конкурентам (Linux и BSD). Отчасти такие суждения опираются на опыт администрирования стандартных ролей полностью игнорируя возможности командной строки.
Начиная с Windows Server 2003 в состав системы был в введена команда Netsh, которая позволяет гибко управлять сетевыми настройками компьютера. Обзор всех возможностей этой утилиты займет не одну статью, поэтому мы остановимся на командах Netsh для интерфейса Portproxy, позволяющих непосредственно решить нашу задачу.
Данный набор команд позволяет перенаправлять приходящие пакеты с IPv4 и IPv6 портов на любые IPv4 и IPv6 порты компьютера назначения в любых комбинациях. Единственное ограничение — portproxy может работать только с протоколом TCP, но в большинстве случаев этого достаточно.
Для добавления перенаправления используется команда add v4tov4 (если требуется перенаправление с IPv4 в IPv6 используйте v4tov6 и т.д.), полный синтаксис будет такой:
- listenaddress — локальный адрес на котором принимаются соединения
- listenport — локальный порт на котором принимаются соединения
- connectaddress — удаленный или локальный адрес на который перенаправляются соединения
- connectport — удаленный или локальный порт на который перенаправляются соединения
Для изменения уже существующего правила используется команда set v4tov4, которая имеет идентичный синтаксис, listenaddress и listenport — являются обязательными параметрами. Из необязательных параметров можно указывать только тот, который нужно изменить.
Для удаления правил используйте delete v4tov6 с указанием входящих адреса и порта:
Для просмотра существующих правил введите:
Вместо all допустимо указывать v4tov4 или v6tov4 и т.п. для просмотра только соответствующих правил.
Для сброса всех существующих правил используйте:
Чтобы не быть голословными рассмотрим практический случай использования portproxy в одной довольно непростой ситуации.
У одного нашего клиента имеется две аффилированных (т.е. принадлежащих одному владельцу) организации, имеющие разный вид деятельности и между собой не взаимодействующие. Одна из них находится в городе и не испытывает проблем с внешними коммуникациями. Вторая в сельской местности где доступен только среднего качества интернет, а о выделенном IP-адресе не может быть и речи.
Поэтому, когда встал вопрос организации удаленного доступа к сети второй организации с административными и контрольными целями, то было принято решение использовать для этого ресурсы первой организации, при этом внутренние сети обоих компаний не должны видеть друг друга и вообще иметь какой-либо доступ к ресурсам другой организации.
Кроме того, выяснилось, что обе сети имеют одинаковый диапазон IP-адресов, что делало маршрутизацию между ними в принципе крайне затруднительной. По условиям задачи требовалось обеспечить доступ к RDP (порт 3389) сервера SRV-2-1 и SSH (порт 22) сервера SRV-2-2 второй организации, для этого выделялся сервер SRV-1-1 первой компании, при этом, как можно увидеть из схемы ниже, сервера обоих компаний также имеют одинаковые внутренние адреса.
Между серверами был поднят VPN-туннель, и они видят друг друга по адресам VPN-сети (10.8.0.0), а дальше на выручку приходит portproxy. Так как порты 3389 и 22 соответствующие нужным службам уже использовались для целей администрирования первой компании, то мы выбрали для служб второй компании внешние порты 3390 и 22222, которые были проброшены с внешнего интерфейса роутера первой компании на сервер SRV-1-1 штатным образом.
Теперь нам надо перенаправить все соединения на эти порты в сеть второй компании, но там нам доступен только SRV-2-1 по VPN-адресу, поэтому направим пакеты туда, для чего создадим два правила:
Первое правило отправит все пакеты пришедшие на порт 3390 с адресом 192.168.0.200 (внутренний адрес SRV-1-1) в VPN-туннель серверу SRV-2-1, а так как он уже является целевым для службы RDP, то сразу меняем порт назначения на 3389. Первая часть задачи выполнена.
Второе правило отправит к SRV-2-1 все пакеты с порта 22222 (SSH), теперь нам надо научить этот сервер как правильно доставить их адресату. Для этого добавим уже этому серверу следующее правило:
Согласно которому сервер SRV-2-1 в сети второй компании будет слушать порт 22222 на интерфейсе VPN-сети и передавать все полученные пакеты на порт 22 (SSH) сервера SRV-2-2.
Как видим мы весьма просто реализовали довольно сложную схему, так пакет к серверу SRV-2-2 проходит три промежуточных узла, но при этом мы не настраивали никакой маршрутизации и не устанавливали никакого дополнительного ПО и вообще обошлись минимальным вмешательством в инфраструктуру.
Дополнительные материалы
Помогла статья? Поддержи автора и новые статьи будут выходить чаще:
Или подпишись на наш Телеграм-канал:
Wi-CAT LLC
Wireless Comprehensive Advanced Technology. Build your network now.
Пробрасываем порты. Нюансы Port Forward .
В данной статье рассмотрим всё, что связано с Port Forward (проброс портов) – автоматически и вручную.
Часто, помимо обеспечения доступа в интернет пользователям, подключенным к маршрутизатору, возникают такие задачи как:
– прозрачный доступ к какому-либо устройству или сервису, находящемуся в локальной сети
– фильтрация входящих или исходящих соединений с целью ограничить посещение тех или иных ресурсов, работу сервисов, и другие несанкционированные активности.
Для этих целей в ПО Wive-NG предусмотрен блок настроек , именуемый Firewall (Сетевой Экран).
По сути, раздел веб-интерфейса Firewall (Сетевой Экран) — это не что иное, как GUI, позволяющий создавать правила iptables, не прибегая к консоли. Разумеется, последний вариант (консоль) позволяет осуществить более гибкую настройку политик разрешений и запретов, и если есть такая возможность, то лучше «подружиться» с iptables (тем более, что это штатное средство unix-систем, и понимание логики его работы будет применимо и к работе с другими unix-based устройствами). Однако, базовые пользовательские задачи вполне решаются посредством web.
1. Настройки проброса портов (Port Forwarding).
Иногда нам необходимо организовать удаленный доступ к устройству, находящемуся в локальной сети, по тому или иному протоколу. К примеру, доступ к web-интерфейсу IP телефона (по умолчанию, порт 80), или же работу с удаленным рабочим столом по протоколу RDP (по умолчанию порт в Windows 3389). Также, может возникнуть задача обеспечения функционирования сервиса, запущенного в локальной сети, который ведет прием и передачу данных по конкретному диапазону равнозначных портов (к примеру, SIP сервер, или же раздача контента посредством torrent клиента).
Но с точки зрения того, кто находится в глобальной сети, все эти устройства имеют один и тот же IP адрес (либо доменное имя). Именно тут на помощь приходит проброс портов (port forward).
Включение проброса портов (port forward)
Для включения сервиса необходимо обратиться к пунктам меню:
Сетевой экран (Firewall) → Сетевой экран (Firewall) → Настройка проброса портов (Port Forwarding), и включить сервис.
Настройка проброса портов через web интерфейс достаточно проста , и состоит из следующих шагов:
1. Выбор интерфейса, для которого дейстует правило. По умолчанию это WAN, но если Ваш оператор использует VPN, то следует указывать его.
2. Протокол. Возможные варианты: TCP (например , доступ к web), UDP (например, работа VoIP ). Также доступен вариант выбора обоих TCP и UDP . Данный вариант стоит использовать только в случае, если целевой сервис использует и TCP и UDP (например, torrent). Во всех остальных случаях (например, Вы точно не уверены нужно ли TCP или же UDP) рекомендуется ознакомиться с документацией, выяснить, какой протокол используется и указать нужный, дабы избежать бреши в безопасности и эксплуатации ее троянами.
3. Порты, на которые будет производиться обращение извне, для переадресации на нужное устройство / сервис, для которого создается правило. Т.е, по сути, то, за счёт чего маршрутизатор поймет, к чему именно в локальной сети Вы обращаетесь. Можно указать как один порт, так и диапазон.
4. IP адрес в локальной сети, соответствующий устройству, к которому Вы обращаетесь.
5. Порты, которые соответствует необходимому сервису на самом устройстве в локальной сети, к которому происходит обращение.
Важно: рекомендуется использовать одинаковые порты dst и src, т.к данная схема снижает нагрузку на CPU и гарантирует корректрую работу программного и аппаратного offload.
6. NAT loopback — т.е, будет ли работать доступ при обращении на глобальный адрес и src порт из локальной сети. Важно: корректная работа NAT loopback зависит от множества факторов, включая операционную систему, src/dst порты на клиенте и сервере, и т. д. Поэтому установленное положительное значение не является гарантией корректной работы данной службы.
7. Комментарий в свободнонй форме, позволяющий не держать в голове, какое правило и зачем Вы создавали.
8. Действие, а именно — что вы хотите сделать с правилом: добавить (новое) либо удалить (уже существующее).
Важно: После завершения работы с правилами (добавление , удаление) необходимо нажать Применить / Apply, в противном случае все добавленные правила не будут сохранены. Добавление правила (нажатие Добавить / Add) в ходе редактирования таблицы port forwarding само по себе не является мгновенной записью созданного правила в конфигурацию роутера, а лишь предварительно сохраняет его на странице.
Настройка проброса портов (Port forward) на роутере
Например, правило вида:
Interface (Интерфейс) = WAN,
Protocol (Протокол) = TCP,
Src Ports (Порт ист.) = 8888,
Dst IP (IP назначения) = 192.168.1.124,
Dst Ports (Порт назн.) = 80,
Comment (Комментарий) = ‘IP Phone’
будет означать, что при обращении по адресу http://Ваш_IP_адрес:8888 либо http://Ваш_Домен:8888 весь TCP трафик будет перенаправляться на устройство, имеющее IP адрес 192.168.1.124 в Вашей локальной сети, а именно — на 80 порт.
TCP&UDP / 3389 / 192.168.1.150 / 3389 / ‘RDP’
гласит о том, что в Вашей сети есть ПК, живущий на IP адресе 192.168.1.150, к удаленному рабочему столу на котором Вы подключитесь, сказав “http://Ваш_Домен:3389” (т.к в примере выбран интерфейс VPN, то судя по всему, указать статический IP просто невозможно — для решения этой проблемы можно воспользоваться аккаунтом на одном из DynDNS сервисов (такая возможность также доступна штатно в ПО Wive-NG).
Настройка Dynamic DNS
Важно: необходимо удостовериться в следующих моментах:
-указываемый Вами порт назначения (dst) действительно настроен на целевом устройстве для необходимого сервиса.
-доступ по указанному порту доступен с WAN на устройстве (если настраиваемый роутер является шлюзом для целевого устройства), и в целом доступ извне не блокируется локальным firewall.
Например, в настройках IP телефона из примера необходимо проверить две вещи: порт доступа к web / http = 80 , доступ к web / http разрешен для wan интерфейса всем, либо как минимум конкретному хосту роутера.
Важно: правило не будет работать, если IP адрес целевого устройства в локальной сети изменится. Для исключения такой возможности, есть два варианта:
1. Настройка статического адреса сетевого интерфейса на целевом устройстве. Т.е, отказ от получения IP адреса от DHCP сервера роутера .
2. Закрепление IP адреса, выдаваемого DHCP сервером роутера, за MAC адресом конкретного устройства. Осуществить это можно , зайдя в раздел меню Сервисы → Сервер DHCP и создав новую пару MAC — IP с соответствующим комментарием. Если в текущий момент времени устройство имеет активную аренду IP адреса от DHCP сервера роутера, то его текущий выданный IP , а также MAC можно будет увидеть на этой же странице в соответствующем списке.
Настройка статической пары MAC-IP на DHCP сервере роутера
Если же Вам необходимо пробросить диапазон портов, необходимо учесть следующее:
1. Стоит по возможности избегать проброса с разными портами src/dst, т.к при использовании комплексных протоколов обслуживаемых ALG (FTP/RTSP/SIP/PPTP/L2TP etc) т.к., могут возникать разночтения.
2. Ширина диапазонов src и dst портов должна совпадать.
3. Порты должны быть равнозначны. Т.е, работа сервиса не должна зависеть от конкретного выбранного порта из диапазона. Такими случаями, например, являются: data порты FTP сервера, порты для передачи голоса SIP сервера, порты раздачи torrent, и т.д.
4. Если необходимо настроить NETMAP, т.е проброс 1:1 (фиксированные пары src и dst портов диапазона), то необходимо каждую пару создавать отдельным правилом. В общем случае при указании диапазона соединение осуществляется на первый доступный порт для которого в conntrack отсутствует запись.
Уже созданные правила проброса портов можно проверить в консоли в Chain FORWARD, скомандовав iptables -L -v -n -t nat . Необходимо помнить, что для получения корректных данных счетчиков (например, в диагностических целях), весь возможный offload должен быть отключен, иначе большая часть трафика в счетчик не попадет. Разумеется, если такой цели не стоит, offload использовать можно и нужно.
2. Пара слов про UPNP
На сегодняшний день многие приложения, включая torrent-клиенты, умеют UPNP IGD (Universal Plug and Play Internet Gateway Device), что позволяет не пробрасывать порты вручную для этих приложений, а воспользоваться автоматичесим пробросом. OS Wive-NG также поддерживает эту возможность. Основным условием является включение UPNP как на роутере, так и в настройках клиента.
Включить UPNP можно в блоке настроек Сервисы → Разное → Сервис
Включение UPNP на роутере
3. Пара слов про настройки ALG (Шлюз прикладного уровня)
ALG (Application Layer Gateway, Шлюз прикладного уровня) анализирует проходящий трафик, распрозает конкретные протоколы и осуществляет ретрансляцию на стандартный порт, соответствующий протоколу. Это позволяет нескольким клиентским устройствам, находящимся за NAT (т.е, в локальной сети маршрутизатора) одновременно и беспрепятственно вести обмен трафиком ряда прикладных протоколов с внешними хостами без настройки проброса портов. В linux данная опция называется Conntrack NAT Helpers.
Включение ALG на роутере
В Wive-NG ручная настройка ALG не требуется — достаточно выбрать интересующий протокол из списка.
4. Пара слов про DMZ (Демилитаризованная зона)
DMZ позволяет выделить опредленный хост в локальной сети в сегмент, общедоступный с WAN по всем портам, открытым на этом хосте (будь то локальный сервер или другое устройство). В этом случае, все соединения, инициированные из WAN будут попадать в DMZ, и ровно на те порты , которые были указаны в качестве портов назначения в соединении. Доступ к остальным устройствам локальной сети из WAN, включая сам маршрутизатор, будет при этом закрыт.
Настройка DMZ на роутере
Пример: при указании в качестве DMZ адреса 192.168.1.124 , все соединения на глобальный адрес маршрутизатора будут перенаправлены на соответствующие порты устройства 192.168.1.124. К примеру, попытка подключиться к web-интерфейсу через браузер с указанием в адресной строке http://my_ip:80 , будет интерпретировано маршрутизатором как обращение к машине 192.168.1.124 на 80 порт. Будет ли установлено такое соединение, зависит исключительно от того, открыт или закрыт указанный порт на устройстве, расположенном на 192.168.1.124.
Важно: при включении DMZ NAT loopback соединения с LAN на маршрутизатор будут обрабатываться тем же образом, что и соединения с WAN. То есть, доступ к маршрутизатору будет утерян, тк все запросы будут перенаправлены на соответствующие порты по адресу, указанному в качестве DMZ.
Важно: чтобы избежать конфликта, не следует одновременно с DMZ настраивать правила firewall, содержащие в себе тот же адрес, что указан в качестве DMZ.
Особенности фильтрации трафика по IP / MAC / портам рассмотрим в следующей статье…..