Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам > OpenWRT/LEDE

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.08.2013, 18:00   #1
BeZoom
Junior Member
 
Регистрация: 25.08.2013
Сообщений: 15
Вес репутации: 0
BeZoom is an unknown quantity at this point
По умолчанию Подключение локального TCP порта к внешнему TCP серверу

Здравствуйте, подскажите как реализовать следующую схему.


Имеем mr3020 с OpenWrt. К нему подключена Arduino по USB (/dev/ttyUSB0). С помощью ser2net к порту Arduino можно обращаться через TCP соединение на локальном порту 9999.

Задача – сделать так, чтобы OpenWrt устанавливал соединение к удаленному TCP серверу. Этот сервер выполняет роль управленческого центра и таким образом может управлять Arduino посылая те или иные команды через TCP.

Тут принципиально важно именно, чтобы инициатива соединения исходила от OpenWrt устройства, т.к. в боевых условиях у устройства может не быть белого IP и с сервера мы к нему не достучимся.

Т.е. у нас есть один локальный TCP сокет на 9999 порту и один на удаленном сервере. Их надо как-то связать...


BeZoom вне форума   Ответить с цитированием
Старый 25.08.2013, 22:50   #2
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию

Если на Openwrt ser2net сервер то на удаленном компе должен стоять ser2net клиент
Admin вне форума   Ответить с цитированием
Старый 25.08.2013, 23:03   #3
BeZoom
Junior Member
 
Регистрация: 25.08.2013
Сообщений: 15
Вес репутации: 0
BeZoom is an unknown quantity at this point
По умолчанию

@Admin на удаленном сервере конечно поднят TCP сервер, который принимает соединения на 10000 порту.

Но это не ser2net (тут нет цели связать 2 физических serial порта), это другой TCP сервер, не думаю что важно какой, просто главное, что 10000 порт принимает TCP соединения.
BeZoom вне форума   Ответить с цитированием
Старый 25.08.2013, 23:34   #4
BeZoom
Junior Member
 
Регистрация: 25.08.2013
Сообщений: 15
Вес репутации: 0
BeZoom is an unknown quantity at this point
По умолчанию

Я нашел решение, не думаю, что оно идеально, поэтому подскажите, пожалуйста аналоги.

Возможно ваши решения будут работать стабильнее. Надо учитывать, что TCP соединение может рваться (пока это вообще не учитывается), устройство с OpenWrt должно само восстанавливать соединение, как только появляется сеть.

Запускаем на OpenWrt устройстве.

Код:
nc 192.168.0.102 10000 | nc 0.0.0.0 9999
Альтернатива с использованием socat (надо тестить, что стабильнее работает...)
Код:
socat - TCP:192.168.0.102:10000 | socat - TCP:0.0.0.0:9999
Это позволяет OpenWrt устройству подключиться к удаленному серверу, а на сервере, запущена программа, которая как раз подняла на 10000 порту TCP сервер и может отправлять команды на OpenWrt устройства, которые к этому порту подключились (и принимать с них данные — поправка, этого команда не умеет). Переданные команды приходят в Arduino, которая кодключена к OpenWrt устройству.

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

Последний раз редактировалось BeZoom; 26.08.2013 в 03:22.
BeZoom вне форума   Ответить с цитированием
Старый 26.08.2013, 21:49   #5
UA6EM
Member
 
Регистрация: 11.07.2013
Сообщений: 91
Вес репутации: 0
UA6EM has a brilliant futureUA6EM has a brilliant futureUA6EM has a brilliant futureUA6EM has a brilliant futureUA6EM has a brilliant futureUA6EM has a brilliant futureUA6EM has a brilliant futureUA6EM has a brilliant futureUA6EM has a brilliant futureUA6EM has a brilliant futureUA6EM has a brilliant future
По умолчанию

Да не парьтесь, если в точке управления есть белый IP ставим PPTP сервер, на удалённой точке поднимаем PPTP клиент, теперь ваше устройство доступно по VPN сети напрямую по адресу порта, к примеру если VPN сеть 172 и на клиенте адрес 172.19.19.5 то по этому адресу по порту 10000 и запрашиваете, у меня целая сеть так сделана

PS количество vpn клиентов обслуживающее OpenWRT мне не известно, пару точно держит, за NAT работает (у меня даже за двойным NAT), надо почитать документацию, авто восстановление соединения как само собой разумеющееся

Последний раз редактировалось UA6EM; 26.08.2013 в 21:55.
UA6EM вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 21:57. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика