В современной IT-инфраструктуре часто возникает задача обеспечить доступ к сетевому сервису, который по соображениям безопасности или в соответствии с конфигурацией по умолчанию принимает подключения только с локального хоста (loopback-интерфейс, 127.0.0.1). Типичным примером является MQTT-брокер Mosquitto, который после установки может быть настроен на прослушивание только локальных соединений. Это делает его недоступным для других устройств в локальной сети (LAN), таких как IoT-устройства, сенсоры или другие компьютеры.
Для решения этой проблемы без изменения конфигурации самого сервиса можно использовать механизм переадресации портов (port forwarding). В операционных системах Windows для этой цели предусмотрена мощная утилита командной строки netsh (Network Shell). Данная статья представляет собой техническое руководство по использованию netsh для создания правила переадресации трафика с порта на внешнем сетевом интерфейсе (доступном в LAN) на порт локального интерфейса. Мы рассмотрим конкретный пример проброса порта 1883 для Mosquitto, а также команды для проверки и удаления созданных правил.
Прежде чем приступить к настройке, необходимо понимать основные компоненты.
interface portproxy.netsh, который действует как прокси-сервер для TCP-соединений. Он прослушивает входящие соединения на указанном IP-адресе и порту, а затем перенаправляет их на другой IP-адрес и порт. Важно отметить, что это проксирование на уровне сеанса, а не полноценная NAT-маршрутизация.1883 только на адресе 127.0.0.1. Наша цель — сделать его доступным для других устройств в локальной сети по IP-адресу этой машины, например 192.168.1.70, на том же порту 1883.Предварительные требования:
netsh, изменяющие конфигурацию, требуют запуска командной строки (cmd.exe) или PowerShell от имени администратора. 
ipconfig в командной строке. В нашем примере мы будем использовать 192.168.1.7.
Для настройки переадресации используется команда netsh interface portproxy add v4tov4. Эта команда создает правило для проброса трафика IPv4 на IPv4.
Общий синтаксис команды:
netsh interface portproxy add v4tov4 listenport=[порт] listenaddress=[IP-адрес] connectport=[порт] connectaddress=[IP-адрес]
Расшифровка параметров:
listenaddress: IP-адрес, на котором система будет ожидать (прослушивать) входящие подключения. В нашем случае это IP-адрес компьютера в локальной сети.listenport: Порт, на котором система будет ожидать входящие подключения.connectaddress: IP-адрес, на который будут перенаправляться входящие подключения. В нашем случае это локальный адрес 127.0.0.1.connectport: Порт, на который будут перенаправляться входящие подключения. Это порт, на котором фактически работает целевой сервис.Откройте командную строку от имени администратора и выполните следующую команду:
netsh interface portproxy add v4tov4 listenaddress=192.168.1.70 listenport=1883 connectaddress=127.0.0.1 connectport=1883
Пояснение команды:
Эта команда инструктирует сетевой стек Windows: "Начать прослушивание TCP-трафика, поступающего на IP-адрес 192.168.1.70 на порт 1883. Как только такое соединение будет установлено, немедленно перенаправить его на адрес 127.0.0.1 и порт 1883, где его ожидает сервис Mosquitto".
После выполнения этой команды любой клиент в локальной сети сможет подключиться к вашему MQTT-брокеру, используя адрес 192.168.1.70:1883.
Дополнительное примечание: Убедитесь, что Брандмауэр Windows (или любой другой используемый файрвол) разрешает входящие подключения на listenport (в нашем примере — TCP-порт 1883). В противном случае правило netsh будет создано, но файрвол заблокирует трафик до того, как он будет перенаправлен.
Чтобы убедиться, что правило было успешно создано и является активным, а также для просмотра всех существующих правил переадресации, используйте следующую команду:
netsh interface portproxy show all
Эта команда выведет таблицу со всеми настроенными правилами проброса портов для IPv4 и IPv6. Вы должны увидеть строку, соответствующую только что созданному правилу, где будут указаны адрес/порт прослушивания и адрес/порт назначения.
Пример вывода:
Этот вывод подтверждает, что правило сконфигурировано корректно.
Если правило переадресации больше не требуется, его следует удалить, чтобы освободить порт и избежать потенциальных конфликтов в будущем. Правила, созданные с помощью netsh, сохраняются после перезагрузки системы, поэтому их удаление необходимо выполнять явно.
Для удаления конкретного правила используется команда netsh interface portproxy delete.
Синтаксис команды:
netsh interface portproxy delete v4tov4 listenport=[порт] listenaddress=[IP-адрес]
Важно: Для удаления правила необходимо указать те же listenaddress и listenport, которые использовались при его создании.
Пример удаления нашего правила:
netsh interface portproxy delete v4tov4 listenaddress=192.168.1.70 listenport=1883
После выполнения этой команды правило будет немедленно удалено из конфигурации системы. Вы можете повторно выполнить netsh interface portproxy show all, чтобы убедиться, что правило исчезло из списка.
Утилита netsh является штатным и чрезвычайно эффективным инструментом для решения задач сетевой конфигурации в ОС Windows, включая переадресацию портов. Использование контекста interface portproxy позволяет администраторам и разработчикам гибко управлять доступом к сервисам, работающим на локальном хосте. Этот метод особенно полезен для предоставления доступа к приложениям в среде разработки (веб-серверы, базы данных), организации доступа к игровым серверам или, как в рассмотренном примере, для интеграции IoT-устройств с MQTT-брокером.
Поддержать проект и присоединиться к общению в нашем закрытом сообществе вы можете на Boosty.
Понравилась статья Настройка перенаправления портов с LAN IP (192.168.xx.xx) на локальный IP (127.0.0.1) с использованием порта 1883 для брокера Mosquitto MQTT в Windows? Не забудь поделиться с друзьями в соц. сетях.
А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.
Спасибо за внимание!
Технологии начинаются с простого!
Фотографии к статье
Читайте также
Мы в соц сетях
Комментарии