Современные информационные технологии/Компьютерная инженерия

Мясищев А.А.

Хмельницкий национальный университет, Украина

Использование wifi роутеров для управления устройствами через Интернет

         В работах [1] и [2] рассматривалась возможность использования микроконтроллеров для создания web – серверов для удаленного управления устройствами. В первом случае рассматривалась совместная работа микроконтроллера ATmega128L и контроллера Ethernet enc28j60. Несмотря на возможность управления не менее тремя устройствами и снятия показаний с трех портов о состоянии устройств и температурного датчика по шине OneWire, размер web-странички не мог превышать максимального размера Ethernet пакета. Поэтому возникали проблемы о предоставлении необходимой информации через web – интерфейс по управляемым устройствам. Во втором случае рассмотрен вопрос о создании полнофункционального web – сервера, но на контроллере Ethernet w5100 c возможностью подключения к нему управляющих устройств, однако была отмечена ненадежность его работы (периодические зависания), а также недостаточная скорость работы сервера при считывании данных с sd карты памяти. Также в этих работах не рассматривался вопрос об ударенной работе с устройствами через Интернет. Решение представлено только для работы  в локальной сети предприятия с локальными ip – адресами.

         Здесь рассматривается возможность использования для этих целей одноплатных компьютеров, установленных в wifi роутерах, например, фирмы TP-LINK. Эти компьютеры имеют значительный объём оперативной памяти, Ethernet порт, wifi адаптер, возможность подключения через UART к микроконтроллерам, могут работать с версией операционной системы LinuxOpenWRT. По стоимости  использования их в качестве “Ethernet удлинителей” они выигрывают по сравнению с Ethernet и wifi адаптерами, которые предлагаются проектом Arduino[3]. Существенным недостатком одноплатных компьютеров  является незначительный объём  флеш памяти, которая используется для загрузки системы, хранения  файлов и данных. В этой работе рассматривается установка ОС OpenWRT на роутере с загрузкой с USB флеш памяти. Устройство должно работать как полнофункциональный web – сервер, имеющий  постоянное доменное имя  для работы в Интернете. Вопрос взаимодействия компьютера с микроконтроллером по порту UART для управления устройствами и снятий показаний с датчиков  будет рассмотрен в следующей работе. 

         Рассмотрим установку  прошивки Openwrt на внешнюю USB флеш память (флешку). В качестве  роутера (рис.1) будет использоваться TP-Link TL-MR3020[4]. В результате Openwrt должна будет загружаться не с внутренней памяти роутера, которая имеет размер всего 4Мбайта, а с флешки, что позволит ставить на нее неограниченное количество приложений и хранить большое количество данных. Рассмотрим установку на роутер прошивки Openwrt при условии,  что на нем была установлена оригинальная заводская прошивка.

Рис.1. Роутер TL-MR3020

         Открываем в браузере роутер по адресу http://192.168.0.254/. Авторизируемся с именем: admin, паролем: admin. Используя левую навигационную панель, нажимаем на System Tools. Если роутер был ранее настроен, необходимо сначала перейти  в - Factory Defaults и нажать на Restore. Далее переходим в - Firmware Upgrade. Выбираем для прошивки заранее загруженный файл - *.factory.bin в роутере. Нажимаем на кнопку Upgrade и ожидаем перезагрузки роутера.  Далее открываем в браузере роутер по адресу http://192.168.1.1 и заходим по логину  root. Для изменения пароля root необходимо зайти на роутер по команде telnet 192.168.1.1 и в открывшемся сеансе набрать команду

passwd root

         Далее по запросу поставить дважды новый пароль. Как только буден задан новый пароль, telnet консоль больше  доступна не будет, поэтому необходимо использовать SSH для соединения с роутером. Прошивка находится по адресу http://downloads.openwrt.org/attitude_adjustment/12.09-rc1/ar71xx/generic/. Имя прошивки - openwrt-ar71xx-generic-tl-mr3020-v1-squashfs-factory.bin

         Если на роутере уже установлена OpenWRT прошивка, то необходимо загрузить образ новой прошивки на роутер в папку /tmp например с помощью scp(Linux) под названием code.bin, после чего подключиться к роутеру с помощью консоли и выполнить команды:

cd /tmp

mtd -e firmware -r write code.bin firmware

Повторная прошивка находится по тому же адресу, но ее имя openwrt-ar71xx-generic-tl-mr3020-v1-squashfs-sysupgrade.bin

         Предполагается, что на роутер успешно установлена прошивка openWRT (в данном случае ATTITUDE ADJUSTMENT).

Накопитель на флеш памяти разбиваем на два раздела:

1-й - для системных файлов и пользовательских данных (~200МБайт)

2-й - файл подкачки (~64МБайт).

В работе рассматривается  использование 256-х Мбайтного флеш - накопителя. Разбивка накопителя выполнялась программой fdisk,  форматирование - mkswap и mkfs.ext4.

         Устанавливаем пакеты:

opkg update

opkg install kmod-usb-storage

opkg install kmod-fs-ext4

opkg install block-mount

opkg install fdisk

         Вставляем в USB флеш память  в роутер и создаем разделы:

fdisk /dev/sda

Выполняем следующие команды:

Command (m for help): d

Partition number (1-4): 1

Command (m for help): d

Partition number (1-4): 2

Command (m for help): d

Partition number (1-4): 3

Command (m for help): d

No partition is defined yet!

Далее создаем сначала второй раздел для Swap:

Command (m for help): n

Command action

e extended

p primary partition (1-4)

p

[B] Partition number (1-4): 2

First cylinder (xx-xxx, default xx): нажимаем клавишу Enter

Using default value xx

Last cylinder or +size or +sizeM or +sizeK (xx-xxx, default xxx): +64M   Enter

Создаем основной раздел, используем для него ~200Мбайт пространства на флешке:

Command (m for help): n

Command action

e extended

p primary partition (1-4)

p

Partition number (1-4): 1

First cylinder (xx-xxx, default xx):  Enter

Using default value xx

Last cylinder or +size or +sizeM or +sizeK (xx-xxx, default xxx): Enter

Второй раздел  должен быть Swap, поэтому меняем для него тип:

Command (m for help): t

Partition number (1-4): 2

Hex code (type L to list codes): 82

Changed system type of partition 1 to 82 (Linux swap / Solaris)

Command (m for help): a

Partition number (1-4): 1

Смотрим, что получилось:

Command (m for help): p

   Device Boot      Start         End           Blocks   Id  System

/dev/sda1   *      133120      511997      189439   83  Linux

/dev/sda2            2048         133119       65536   82  Linux swap / Solaris

Выходим и записываем изменения:

Command (m for help): w

         Далее необходимо отформатировать созданные разделы. Для этого переставляем флеш - накопитель на Linux машину. На openWRT это сделать не удастся, так как пока недостаточно памяти для установки пакета e2fsprogs на роутере. На Linux, зайдя под superuser, выполняем команды:

mkswap -f -L swap /dev/sda2

mkfs.ext4 -L over /dev/sda1

-L - присвоение метки разделу.

"swap" - это метка для /dev/sda2

"over" - это метка назначается разделу /dev/sda1

         Изменяем файл конфигурации для монтирования системы на внешний диск. Для этого файл /etc/config/fstab

переписываем в виде:

config global automount

        option from_fstab 1

        option anon_mount 1

config global autoswap

        option from_fstab 1

        option anon_swap 0

config mount

        option target   /

        option device   /dev/sda1

        option fstype   ext4

        option options  rw,sync

        option enabled  1

        option enabled_fsck 0

        ophion is_rootfs 1

config swap

        option device   /dev/sda2

        option enabled  1

         Переносим систему на флеш накопитель. С этой целью монтируем новый диск и копируем на него все необходимое:

mkdir /mnt/sda1

mount /dev/sda1 /mnt/sda1

mkdir /tmp/cproot

mount --bind / /tmp/cproot

tar -C /tmp/cproot -cvf - . | tar -C /mnt/sda1 -xvf -

sync ; umount /mnt/sda1

umount /tmp/cproot

Перезагружаемся:

reboot

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

По команде

df

для операционной системы  openWRT версии ATTITUDE ADJUSTMENT вывод должен быть примерно такой:

root@OpenWrt:~# df

Filesystem          1K-blocks  Used      Available  Use% Mounted on

rootfs                  187424        24374    153579    14%      /

/dev/root             2048            2048      0              100%     /rom

tmpfs                   14608          88          14520     1%         /tmp

tmpfs                    512             0            512         0%         /dev

/dev/sda1              187424       24374    153579   14          /

root@OpenWrt:~#

         Выполняем проверку, подключился ли файл своппинга (Swap):

root@OpenWrt:~# free

                     total           used         free         shared      buffers

Mem:            29212       27064       2148            0           2032

-/+ buffers:                    25032       4180

Swap:             65532       0             65532

root@OpenWrt:~#

         Видно, что операционная система загружается с флеш - накопителя. Далее создаем каталог /www/home,  где будут находиться документы web - сервера:

mkdir /www/home

и делаем изменения в файле /etc/uhttpd.

Вместо строк

        list listen_http        0.0.0.0:80   #  Порт, на котором работает web - сервер

        option home             /www       #  Домашний каталог с web - документами

вводим следующие

        list listen_http        0.0.0.0:8080

        option home             /www/home

Далее перегружаем web сервер:

/etc/init.d/uhttpd restart

После этого при обращении к серверу по адресу

http://192.168.1.10:8080

будет загружаться страничка, находящаяся на сервере в файле /www/home/index.html  или  /www/home/index.htm.

         Рассмотрим далее присвоение созданному серверу уникального доменного имени. Предположим, что web – сервер подключен к провайдеру Интернет через, например, ADSL модем - маршрутизатор. Некоторые провайдеры (например, Укртелеком) предоставляют своим пользователям динамический IP адрес, который постоянно изменяется при переподключении. Если необходимо подключиться, например, к web-серверу удаленно из Интернета, этого сделать невозможно, поскольку неизвестно, какой новый динамический адрес присвоил провайдер маршрутизатору. Обойти эту проблему можно с помощью технологии DynamicDNS(DDNS), позволяющей связать внешний динамический ip-адрес и постоянное доменное имя. Причем в настоящее время воспользоваться DDNS-сервисом можно бесплатно.

         Для обычного пользователя, пожелавшего воспользоваться DDNS, на практике это выглядит следующим образом. Клиент регистрируется в системе DDNS, выбирает имя для своего хоста и домен второго уровня.  Положим, имя -host56, домен - no-ip.biz. Если на компьютере запущен web-сервер, то к нему можно будет обратиться по адресу host56.no-ip.biz (если провайдер не блокирует входящие запросы по 80-му порту). Таким образом, технология DDNS предусматривает создание  специального DNS-сервера, который обслуживает несколько зон (обычно для раздачи имен регистрируется несколько доменов второго уровня). А клиенту предоставляется возможность самому изменять на этом DNS-сервере записи, относящиеся к его хосту с помощью программы - клиент. В результате, когда кто-то попытается обратиться из Интернета к машине по имени, DNS-сервер выдаст текущий IP-адрес. Редактирование записей DNS может быть организовано по-разному. Например, после смены IP-адреса на машине нужно зайти на сайт, ввести логин и пароль, а затем вручную прописать новый IP. Однако это неудобно: провайдеры ADSL могут ограничивать длительность одного сеанса связи (например - 24 часа). По истечении данного периода сессия закрывается, а при повторной авторизации клиенту выдается другой IP-адрес. Это необходимо для экономии IP адресов, т.е. IP адресов, выделенных для ADSL, меньше, чем клиентов у провайдера Интернет. Поэтому гораздо удобнее пользоваться специальными программами, которые при смене IP-адреса машины автоматически изменяют запись на сервере DNS (Программа - клиент). Некоторые из таких программ используют обычный протокол HTTP, а другие - свой собственный.

         Существует также некое "усовершенствование" всей рассматриваемой системы  DDNS  - это сервисы Dynamic DNS, которые организуют перенаправление входящих запросов на разные порты. Делается это в том случае, когда Интернет-провайдеры блокируют входящие запросы по широко используемым портам, например 80-му (HTTP), 25-му (SMTP) и 21-му (FTP). В этом случае на  локальной машине можно запустить  web-сервер на 8000-м порту (открытом провайдером порту), а извне к нему можно обращаться по адресу host56t.no-ip.biz:80 (в данном случае указание порта необязательно и выбрана такая запись для наглядности).

         Рассмотрим процесс регистрации динамического имени DNS. Для этого набираем в браузере адрес: http://www.no-ip.com, и на открывшейся страничке выбираем Sign In (рис.2).

Далее появляется форма регистрации, которую необходимо заполнить. Этот сервер надежно принимает e-mail, зарегистрированные на почтовом сервере gmail.com. А, например mail.ru он не воспринимает. Внизу формы необходимо ввести имя хоста, например host56. На этой же строчке высветиться имя домена no-ip.biz. Его изменять не нужно, иначе сервис будет платным. Внизу формы нажимаем Sign Up.

http://192.168.1.10:8080/noip.jpg

Рис.2. Страница по адресу http://www.no-ip.com
 

         На адрес электронной почты, указанный при регистрации, будет отправлено письмо, которое нужно  подтвердить. Как только будет нажата ссылка для активации аккаунта, откроется страница, оповещающая, что аккаунт активизирован и после этого можно  авторизироваться. На страничке находим наверху справа Sign In и в открывшуюся форму вводим адрес email и пароль. Далее появиться новая форма, в которой необходимо дать сведения о себе. После этого появиться страничка, подобная  показанной на рисунке 3.

http://192.168.1.10:8080/noip1.jpg

Рис.3. Страница после правильной регистрации имени DNS.

         Для изменения параметров хоста необходимо нажать на иконку Manage Hosts и далее перейти на страничку Modify.

         Ранее было принято, что ADSL модем, подключенный к провайдеру, выполняет функцию маршрутизатора и NAT сервера. В качестве web-серверов для примера может использоваться два устройства: одноплатный компьютер с установленной системой OpenWRT(Linux) и локальным адресом 192.168.1.10, и миниатюрный web - сервер на микроконтроллере с адресом 192.168.1.100. Необходимо на модеме модели ZXV10H108L выполнить проброс портов так, чтобы при обращении извне  по порту 8080 и 22 подключение выполнялось по http и ssh к узлу 192.168.1.10, по порту 80 - к узлу 192.168.1.100.  На рисунке 4 показан результат настройки для модема.

http://192.168.1.10:8080/mod.jpg

Рис.4. Страница настройки перенаправления портов.

         После такой настройки для обращения к web-серверу на одноплатном компьютере извне необходимо набрать адрес http://host56.no-ip.biz:8080, а при обращении к  web-серверу на микроконтроллере - http://host56.no-ip.biz.   Можно сделать так, чтобы обращение к серверу было не http://host56.no-ip.biz:8080, а http://host56.no-ip.biz. Для этого необходимо выбрать радиокнопку  Port 80 Redirect и в появившейся строке ввести 8080 (это значение стоит по умолчанию, рис.5.). Однако после этого web - сервер на микроконтроллере необходимо отключить.

         Для того чтобы сервер DDNS знал, что при новом подключении к провайдеру адрес поменялся, необходимо с клиента (проще с одноплатного компьютера)  отправить запрос

http://dynupdate.no-ip.com/dns?username=alex180456@gmail.com

&password=140190ab&hostname=host56.no-ip.biz, например, с помощью программы wget,  которая установлена в ОС OpenWRT.

http://192.168.1.10:8080/noip2.jpg

Рис.5. Страница модификации.

         Для этого на OpenWRT создаем исполняемый скрипт /etc/ddns:

#!/bin/ash

while [ 5 -lt 10 ]

do

sleep 900

/usr/bin/wget 'http://dynupdate.no-ip.com/dns?username=alex180456

@gmail.com&password=1401908ab&hostname=host56.no-ip.biz'

done

и помещаем его для выполнения в файл загрузки /etc/rc.local:

# Put your custom commands here that should be executed once

# the system init finished. By default this file does nothing.

/etc/ddns &

exit 0

Теперь каждые 900 секунд на сервер DDNS будет отправляться информация о клиенте.

 

Литература

1. Мясищев А.А. Web-сервер на ENC28J60 и микроконтроллере AVR для управления устройствами по TCP/IP сети. [Electronic resource]. -  Mode of access: http://www.rusnauka.com/Page_ru.htm, 2013.

2. Мясищев А.А. О возможности построения универсального Web-сервера на Arduino для отображения информации и управления по TCP/IP сети. [Electronic resource]. -  Mode of access: http://www.rusnauka.com/Page_ru.htm, 2013.

3.Arduino. Официальный сайт.  [Electronic resource]. -  Mode of access: http://arduino.cc/ , 2013.

4. OpenWRT. TP-Link TL-MR3020.   [Electronic resource]. -  Mode of access: http://wiki.openwrt.org/ru/toh/tp-link/tl-mr3020, 2013.