• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

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

Ivanov

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

Petrynchyn

New member
1. Настроить DDNS на роутере или купить внешний IP у провайдера.
2. Настроить переброс нужных портов на роутере из внешнего IP на внутренний IP ESP.
 

Ivanov

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

Petrynchyn

New member
Как я понимаю при такой настройке весь трафик на определенный порт будет отсылаться на esp?
Да

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

Я и думаю , есть ли возможность отправки какого-нибудь файла с сайта на esp по нажатию кнопки.
По WebSockets можно и такое реализовать
 

CodeNameHawk

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

Ivanov

New member
DDNS стал платным для большинства роутеров.
Если на веб сайте есть php, то узнать ваш IP адрес, с которого работает ESP, позволяет переменная $_SERVER['REMOTE_ADDR']
пример простого использования на сайте :
PHP:
<?php
    echo $_SERVER['REMOTE_ADDR'];
?>
(ESP должна периодично обращаться к сайту, сохраняя IP адрес в файл.)
А дальше настроив

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

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

CodeNameHawk

Moderator
Команда форума
На ESP запускаете свой веб сервер и подключаетесь к нему как обычно. (вместо my-site.com ваш IP адрес ESP)
 

Atom

Member
Здравствуйте, возник вопрос. Как можно достучаться до сервера на esp.
В режиме клиента отправляют запрос на сервер (глобальный. www.my-server.com) данные обрабатываются вносятся в базу( которую esp8266 периодически считывает). При клике на кнопку
Все зависит от вашего желания быть открытым чуваком и дать возможность незнакомым друзьям видеть ваши данные.
У рутерa обычно есть поддержка DDNS, как вам уже писали, настраивается она на доступ к рутеру извне. Далее на рутере делаете NAT-Port - то есть связываете внешний(WAN) порт рутера с определенным адресом и портом в локальной (LAN) сети рутера. Получаетсыа, что при обращении к выделенному DDNS внеснему адресу и указанному порту, рутер посредством NAT, будет пересылать это все на узел в своей и указанный порт.

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

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


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

Ivanov

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

lsm

Разработчик Smart.js
Команда форума
Имеется внешний хостинг в сети, можете поподробнее описать процесс установки на нем VPN и связь через роутер с узлами сети?
Как я понимаю этот вариант исключает проброс портов?
С пробросом портов получилось сделать, смущает безопасность всего этого дела.
Мы делаем так: ESP8266 создает постоянное secure websocket (WSS) соединение с сервером, сообщая свой уникальный ID устройства. А к серверу можно обращаться через WSS или обычный HTTPS, указывая в качестве адресата - ID устройства.

Вот пример.
 

CodeNameHawk

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

lsm

Разработчик Smart.js
Команда форума
Не переживайте за свою безопасность. То, что вы сделали переброс порта, практически ничего не поменяло.
Ну попадет кто то с "интернета" на вашу ESP8266 и что. Комп вы не боитесь подключать напрямую к интернету, а в нем дыр дофига.
Да и большинство роутеров "дырявые".
Не соглашусь, коллега :)
Давать кому угодно управлять модулем - неправильно. Нужно использовать стандарты индустрии, в данном случае для шифрования - TLS, а для аутентификации - либо TLS client certs, либо руками пароли делать, либо другие варианты
 

Atom

Member
Имеется внешний хостинг в сети, можете поподробнее описать процесс установки на нем VPN и связь через роутер с узлами сети?
Как я понимаю этот вариант исключает проброс портов?
С пробросом портов получилось сделать, смущает безопасность всего этого дела.
Именно пробросом портов и занимается 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


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

CodeNameHawk

Moderator
Команда форума
Не соглашусь, коллега
С чем вы не согласны? Я же не писал, что "Давать кому угодно управлять модулем - правильно." Доступ к модулю из интернета это одно, а возможность им управлять без разрешения это другое.
 
Сверху Снизу