Wirenboard6:InstallingOnTheRemoteSite/en: различия между версиями
(Новая страница: «==== GSM-antennas ====») |
|||
(не показано 69 промежуточных версий этого же участника) | |||
Строка 60: | Строка 60: | ||
==== GSM-antennas ==== | ==== GSM-antennas ==== | ||
Контроллер опционально комплектуется одной из двух GSM-антенн: выносной, на кабеле 2,5м, с коэффициентом усиления 3,5 дБ, или короткой штыревой антенной, навинчивающейся прямо на SMA(female)-разъем контроллера. При монтаже контроллера в металлических боксах следует использовать выносную антенну. Штатные антенны контроллера обеспечивают связь в условиях хорошего приема. В сложных радиоусловиях необходимо приобретать антенны с бóльшим коэффициентом усиления или направленные антенны. Диапазон частот 3G-антенн — 1900-2100 МГц, 2G — 900/1800 МГц. Разъем кабеля антенны — SMA(male). | |||
== | == Настройка сетевых интерфейсов == | ||
=== Ethernet | === Настройка Ethernet-интерфейсов === | ||
Часто возникает необходимость, чтобы контроллер имел постоянный адрес в локальной сети. Это достигается либо настройками DНCP-сервера (привязкой IP-адреса к MAC-адресу сетевого интерфейса контроллера), либо явным указанием IP-адреса в сетевых настройках. | |||
Рассмотрим более подробно, как задать фиксированный адрес на Ethernet-интерфейсе. | |||
Для настроек статического адреса задайте следующую конфигурацию: | |||
<pre> | <pre> | ||
auto eth0 | auto eth0 | ||
Строка 84: | Строка 84: | ||
По умолчанию, если адрес статический, используются DNS-сервера, перечисленные в файле <code>/etc/resolv.conf</code>, символическая сcылка на <code>/mnt/data/etc/resolv.conf</code>. | |||
Можете добавлять свои DNS-сервера по аналогии: | |||
<pre> | <pre> | ||
nameserver 192.168.0.1 | nameserver 192.168.0.1 | ||
Строка 92: | Строка 92: | ||
nameservеr 8.8.4.4 | nameservеr 8.8.4.4 | ||
</pre> | </pre> | ||
Эти сервера использует сервис dnsmasq, который обслуживает локальные DNS-запросы на контроллере. Чтобы понять, какие именно upstream-сервера используются dnsmasq в настоящий момент, выполните команды | |||
<pre> | <pre> | ||
service dnsmasq stop | service dnsmasq stop | ||
Строка 100: | Строка 100: | ||
</pre> | </pre> | ||
Программа dnsmasq выведет в консоль, какие сервера используются, например: | |||
<pre> | <pre> | ||
dnsmasq: using nameserver 192.168.0.1#53 | dnsmasq: using nameserver 192.168.0.1#53 | ||
Строка 108: | Строка 108: | ||
=== Wi-Fi | === Настройка Wi-Fi === | ||
Параметры точки доступа определяет демон hostapd (файл настроек <code>/etc/hostapd.conf</code>). | |||
Чтобы подключаться к контроллеру по Wi-Fi по защищенному каналу, допишите в конец файла <code>/etc/hostapd.conf</code> следующую конфигурацию: | |||
<pre> | <pre> | ||
Строка 121: | Строка 121: | ||
</pre> | </pre> | ||
Перезапустите hostapd: <code>/etc/init.d/hostapd restart</code>, после чего подключение к контроллеру по Wi-Fi будет возможно только с паролем '''your_password'''. | |||
Пример настройки Wi_Fi адаптера для подключения к локальной сети можно найти [[Special:MyLanguage/Wi-Fi|в нашей wiki]]. | |||
=== PPP | === Настройка PPP === | ||
На контроллере предустановлен демон pppd, который используется для создания подключения к сети провайдера через 3G/2G-модем. Демон pppd создает при подключении сетевой интерфейс ppp (ppp0 по умолчанию). В заводской конфигурации настройки порта ppp0 закомментированы, и установления соединения с провайдером сотовой связи не происходит. В нашей [[Special:MyLanguage/GSM/GPRS|Wiki]] мы рекомендуем использовать следующие настройки для интерфейса ppp0 в файле <code>/etc/network/interfaces</code>: | |||
<pre> | <pre> | ||
auto ppp0 | auto ppp0 | ||
iface ppp0 inet ppp | iface ppp0 inet ppp | ||
provider mts | provider mts | ||
# | #Рестартуем модем, если он завис | ||
pre-up wb-gsm restart_if_broken | pre-up wb-gsm restart_if_broken | ||
# | #Затем ждем, пока он загрузится и найдет сеть. | ||
pre-up sleep 10 | pre-up sleep 10 | ||
</pre> | </pre> | ||
Даже если модем находится в зависшем или отключенном состояниии, команда <code>pre-up wb-gsm restart_if_broken</code> перед началом установления соединения перезагрузит его и модем будет гарантированно доступен. Десятисекундной задержки (<code>pre-up sleep 10</code>) перед установлением соединения обычно хватает, чтобы сетевое соединение установилось с первого раза. | |||
Строка <code>provider</code> заставляет <code>pppd</code> искать файл настроек для конкретного провайдера в директории <code>/etc/ppp/peers</code>, в нашем случае это файл <code>/etc/ppp/peers/mts</code>. В целях совместимости в качестве устройства модема в заводской настройке в этом файле указано использовать устройство <code>/dev/ttyGSM</code>. Если на вашем контроллере установлен 3G-модем, замените это устройство его на более быстрое <code>/dev/ttyACM0</code>. | |||
Чтобы при обрыве соединения контроллер не прекращал бы попытки установить связь, в файле настроек провайдера <code>/etc/ppp/peers/</code> должны быть раскомментированы опции | |||
<pre> | <pre> | ||
persist | persist | ||
maxfail 0 | maxfail 0 | ||
</pre> | </pre> | ||
Параметры протокола пакетной передачи данных и номера для соединения для каждого провайдера хранятся в директории /etc/chatscripts. В большинстве случаев ничего менять в этих файлах не придется. | |||
== PPP | == PPP — основной и резервный выход в интернет == | ||
Проще всего обеспечить выход в интернет, если ppp0 — единственный WAN-интерфейс. Интерфейс ppp0 настраивается, как это написано выше, и затем, командой <code>ifup ppp0</code>, устанавливается подключение к интернету через сеть сотового оператора. | |||
Сложности начинаются, когда контроллер подключен к Ethernet и имеет шлюз по умолчанию в одной сети, а также подключается к сети сотовой передачи данных. | |||
В такой конфигурации мы сталкиваемся со следующей особенностью: протокол PPP обеспечивает соединение точка-точка и не предполагает шлюза по умолчанию. | |||
В случае подключения по PPP, когда ни одного шлюза по умолчанию нет (например, мы не подключили Ethernet-кабель), pppd в качестве шлюза по умолчанию добавит в таблицу маршрутизации в системе IP-адрес ppp-партнера. Если шлюз по умолчанию уже задан, то в таблицу маршрутизации новый шлюз по умолчанию не добавляется. И тогда при падении основного Ethernet-канала выход в интернет теряется, несмотря на активное соединение. В этом случае необходимо добавить второй шлюз по умолчанию через интерфейс ppp0. Метрика любого нового шлюза должна отличаться от метрик имеющихся, поэтому мы явно указываем метрику при создании нового шлюза по умолчанию. | |||
Для обеспечения отказоустойчивого соединения мы должны предусмотреть любой порядок поднятия и падения интерфейсов. Задача — обеспечить связь независимо от порядка поднятия интерфейсов и переключение при падении одного из них. | |||
Для интерфейса eth0, который мы будем считать основным для выхода в интернет, создается шлюз по умолчанию с метрикой 0 в таблице маршрутизации. Зададим для шлюза по умолчанию через интерфейс ppp0 метрику 100 (или любой, отличной от 0). | |||
Для выполнения команд после инициализации любого ppp-интерфейса pppd демон использует директорию <code>/etc/ppp/ip-up.d</code>. В качестве параметров командной строки скрипту передается и имя ppp-интерфейса (в нашем случае такой интерфейс один — это ppp0). | |||
Создадим скрипт add_routes в директории <code>/etc/ppp/ip-up.d</code> и сделаем его исполняемым (<code>chmod +x /etc/ppp/ip-up.d/add_routes</code>): | |||
<pre> | <pre> | ||
#!/bin/sh | #!/bin/sh | ||
Строка 173: | Строка 173: | ||
route add default dev ppp0 metric 100 2>/dev/null | route add default dev ppp0 metric 100 2>/dev/null | ||
</pre> | </pre> | ||
Первая команда удаляет шлюз по умолчанию, на случай, если он был создан с метрикой 0. Вторая — добавляет шлюз по умолчанию с метрикой 100 для интерфейса ppp0. | |||
Таким образом мы имеем два шлюза по умолчанию с разными метриками: | |||
[[Special:MyLanguage/Файл:Two_def_gateways.png|||| ]] | [[Special:MyLanguage/Файл:Two_def_gateways.png|||| ]] | ||
При падении одного из их трафик будет передаваться через другой и наоборот. | |||
Запустим ping 8.8.8.8, а затем вынем и вставим вилку RJ-45: | |||
[[Special:MyLanguage/Файл:Channel_switch.png|||| ]] | [[Special:MyLanguage/Файл:Channel_switch.png|||| ]] | ||
Как показал опыт, иногда возникает проблема с доступностью DNS-серверов провайдера. Для всех соединений прописываем общедоступные сервера Google и OpenDNS. | |||
'''eth0:''' Из файла <code>/etc/dhcp/dhclient.conf</code> из параметра request удаляем параметр <code>domain-name-servers</code>, а после параметра request указываем открытые DNS-сервера Google и OpenDNS: | |||
<pre>prepend domain-name-servers 8.8.4.4, 8.8.8.8, 208.67.222.222, 208.67.220.220;</pre> | <pre>prepend domain-name-servers 8.8.4.4, 8.8.8.8, 208.67.222.222, 208.67.220.220;</pre> | ||
'''ppp0:''' В директории <code>/etc/ppp/ip-up.d</code> создаем скрипт (и даем ему права на выполнение), который добавит DNS-сервера Google и OpenDNS в файл <code>resolv.conf</code> при поднятии интерфейса. | |||
<pre> | <pre> | ||
Строка 207: | Строка 207: | ||
== VPN == | == VPN == | ||
Для удаленного доступа к контроллеру будем использовать OpenVPN. Предполагается, что сервер уже есть и настроен, необходимо установить и настроить клиент на контроллере. | |||
Чтобы обеспечить большую надежность, на сервере с 2 IP-адресами запускается два серверных процесса, один из которых слушает на порту 1194 TCP на IP1, а второй — на порту 1194 UDP на IP2. (Это не обязательно, вы можете использовать один серверный процесс). | |||
На контроллере мы поднимаем 2 OpenVPN-клиента и явно задаем маршрут для IP2 через интерфейс <code>ppp0</code> для одного из них. | |||
OpenVPN | Установка OpenVPN — стандартная, с использованием <code>open-rsa</code>. | ||
Для этого на контроллере устанавливаем <code>openvpn</code> и <code>easy-rsa</code>: | |||
<pre>apt-get install openvpn easy-rsa</pre> | <pre>apt-get install openvpn easy-rsa</pre> | ||
Копируем | |||
<pre>cp -R /usr/share/easy-rsa /etc/openvpn/</pre> | <pre>cp -R /usr/share/easy-rsa /etc/openvpn/</pre> | ||
Копируем сертификат удостоверяющего центра <code>ca.crt</code> на контроллер в директорию <code>/etc/openvpn/easy-rsa/keys</code> | |||
В директории | |||
<code>/etc/openvpn/easy-rsa</code> | <code>/etc/openvpn/easy-rsa</code> | ||
создаем поддиректорию <code>keys</code>: | |||
<pre>mkdir keys && chmod 600 keys && cd keys</pre> | <pre>mkdir keys && chmod 600 keys && cd keys</pre> | ||
Создаем запрос на подписывание сертификата (с именем, соответствующим серийному номеру контроллера, в данном случае A7ZO7UCC): | |||
<pre> | <pre> | ||
cd /etc/openvpn/easy-rsa/ | cd /etc/openvpn/easy-rsa/ | ||
Строка 237: | Строка 237: | ||
./build-req A7ZO7UCC | ./build-req A7ZO7UCC | ||
</pre> | </pre> | ||
Копируем полученный запрос <code>A7ZO7UCC.csr</code> на сервер в произвольную директорию и подписываем его. | |||
<pre> | <pre> | ||
cd /etc/openvpn/easy-rsa | cd /etc/openvpn/easy-rsa | ||
Строка 243: | Строка 243: | ||
./sign-req /root/certs/A7ZO7UCC | ./sign-req /root/certs/A7ZO7UCC | ||
</pre> | </pre> | ||
Подписанный сертификат <code>A7ZO7UCC.crt</code> копируем на контроллер в директорию <code>/etc/openvpn/easy-rsa/keys</code>. | |||
На сервере в конфигурационном файле (<code>/etc/vpn/server.conf</code>) смотрим, какой файл соответствия клиент-адрес указан в параметре <code>ifconfig-pool-persists</code> и в этот файл добавляем адрес для клиента-контроллера из диапазона сетевых адресов, описанного в параметре <code>server</code> конфигурационного файла. | |||
Например, | |||
<pre> | <pre> | ||
service openvpn stop | service openvpn stop | ||
mcedit /etc/openvpn/ipp.txt | mcedit /etc/openvpn/ipp.txt | ||
</pre> | </pre> | ||
Добавляем строку <code>A7ZO7UCC,10.8.0.48</code> | |||
<pre>service openvpn start</pre> | <pre>service openvpn start</pre> | ||
Для второго экземпляра сервера такую же операцию выполняем с его конфигурационными файлами, IP-адреса должны различаться, например, добавляем запись | |||
<code>A7ZO7UCC,10.9.0.48</code> | <code>A7ZO7UCC,10.9.0.48</code> | ||
Конфигурационные файлы для клиента на контроллере для двух соединений будем хранить в файлах <code>/etc/openvpn/client.conf</code> и <code>/etc/openvpn/client1.conf</code>. | |||
Содержимое файла настройки клиента: | |||
<pre> | <pre> | ||
client | client | ||
Строка 279: | Строка 279: | ||
link-mtu 1542 | link-mtu 1542 | ||
keysize 128 | keysize 128 | ||
#keysize 128 - | #keysize 128 -- для совместимости с имеющимися клиентами | ||
</pre> | </pre> | ||
В файле конфигурации второго vpn-подключения <code>сlient1.conf</code> замените <code>proto udp</code> на <code>proto tcp</code> и укажите второй IP-адрес сервера в параметре <code>remote</code>. | |||
Автозагрузка сервиса OpenVPN на контроллере включается командой: | |||
<pre>update-rc.d openvpn defaults</pre> | <pre>update-rc.d openvpn defaults</pre> | ||
Проверяем доступность сервера | |||
<code>ping 10.8.0.1</code> | <code>ping 10.8.0.1</code> | ||
Строка 293: | Строка 293: | ||
== AutoSSH == | == AutoSSH == | ||
Еще одно резервное подключение к контроллеру сделаем на основе <code>AutoSSH</code>. Механизм работы таков: с контроллера устанавливается ssh-соединение к серверу, при этом ssh-порт контроллера пробрасывается на один из свободных портов на localhost сервера. Сервис аutossh следит за тем, что ssh-соединение не разорвано, и в случае разрыва восстанавливает его. Восстановление происходит не мгновенно — какое-то время порт, используемый на <code>localhost</code> сервера удерживается демоном <code>sshd</code>. | |||
Устанавливаем на контроллере <code>apt-get install autossh</code>. Генерируем пару ключей для пользователя <code>root</code>: | |||
<pre>ssh-keygen </pre> | <pre>ssh-keygen </pre> | ||
Пароль — пустой. | |||
Для обслуживания удаленных подключений создаем пользователя <code>remote</code> на сервере с оболочкой <code>/bin/false</code>: | |||
< | <pre>adduser --home /home/remote --shell /bin/false remote </pre> | ||
В файл <code>/home/remote/.ssh/authorized_keys</code> на сервере добавляем созданный на контроллере ключ <code>/root/.ssh/id_rsa.pub</code> с преамбулой | |||
<code>no-agent-forwarding,no-X11-forwarding,permitopen="localhost:62001" </code> | <code>no-agent-forwarding,no-X11-forwarding,permitopen="localhost:62001" </code> | ||
что обеспечит дополнительную безопасность сервера при подключении контроллера. Порт 62001 — порт localhost-сервера, на который будет перенаправлен ssh-порт данного контроллера. | |||
Первый раз подключаемся с контроллера на сервер вручную: | |||
<pre>ssh remote@vpn.mydomain.com </pre> | <pre>ssh remote@vpn.mydomain.com </pre> | ||
На контроллере создаем файл <code>\etc\systemd\system\autossh.service</code> для запуска <code>autossh</code> в качестве сервиса: | |||
Строка 335: | Строка 335: | ||
WantedBy=multi-user.target | WantedBy=multi-user.target | ||
</pre> | </pre> | ||
Включаем сервис а автозагрузку на контроллере: | |||
<pre>systemctl enable autossh.service</pre> | <pre>systemctl enable autossh.service</pre> | ||
После запуска сервиса мы можем подключиться к контроллеру на сервере с помощью команды | |||
<pre>ssh 127.0.0.1 -p 62001</pre> | <pre>ssh 127.0.0.1 -p 62001</pre> | ||
== | == Передача данных с контроллера в облако == | ||
Для передачи MQTT-сообщений с контроллера в облачный сервис используется MQTT-бридж, конфигурация которого настраивается на контроллере в файле <code>\mnt\data\etc\mosquitto\conf.d\bridge.conf</code> | |||
<pre> | <pre> | ||
connection wb_devices_cloud.wb_A7ZO7UCC | connection wb_devices_cloud.wb_A7ZO7UCC | ||
Строка 359: | Строка 359: | ||
</pre> | </pre> | ||
Затем выполните команду | |||
<pre> | <pre> | ||
Строка 366: | Строка 366: | ||
Если вы хотите передавать данные на несколько серверов одновременно, создайте несколько разделов <code>connection</code>. | |||
== | == Возможные неполадки GPRS-соединения == | ||
Возможных причин отсутствия GPRS-подключения может быть несколько. | |||
* | * Закончился оплаченный лимит трафика. | ||
* | * Низкий уровень сигнала, плохой контакт антенны. | ||
* | * СИМ-карты некоторых операторов рассчитаны только на 4G-сети, 3G-подключение установить с ними не получится. | ||
* | * Проверьте, правильно ли вставлена СИМ-карта в слот. | ||
* | * Возможно, СИМ-карта нерабочая. | ||
* | * Ваш тарифный план не предусматривает пакетную передачу данных. | ||
Прежде чем идти в личный кабинет и звонить провайдеру, можно выполнить ряд простых проверок. | |||
Запустите команду | |||
<pre>gammu networkinfo</pre> | <pre>gammu networkinfo</pre> | ||
Строка 396: | Строка 396: | ||
</pre> | </pre> | ||
Важно, что контроллер подключен к пакетной сети передачи данных <pre>(GPRS : attached)</pre> и GPRS-соединение установлено. | |||
После этого оцените уровень сигнала в minicom командой <code>AT+CSQ</code> | |||
Вы получите результат в виде <code>13,99</code> | |||
Первая цифра показывает мощность сигнала: > 9 — удовлетворительный, > 14 — хороший, > 19 — отличный. Низкие и нестабильные значения CSQ означают, что антенна плохо расположена, неаккуратно подключена, радиообстановка неблагоприятная. | |||
Если обе проверки пройдены, но связи нет, обратитесь к провайдеру (загляните в личный кабинет), можете проверить СИМ-карту в смартфоне. |
Версия 19:05, 27 июня 2019
Внимание: Отображаемое название «Wiren Board 6: Installing On The Remote Site» переопределяет ранее заданное отображаемое название «WirenBoard6:InstallingOnTheRemoteSite».
This article highlights the network aspects of professional installation of the controller in industrial and commercial facilities.
Choosing a network configuration controller
The Wiren Board 6 controllers come with a different set of network devices. It is necessary to understand in what conditions the controller will be operated and what equipment will be optimal.
Minimum equipment
Controllers Wiren Board 6 have two Ethernet-interfaces 100 Mbit/s (eth0, eth1) on board in any configuration.
Advanced features
Optionally, the controllers come with Wi-Fi interface (wlan0) (802.11 bgn 2.4 G), 3G modem (WCDMA/HSPA, GSM/GPRS/EDGE) or 2G modem (GPRS). With any of them you can connect the controller to the Internet, and with Ethernet and Wi-Fi — also connect to the local network. 3G-modem is implemented on SIMCom SIM5300E chip, 2G-modem is implemented on SIMCom SIM800 or Neoway M660A chips, Wi-Fi — on Realtek 8723BU chip.
Factory configuration of network devices
Ethernet
In the factory configuration, both Ethernet interfaces and Wi-Fi and loopback are configured in the controller. The network settings file is /etc/network/interfaces
. Interfaces eth0/1 have no fixed address and get Sammie settings via DHCP.
Wi-Fi
On Wi-Fi interface wlan0 by default is the open hotpoint with the fixed address 192.168.42.1, clients receive addresses on DHCP which are distributed by dnsmasq daemon in the range of 192.168.42.50 — 192.168.42.150
.
The SSID of the wireless controller network is formed from the prefix “WirenBoard-” and the serial number of the controller printed on the side sticker. In a wireless network, the controller has not only an IP address, but also DNS aliases for easy connection, wiren
, wiren.local
, wiren_board
, wirenboard.local
, wirenboard
.
GPRS
Cellular data connection is not enabled by default and requires configuration. The controller has slots for installation of SIM-cards, but currently the software is only supported first.
Optionally, the controller is equipped with 3G or 2G-modems (modems are non-removable and soldered on the Board at the factory).
3G-модем
The modem is represented in the system by two devices: /dev/ttyGSM
(link to one of the console ports ttymxc), connected to the UART-interface of the modem chip, and a composite USB-device /dev/ttyACM0-6
, used for communication ttyACM0
. The limitations of the UART port do not allow to realize the full potential of data transfer rate in 3G networks (theoretically up to 7.2 Mbit/s for reception and up to 5.76 Mbps for transmission). The port ttyACM0 is limited only by the transmission speed of USB2.0 (theoretically, up to 280 Mbps).
The presence of two interfaces allows you to simultaneously use the first device (/dev/ttyGSM
) to send AT-commands (to know the level of the cellular signal, send SMS, USSD-balance request etc) through minicom or gammu programs, and the second is (/dev/ttyACM0
) for network communication.
hardware control in the controller is represented by turning on/off the modem through its PWRKEY input, the state of which is controlled by one of the GPIOs of the processor. For the user, the modem power management interface provides the command wb-gsm
with the options on, off, reset, restart_if_broken.
2G-modem
The maximum data transfer rate in GPRS is 85.6 kbit/s, which is clearly not enough to transfer large amounts of data. The GPRS channel can be used to access the command line interface (ssh) or to send SMS. 2G modems are represented in the system by one device, /dev/ttyGSM
. Simultaneous transmission of data and AT commands in the 2G modem is not implemented.
GSM-antennas
Контроллер опционально комплектуется одной из двух GSM-антенн: выносной, на кабеле 2,5м, с коэффициентом усиления 3,5 дБ, или короткой штыревой антенной, навинчивающейся прямо на SMA(female)-разъем контроллера. При монтаже контроллера в металлических боксах следует использовать выносную антенну. Штатные антенны контроллера обеспечивают связь в условиях хорошего приема. В сложных радиоусловиях необходимо приобретать антенны с бóльшим коэффициентом усиления или направленные антенны. Диапазон частот 3G-антенн — 1900-2100 МГц, 2G — 900/1800 МГц. Разъем кабеля антенны — SMA(male).
Настройка сетевых интерфейсов
Настройка Ethernet-интерфейсов
Часто возникает необходимость, чтобы контроллер имел постоянный адрес в локальной сети. Это достигается либо настройками DНCP-сервера (привязкой IP-адреса к MAC-адресу сетевого интерфейса контроллера), либо явным указанием IP-адреса в сетевых настройках.
Рассмотрим более подробно, как задать фиксированный адрес на Ethernet-интерфейсе.
Для настроек статического адреса задайте следующую конфигурацию:
auto eth0 iface eth0 inet static address 192.0.2.7 netmask 255.255.255.0 gateway 192.0.2.254 hostname Wirenboard
По умолчанию, если адрес статический, используются DNS-сервера, перечисленные в файле /etc/resolv.conf
, символическая сcылка на /mnt/data/etc/resolv.conf
.
Можете добавлять свои DNS-сервера по аналогии:
nameserver 192.168.0.1 nameserver 8.8.8.8 nameservеr 8.8.4.4
Эти сервера использует сервис dnsmasq, который обслуживает локальные DNS-запросы на контроллере. Чтобы понять, какие именно upstream-сервера используются dnsmasq в настоящий момент, выполните команды
service dnsmasq stop dnsmasq --no-daemon --log-queries ^C service dnsmasq start
Программа dnsmasq выведет в консоль, какие сервера используются, например:
dnsmasq: using nameserver 192.168.0.1#53 dnsmasq: using nameserver 8.8.8.8#53 dnsmasq: using nameserver 8.8.4.4#53
Настройка Wi-Fi
Параметры точки доступа определяет демон hostapd (файл настроек /etc/hostapd.conf
).
Чтобы подключаться к контроллеру по Wi-Fi по защищенному каналу, допишите в конец файла /etc/hostapd.conf
следующую конфигурацию:
wpa=2 wpa_passphrase=your_password wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP CCMP rsn_pairwise=TKIP CCMP
Перезапустите hostapd: /etc/init.d/hostapd restart
, после чего подключение к контроллеру по Wi-Fi будет возможно только с паролем your_password.
Пример настройки Wi_Fi адаптера для подключения к локальной сети можно найти в нашей wiki.
Настройка PPP
На контроллере предустановлен демон pppd, который используется для создания подключения к сети провайдера через 3G/2G-модем. Демон pppd создает при подключении сетевой интерфейс ppp (ppp0 по умолчанию). В заводской конфигурации настройки порта ppp0 закомментированы, и установления соединения с провайдером сотовой связи не происходит. В нашей Wiki мы рекомендуем использовать следующие настройки для интерфейса ppp0 в файле /etc/network/interfaces
:
auto ppp0 iface ppp0 inet ppp provider mts #Рестартуем модем, если он завис pre-up wb-gsm restart_if_broken #Затем ждем, пока он загрузится и найдет сеть. pre-up sleep 10
Даже если модем находится в зависшем или отключенном состояниии, команда pre-up wb-gsm restart_if_broken
перед началом установления соединения перезагрузит его и модем будет гарантированно доступен. Десятисекундной задержки (pre-up sleep 10
) перед установлением соединения обычно хватает, чтобы сетевое соединение установилось с первого раза.
Строка provider
заставляет pppd
искать файл настроек для конкретного провайдера в директории /etc/ppp/peers
, в нашем случае это файл /etc/ppp/peers/mts
. В целях совместимости в качестве устройства модема в заводской настройке в этом файле указано использовать устройство /dev/ttyGSM
. Если на вашем контроллере установлен 3G-модем, замените это устройство его на более быстрое /dev/ttyACM0
.
Чтобы при обрыве соединения контроллер не прекращал бы попытки установить связь, в файле настроек провайдера /etc/ppp/peers/
должны быть раскомментированы опции
persist maxfail 0
Параметры протокола пакетной передачи данных и номера для соединения для каждого провайдера хранятся в директории /etc/chatscripts. В большинстве случаев ничего менять в этих файлах не придется.
PPP — основной и резервный выход в интернет
Проще всего обеспечить выход в интернет, если ppp0 — единственный WAN-интерфейс. Интерфейс ppp0 настраивается, как это написано выше, и затем, командой ifup ppp0
, устанавливается подключение к интернету через сеть сотового оператора.
Сложности начинаются, когда контроллер подключен к Ethernet и имеет шлюз по умолчанию в одной сети, а также подключается к сети сотовой передачи данных.
В такой конфигурации мы сталкиваемся со следующей особенностью: протокол PPP обеспечивает соединение точка-точка и не предполагает шлюза по умолчанию.
В случае подключения по PPP, когда ни одного шлюза по умолчанию нет (например, мы не подключили Ethernet-кабель), pppd в качестве шлюза по умолчанию добавит в таблицу маршрутизации в системе IP-адрес ppp-партнера. Если шлюз по умолчанию уже задан, то в таблицу маршрутизации новый шлюз по умолчанию не добавляется. И тогда при падении основного Ethernet-канала выход в интернет теряется, несмотря на активное соединение. В этом случае необходимо добавить второй шлюз по умолчанию через интерфейс ppp0. Метрика любого нового шлюза должна отличаться от метрик имеющихся, поэтому мы явно указываем метрику при создании нового шлюза по умолчанию.
Для обеспечения отказоустойчивого соединения мы должны предусмотреть любой порядок поднятия и падения интерфейсов. Задача — обеспечить связь независимо от порядка поднятия интерфейсов и переключение при падении одного из них.
Для интерфейса eth0, который мы будем считать основным для выхода в интернет, создается шлюз по умолчанию с метрикой 0 в таблице маршрутизации. Зададим для шлюза по умолчанию через интерфейс ppp0 метрику 100 (или любой, отличной от 0).
Для выполнения команд после инициализации любого ppp-интерфейса pppd демон использует директорию /etc/ppp/ip-up.d
. В качестве параметров командной строки скрипту передается и имя ppp-интерфейса (в нашем случае такой интерфейс один — это ppp0).
Создадим скрипт add_routes в директории /etc/ppp/ip-up.d
и сделаем его исполняемым (chmod +x /etc/ppp/ip-up.d/add_routes
):
#!/bin/sh route del default dev ppp0 2>/dev/null route add default dev ppp0 metric 100 2>/dev/null
Первая команда удаляет шлюз по умолчанию, на случай, если он был создан с метрикой 0. Вторая — добавляет шлюз по умолчанию с метрикой 100 для интерфейса ppp0. Таким образом мы имеем два шлюза по умолчанию с разными метриками:
При падении одного из их трафик будет передаваться через другой и наоборот. Запустим ping 8.8.8.8, а затем вынем и вставим вилку RJ-45:
Как показал опыт, иногда возникает проблема с доступностью DNS-серверов провайдера. Для всех соединений прописываем общедоступные сервера Google и OpenDNS.
eth0: Из файла /etc/dhcp/dhclient.conf
из параметра request удаляем параметр domain-name-servers
, а после параметра request указываем открытые DNS-сервера Google и OpenDNS:
prepend domain-name-servers 8.8.4.4, 8.8.8.8, 208.67.222.222, 208.67.220.220;
ppp0: В директории /etc/ppp/ip-up.d
создаем скрипт (и даем ему права на выполнение), который добавит DNS-сервера Google и OpenDNS в файл resolv.conf
при поднятии интерфейса.
if [ ! -e /etc/resolv.conf ]; then : > /etc/resolv.conf fi #OpenDNS printf '%s\n%s\n' "nameserver 208.67.222.222" "$(cat /etc/resolv/conf)" >/etc/resolv.conf printf '%s\n%s\n' "nameserver 208.67.220.220" "$(cat /etc/resolv.conf)" >/etc/resolv.conf #Google DNS printf '%s\n%s\n' "nameserver 8.8.8.8" "$(cat /etc/resolv.conf)" >/etc/resolv.conf printf '%s\n%s\n' "nameserver 8.8.4.4" "$(cat /etc/resolv.conf)" >/etc/resolv.conf
VPN
Для удаленного доступа к контроллеру будем использовать OpenVPN. Предполагается, что сервер уже есть и настроен, необходимо установить и настроить клиент на контроллере.
Чтобы обеспечить большую надежность, на сервере с 2 IP-адресами запускается два серверных процесса, один из которых слушает на порту 1194 TCP на IP1, а второй — на порту 1194 UDP на IP2. (Это не обязательно, вы можете использовать один серверный процесс).
На контроллере мы поднимаем 2 OpenVPN-клиента и явно задаем маршрут для IP2 через интерфейс ppp0
для одного из них.
Установка OpenVPN — стандартная, с использованием open-rsa
.
Для этого на контроллере устанавливаем openvpn
и easy-rsa
:
apt-get install openvpn easy-rsa
Копируем
cp -R /usr/share/easy-rsa /etc/openvpn/
Копируем сертификат удостоверяющего центра ca.crt
на контроллер в директорию /etc/openvpn/easy-rsa/keys
В директории
/etc/openvpn/easy-rsa
создаем поддиректорию keys
:
mkdir keys && chmod 600 keys && cd keys
Создаем запрос на подписывание сертификата (с именем, соответствующим серийному номеру контроллера, в данном случае A7ZO7UCC):
cd /etc/openvpn/easy-rsa/ source ./vars ln -s openssl-1.0.0.cnf openssl.cnf ./build-req A7ZO7UCC
Копируем полученный запрос A7ZO7UCC.csr
на сервер в произвольную директорию и подписываем его.
cd /etc/openvpn/easy-rsa source ./vars ./sign-req /root/certs/A7ZO7UCC
Подписанный сертификат A7ZO7UCC.crt
копируем на контроллер в директорию /etc/openvpn/easy-rsa/keys
.
На сервере в конфигурационном файле (/etc/vpn/server.conf
) смотрим, какой файл соответствия клиент-адрес указан в параметре ifconfig-pool-persists
и в этот файл добавляем адрес для клиента-контроллера из диапазона сетевых адресов, описанного в параметре server
конфигурационного файла.
Например,
service openvpn stop mcedit /etc/openvpn/ipp.txt
Добавляем строку A7ZO7UCC,10.8.0.48
service openvpn start
Для второго экземпляра сервера такую же операцию выполняем с его конфигурационными файлами, IP-адреса должны различаться, например, добавляем запись
A7ZO7UCC,10.9.0.48
Конфигурационные файлы для клиента на контроллере для двух соединений будем хранить в файлах /etc/openvpn/client.conf
и /etc/openvpn/client1.conf
.
Содержимое файла настройки клиента:
client dev tun proto udp remote vpn.mydomain.com 1194 resolv-retry infinite nobind persist-key persist-tun ca /etc/openvpn/easy-rsa/keys/ca.crt cert /etc/openvpn/easy-rsa/keys/A7ZO7UCC.crt key /etc/openvpn/easy-rsa/keys/A7ZO7UCC.key remote-cert-tls server verb 3 link-mtu 1542 keysize 128 #keysize 128 -- для совместимости с имеющимися клиентами
В файле конфигурации второго vpn-подключения сlient1.conf
замените proto udp
на proto tcp
и укажите второй IP-адрес сервера в параметре remote
.
Автозагрузка сервиса OpenVPN на контроллере включается командой:
update-rc.d openvpn defaults
Проверяем доступность сервера
ping 10.8.0.1
AutoSSH
Еще одно резервное подключение к контроллеру сделаем на основе AutoSSH
. Механизм работы таков: с контроллера устанавливается ssh-соединение к серверу, при этом ssh-порт контроллера пробрасывается на один из свободных портов на localhost сервера. Сервис аutossh следит за тем, что ssh-соединение не разорвано, и в случае разрыва восстанавливает его. Восстановление происходит не мгновенно — какое-то время порт, используемый на localhost
сервера удерживается демоном sshd
.
Устанавливаем на контроллере apt-get install autossh
. Генерируем пару ключей для пользователя root
:
ssh-keygen
Пароль — пустой.
Для обслуживания удаленных подключений создаем пользователя remote
на сервере с оболочкой /bin/false
:
adduser --home /home/remote --shell /bin/false remote
В файл /home/remote/.ssh/authorized_keys
на сервере добавляем созданный на контроллере ключ /root/.ssh/id_rsa.pub
с преамбулой
no-agent-forwarding,no-X11-forwarding,permitopen="localhost:62001"
что обеспечит дополнительную безопасность сервера при подключении контроллера. Порт 62001 — порт localhost-сервера, на который будет перенаправлен ssh-порт данного контроллера.
Первый раз подключаемся с контроллера на сервер вручную:
ssh remote@vpn.mydomain.com
На контроллере создаем файл \etc\systemd\system\autossh.service
для запуска autossh
в качестве сервиса:
[Unit] Description=Keeps an ssh tunnel to remote host open After=network.target [Service] User=root # -p [PORT] # -l [user] # -M 0 --> no monitoring # -N Just open the connection and do nothing (not interactive) # LOCALPORT:IP_ON_EXAMPLE_COM:PORT_ON_EXAMPLE_COM ExecStart=/usr/bin/autossh -M 0 -N -o ServerAliveInterval=15 -o ServerAliveCountMax=5 -o ExitOnForwardFailure=yes -R 62001:127.0.0.1:22 -p 22 remote@vpn.mydomain.com #ExecStop=/usr/bin/killall -9 autossh RestartSec=5 Restart=always [Install] WantedBy=multi-user.target
Включаем сервис а автозагрузку на контроллере:
systemctl enable autossh.service
После запуска сервиса мы можем подключиться к контроллеру на сервере с помощью команды
ssh 127.0.0.1 -p 62001
Передача данных с контроллера в облако
Для передачи MQTT-сообщений с контроллера в облачный сервис используется MQTT-бридж, конфигурация которого настраивается на контроллере в файле \mnt\data\etc\mosquitto\conf.d\bridge.conf
connection wb_devices_cloud.wb_A7ZO7UCC address cloud_server.com notifications true notification_topic /client/wb_A7ZO7UCC/bridge_status topic /devices/# both 2 "" /client/wb_A7ZO7UCC topic /config/# both 2 "" /client/wb_A7ZO7UCC topic /rpc/# both 2 "" /client/wb_A7ZO7UCC username wb_A7ZO7UCC password your_mqtt_cloud_password
Затем выполните команду
service mosquitto restart
Если вы хотите передавать данные на несколько серверов одновременно, создайте несколько разделов connection
.
Возможные неполадки GPRS-соединения
Возможных причин отсутствия GPRS-подключения может быть несколько.
- Закончился оплаченный лимит трафика.
- Низкий уровень сигнала, плохой контакт антенны.
- СИМ-карты некоторых операторов рассчитаны только на 4G-сети, 3G-подключение установить с ними не получится.
- Проверьте, правильно ли вставлена СИМ-карта в слот.
- Возможно, СИМ-карта нерабочая.
- Ваш тарифный план не предусматривает пакетную передачу данных.
Прежде чем идти в личный кабинет и звонить провайдеру, можно выполнить ряд простых проверок.
Запустите команду
gammu networkinfo
Network state : home network Network : 250 01 (MTS, Russian Federation), LAC 18A6, CID 796B11 Name in phone : "MTS RUS" Packet network state : home network Packet network : 250 01 (MTS, Russian Federation), LAC 18A6, CID 796B11 Name in phone : "MTS RUS" GPRS : attached
Важно, что контроллер подключен к пакетной сети передачи данных
(GPRS : attached)
и GPRS-соединение установлено.
После этого оцените уровень сигнала в minicom командой AT+CSQ
Вы получите результат в виде 13,99
Первая цифра показывает мощность сигнала: > 9 — удовлетворительный, > 14 — хороший, > 19 — отличный. Низкие и нестабильные значения CSQ означают, что антенна плохо расположена, неаккуратно подключена, радиообстановка неблагоприятная.
Если обе проверки пройдены, но связи нет, обратитесь к провайдеру (загляните в личный кабинет), можете проверить СИМ-карту в смартфоне.