Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

Как достучаться до esp через глобальную сеть ?

Тема в разделе "Общие вопросы по esp8266", создана пользователем Ivanov, 21 июн 2016.

  1. Ivanov

    Ivanov Новичок

    Сообщения:
    6
    Симпатии:
    0
    Здравствуйте, возник вопрос. Как можно достучаться до сервера на esp.
    В режиме клиента отправляют запрос на сервер (глобальный. www.my-server.com) данные обрабатываются вносятся в базу( которую esp8266 периодически считывает). При клике на кнопку сайта также вношу изменения в эту базу например ( GPIO1 - 1/0) вкл/выкл - диода.
    Это все работает, но есть подозрения что управление esp-хой через интернет можно сделать избежав постоянного опроса БД.
    Как можно реализовать это?
    Подключал esp к роутеру , на esp локальный сервер поднял, все работает.
    Как до esp сервера достучаться из вне ( с веб сайта ) .
    Спасибо
     
  2. Petrynchyn

    Petrynchyn Новичок

    Сообщения:
    12
    Симпатии:
    0
    1. Настроить DDNS на роутере или купить внешний IP у провайдера.
    2. Настроить переброс нужных портов на роутере из внешнего IP на внутренний IP ESP.
     
  3. Ivanov

    Ivanov Новичок

    Сообщения:
    6
    Симпатии:
    0
    Как я понимаю при такой настройке весь трафик на определенный порт будет отсылаться на esp?
    Можно ли при esp8266 ( клиенте ) на него отправлять данные get запросом с сайта?
    Просто при отправке на сервер get запроса на esp приходит подтверждение в ответ с сервера.
    Сервер как-то додалбливается до esp клиента.
    Я и думаю , есть ли возможность отправки какого-нибудь файла с сайта на esp по нажатию кнопки.
     
  4. Petrynchyn

    Petrynchyn Новичок

    Сообщения:
    12
    Симпатии:
    0
    Да

    Можно реализовать нечто подобное WebSockets, для этого сервер сайта должен быть еще и сервером WebSockets -> ESP клиент подсоединяется по WebSockets к серверу WebSockets (держит с ним постоянное соединение) -> Web страница по WebSockets соединяется с сервером и передает команду (такстом) -> команда моментально передается на ESP -> если нужно ESP отвечает

    По WebSockets можно и такое реализовать
     
  5. Shyster

    Shyster Новичок

    Сообщения:
    81
    Симпатии:
    4
    Вы решили MQTT изобрести?
     
  6. Petrynchyn

    Petrynchyn Новичок

    Сообщения:
    12
    Симпатии:
    0
    Я не знаю есть ли реализация для ESP клиента MQTT с поддержкой WebSockets
     
  7. Ivanov

    Ivanov Новичок

    Сообщения:
    6
    Симпатии:
    0
    С сайта (сервера) на esp ( клиент ) можно отправлять запросы по этому протоколу? Как сделать это ?
     
  8. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.506
    Симпатии:
    176
    DDNS стал платным для большинства роутеров.
    Если на веб сайте есть php, то узнать ваш IP адрес, с которого работает ESP, позволяет переменная $_SERVER['REMOTE_ADDR']
    пример простого использования на сайте :
    PHP:
    1. <?php
    2.     echo $_SERVER['REMOTE_ADDR'];
    3. ?>
    (ESP должна периодично обращаться к сайту, сохраняя IP адрес в файл.)
    А дальше настроив
    сможете, зная свой IP адрес, управлять ESP с веб сайта.
     
    Последнее редактирование: 21 июн 2016
  9. Ivanov

    Ivanov Новичок

    Сообщения:
    6
    Симпатии:
    0
    Можете привести пример команды обращеия к esp с сервера
    С клиента знаю как отправлять
    Get /my-php.ph?i=1 HTTP/1.1
    Host: my-site.com
    Connection: close

    А как выглядит запрос с сервера на клиент ?
     
  10. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.506
    Симпатии:
    176
    На ESP запускаете свой веб сервер и подключаетесь к нему как обычно. (вместо my-site.com ваш IP адрес ESP)
     
  11. Atom

    Atom Читатель

    Сообщения:
    108
    Симпатии:
    7
    Все зависит от вашего желания быть открытым чуваком и дать возможность незнакомым друзьям видеть ваши данные.
    У рутерa обычно есть поддержка DDNS, как вам уже писали, настраивается она на доступ к рутеру извне. Далее на рутере делаете NAT-Port - то есть связываете внешний(WAN) порт рутера с определенным адресом и портом в локальной (LAN) сети рутера. Получаетсыа, что при обращении к выделенному DDNS внеснему адресу и указанному порту, рутер посредством NAT, будет пересылать это все на узел в своей и указанный порт.

    Если у вас имеется домашний сервер, то можно на нем организовать аналог DDNS (больше инфы на сайте no-ip.org), затем настроить маскарадинг и далее тоже самое.

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


    Не всегда MQTT является панацеей. Например есть домашний сервер (а ля брокер)[извияюсь за мой французкий]. Обязан ли мусье устанавливать mosquitto, если у него на этом домашнем сервере и так крутится какой-то Апач для других домашних сервисов и проще сделать завязку на него? Тут все дело вкусов, возможностей и предпочтений. И уже в последнюю очередь желаний.
     
  12. Ivanov

    Ivanov Новичок

    Сообщения:
    6
    Симпатии:
    0
    А вместо пути файла что? -----> (Get /my-php.php )
     
  13. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.506
    Симпатии:
    176
    Посмотрите примеры BasicHttpClient,AdvancedWebServer.
     
  14. Игорь Голов

    Игорь Голов Новичок

    Сообщения:
    33
    Симпатии:
    4
    Зачем изобретать велосипед и стрелять из пушки по воробьям?
    Что касается всего остального - нужен внешний IP - адрес. У большинства провайдеров такая услуга есть.
     
  15. Ivanov

    Ivanov Новичок

    Сообщения:
    6
    Симпатии:
    0
    Имеется внешний хостинг в сети, можете поподробнее описать процесс установки на нем VPN и связь через роутер с узлами сети?
    Как я понимаю этот вариант исключает проброс портов?
    С пробросом портов получилось сделать, смущает безопасность всего этого дела.
     
  16. lsm

    lsm Разработчик Smart.js Команда форума

    Сообщения:
    147
    Симпатии:
    28
    Мы делаем так: ESP8266 создает постоянное secure websocket (WSS) соединение с сервером, сообщая свой уникальный ID устройства. А к серверу можно обращаться через WSS или обычный HTTPS, указывая в качестве адресата - ID устройства.

    Вот пример.
     
    Игорь Голов нравится это.
  17. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.506
    Симпатии:
    176
    Не переживайте за свою безопасность. То, что вы сделали переброс порта, практически ничего не поменяло.
    Ну попадет кто то с "интернета" на вашу ESP8266 и что. Комп вы не боитесь подключать напрямую к интернету, а в нем дыр дофига.
    Да и большинство роутеров "дырявые".
     
  18. lsm

    lsm Разработчик Smart.js Команда форума

    Сообщения:
    147
    Симпатии:
    28
    Не соглашусь, коллега :)
    Давать кому угодно управлять модулем - неправильно. Нужно использовать стандарты индустрии, в данном случае для шифрования - TLS, а для аутентификации - либо TLS client certs, либо руками пароли делать, либо другие варианты
     
    Игорь Голов и Victor нравится это.
  19. Atom

    Atom Читатель

    Сообщения:
    108
    Симпатии:
    7
    Именно пробросом портов и занимается VPN - точно также, как и рутер, только программно.

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

    Даже TLS мало поможет - нужно чтоб соединение было авторизовано. А еще лучше, чтоб работа была с сессией(чтом каждый раз пору пользователь/пароль не пересылать).

    Ну а сделав вывод всего того же через https-сервер вы получаете в сухом остатке:
    1. Надежную аутентификацию с обкатанными элементами защиты и возможностью реализации хоть какого угодно типа проверок.
    2. Возможность организовать юзерфрендли тип данных или в виде API с любыми web-итерфейсами и протоколами(там правда вбор не особо: Soap и Rest).
    3. Логически защитить локальную сеть от глобального доступа, предотвратит возможные вторжения: https получает запрос извне и обрабатывает свои обращения через vpn-соединение, ничем не выдавая себя.

    PS: Пардон, по OpenVPN забыл. Я сам не особо мастер в настройке и выполнял ее первый раз (тем более уже года два назад). Обычно записываю все ходы, но в этот раз что то инструкции не нашел. Пользовался вроде вот этой инструкций Установки и настройка OpenVPN в Ubuntu Linux за 5 минут | Записки программиста

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

    PPS:
    нашел всетаки (раскрыть)

    Установка VPN на Ubuntu 12.04 сервере и клиенте.


    mkdir /etc/openvpn/easy-rsa/

    Скопируем шаблон для создания ключей:

    cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/ /etc/openvpn/easy-rsa/


    в этом каталоге ( /etc/openvpn/easy-rsa/) будут формироваться ключи. Если они будут созданы криво, то система не заработает.


    открываем файл vars и изменяем там переменные под наши реалии:

    export KEY_COUNTRY="US"

    export KEY_PROVINCE="NZ"

    export KEY_CITY="NewYourk"

    export KEY_ORG="<myorg>"

    export KEY_EMAIL="<admin@example.org>"

    export KEY_CN=something


    Важно! Значения переменных не должны повторяться! Значения в <> нужно заменить на свои.


    после этого очищаем конфигурацию

    source vars

    ,/clear-all

    теперь идем в папку ./keys и меняем в файле ./keys/index.txt.attr значение параметра

    unique_subject = no

    если этого не сделать, то при генерации клиентского ключа возникнет сообщение


    failed to update database

    TXT_DB error number 2


    , файл сертификата будет иметь размер 0 и не будет работать.


    Затем возвращаемся назад, в каталог /etc/openvpn/easy-rsa и продолжим генерировать ключи:


    ./build-dh

    ./pkitool --initca

    ./pkitool --server server

    ./pkitool client



    теперь в каталоге ./keys должны появиться файлы с именами ca.*, server.*, client.*. Их нужно скопирвать в папку /etc/openvpn. Так же туда нужно скопировать конфигурационный файл, но с другим именем:

    mv ./openssl-1.0.0.cnf openssl.cnf


    теперь для настройки сервера нужно распаковать его примерную конфигурацию :

    cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/cd /etc/openvpngunzip -d /etc/openvpn/server.conf.gz


    в файле конфигурации server.conf проверяем параметры

    ca ca.crtcert server.crtkey server.keydh dh1024.pem


    Такие файлы должны лежать в той же папке. для большей безопасности я добавил к ним еще и путь:

    ca /etc/openvpn/ca.crtcert /etc/openvpn/server.crtkey /etc/openvpn/server.key


    Кроме того желательно изменить адрес выделяемой подсети. По умолчанию это 10.8.0.0, я поменял на 192.168.30.0. При серии экспериментов я добился того, что этот адрес у клиента гдето капитально прописался и сервер пингуется всегда, даже при отсутствии физического соединения с сервером.


    стартуем конфигурацию:

    service openvpn start

    должно пойти сообщение, что демон нашел конфигурацию для server.


    Теперь проверим, все ли там в порядке:

    openvpn --config /etc/openvpn/server.conf

    должен сообщить, что ничего ошибочного не нашел. Если есть ошибки, то нужно их исправить.


    проверку того, что конфигурация работает нужно посмотреть в настройках сети:

    ifconfig


    должно вывести информацию о новом сетевом устройстве tun0.


    разрешаем на сервере форвардинг

    echo 1 > /proc/sys/net/ipv4/ip_forward

    и добавляем новый разрешенный маршрут

    iptables -t nat -A POSTROUTING -s 192.168.30.0/24 -o eth0 -j MASQUERADE

    Его даже лучше добавить в файл конфигурации /etc/init.d/rc.local.


    копируем файлы ca.crt, client.crt, client.key клиенту для использования в его конфигурации.


    ------- КЛИЕНТ -------

    также устаноавливаем пакет, распаковываем конфигурацию клиента:

    cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf.gz /etc/openvpn/cd /etc/openvpngunzip -d /etc/openvpn/client.conf.gz


    В эту же паку (/etc/openvpn) копируем наши ключи и сертификаты. Так же меняем значения в cilent.conf:


    ca /etc/openvpn/ca.crtcert /etc/openvpn/client.crtkey /etc/openvpn/client.key


    Запуск и проверка точно такие же, как и для сервера.
     
    Последнее редактирование: 29 июн 2016
  20. CodeNameHawk

    CodeNameHawk Moderator Команда форума

    Сообщения:
    1.506
    Симпатии:
    176
    С чем вы не согласны? Я же не писал, что "Давать кому угодно управлять модулем - правильно." Доступ к модулю из интернета это одно, а возможность им управлять без разрешения это другое.
     

Поделиться этой страницей