6

Я должен отправить команду из Интернета на устройство в WLAN, которое прослушивает порт 9999.

Самому устройству назначается только локальный IP.

У меня также есть n (2-100+) количество устройств с той же программой (прослушивание порта 9999).

Я знаю локальные IP-адреса всех устройств и знаю, с какого IP-адреса отправлять команды.

Как я могу отправить команду из внешней сети (облачное / мобильное устройство) на определенный локальный IP-адрес через маршрутизатор шлюза?

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

6 ответов6

12

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

Допустим, у вас есть клиентские машины на частных адресах с 10.0.0.2 по 10.0.0.202. Введите сопоставления портов следующим образом:

[wireless router public IP]:50002 -> 10.0.0.2:9999
[wireless router public IP]:50003 -> 10.0.0.3:9999
…
[wireless router public IP]:50202 -> 10.0.0.202:9999

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

Большинство клиентских программ позволяет указывать порт либо путем кодирования его в URL-адресе, например http://example.com:50001/ , либо путем указания его в качестве аргумента командной строки, часто после параметра -p или -P . Проверьте страницу руководства для вашего инструмента.

5

У вас есть два варианта для выполнения вашей задачи

  1. Использование VPN-доступа к WiFi-маршрутизатору. Таким образом, внешнему устройству необходимо использовать некоторые доступные протоколы vpn (например, PPTP). Таким образом, устройство будет иметь маршрут к внутренней сети Wi-Fi, после чего вы сможете напрямую подключаться к каждому IP.
  2. Используя Socks - вам нужно найти wifi роутер с поддержкой socks-proxy.

Первый способ проще реализовать без изменения кода приложения. Для обоих вариантов вы можете использовать Wi-Fi маршрутизаторы на базе DD-WRT или Mikrotik . Для меня Mikrotik проще настроить как VPN-сервер. Вот больше информации о реализации Socks .

2

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

Если вы можете запускать OpenVPN на своих устройствах, я предлагаю вам создать VPN. Со всеми вашими устройствами и вашим облаком / мобильным телефоном также через VPN вы можете получать к ним доступ, как если бы они были физически в одной сети. Кроме того, все сообщения будут зашифрованы.

1

Это нужно что-то еще, чем маршрутизатор

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

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

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

Для этого он может использовать информацию о порте TCP, как это предлагается в других ответах, но это, очевидно, неприемлемо.

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

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

0

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

Маршрутизатор отправит внешние требования на указанное устройство и порт, а другие устройства не будут знать об этом трафике.

0

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

Редактировать, потому что я не могу отвечать на комментарии по какой-то глупой причине

Нет, вы не можете сопоставить один порт нескольким IP без балансировки нагрузки. Вам нужно будет установить разные порты на внешнем интерфейсе вашего маршрутизатора, чтобы сопоставить различные комбинации IP/ портов устройств в вашей внутренней сети.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .