Меню Рубрики

Установка i2p raspberry pi

Заводим Raspberry Pi: установка, подключение, начало работы

Raspberry Pi — полноценный компьютер размером с кредитную карту. Контроллер умеет выводить изображение на дисплей, работать с USB-устройствами и Bluetooth, снимать фото и видео на камеру, воспроизводить звуки через динамики и выходить в интернет. Рассмотрим начало работы с одноплатнными компьютерами Raspberry Pi.

Платформы Raspberry Pi

Если вы только начинаете своё путешествие в мир Raspberry Pi, рекомендуем воспользоваться образовательным набором «Малина» и книгой Заводим Raspberry Pi.

Видеообзор

Установка и настройка

Включение компьютера

Если у вас нет карты памяти с ОС Raspbian, запишите образ самостоятельно.

Если хотите получить максимальную автономность — цветные сенсорные графические дисплеи превратят Raspberry Pi в настоящий планшетный компьютер.

Что то пошло не так

Если при загрузке Raspberry Pi появляется цветной квадрат, значит ваша версия операционной системы устарела. Для решения проблемы обновите ОС на SD карте .

Обновление пакетов

Для стабильной и правильной работы ОС Raspbian обновляйте версии пакетов программного обеспечения.

Операция может занять около получаса.

Теперь на операционной системе Raspbian установлены самые свежие программные пакеты.

Интерфейс I²C

Шина I²C — самый простой способ обмена информацией. Каждое подключенное к линии I²C устройство имеет свой адрес, по которому к нему обращается Raspberry Pi.

Линии интерфейса имеют встроенную подтяжку к питанию резисторами. Соответственно их невозможно использовать в качестве общих портов ввода/вывода в случаях, требующих отключения подтяжки.

Включения шины

По умолчанию шина I²C отключена. Для включения выполните следующие действия.

В ответ вы должны увидеть полотно файлов, среди которых: i2c-1 . Теперь вы можете использовать интерфейс I²C для коммуникации с датчиками и модулями.

I²C сканер

Список с адресами устройств, подключенных к линии I²C можно получить программой i2cdetect из пакета i2c-tools :

Интерфейс SPI

SPI — последовательный четырёх-проводной интерфейс передачи данных, предназначенный для обеспечения простого и недорогого высокоскоростного сопряжения микроконтроллеров и периферии.

Raspberry Pi имеет одну шину SPI — SPI0. Но более новые версии одноплатника, например Raspberry Pi 3 Model B, обладают двумя шинами: SPI0 и SPI1

Включения шины SPI0

По умолчанию шина SPI0 отключена. Для включения выполните следующие действия.

В ответ вы должны увидеть полотно файлов, среди которых два: spidev0.0 и spidev0.1 . Это значит что у вас включён SPI0 с возможностью подключения двух ведомых устройств. Теперь вы можете использовать интерфейс SPI для коммуникации с датчиками и модулями.

Включения шины SPI1

Если вы используете Raspberry Pi 3 Model B, то вам доступно две шины SPI: SPI0 и SPI1 .

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

В ответ вы должны увидеть полотно файлов, среди которых три отвечают за SPI1: spidev1.0 , spidev1.1 и spidev1.2 .

Если у вас включена шина SPI0, то будут ещё два файла: spidev0.0 и spidev0.1 .

Это значит что у вас включён SPI0 с возможностью подключения двух ведомых устройств и SPI1 с возможностью подключения трёх ведомых устройств.

Интерфейс UART

UART (Serial) — асинхронный интерфейс передачи данных, последовательно передающий биты из байта данных. Асинхронная передача позволяет осуществлять передачу данных без использования тактирующего сигнала от передатчика к приёмнику. Вместо этого приёмник и передатчик заранее договариваются о временных параметрах и специальных «стартовых битах», которые добавляются к каждому слову данных для синхронизации приёмника и передатчика. Существует множество устройств, с которыми Raspberry Pi может обмениваться данными по UART протоколу.

источник

Установка LAMP и создание I2P сайта на Raspberry Pi

Установка LAMP и создание I2P сайта на Raspberry Pi

1. Установка LAMP (Linux + Apache + MySQL + PHP)

а) Устанавливаем Apache + PHP:

Теперь введите IP-адрес Raspberry Pi и вы должны увидеть надпись на странице «It works!». Значит Apache установлен и работает.

Чтобы включить Htaccess нужно изменить конфиг файл:

Жмем [Ctrl]+[X] затем Y проверяем путь и нажимаем Enter и еще раз перезагружаем Apache.

После установки пароля для root пользователя жмем Enter и ждем окончания установки.

В процессе установки Вас попросят ввести пароль root пользователя (который мы установили в предыдущем пункте).

Это нужно чтобы установить свои таблицы с настройками.

Также Вас попросят установить пароль в админ панель базы данных.

После удачной установки вновь сделаем рестарт Apache.

Сделаем помощь Apache, подключив конфигурации для веб-сервера от phpmyadmin.

И в самый конец файла вставим:

Жмем [Ctrl]+[X] затем Y проверяем путь и подтверждаем Enter.

И опять повторно перезапускаем Apache.

Пробуем зайти в PMA (http://ip-адрес Raspberry Pi/phpmyadmin)

На этом установка LAMP завершена.

Перейдем к установке I2P и запуску сайта.

2. Установка I2P

Далее в Paspberry Pi введите:

P.S. Если вы попытаетесь установить его через SSH у вас ничего не выйдет.

После успешной установки запустите I2P роутер:

И дождитесь пока туннели не запустятся (это примерно 2 минуты).

После того как туннели запустятся переходим к запуску сайта.

3. Настройка и запуск сайта

а) Заходим в менеджер туннелей и находим кнопку — Новый серверный туннель: создать.

Нажимаем на ее, предварительно выбрав в выпадающем списке «HTTP».

б) В появившийся форме заполняем несколько полей:

  • Название(N). Нужно для отображения в списке туннелей (назвать можно по любому, но чтобы не запутаться называем также как и домен сайта)
  • Адрес(H). Оставляем неизменным: 127.0.0.1
  • Порт(P). Также оставляем неизменным: 80
  • Имя веб-сайта(W). Адрес сайта который вы будете использовать. Заполнять без http://

Поле Локальный адрес назначения(L) не заполнять, оно автоматически заполнится после создания тоннеля.

ВНИМАНИЕ! После создания туннеля сделайте бэкап файла указанного в поле Файл секретного ключа(k).

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

Он находится в корне папки /home/pi/i2p

Также желательно поставить галочку возле Автозапуск(A). Это необходимо в случаи аварийного отключения света в доме или по другими причинам перезагрузки Raspberry Pi. В дальнейшем при запуске I2P данный туннель будет запущен автоматически.

Дальнейшие настройки не трогаем (пока что, если надо будет вы их измените в процессе эксплуатации сайта) и жмем внизу страницы кнопку «Сохранить».

Все серверный туннель вашего сайта создан.

Осталось положить файлы сайта в /var/www и все! Сайт полностью запущен в I2P сети.

Примечание. Необязательно выполнять. Нужно только тем администраторами, которые собираются хостить на Paspberry Pi несколько I2P сайтов. Для этого нужно произвести соответствующую настройку Apache Virtual Hosts.

Сохраним файл и выйдем из nano.

Теперь создадим для другого сайта.

Скопируем файл namei2psite:

И изменим строку DocumentRoot и Directory на папку где лежим сайт namei2psite2

Создадим симлинк (символическую ссылку на один файл в другой директории):

После чего делаем рестарт Apache и сайты работают.

Примечание. Для лучшего понимания ОС, стоит добавить перенаправление созданного хоста на 127.0.0.1 в файл в /etc/hosts. Так мы укажем ОС, что сайт хостится у нас.

На этом настройка и установка I2P сайта завершена.

Удачи в освоении I2P сети.

Иногда бывает что в доме отключают свет и после его включения Paspberry Pi запускается, но i2p router не запускается вместе с ним. Чтобы это исправить достаточно добавить в автозагрузку скрипт запуска роутера.

И в конец файла добавьте эту строчку:

Перезагрузите Paspberry Pi и проверьте что после его запуска i2p router сам запуститься.

источник

Установка i2p raspberry pi

GitHub is home to over 40 million developers working together to host and review code, manage projects, and build software together.

Clone with HTTPS

Use Git or checkout with SVN using the web URL.

Downloading

Want to be notified of new releases in m6urns/i2pberry ?

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio

Latest commit

Files

torrents updated trackers Jan 28, 2015

LICENSE Added license Jan 19, 2015

README.md Merge pull request #8 from RussianBruteForce/master Oct 27, 2018

i2p-setup updated i2p-setup Jan 16, 2015

i2pd-setup created i2pd-setup, made notes, actual work tomorrow Feb 2, 2015

All versions will be distributed via torrent, found in the torrents directory.

  • Fully featured installation of I2P
  • Fail2ban for login monitoring
  • SSH hardening (changed the port, disabled root login, really more of a deterrent)
  • UFW for firewalling

Thanks to David at https://github.com/TheTinHat for the updated installation script!

  • Version taking advantage of I2Pd
    • I’ve been watching the development of i2pd and I’m waiting for their release of an offical ARM port. Once that happens VC1.0 will be relased, hopefully performance will be greatly improved.
  • Onion routeresq plug n play easiness
  • Some integration with ufw so ports don’t have to be opened manually
    • Maybe some kind of integration with the intial bootstrap script giving you the option to open extra user selected ports
  • Automate opening console to network traffic, with user input.

Download the image and write it to your SD card. 4 GB is the recommended minimum. You can get away with two if you want.

Connect to your raspberry either through SSH or physically.

  • Expand your SD card.
  • CHANGE YOUR PASSWORD!
  • Dial down your overscan (16)
  • Overclock if you want

Use i2p-bootstrap to setup your installation. The script is located in /usr/bin It must be run as root. Allow it to do it’s thing, respond intelligently to prompts.

Lynx will open, configure your bandwidth and any other settings.

You will now need to login on the 2121 SSH port. Due to «hardening». Also root login is disabled on SSH. So you will need to use user.

You may need to configure /var/lib/i2p/i2p-config/clients.config to allow local network access. If you do, use a PASSWORD! (Configure that from the webui)

If your having trouble with the connecting to the webui through the fire wall you can open a port to traffic using

Because of the firewall, you need to manually open ports, the process is identical to what is detailed above, only the port will change.

List of ports you may want open:

*These are open by default, maybe you want to close them, I don’t know.

источник

Самодельный роутер и мини-сервер на Raspberry Pi — Часть 2 (программы)

В прошлой статье было рассказано об аппаратной части самодельного сервера (роутера) и его конструкции. В этой статье я расскажу как установить и настроить операционную систему Raspbian (GNU/Linux), подготовить программы для работы с сетью: ssh, iw, iptables, hostapd, isc-dhcp, wvdial, minicom.

Также, приведу простые скрипты на языке Python для вывода информации на дисплей SSD1306, воспроизведения звуковых сигналов, считывания информации с кнопок и другую полезную информацию.

Структура сети и ее работа

Поскольку наш самодельный мини-сервер будет выполнять роль сетевого маршрутизатора (роутер, router), то целесообразно предварительно спланировать структуру сети с использованием данного устройства.

Рис. 1. Структура сети, управляемой самодельным маршрутизатором (роутером) построенном на основе Raspberry PI.

Маршрутизатор может быть подключен к интернету используя один из каналов:

  1. Проводной, через USB-ethernet адаптер (интерфейс eth1);
  2. Беспроводный, через USB 3G адаптер (интерфейс ppp0).

Сетевые устройства могут быть подключены к маршрутизатору через следующие каналы:

  1. Проводной (eth0) — через сетевой свич (Ethernet switch): сервер, рабочая станция, ноутбук и т.п.
  2. Беспроводной (wlan0) — Wi-Fi: смартфон, планшет, ноутбук и другие беспроводные устройства.

USB-3G модем используется как резервный вариант в случае пропадания проводного канала, также возможно использовать его как основной канал.

Пропускная способность проводной сети составит 100Мбит/c. Она ограничена скоростью встроенного Ethernet-порта Raspberry Pi, USB-Ethernet адаптера, а также скоростью сетевого коммутатора.

Пропускная способность беспроводной сети может колебаться в значительных пределах и зависит от качества Wi-Fi сигнала между соединенными устройствами. Скорость интернета в варианте с 3G-модемом зависит от выбранного тарифа, уровня сигнала и возможностей самого модема.

В данном случае, внешние сетевые интерфейсы — это eth1 и ppp0, а внутренние — eth0 и wlan0.

  • eth0 — 192.168.1.1 /24
  • wlan0 — 192.168.2.1 /24
  • eth1 — DHCP (получаем адрес от интернет-провайдера)
  • ppp0 — PPP (получаем адрес от интернет-провайдера)

Пулы адресов, зарезервированные для DHCP-сервера, который будет обслуживать внутренние LAN и WLAN сети:

  • eth0: 192.168.1.10 — 192.168.1.100
  • wlan0: 192.168.2.10 — 192.168.2.100

Остальные доступные адреса можно использовать для устройств со статическими сетевыми настройками или же чтобы обозначить какое-то конкретное устройство.

Например, можно выделить тестовому серверу легко запоминающийся адрес 192.168.1.111 (подключение по кабелю), а рабочему ноутбуку — 192.168.2.2 (подключение по Wi-Fi).

Все устройства из подсети 192.168.1.1/24 будут доступны для связи устройствам из подсети 192.168.2.1/24 и наоборот. Таким образом можно будет осуществлять коммуникацию между сетевыми устройствами, которые подключены к проводному и беспроводному (Wi-Fi) интерфейсам роутера.

Сетевые пакеты, проходящие через любой из интерфейсов ppp0 или eth1 (интернет-трафик), будут транслироваться с изменением их адресов (masquarade, NAT) для использования во внутренней сети.

Также, на этих интерфейсах выполним фильтрацию входящих пакетов и защиту от вторжений используя мощь iptables.

Есть еще важный нюанс: если у вас уже установлен интернет-маршрутизатор с IP-адресом в подсети 192.168.1.x то при подключении к нему малинового роутера для интерфейсов нужно будет выбрать и настроить подсети с другими номерами, например: для eth0 — 192.168.10.x., а для wlan0 — 192.168.20.x.

В интернет-маршрутизаторе уже могут быть задействованы подсети 192.168.1.x (для проводных подключений) и 192.168.2.x (для беспроводных, Wi-Fi), таким образом, выбрав другие номера подсетей для малинового роутера мы предотвратим конфликты в маршрутизации.

Ниже привожу рисунок со схемой, иллюстрирующей два варианта подключения самодельного роутера на основе Raspberry Pi к интернету:

  1. Напрямую к каналу интернет провайдера;
  2. Через домашний маршрутизатор.

Рис. 2. Схемы подключения самодельного маршрутизатора к интернету — напрямую и через промежуточный роутер.

Поскольку на малинке для сетевого интерфейса eth1 у нас будет настроен NAT (Network Adresses Translation, служба маскировки сетевых адресов), то (смотри рисунок 2):

  1. При прямом подключению к провайдеру, все узлы из его сети с IP-адресами вида 10.x.x.x не будут иметь доступа к устройствам вашей внутренней подсети;
  2. При подключении через домашний роутер «Home Router», все подключенные к нему устройства не смогут увидеть устройства, что подключены к интерфейсам малинки. Сети предоставляемые малинкой будут защищены от доступа со стороны устройств, что подключены к «Home Router». У вас получится такая себе «персональная подсеть», изолированная от основной домашней сети.

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

Можем приступать к реализации схемы.

Подготовка Micro-SD карты с Raspbian

Раньше, в одной из статей, я уже подробно описывал процесс установки Raspbian на Micro-SD карту в операционных системах (ОС) Microsoft Windows и GNU/Linux, также там описаны нюансы подбора флешь-карточки и другиая полезная информация. Поэтому, здесь я лишь кратко распишу как установить Raspbian.

Скачиваем архив с образом операционной системы с официального сайта Raspbian.

В данном случае, мною был скачан архив «2018-04-18-raspbian-stretch.zip» (1,6Гб), в котором запакован файл «2018-04-18-raspbian-stretch.img» (4,6Гб) — образ операционной системы Raspbian Stretch (Debian 9). Я сохранил его в папку «/home/master/Downloads» на своем рабочем Linux-ПК.

Установим архиватор 7-Zip (для распаковки архива) и программу «pv» (для мониторинга за потоком данных):

Установим Micro-SD карту в карт-ридер и узнаем название ее блочного устройства:

Вместо «X» подставьте букву для своего полученного устройства и можно приступать к процессу записи образа ОС на карту памяти:

Запустим команду для сброса буферов записи и дождемся завершения ее работы:

Теперь можно смело извлечь Micro-SD карту из карт-ридера и установить ее в компьютер Raspberry Pi.

Первое включение и базовая настройка Raspbian

Подключаем к нашему самодельному мини-серверу USB-клавиатуру и мышь (удобно использовать беспроводный комплект), к HDMI-выходу подключаем монитор. Включаем питание.

Дожидаемся загрузки графического интерфейса и запускаем программу «Терминал» (Консоль). В терминале запускаем конфигуратор малинки:

Change User Password — устанавливаем пароль доступа, желательно длиной от 8 и более символов.

Network options -> Hostname — меняем название системы, например на «myserver».

Boot options:

  • Desktop / CLI ->Text console, requiring user to login — отключаем запуск графической оболочки при старте системы, будет загружена консоль с запросом авторизации. В будущем для запуска графической среды достаточно будет выполнить команду «startx» из консоли.
  • Wait for Network at Boot ->Yes — ожидать завершения инициализации сетевой подсистемы при старте.
  • Splash Screen ->Would you like to show the splash screen at boot? ->No — не отображать заставку при старте.

Localisation Options -> Change Locale:

  • en_US.UTF-8, ru_RU.CP1251, ru_RU.KOI8-R, ru_RU.UTF-8, uk_UA.UTF-8, uk_UA.KOI8-R;
  • Default locale for the system environment ->en_US.UTF-8 — выбор системной локали по умолчанию, если желаете то можете выбрать украинскую или русскую.

Localisation Options -> Change Timezone — установка временной зоны, например Europe -> Kiev.

Localisation Options -> Change Keyboard Layout:

  • Generic 105-key (Intl) PC
  • English UK
  • Key to function as AltGr ->The default for the keyboard
  • Compose key ->No compose key
  • Use Control+Alt+Backspace to terminate teh X server? ->No

Localisation Options -> Change Wi-fi Country — выбор страны для Wi-Fi, например «UA Ukraine». Очень важная настройка!

Interfacing options:

  • SSH ->Would you like the SSh server to be enabled? ->Yes — включаем SSH-службу для удаленного доступа к консоли по сети;
  • I2C ->Would you like the ARM I2C interface to be enabled?Yes — включаем I 2 C-шину для доступа к дисплею SSD1306 и часам реального времени DS1307;
  • 1-Wire ->Would you like the one-wire interface to be enabled?Yes — включаем 1-Wire шину для доступа к датчику температуры DS18B20.

Advanced options:

  • Expand filesystem — расширяем файловую систему ОС для использования всего доступного на Micro-SD карте пространства;
  • Memory Split ->64 — выбираем количество оперативной памяти, выделяемое под графический адаптер. Значение 64МБ — оптимальное если планируется использовать графическую оболочку, в противном случае можно установить 32МБ или 16МБ.

Подключение к сети и обновление ПО

Для возможности удаленного доступа к малинке через SSH выполним первичную настройку проводной сети. Это позволит удобно выполнять настройки, копировать файлы и редактировать скрипты.

Подключим малинку к ноутбуку или рабочему ПК используя сетевой кабель и сетевой коммутатор. Можно также непосредственно подключить два устройства без сетевого коммутатора, в таком случае понадобится сетевой кабель RJ-45 c перевернутой разводкой проводов (кросс).

На ноутбуке (или ПК) установим статический IP-адрес — 192.168.1.2.

Начиная с Raspbian Stretch (Debian 9) статические настройки для сетевых интерфейсов прописываются в конфигурационном файле для DHCP клиента (DHCP Client Daemon) — «/etc/dhcpcd.conf». В более старых версиях ОС, например Raspbian Jessie (Debian 8) — это делалось с помощью файла «/etc/network/interfaces».

Теперь, присвоим на малинке интерфейсу eth0 сетевой адрес 192.168.1.1. Для добавления настроек статической адресации откроем файл «dhcpcd.conf»:

Добавляем в самый низ файла следующие строчки:

Выходим из редактора (CTRL+X), подтверждаем сохранение содержимого файла (Y + ENTER).

Выполним перезагрузку Raspbian:

Проверяем есть ли связь на ноутбуке (ПК) с сетевым адресом 192.168.1.1, пробуем подключиться к Raspberry PI используя этот же адрес:

Будет запрошен пароль для авторизации по SSH — мы установили его на этапе начальной конфигурации.

Теперь, подключившись к Raspberry Pi удаленно по SSH, можно отключить клавиатуру и мышь от мини-компьютера. Но прятать далеко их не стоит, они еще могут понадобиться в случае если не удастся выполнить подключение к малинке по SSH и для решения других возможных проблем в процессе настройки.

Подключаем USB-Ethernet адаптер к одному из свободных USB-портов самодельного роутера, также подключаем к этому же адаптеру сетевой кабель с интернетом от провайдера или модема/роутера.

USB-Ethernet адаптер должен автоматически определиться малинкой, а его интерфейс получить IP-адрес, сетевой шлюз (Gateway) и список DNS-серверов от провайдера интернета или домашнего роутера.

Смотрим список доступных сетевых интерфейсов и их конфигурацию, список активных сетевых маршрутов, а также список DNS-серверов, полученных по DHCP:

На малинке должен появиться интернет. Проверим доступен ли DNS-сервер Google:

Теперь можно выполнить обновление списков пакетов и обновить уже установленное программного обеспечение:

Настроим автоматическую установку критических обновлений безопасности:

На запрос последней команды отвечаем утвердительно — Yes.

Выполним принудительный запуск unattended-upgrades для проверки работоспособности:

На этом этапе желательно перезагрузить Raspberry Pi и повторно проверить работоспособность сети и интернета.

Установка необходимого программного обеспечения

Выполним установку необходимого для работы и функционирования программного обеспечения. Базовый набор инструментов:

  • mc — Midnight Commander, консольный двухпанельный файловый менеджер;
  • htop — мониторинг производительности и ресурсов системы;
  • p7zip-full — мощный архиватор 7Zip;
  • tmux — Terminal Multiplexor, удобный мультифункциональный эмулятор терминалов.

Полезности для работы с USB-модемом:

  • usb-modeswitch — набор скриптов для автоматического переключения режима работы модемов;
  • wvdial — программа дозвона для модема;
  • ppp — служба для поддержки протокола Point-to-Point;
  • minicom — терминал с возможностью подключения к последовательным портам.
  • tcpdump — сниффер сетевых пакетов;
  • nmap — мощный сетевой сканер, легендарная программа;
  • netdiag — пакет, содержащий несколько полезных утилит, в особенности «trafshow» для мониторинга подключений;
  • hostapd — служба для создания беспроводной точки доступа IEEE 802.11 AP и IEEE 802.1X/WPA/WPA2/EAP авторизатор ;
  • isc-dhcp-server — популярный DHCP сервер.

Мониторинг дисковых операций:

  • iotop — мониторинг операций ввода-вывода (I/O);
  • sysstat — набор утилит для мониторинга производительности в GNU/Linux.

Оптимизация файловых систем

Для работы малинки в качестве роутера можно провести ряд оптимизаций, которые снизят количество операций записи на карту. Можно отключить логирование для некоторых программ и демонов, отключить отслеживание времени последнего доступа к файлам, а также перенести некоторые разделы на TMPFS (файловая система в оперативной памяти).

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

  • b — batch, включить не интерактивный режим;
  • k — отображать значения в Килобайтах;
  • t — показать временную метку для каждой строчки;
  • o — отобразить только активные процессы ввода-вывода;
  • qqq — не выводить суммарную информацию.

Увидим примерно следующую картину (фрагмент):

Также можно понаблюдать за суммарной статистикой ввода-вывода для накопителей данных, используя утилиту iostat:

  • d — отобразить отчет об использовании устройств;
  • z — не выводить данные для неактивных устройств;
  • p — отображать все блочные устройства и их разделы;
  • 5 — интервал обновления.

Вывод программы будет иметь следующий вид:

Таким образом, можно узнать какие системные и запущенные вручную программы наиболее активно обращаются к диску.

Перейдем непосредственно к оптимизациям, вот в чем они заключаются:

  • Отключаем операции записи временных меток доступа к папкам и файлам (noatime, nodiratime);
  • Переносим директории «/tmp», «/var/log», «/var/spool/mqueue» и «/var/tmp» в оперативную память (tmpfs);
  • Отключаем файл подкачки (swap).

Все эти меры помогут минимизировать количество операций записи на карту памяти.

Редактируем файл «fstab» с описанием всех монтируемых файловых систем:

Для раздела с точкой монтирования «/» добавляем флаги «noatime,nodiratime», также добавляем строчки для монтирования директорий в файловую систему «tmpfs». Примерный вид файла «fstab»:

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

Если нужно сохранять логи, или же временно включить их сохранение, то достаточно закомментировать строчку «tmpfs /var/log. «. Сейчас например закомментирована точка монтирования tmpfs для директории /var/spool/mqueue.

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

Еще один из вариантов хранения логов и другой статической информации — подключить и подмонтировать миниатюрный USB-флешь накопитель с размером памяти 2-8G.

Максимальные значения оперативной памяти, которые могут быть выделены для точек монтирования в приведенном случае:

  • /tmp — 256M;
  • /var/log — 50M;
  • /var/spool/mqueue — 20M;
  • /var/tmp — 256M.

В суме: 256 + 50 + 20 + 256 = 582(М).

Оперативная память в файловой системе tmpfs используется по мере необходимости, это значит что если в /tmp записать файл размером 10М, то при максимально допустимом размере файловой системы 256M реальной памяти будет использовано примерно 10М.

В Raspberry Pi 3 B установлено 1G оперативной памяти, поэтому если будут заполнены все файловые системы «tmpfs» (что маловероятно) то на все остальное останется примерно 400М.

В некоторых случаях (просмотр содержания больших архивов через mc, установка определенного ПО которое использует много места во временной файловой системе и т.п.) выделенной памяти в 256М для раздела /tmp может быть маловато.

Чтобы выйти из этой ситуации можно временно закомментировать строчку отвечающую за монтирвоание «tmpfs» для «/tmp», перезагрузить малинку и выполнить все нужные операции, а потом вернуть все как прежде. Также можно попробовать увеличить размер файловой системы с 256М до 512М.

Идем дальше. Осталось отключить и удалить файл подкачки:

В случае неполадок или ошибок после редактирования файла «fstab» операционная система может быть загружена в однопользовательском режиме, нормальный режим загрузки станет недоступным.

Чтобы исправить записи в файле «fstab» нужно перемонтировать корневую файловую систему в режиме записи и отредактировать файл fstab:

После внесения изменений перезагружаем малинку.

Сетевые настройки и SSH

Разрешим пересылку IPv4 пакетов между сетевыми интерфейсами, а также отключим сетевой протокол IPv6. Для домашней сети IPv6 избыточен, поэтому мы его использовать не будем.

Открываем для редактирования файл «/etc/sysctl.conf»:

Добавляем в самый низ его содержимого следующие строки:

Также включим защиту от некоторых сетевых атак с подменой данных (Spoofing attacks), для этого нужно раскомментировать две строчки в этом же файле:

Добавим в файл «/etc/network/interfaces» настройки для поддержки «горячего» извлечения сетевых устройств, относящихся к интерфейсам wlan0(может быть USB-адаптер, например в малинке 2-й версии) и eth1(USB-адаптер). Также укажем что эти интерфейсы настраиваются вручную (их настройками будет управлять сконфигурированный нами сетевой демон DHCPCD).

Добавляем описания для интерфейсов:

Раньше нами уже был прописан статический IPv4-адрес для интерфейса eth0, осталось задать статический адрес для интерфейса беспроводной сети wlan0. Также нам нужно запретить использование механизма WPA-авторизации, что позже позволит использовать этот сетевой интерфейс для создания на его основе беспроводной точки доступа (Wireless Access Point).

Заменяем ранее добавленные строчки для интерфейса eth0 следующим содержимым:

Вы можете ознакомиться с назначением директив в файле «dhcpcd.conf» используя встроенную справочную систему:

Перезагружаем малинку и смотрим статус службы dhcpcd:

Смотрим присвоены ли нужные нам статические IP-адреса для интерфейсов eth0 и wlan0:

Вы можете заметить что интерфейсу wlan0 не присвоен установленный нами IP-адрес, в действительности здесь все нормально — он появится позже, когда интерфейс будет инициализирован после настройки беспроводной точки доступа.

Фикс уязвимостей CVE-2016-0777 и CVE-2016-0778 для безопасности SSH-клиента:

Добавить вниз файла строку:

В SSH-демоне по умолчанию включено выполнение DNS-запросов для получения имени удаленного хоста (который питается подключиться), эта возможность используется для того чтобы убедиться что обратное преобразование имени вернет идентичный IP-адрес, служит в целях безопасности. Следующий фикс ускорит SSH-подключения к нашему самодельному серверу из машин в локальной сети.

Нужно найти (CTRL+W) и раскомментировать строку:

Мощность передатчика Wi-Fi карты, регуляторный домен

В Raspberry Pi 3 (model B) встроен достаточно мощный модуль Wi-Fi. Мне нигде не удалось найти точных данных о выходной мощности беспроводного модуля для малинки, поэтому определил ее примерное значение экспериментально.

Значения мощности часто указывают по логарифмической децибельной шкале — в Децибелах (дБ, Decibel, dB). Если измерение выполняется относительно единицы мощности милливатт (мВт), то в децибеллах (дБ) это значение обозначается как «дБм» или «dBm» (0 dBm = 1mW).

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

Значение, дБм Значение, мВт Значение, дБм Значение, мВт
-1 0,8 21 125
1 22 160
1 1,259 23 200
2 1,6 24 250
3 1,995 25 320
4 2,5 26 400
5 3,2 27 500
6 3,981 28 640
7 5 29 800
8 6,4 30 1000
9 8 31 1250
10 10 32 1600
11 12,5 33 2000
12 16 34 2500
13 20 35 3200
14 25 36 4000
15 32 37 5000
16 40 38 6400
17 50 39 8000
18 64 40 10 000
19 80 50 100 000
20 100 60 1000 000

Увеличение мощности передатчика на 1dBm равносильно ее увеличению в 10 0,1 раза или примерно в 1,259 раза. Каждое прибавление 3 дБ к мощности увеличивает ее в два раза, например: 10дБ (10мВт) + 3дБ = 13дБ (20мВт) или 30дБ (1Вт) + 3дБ = 33дБ (2Вт) и т.д.

Текущую мощность передатчика (txpower, Transmit Power) для беспроводного модуля с сетевым интерфейсом wlan0 можно узнать используя команду:

Получим примерно следующую информацию:

Здесь мы видим, что текущая выходная мощность передатчика (txpower) — 15 дБм, что равно 32мВт или 0,032Вт.

Чтобы узнать больше подробностей о текущих настройках и возможностях доступных беспроводных сетевых устройств, можно воспользоваться следующей командой:

На экран будет выведено много разной информации: поддерживаемые алгоритмы шифрования и режимы интерфейса, список возможных скоростей для передачи данных, каналов с указанием частот, поддерживаемые команды и многое другое.

Сейчас нас наиболее интересует раздел «Frequencies»:

В моем случае его вывод команды имеет следующий вид:

Здесь указаны 14 частот для 14-ти каналов, доступны из которых только 13 (14-й канал заблокирован, disabled). Выходная мощность для передатчика ограничена значением в 20 dBm (100 mW).

Выполняя базовую настройку Raspbian в разделе «Localisation Options -> Change Wi-fi Country» мы раньше установили страну для Wi-Fi — UA (Украина).

В каждой стане действуют свои правила и ограничения по использованию частот и беспроводного сетевого оборудования. Для большинства стран мира доступны каналы 1-13, а 14-й канал недоступен к использованию, исключением здесь является Япония, где в некоторых режимах работа на 13-м канале все же возможна. Для соединенных штатов доступны каналы 1-11.

Для реализации правил использования частот при работе с сетевым оборудованием в разных странах используются регуляторные домены.

Регуляторный домен (Regulatory Domain, regdomain) — это специальный набор правил, специфичный для каждой страны, который регулирует использование частот, может ограничивать мощность радиопередатчика, не допускать использование некоторых технологий и возможностей при передаче данных в беспроводных сетях.

При работе с регуляторными доменами в GNU/Linux используется CRDA (Central Regulatory Domain Agent). Чтобы узнать правила и ограничения регуляторного домена для вашей страны можно воспользоваться публичной базой данных —

Скачиваем самый свежий архив, открываем файл «db.txt» и ищем там индекс своей страны. Пример для Украины:

Там же найдете ссылки на регуляторные документы своей страны и другую полезную информацию.

Чтобы узнать какой регуляторный домен используется в текущий момент на малинке, достаточно выполнить следующую команду:

В моем случаем вывод команды будет почти идентичным (за исключением комментария), как и в примере из файла «db.txt» для Украины. Здесь видно что для диапазона частот 2400 — 2483(МГц) выходная мощность передатчика ограничивается значением 20dBm (100 мВт).

В данном случае, попытка установить мощность передатчика выше 20dBm, скорее всего, не даст практического результата — мощность будет ограничиваться текущим регуляторным доменом (ядром ОС, использующим этот набор правил).

Для установки или смены регуляторного домена в GNU/Linux применяется следующая команда:

Здесь вместо «UA» может быть «US», «VE» или другой код страны. Сменив регуляторный домен, мы сменим правила, по которым ядро ОС применяет ограничения при использовании беспроводных сетевых устройств.

Есть регуляторные домены, в которых для некоторых частот запрещено использовать режим точки доступа (AP, Access Point), поэтому нужно с ответственностью и пониманием отнестись к установке этой опции.

Чтобы обойти ограничение на 20dBm, в моем случае можно выбрать регуляторный домен «VE» и изменить мощность передатчика в большую сторону — 30dBm, но это уже будет нарушением правил по использованию частот для моей страны. К тому же, мне не нужна такая большая мощность, даже наоборот — мы будем ее снижать, зачем нам лишнее излучение вокруг нас.

Установить мощность Wi-Fi передатчика для интерфейса wlan0 можно следующей командой:

В данном случае «10» — это значение мощности в дБм (dBm), которое равно 10мВт. Такой мощности может вполне хватить чтобы покрыть беспроводной сетью небольшую комнату, в которой расположен роутер.

Данное изменение будет действовать только до перезагрузки ОС. Чтобы установка требуемого значения мощности выполнялась каждый раз при загрузке ОС, нужно добавить вышеуказанную команду в какой-то из скриптов, запускаемых при старте системы.

Мы же заставим эту команду выполняться при готовности сетевого интерфейса, в файле «/etc/network/interfaces». Там же можно и добавить команду установки регуляторного домена, если нужно. Откроем этот файл в редакторе:

Добавим секцию из двух строчек для интерфейса wlan0, настройки получат следующий вид:

Статический IP-адрес для этого интерфейса мы уже раньше указали в файле «/etc/dhcpcd.conf», поэтому здесь ничего больше добавлять не нужно.

Перезагружаем малинку и смотрим установилась ли нужная мощность передатчика и нужный регуляторный домен:

Настройка брандмауэра IPTables, роутинг и защита

С помощью IPTables мы будем выполнять следующие задачи:

  • Разрешим пересылку сетевых пакетов между внутренними подсетями (интерфейсы eth0, wlan0);
  • Выполним трансляцию сетевых пакетов (NAT, masquarade) через интерфейсы, которые выходят в интернет (ppp0, eth1);
  • Разрешим подключение к роутеру через внутренние интерфейсы eth0, wlan0 используя порт 22 (SSH);
  • Разрешим все входящие пакеты, относящиеся к уже установленным подключениям (для цепочек INPUT и FORWARD);
  • Запретим все остальные входящие соединения на любом из сетевых интерфейсов;
  • Ограничим возможность сканирования роутера с использованием TCP-пакетов со специальными флагами.

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

На роутере будет открыт для подключения только порт 22 (SSH, для администрирования), все остальные попытки «достукаться» до роутера со стороны провайдера или другого промежуточного маршрутизатора (через интерфейсы eth1, ppp0) будут бесполезны. Ваш роутер не смогут даже «пропинговать» (командой ping) снаружи, поскольку будут отсекаться все ICMP-пакеты.

Если же вам не нужна такая жесткая политика, то вы можете настроить брандмауэр на свое усмотрение, исправив, добавив или удалив какие-то из правил.

Для построения набора правил IPTables в Raspbian можно использовать пакет «iptables-persistent», который при каждом старте ОС будет выполнять загрузку правил брандмауэра с ранее сохраненной конфигурацией.

Я же предлагаю использовать отдельный скрипт, который будет загружаться системой через systemd. В одной из статей я приводил скрипт IPTables для ipv4 и ipv6 с автозагрузкой в Linux, здесь будет использована немного упрощенная (без IPv6) и модифицированная версия этого скрипта.

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

Вставляем в окно редактора следующий код:

В начале скрипта указаны названия задействованных интерфейсов:

  • ETH — проводной сетевой интерфейс (внутренняя сеть)
  • WLAN — беспроводной (Wi-Fi) сетевой интерфейс (внутренняя сеть)
  • PPP — беспроводной (USB-3G) сетевой интерфейс (Internet)
  • ETH_EXT — проводной сетевой интерфейс (Internet)

В самом начале статьи была приведена схема сети с использованием будущего роутера на основе малинки, не ленитесь еще раз на нее взглянуть чтобы более четко понять структуру сети и работу скрипта с правилами IPTables.

В процедуре «Flush_Rules» выполняется очистка правил для всех цепочек брандмауэра, установка разрешающей (ACCEPT) сетевой политики для всех цепочек. Процедура «Load_Rules» выполняет загрузку прописанных нами правил с указанием различных опций и цепочек фильтрации.

В конце, с помощью конструкции «case $1 in», выполняется анализ и применение переданной скрипту команды (start, stop, restart), запускаются выше указанные процедуры «Flush_Rules» и «Load_Rules в нужном порядке.

Чтобы скрипт можно было запускать на исполнение, его файлу нужно дать соответствующие права:

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

Когда скрипт готов, можно приступать к созданию специального юнита для systemd, который будет выполнять автозапуск скрипта при старте ОС.

Содержимое файла будет таким:

Разрешим использование новосозданного юнита демоном systemd:

Дадим юниту команду на старт, проверим состояние таблиц IPTables:

Также можно вывести список уже загруженных в IPTables правил в более удобном виде, с нумерацией строк:

Беспроводная точка доступа (Access Point) на основе HOSTAPD

Поскольку наш роутер будет предоставлять возможность подключения к нему по Wi-Fi, давайте выполним настройку отвечающей за это службы hostapd.

Hostapd (Host Access Point Daemon) — это демон, работающий в фоновом режиме и отвечающий за организацию беспроводной сетевой точки доступа стандарта IEEE 802.11 на основе имеющегося Wi-Fi адаптера с поддержкой этого режима. Также это демон берет на себя функции авторизации клиентов и выполняет другую связанную работу.

Чтобы убедиться что сетевой Wi-Fi адаптер малинки поддерживает режим точки доступа (Access Point, AP), выведем еще раз, как в разделе о настройке мощности передатчика, информацию о беспроводных интерфейсах:

Смотрим секцию «Supported interface modes», в моем случае ее содержимое выглядит вот так:

Как видим, режим «AP» присутствует, значит можно продолжать.

Пакет «hostapd» уже был ранее нами установлен, на этапе установки необходимого программного обеспечения. Приступаем к настройке. Открываем для редактирования конфигурационный файл демона hostapd:

Приводим его содержимое к такому виду:

Это минимальный набор опций для организации беспроводной точки доступа. Опции которые вам следует изменить на свое усмотрение:

  • «ss — пароль для доступа к беспроводной сети. Установите сложный и надежный пароль, с использованием 10-20 символов, включая буквы, цифры и специальные знаки.

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

Нужно расскомментировать строчку «DAEMON_CONF=» и указать в ней путь к файлу hostapd.conf:

Перезапускаем службу hostapd и смотрим ее статус после запуска:

В новых версиях Raspbian эта служба по умолчанию скрыта (masked). Поэтому после попытки запустить hostapd вы можете получить сообщение об ошибке:

В данном случае нужно разблокировать службу и запустить ее, делается это следующими командами:

Теперь можно попробовать подключиться к точке доступа, используя ноутбук или смартфон, правда ни одно из устройств не получит сетевых настроек, потому что нужно еще настроить сервер DHCP.

Настройка демона ISC-DHCP-Server

Раньше мы уже выполнили установку пакета «isc-dhcp-server».

ISC DHCP Server (Internet Systems Consortium Dynamic Host Configuration Server) — это программа, работающая в фоновом режиме (служба, демон), которая отвечает за автоматическую выдачу сетевых настроек для разных устройств.

  • https://www.isc.org/ — официальный сайт Internet Systems Consortium

Документация по ISC DHCP Server доступна во встроенной справочной системе GNU/Linux, используем команды «man»:

Планируя структуру сети в начале статьи мы уже определились с пулами адресов для сетевых интерфейсов, которыми будет орудовать DHCPD:

  • eth0: 192.168.1.10 — 192.168.1.100
  • wlan0: 192.168.2.10 — 192.168.2.100

Открываем для редактирования конфигурационный файл DHCP сервера — dhcpd.conf (не путать с dhcpcd.conf для DHCP клиента):

Укажем что этот DHCP-сервер будет официальным в сети, для этого ищем строчку «#authoritative;» и раскомментируем ее, убрав значек решотки:

Добавляем в самый низ файла две секции с описанием параметров выдачи адресов и настроек для подсетей:

Также, по желанию, можно привязать какой-либо фиксированный IP-адрес к какому-то устройству по его MAC-адресу. Например, сделаем так, чтобы тестовый лептоп с мак-адресом сетевой карты «00:0c:12:b6:f2:c8» всегда получал IP-адрес «192.168.1.55», для этого добавим в конец файла «dhcpd.conf» еще одну секцию:

По завершению редактирования конфигурационного файла DHCPD выполним проверку его синтаксиса:

Если нет никаких предупреждений и указаний о наличии ошибок — значит все отлично!

По умолчанию DHCPD будет пробовать работать на всех доступных сетевых интерфейсах — нам это не нужно, поскольку eth1 у нас подключен к интернету и с ним уже работает служба DHCP клиента — dhcpcd.

Поэтому укажем DHCP серверу работать только с интерфейсами eth0 и wlan0:

Прописываем названия интерфейсов для IPv4 через пробел:

Запускаем службу и смотрим ее состояние:

Наблюдать за всеми событиями служб DHCP сервера и клиента можно с помощью следующей команды:

DHCP сервер от ISC сохраняет внутреннюю базу данных о выданных когда-либо адресах и параметрах подключаемых устройств, эту информацию удобно использовать как для отладки, так и в других целях. Посмотреть файл базы данных можно командой:

Содержимое и структура этого файла хорошо описаны во встроенной справочной системе:

Теперь можно попробовать подключить к роутеру другие сетевые устройства и убедиться что они получают корректные сетевые настройки. Подключенному устройству будут назначены следующие адреса:

  • IP-адрес с подсетью 192.168.1.ххх для проводного подключения и с подсетью 192.168.2.ххх для беспроводного;
  • Шлюз (Gateway) 192.168.1.1 для проводного подключения и 192.168.2.1 для беспроводного;
  • Публичные DNS-сервера от OpenDNS (208.67.222.222, 208.67.220.220).

Подключив к USB-разъему малинки USB-Ethernet адаптер, который в свою очередь подключен сетевым кабелем к другому маршрутизатору с DHCP-сервером на борту или же интернет-провайдеру, мы получим работающий интернет как на малинке, так и на подключенных к ней сетевых устройствах.

Маршрутизатор на основе Raspberry Pi должен уже работать.

Решение проблемы старта isc-dhcpd и активации сетевых интерфейсов

После нескольких перезапусков роутера на основе малинки вы можете столкнуться с проблемой, когда подключаемые к нему сетевые устройства не могут получить сетевых настроек (IP, Gateway, DNS) по протоколу DHCP.

Причина этому — запуск демона DHCPD, прежде чем сетевые интерфейсы станут активными и получат указанные нами в настройках DHCPCD статические IP-адреса.

Смотрим логи системы с момента ее запуска:

Там можно встретить следующие предупреждения для сетевых интерфейсов (пример для eth0):

Это означает, что в конфигурационном файле «dhcpd.conf» нет описания подходящей зоны для сетевого интерфейса eth0 с IP-адресом и подсетью которые ему назначены на данный момент. Поэтому обслуживание этого интерфейса будет игнорироваться.

По сути, интерфейс eth0 еще не успел получить статический IP-адрес и подсеть, указанный в настройках DHCPCD. Такое же предупреждение появится и для второго интерфейса — wlan0.

Для решения проблемы можно попробовать переназначить приоритеты для запуска служб, то есть запускать DHCPD на более позднем этапе загрузки, после инициализации DHCPCD и сетевой подсистемы в целом.

На форуме raspberrypi.org нашел описание решения подобной проблемы, заключается оно в создании копии юнит-файла «isc-dhcp-server.service» для systemd, с указанием дополнительных опций «Restart=on-failure» и «RestartSec=5», что позволило бы при неудачном старте или сбое (failure) демона «isc-dhcp-server» выполнить его автоматический перезапуск через 5 секунд.

Подобное решение мне показалось интересным, но оно не заработало, и вот почему. Предупреждение в логах системы гласит что в файле «dhcpd.conf» отсутствует описание зоны для закрепленной за интерфейсом подсети. Интерфейс еще не успел получить настройки от DHCPCD, поэтому он просто игнорируется службой DHCPD.

Сама же служба DHCPD при этом не «падает» (failure) и продолжает работать, выводя в системный лог предупреждение (warning). Таким образом, опция «Restart=on-failure» в юнит-файле проблему не решит.

К тому же, подобное копирование и изменение системного юнит-файла «isc-dhcp-server.service» может привести в будущем к проблемам при получении обновлений для пакета isc-dhcp-server.

Решил разобраться с этой проблемой по своему — создать сторожевого песика (Watchdog), являющего из себя скрипт, который будет запущен при старте системы и проследит за получением сетевых адресов на указанных интерфейсах, после этого выполнит перезапуск службы «isc-dhcp-server».

Открываем для редактирования новый файл:

Вставляем в него следующий код:

Скрипт работает следующим образом:

  • запускается при старте ОС отдельно созданным для systemd юнит-файлом;
  • проходит в цикле через каждую пару [название_интерфейса]=IP из массива INTERFACES;
  • для каждого интерфейса делается 60 проверок наличия нужного IP-адреса с таймаутом 1 секунда;
  • после завершения проверок ждет 15 секунд и перезапускает isc-dhcp-server;

Таким образом, проверка с ожиданием может длиться максимум 60+60 секунд, после этого в любом случае через 15 секунд DHCPD будет перезапущен.

Здесь важно указать верные IP-адреса для сетевых интерфейсов eth0 и wlan0. Если планируется использовать еще какой-то сетевой интерфейс для внутренней сети (например eth2), обслуживаемый DHCPD и получивший IP-адрес (например 192.168.10.1) через DHCPCD, то его также можно добавить в массив строчкой «[eth2]=»192.168.10.1».

Дадим файлу скрипта право на запуск и откроем для редактирования новый файл с юнитом для systemd:

Поместим в него следующее содержимое:

Разрешим обработку юнита при старте ОС:

На всякий случай, можно еще добавить периодический перезапуск демона через crontab, откроем файл системного планировщика заданий для редактирования:

Добавим строчку с новым заданием:

Таким образом мы настроили перезапуск демона isc-dhcp-server в начале каждого часа (период 60 минут).

Настройка статического списка DNS-серверов

Список DNS-серверов, используемых системой, как правило содержится в файле «/etc/resolv.conf». По умолчанию, содержимое этого файла в Raspbian автоматически генерируется при запуске системы и может быть изменено различными службами (например DHCPCD, PPP и другими).

При подключении сетевого кабеля от провайдера интернета к USB-Ethernet адаптеру с интерфейсом eth1, этому интерфейсу будет присвоен IP-адрес от провайдера, в системе будет установлен маршрут по умолчанию (Default Route) с указанием шлюза провайдера, а также в файл «/etc/resolv.conf» будет помещен список DNS-серверов. Все эти действия выполняет сетевой демон DHCPCD (DHCP-клиент).

Мы можем сами указать список предпочитаемых DNS-серверов, поместив их в файл «/etc/resolv.conf», но после презагрузки системы или же после переподключения USB-Ethernet адаптера, все внесенные в файл изменения будут перезаписаны демоном DHCPCD.

Если вы действительно хотите использовать свой список DNS-серверов (например от Гугла), то нужно указать службе DHCPCD не выполнять «хук» (не «подцеплять») список NS-серверов, полученный от другого маршрутизатора по DHCP.

Добавим IP-адреса публичных серверов от OpenDNS:

Заменим содержимое файла строчками:

Теперь нужно отредактировать файл «/etc/dhcpcd.conf»:

Добавляем в нем строчку «nohook resolv.conf», вот пример из текущей конфигурации:

Данное ограничение на действия с файлом «/etc/resolv.conf» будет справедливо только для службы DHCPCD, другие программы и далее смогут вносить изменения в этот файл.

Чтобы полностью запретить изменение прописанных вручную DNS-серверов в файле «/etc/resolv.conf», его нужно защитить от перезаписи, важно заметить что манипуляции с командой «chmod -w» здесь не помогут. Для этой цели воспользуемся командой «chattr», которая служит для изменения атрибутов файлов.

Установим файлу «/etc/resolv.conf» атрибут «immutable» (не модифицируемый), который запретит переименование файла, создание символьных ссылок для него, не позволит записывать в него данные и запускать. Снять этот атрибут из файла может только суперпользователь — root.

Если нужно будет отредактировать файл, то с помощью следующей команды можно снять атрибут «immutable»:

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

В случае замены DNS-серверов, полученных от интернет-провайдера по DHCP, на любые другие, его внутренние сайты и ресурсы могут оказаться недоступными. Исправить это можно временной установкой DNS-серверов провайдера или же прописыванием статических записей с соответствием «хост-IP» часто используемых ресурсов из сети провайдера в файл hosts.

Важная заметка в плане информационной безопасности публичных DNS: делая запросы к разным сайтам и хостам в интернете их имена будут преобразовываться в IP-адреса используя для этого указанные вами публичные DNS-сервера, соответственно компании что предоставляют такие услуги смогут видеть что с вашего IP выполняются DNS-запросы для получения адресов сопоставимых именам тех или иных сайтов.

Будут ли эти данные собраны и потом как-то использованы — можно лишь догадываться. Например в компании Гугл эта информация может быть использована в маркетинговых или других статистических целях.

По этим причинам рекомендую хорошо обдумать какому из публичных DNS-провайдеров отдавать предпочтение, и стоит ли это делать вообще если в вашем случае безопасность и приватность очень важна.

Таблица с публичными DNS-серверами от различных компаний по всему миру:

Компания IPv4 nameservers IPv6 nameservers Примечание
CloudFlare 1.1.1.1
1.0.0.1
Google INC 8.8.8.8
8.8.4.4
2001:4860:4860::8888
2001:4860:4860::8844
OpenNIC 185.121.177.177
185.121.177.53
2a05:dfc7:5::53
2a05:dfc7:5::5353
UncensoredDNS 91.239.100.100
89.233.43.71
2001:67c:28a4::
2a01:3a0:53:53::
anycast
unicast
Comodo 8.26.56.26
8.20.247.20
DNS.WATCH 84.200.69.80
84.200.70.40
2001:1608:10:25::1c04:b12f
2001:1608:10:25::9249:d69b
OpenDNS 208.67.222.222
208.67.220.220
2620:0:ccc::2
2620:0:ccd::2
Quad9 9.9.9.9
9.9.9.10
2620:fe::fe
2620:fe::10
С blocklist и DNSSEC
Без blocklist и DNSSEC

Подготовка 3G-модема, узнаем его состояние используя minicom

Многие 3G-модемы являются составными устройствами, которые могут эмулировать несколько различных устройств:

  • виртуальный накопитель CD-ROM (как правило на нем содержатся драйвера и программы);
  • картридер для Flash-карты (если в устройстве есть разьем под карточку);
  • модем.

В начале статьи нами был установлен пакет «usb-modeswitch», который представляет собой набор udev-правил (скриптов), позволяющих в автоматическом режиме переключить беспроводный 3G-адаптер из режима накопителя (как правило виртуальный CD-привод) в режим модема.

Подключаем 3G-модем к свободному USB-разъему малинки и смотрим какие устройства в /dev нам доступны для использования:

Получим примерно следующий список файлов-устройств (последовательных портов):

Теперь не плохо бы узнать код производителя (Vendor ID, vid) и код устройства (Product ID, pid) для используемого модема, просмотрим список подключенных по USB к малинке устройств:

В данном случае модем определился как ‘Siemens SG75’ со следующими идентификаторами:

    Vendor >Идентификаторы USB-устройств и их названия можно узнать на сайте проекта ‘Linux USB Project’, вот свежий список в формате TXT: http://www.linux-usb.org/usb.ids

Идентификаторы ‘Vendor ID’ и ‘Product ID’ зависят от типа используемого вами 3G-модема и будут отличаться от приведенного выше примера.

Теперь мы можем подключиться к любому из ttyUSB* используя эмулятор последовательного терминала ‘minicom’. О параметрах запуска и работе с программным эмулятором последовательного терминала ‘minicom’ можно узнать из его man-странички:

В моем случае на прием команд согласились только два из портов: ‘ttyUSB0’ и ‘ttyUSB1’. Первый порт используется для управления модемом, а второй — для приема и передачи потока данных.

При успешном подключении к порту увидим приветствие и информацию по вызову справки:

Для отображения списка команд (справки) нужно нажать комбинацию клавиш CTRL+A и отпустив их потом нажать Z, для выхода из справки нажимаем ENTER.

Теперь для тестирования и управления модема можно использовать AT-команды. Проверим отвечает ли нам модем — наберем команду «AT» и нажмем ENTER:

Если все работает то получим ответ ‘OK’.

Используя AT-команды можно узнать разную полезную информацию о модеме и его состоянии, установить режим его работы, и даже отправить SMS (если поддерживается).

Список некоторых информационных AT-команд:

  • ATI — вывести информацию о модеме;
  • AT+CGMI — отобразить только производителя модема;
  • AT+CGMR — вывести версию программного обеспечения;
  • AT^HWVER — вывести версию аппаратного обеспечения;
  • AT+CGSN — вывести IMEI;
  • AT+CIMI — вывести IMSI;
  • AT^PREFMODE=? — вывести поддерживаемые режимы передачи данных;
  • AT+CSQ — вывести уровень сигнала 3G;
  • AT+CBC — уровень заряда батареи (если используется автономный модем или телефон);
  • AT^CVOICE=? — поддерживает ли модем голосовые вызовы;
  • AT^SYSINFO — вывести системную информацию (состояние, роуминг, режим).

Если какая-то из команд вывела ошибку и терминал отказывается отвечать — выполним выход из программы со сбросом состояния модема: нажимаем CTRL+A, Z и потом X. Теперь можно снова подключиться к порту модема используя minicom.

Запрос ‘AT^SYSINFO’ выведет информацию одной закодированной строчкой:

Формат выведенной информации: [status], [domain], [roaming status], [mode], [SIM state]. Сегменты разделены запятыми и имеют соответствующие текущим параметрам цифровые значения.

  • 0 — No service (нет сигнала);
  • 1 — Restricted service (ограниченный доступ);
  • 2 — Valid service (сигнал ок);
  • 3 — Restricted regional service (ограниченный региональный доступ);
  • 4 — Power-saving and deep sleep state (спящий режим).
  • 0 — No service;
  • 1 — Only CS service;
  • 2 — Only PS service;
  • 3 — PS+CS service;
  • 4 — CS and PS not registered, searching.
  • 0 — Non roaming (роуминг не активен);
  • 1 — Roaming (в роуминге).
  • 0 — No service;
  • 1 — AMPS mode;
  • 2 — CDMA mode;
  • 3 — GSM/GPRS mode;
  • 4 — HDR mode;
  • 5 — WCDMA mode;
  • 6 — GPS mode;
  • 7 GSM/WCDMA;
  • 8 CDMA/HDR HYBRID;
  • 15 TD-SCDMA mode.
  • 0 — Invalid USIM card state or pin code locked;
  • 1 — Valid USIM card state;
  • 2 — USIM is invalid in case of CS;
  • 3 — USIM is invalid in case of PS;
  • 4 — USIM is invalid in case of either CS or PS;
  • 255 — USIM card is not existent.

Запрос ‘AT+CSQ’ выведет уровень сигнала:

В данном случае получено значение в формате ’26, 99′, где:

  • 26 — Received signal strength indicator (уровень сигнала в CSQ)
  • 99 — Bit Error Rate (счетчик ошибок)

Для перевода значения из CSQ в dBm можно использовать формулу:

где N — это полученное после AT-команды значение CSQ.

dBm = -113 + 26 * 3 = -61 (отличное качество сигнала).

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

Значение CSQ RSSI, dBm Описание
2 . 9 -109 . -95 Плохой сигнал
10 . 14 -93 . -85 Так себе, ОК
15 . 19 -83 . -75 Хороший сигнал
20 . 30 -73 . -53 Отличный сигнал

Запрос ‘AT^PREFMODE=?’ выведет список поддерживаемых режимов передачи данных для 3G-модема:

Возможные режимы работы модема:

  • 2 — CDMA2000 (1x), скорость обмена данными до 153 КБит/сек;
  • 4 — EVDO (Evolution Data Only), высокая скорость обмена данными;
  • 8 — гибридный, с автоматическим выбором типа подключения по состоянию сигнала.

Скорость передачи данных в разных ревизиях EVDO:

  • rev.0 — 2,4 Mbit/s на прием 0,153 Mbit/s на передачу;
  • rev.A — 3,1 Mbit/s на прием 1,8 Mbit/s на передачу;
  • rev.B — 73,5 Mbit/s на прием 27 Mbit/s на передачу.

Как видите, с помощью AT-команд можно узнать очень много полезной информации о модеме, она вам может пригодиться для отладки, мониторинга и сбора информации о модеме.

3G-модем и консольная звонилка WVDIAL

Для работы с 3G-USB модемом нам понадобится программа «wvdial», которая умеет выполнять дозвон к провайдеру с установленными параметрами, а также следить за состоянием сетевого подключения.

WVDial (WeaVe Dial) — это умная программа для организации подключений с использованием модемов через протокол PPP (Point-to-Point Protocol). Мы уже установили ее на этапе установки программ.

Документация по wvdial и параметрам его конфигурационного файла:

Для обнаружения модема и создания базового файла с настройками, желательно запустить программу-конфигуратор:

Программа выполнит определение и тест модема, на основе полученных данных сгенерирует базовый конфигурационный файл:

Теперь файл «/etc/wvdial.conf» должен быть уже создан, в нем прописаны настройки и путь к файлу последовательного порта (/dev/ttyUSB0), через который будет работать модем. Откроем «wvdial.conf» для редактирования:

Примерно так выглядит мой уже измененный конфигурационный файл:

В параметрах Init1-init4 содержатся наборы AT-команд для управления модемом, здесь я вручную добавил строку «Init4 = AT^PREFMODE=8», которая принудительно пытается переключить модем в гибридный режим работы EVDO+CDMA2000 (8).

Если у вас в местности слабый и не стабильный сигнал, то возможно что стоит переключить модем на использование именно гибридного режима (8).

Строчка ‘Init3 = AT+CSQ’ заставляет модем вывести текущий уровень принимаемого сигнала, об этом я рассказывал в предыдущем разделе.

Следующие параметры в конфигурационном файле отвечают за дозвон и авторизацию, установите их в соответствии с инструкциями от своего провайдера:

  • Phone = #777 — номер телефона для дозвона;
  • Username = USER — имя пользователя;
  • Password = PASSWORD — пароль.

В случае если в файле «/etc/resolv.conf» прописаны статичные DNS-сервера целесообразно отключить получение их списка от провайдера 3G-интернета. Для этого в файл /etc/wvdial.conf нужно добавить следующую строчку:

Также в данном случае нужно открыть для редактирования файл «/etc/ppp/peers/wvdial»:

Комментируем (ставим спереди значек решотки) в нем строчку:

Теперь мы можем запустить дозвон до провайдера и получить интернет подключение с помощью wvdial. Если у вас к малинке уже подключен интернет через внешний USB Ethernet адаптер, то интерфейс этого адаптера нужно предварительно деактивировать:

Для запуска дозвона используем следующую команду:

Начнется процедура выполнения AT-команд и получения параметров соединения, IP-адресов.

На малинке должен появиться интернет через 3G-соединение. Будет создан и активирован интерфейс ppp0, это можно проверить выполнив команду ‘ip a’:

Проверяем пингом соединение с каким-то внешним сайтом:

Интернет есть, все работает!

Прервать соединение через wvdial можно в окне терминала, где была запущена команда на старт, достаточно нажать комбинацию клавиш ‘CTRL+C’. Также можно принудительно завершить все процессы под именем wvdial следующей командой:

После деактивации 3G-подключения можем вернуть обратно интернет подключение через USB Ethernet адаптер (интерфейс eth1), активируем проводной интерфейс:

Программу wvdial очень удобно запускать в мультиплексоре терминалов — TMUX (Terminal MUltipleXor). Это позволит выполнять программу в фоновом режиме и при необходимости наблюдать за состоянием соединения и процессом дозвона wvdial. Для этого запустим сначала сам TMUX:

В открывшемся терминале запускаем ‘wvdial’:

Теперь программа дозвона выполняется в программном терминале TMUX, чтобы отключиться от него и перейти в основной терминал достаточно нажать комбинацию клавиш ‘CTRL+b’, а потом отпустив их ‘d’. Чтобы обратно подключиться к терминалу TMUX с запущенным и работающем в нем wvdial достаточно выполнить команду:

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

Больше информации о этой программе можно узнать из ее man-страници:

Режимы управления частотой CPU в Raspberry Pi и его температура

Ядро Linux управляет частотой микропроцессора (CPU) в одном из установленных режимов:

  • ondemand — по требованию, частота каждого ядра CPU возрастает при увеличении нагрузки;
  • performance — частота ядер CPU постоянно имеет максимальное значение;
  • powersave — энергосберегающий режим.

Узнать текущий режим управления частотой первого ядра CPU Raspberry Pi (отсчет начинается с 0) можно командой:

Узнаем режимы для каждого из ядер:

Примерный вывод для 4х-ядерного микропроцессора малинки:

По умолчанию в малинке используется ‘ondemand’.

Текущий режим всех ядер CPU можно попробовать изменить например на ‘performance’ (максимальная частота), для этого нужно выполнить команду:

Таким же способом можно перевести все ядра в режим энергосбережения (минимальная частота):

Cписок доступных рабочих частот всех ядер микропроцессора можно узнать командой:

В моем случае доступны только по две частоты для каждого ядра:

Минимальную и минимальную частоты первого ядра можно узнать следующими двумя командами:

Частоты ядер микропроцессора в Raspberry Pi 3 Model B:

  • 600МГц — минимальная (постоянно включена в режиме powersave);
  • 1200МГц — максимальная (постоянно включена в режиме performance).

Узнаем текущие частоты всех ядер микропроцессора:

Я бы не рекомендовал изменять scaling_governor из значения по умолчанию ‘ondemand’ на ‘powersave’ или ‘performance’ если малинка будет работать в режиме роутера, режим ‘ondemand’ — оптимальный в большинстве случаев применения малинки.

Если все же требуется перманентно перевести микропроцессор малинки например в энергосберегающий режим, то это можно сделать добавив соответствующую конструкцию из команд в файл ‘rc.local’:

Добавляем в самый низ строку с командами:

Теперь после перезагрузки Raspbian микропроцессор будет находиться в режиме энергосбережения.

В зависимости от нагрузки на CPU его температура будет возрастать. Узнать температуру микропроцессора Raspberry Pi можно следующей командой:

Результатом будет число (пример):

Делим его на 1000 и получим: 45,622 градусов по Цельсию.

Также температуру чипа можно получить используя одну из утилит для работы с графическим процессором (GPU):

Настройка часов реального времени (RTC)

В прошлой статье я описывал как исправить, подключить и установить в корпус модуль часов реального времени DS1307. Данный модуль работает используя шину данных I 2 C.

В одной из прошлых статей я описывал как работать с шиной I 2 C. На этапе настройки малинки мы уже включили эту шину, теперь можно просканировать ее на предмет подключенных к ней устройств:

Пример результата выполнения команды:

Видим что обнаружены три устройства:

  • 0x3c — OLED-дисплей SSD1306;
  • 0x68 — модуль RTC DS1307;
  • 0x50 — I2C EEPROM 24C32, установленная на плате с DS1307.

Модуль часов определен и готов к использованию. Зарегистрируем модуль часов реального времени в операционной системе:

Теперь, если снова вывести список адресов I2C-устройств в консоль, то вместо адреса модуля «68» появятся «UU»:

Рис. 3. Смена вывода адреса DS1307 после активации.

Считаем текущее значение времени, установленное в RTC:

При первом подключении и использовании модуля получим дату 2000-01-01:

Проверяем текущую дату и время в Raspbian, выполним любую из команд:

Если дата или время в системе отличается от реальных значений — исправляем их, сделать это можно следующей командой:

  • 2050-11-23 — год в формате: год-мес-день;
  • 08:10:40 — время в формате: час:мин:сек.

По умолчанию в Raspbian включена служба NTP (Network Time Protocol), которая служит для синхронизации времени через интернет, поэтому делать правку даты или времени скорее всего не понадобится.

Теперь можем выполнить запись текущих значений даты и времени в модуль RTC:

Считываем значения из модуля RTC, убедимся что значения записались:

После выполнения команды должны увидеть текущие дату и время.

Теперь мы можем выполнять синхронизацию системного времени ОС Raspbian с временем в RTC используя следующую команду:

При каждой загрузке малинки нужно выполнять синхронизацию времени ОС с данными даты и времени из RTC, поэтому мы автоматизируем этот процесс.

Команды для инициализации I2C модуля и синхронизации системного времени можно добавить в файл ‘/etc/rc.local’, но я предлагаю сделать для данной цели отдельный скрипт и юнит для systemd.

Делаем файл исполняемым и запускаем его:

Разрешаем запуск при старте системы:

Также, в данном случае, желательно отключить службу синхронизации времени через интернет. Узнаем установлена ли служба NTP:

Если же демон NTP установлен и запущен — остановим его и отключим:

Теперь можно перезагрузить малинку и проверить системное время — все должно быть в порядке!

Считываем показания термодатчика DS18B20

Датчик температуры DS18B20 установлен на плате модуля часов реального времени DS1307, его вывод данных подключен к пину интерфейса 1-Wire в Raspberry Pi, который соответствует IO4 (7-й вывод гребенки).

Интерфейс передачи данных 1-Wire (через один проводник) мы уже активировали на этапе базовой настройки операционной системы Raspbian.

Каждый датчик температуры DS18B20, подключаемый к малинке, получает свой уникальный идентификатор. В дереве устройств автоматически создается файловая структура, взаимодействуя с которой можно очень просто считать текущие данные из нужного нам датчика.

Выведем список директорий в дереве устройств, что имеют отношение к интерфейсу 1-Wire:

Примерный результат вывода:

Для датчиков температуры DS18B20 создаются директории вида «28-XXXXXXXXXXXX», таким образом можно идентифицировать каждый из подключенных датчиков. В нашем случае, подключен всего один датчик температуры, он получил идентификатор «28-021501b2baсf».

В директории этого устройства содержатся некая структура файлов и директорий, смотрим их список:

В данном случае нас интересует файл под названием «w1_slave», выведем его содержимое в консоль:

  • crc=0b YES — говорит о том что контрольная сумма результата в порядке;
  • t=32875 — число, поделив которое на 1000 получим текущее значение температуры, в данном примере это 32,875 градуса по Цельсию.

Для получения только числового значения температуры можно воспользоваться чтением данных из другого файла:

Минус последнего метода в том, что здесь не указано верна ли контрольная сумма операции и можно ли доверять этому значению.

Полученные с помощью этих команд данные можно использовать в программах написанных на Bash, Python и других языках программирования.

Генерация звуковых сигналов через пьезо-зуммер

Пьезо-зуммер («пищалка») подключен к каналу IO18 (вивод 12 на гребенке малинки). Генерация звуковых сигналов осуществляется подачей импульсов разной частоты и длины на канал IO18.

В данном случае можно написать программу с несколькими вложенными циклами, которая будет генерировать очереди импульсов, а можно использовать функцию PWM (широтно-импульсная модуляция) в модуле Rpi.GPIO.

Подавая на пин 12 сигналы с определенными частотами и длительностью можно генерировать различные звуковые оповещения и мелодии.

В качестве примера приведу очень простую программу, которая генерирует «сигналы от инопланетян» , звучит достаточно забавно.

Скопируйте в открывшийся редактор следующий код:

Прервать выполнение программы можно нажав комбинацию клавиш «CTRL+C» (break).

Чередуя комбинации «частота+длительность» сигнала можно создать свою звуковую мелодию. Согласитесь, что составлять такую мелодию из значений частот и временных задержек не очень удобно — потребуется не мало времени и без хорошего служа тут не обойтись.

Компания Nokia в свое время создала специальный формат для описания, передачи и хранения мелодий в своих мобильных телефонах — RTTTL (Ring Tone Text Transfer Language).

Пример мелодии ‘Aqua — Barbie girl’ в формате RTTTL:

Ниже я покажу как можно проигрывать мелодии в формате RTTTL используя платформу Raspberry Pi и подключенный к ней динамик.

Прежде чем перейдем к программе нам понадобится установить модуль ‘rtttl’ для языка Python, который позволит перевести строчку мелодии формата RTTTL в массив с частотами и интервалами. Исходный код модуля и примеры по его использованию приведены на GITHUB’е разработчика.

Установим модуль для Python3 следующей командой:

Данная программа является немного измененным и дополненным вариантом предыдущего примера. Здесь добавлен парсинг кода песни в формате RTTTL и проигрывание полученных нот в цикле по-порядку.

Добавил еще небольшую поправку: если частота в списке нот равна нулю (для реализации паузы), то проигрываем сигнал с частотой 1Гц. Метод ‘pwm.ChangeFrequency’ в качестве аргумента не принимает значения равного 0 (будет выведена ошибка). К тому же в этом решении есть еще один плюс: если пауза длинная, то мы будем слышать как бы звук фоновых ударных с частотой 1Гц.

Для поиска текстов мелодий в формате RTTTL можно воспользоваться поисковыми системами, используйте следующую конструкцию поискового запроса: «RTTTL + имя_песни». Также есть сайты, которые содержат целые базы рингтонов, например — www.cellringtones.com.

Вот архив с кодами 10 000+ мелодий — 10000_melodies_rttl.7z (513КБ).

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

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

Управление RGB-светодиодом и реагирование на нажатия кнопок

О том как работать с кнопками и светодиодами, подключенными к GPIO Raspberry Pi, я уже описывал в прошлых статьях:

Здесь приведу небольшой пример: будем в случайном порядке включать и выключать три цвета подключенного RGB-светодиода, при нажатии на одну из кнопок — перебор цветов остановится на текущем, при нажатии на другую кнопку — продолжится.

Если посмотреть на принципиальную схему, то светодиод и две из кнопок у нас подключены к следующим каналам GPIO:

  • LED Red — IO23 (вывод 16);
  • LED Green — IO24 (вывод 18);
  • LED Blue — IO25 (вывод 22);
  • Switch 1 — IO20 (вывод 38);
  • Switch 2 — IO21 (вывод 40).

Создадим новый файл скрипта:

Для запуска скрипта без указания в командной строке интерпретатора python3 сделаем файл исполняемым:

С помощью кнопок можно управлять различными режимами работы роутера, запускать и останавливать выполнение программ и служб, завершать работу операционной системы. RGB-светодиодом можно индицировать различные события и режимы работы, оповещать о пропадании интернет-канала и так далее.

Вывод данных на OLED-дисплей

В статье «OLED дисплей SSD1306 (128х64px) и Raspberry Pi, подключение и эксперименты» я подробно расписал как выводить текст, геометрические фигуры и рисунки на дисплей SSD1306, который подключен к Raspberry Pi. Хочу заметить что в комментариях к этой статье вы найдете дополнительную полезную информацию, которой нет в самой статье.

В данном проекте использован точно такой же дисплей, предыдущее сканирование шины I2C показало что адрес этого дисплея на шине — 0x3c.

Набор скриптов для управления

Итак, сервер/роутер на основе raspberry Pi настроен, все службы работают, с использованием часов реального времени, светодиодов, пищалки, термодатчика, кнопок и дисплея разобрались.

Чтобы показать как это все можно связать вместе я написал несложную программу, которая являет собой набор Python-скриптов. Эта программа служит для вывода некоторой полезной информации на дисплей, управления кнопками с индикацией и звуковым оповещением для установленных событий, а также для безопасного завершения работы сервера.

Пять кнопок на корпусе малинки в данном случае выполняют следующие запрограммированные функции:

  1. Вызов меню, активация выбранного пункта;
  2. Выбрать предыдущий пункт меню;
  3. Выбрать следующий пункт меню;
  4. Вывод системной информации;
  5. Вывод пользовательской информации.

Рис. 4. Вывод меню и различной информации на дисплей сервера, построенного на Raspberry Pi.

Кнопки 4 и 5 можно очень просто перепрограммировать на другие действия, в данном случае эти кнопки дублируют функционал пунктов меню 1 и 2, так сказать «горячие кнопки».

Пищалка задействована следующим образом:

  • звук 1 («сигнал от инопланетян») — при нажатии кнопок 1, 4 и 5;
  • звук 2 («клик») — при нажатии кнопок 2 и 3;
  • звук 3 («ошибка») — при пропадании интернет-соединения.

Включить или выключить озвучивание событий можно через пункт меню 3 или же в конфигурационном файле (дальше кратко — КФ).

Использование RGB-светодиода (Red Green Blue):

  • R — светится при отсутствующем интернет-подключении, а также при запуске процедуры завершения работы;
  • G — мигает в процессе сбора данных для отображения системной и пользовательской информации;
  • B — мигает при нажатии любой из кнопок;
  • R+G+B — при запуске скрипта светятся все вместе.

В режиме бездействия экран малинки погашен, но через каждые 20 секунд отображается одна из анимаций, которые были подготовлены для примера:

  • Вращающийся логотип Debian;
  • Вращающийся атом;
  • Краткий анимультфильм про кота и паука.

Список анимаций для отображения можно задать в КФ, там же можно отключить анимации, а еще для этого служит 4-й пункт меню.

Анимация в данном случае выполняется поочередной последовательной сменой картинок, которые хранятся в папке ‘images/’ проекта со скриптами. Имена файлов для картинок с анимацией начинаются с префикса ‘anim_’, дальше следует название анимации (оно указывается в списке анимаций для отображения в КФ), а за ним следует номер кадра по порядку: 1, 2, 3. 8, 9, a, b, c, d. z. Если кадры нумеровать используя числа больше 10-ти (11, 25. ) то порядок выполнения анимации будет нарушен.

Таким образом, собрав в папку ‘images/’ картинки-кадры и прописав имя анимации в КФ вы сможете добавить свою оригинальную анимацию — это может быть ваш логотип, какое-то сообщение, например «Не лезь, стукнет током!» с рисунком молнии и т.п.

Теперь кратко о сборе данных для отображения пользовательской и системной информации. Получение значений курсов валют и криптовалют осуществляется с помощью открытых API таких сайтов как «Coinmarcetcap.com» и «Currencyconverterapi.com».

Примерную температуру корпуса мы получим из данных датчика DS18B20, температуру CPU и общее/занятое количество ОЗУ узнаем используя штатные средства GNU/Linux.

Для периодического мониторинга и отображения наличия доступа в интернет будет использоваться проверка подключения к DNS-серверу гугла на порт 53.

Архив программы (python-скрипты и рисунки) v.1.0 — Скачать (35KB).

Файловая структура директории ‘rrouter’:

  • beeper.py — содержит класс, отвечающий за работу с звуковыми сигналами;
  • config.py — конфигурационный файл (КФ);
  • display.py — содержит класс, отвечающий за вывод информации на OLED-дисплей;
  • [images] — директория с иконками событий и рисунками для анимации;
  • __init__.py — скрипт инициализации модуля;
  • leds.py — класс для управления RGB-светодиодом;
  • menu.py — генерация и вывод пунктов меню;
  • rrouter.py — основной файл программы, запускатся и работает как фоновый процесс;
  • ssd1306.py — драйвер для OLED-дисплея SSD1306;
  • sysinfo.py — класс для сбора и вывода на экран системной информации;
  • usrinfo.py — класс для сбора и вывода на экран пользовательской информации (в данном случае курсов валют и криптовалют).

Рис. 5. Файловая структура директории со скриптами.

Хранить программу на малинке я предлагаю в домашней директории пользователя по умолчанию. Допустим что папка ‘rrouter’ из архива скопирована в домашнюю директорию пользователя ‘pi’ — «/home/pi/».

Перед использованием программы необходимо еще установить два питонных модуля:

  • daemonize — для возможности выполнения программы в фоновом режиме как отдельный процесс со своими атрибутами;
  • requests — для выполнения HTTP-запросов к API сайтов с курсами валют.

Об использовании daemonize я уже рассказывал в одной из статей о безопасном завершении работы Raspbian нажатием на физическую кнопку.

Назначение переменных в конфигурационном файле:

  • pins — содержит список названий и соответствующих каналов GPIO;
  • ssd1306_12c_address — адрес модуля SSD1306 на шине I2C;
  • sounds_is_on — разрешить/запретить звуковые сигналы по умолчанию;
  • aminations_is_on — разрешить/запретить отображение анимаций по умолчанию;
  • animation_sets — набор из названий анимаций, которые должны отображаться в режиме простоя;
  • idle_time_to_sleep — время бездействия (после нажатия на одну из кнопок) для очистки экрана.

Выполним запуск программы с возможностью отладки и с выводом возможных ошибок в консоли:

Безопасно прервать выполнение программы можно с помощью комбинации клавиш CTRL+C.

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

Запускаем, проверяем статус, если нужно останавливаем:

Перезапускаем малинку и проверяем запущен ли скрипт и правильно ли он выполняет свои функции.

Зная язык программирования Python вы можете модифицировать или дорабоатть скрипт так, как вам необходимо под ваши задачи или же просто в самообразовательных целях.

Другие полезности

Я заметил что иногда малинка отказывается нормально загружаться с первого раза, подключив дисплей к HDMI видео-выходу я увидел что процесс загрузки остановился на следующих строчках:

Как видим все зависло на этапе завершения процесса Plymouth Boot Screen. Пакет Plymouth нужен для возможности наблюдать красивый экран загрузки с разными лого и в высоком разрешении.

Малинка в режиме сервера/роутера отлично работает без подключенного дисплея, обычного экрана загрузки в текстовом режиме вполне хватит для информативных целей, было принято решение удалить пакет plymouth:

Теперь желательно перезагрузить малинку несколько раз и убедиться что все ОК.

Если же нужно будет подключить дисплей и запустить графическую оболочку (например воспроизвести видео, открыть какой-то документ и т.п.), то здесь не возникнет никаких проблем, все должно работать как и раньше после запуска команды:

Для защиты сервера на Raspberry Pi от перебора паролей по SSH из внутренних сетей (подключения через интерфейсы интернета фильтруются файрволом) можно установить fail2ban:

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

Для теста скорости интернета можно установить программу speedtest-cli:

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

В моем случае, роутер на основе Raspberry Pi и подключенного адаптера USB-Ethernet позволил получать стабильные 100 МБит (примерно 12МБ/сек) при закачивании файлов с внутренней сети интернет-провайдера без значительных скачков и падений скорости.

Для тестирования производительности микропроцессора и памяти Raspberry Pi можно воспользоваться пакетом sysbench. Он позволит оценить разницу в производительности разных версий малинки, а также примерно сопоставить их с произвоительностью настольных систем для оценки возможности запуска различного ресурсоемкого ПО. Установим пакет:

Запуск быстрого теста производительности CPU в 4 потока (в процессоре малинке 4 ядра):

По завершению работы программы в консоли будут выведены результаты теста, здесь нам наиболее интересна строчка «total time». В моем случае (Raspberry Pi 3 model B — ARMv7 Processor rev 4) тест завершился за 35,1910 секунд, если же его запустить в один поток то он выполнится примерно за 140 секунд.

Вот мы и имеем приблизительную цифру для оценки производительности CPU и сравнения ее с другими системами. Например, такой же тест на одном ядре (1 поток) микропроцессора Intel(R) Xeon(R) CPU E3-1241 3.50GHz будет завершен примерно за 9 секунд, здесь можно судить так: чтобы получить примерно такую же производительность нужен кластер из 4-х четырехядерных малинок.

Но опять же, здесь нельзя ставить в один ряд обычный серверный/десктопный процессор и микропроцессор на архитекутре ARM — у них разные возможности, наборы инструкций и разное назначение.

А теперь запустим тесты для определения скорости чтения и записи в оперативную память с различными размерами блоков (1КБ, 32КБ и 64КБ):

Результаты теста на моей малинке:

  • READ (1K) — 740.49 MB/sec;
  • READ (32K) — 11601.80 MB/sec;
  • READ (64K) — 22536.72 MB/sec;
  • WRITE (1K) — 544.77 MB/sec;
  • WRITE (32K) — 1829.46 MB/sec;
  • WRITE (64K) — 1957.27 MB/sec.

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

Чтобы оценить производительность микропроцессора и системы вцелом при выполнении различных операций (плавающая запятая, архивация, работа с MySQL и т.п.) можно воспользоваться комбайном под названием Phoronix Test Suite, который на данный момент поддерживает около 450 различных тестов и более 100 готовых наборов с тестами.

Доработки, установка других сетевых служб, усложнение сети

Здесь приведена достаточно простая схема реализации домашнего роутера (маршрутизатора). В ней нет вложенных сетевых туннелей, сложных правил маршрутизации, разбора пакетов по содержимому, сетевых служб работающих с разными более сложными и даже вложенными протоколами и т.п.

Наращивать функционал приведенной мною конфигурации можно, важно понимать что это потребует от вас изучения дополнительной информации и экспериментов, а соответственно затрат вашего времени и возможно даже вложения каких-то средств.

Если вам нужно прикрутить к роутеру из этой статьи: TOR, OpenVPN, RedSocks, Squid, LXC, Docker, Shadowsocks, Stunnel и т.п., то будьте готовы к тому, что придется самостоятельно разбираться и решать разными путями проблемы, который могут возникнуть в процессе какой либо достройки и/или обновления ПО, с учетом и пониманием того как изначально все настроено.

Все будущие доработки данной конфигурации с моей стороны, если на это появится надобность и желание, скорее всего будут оформлены в виде отдельных детально проработанных статей.

Устранение неполадок

В процессе эксплоатации может возникнуть ряд неисправностей, например по какой-то причине откажется стартовать какая-то служба и т.п.

Статус всех основных служб, которые мы настраивали в статье, можно посмотреть командами:

Если какая-то служба не смогла запуститься то можно попробовать остановить/запустить ее вручную, вот пример для ‘rrouter-script’:

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

В этом случае необходимо внимательно изучить вывод команды что показывает статус службы.

Для примера, если в статусе службы ‘isc-dhcp-server’ нашлась вот такая строчка:

Видим здесь ошибку сегментации памяти — «Segmentation fault». Это значит что служба не смогла запустить бинарный файл, поскольку он не правильно обращается к памяти или же поврежден.

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

В таком случае, можно попробовать несколько раз перезагрузить малинку, как правило если разделы Linux были не корректно размонтированы перед выключением то при следующем старте ОС запустится программа проверки и исправления ошибок на диске — fsck (не сложно запомнить — от FileSystemChecK).

Если же перезагрузка не помогла и какая-то служба или службы все еще не могут запуститься, то нужно выполнить проверку файловых систем вручную на другом компьютере с GNU/Linux, подключив к нему карту памяти от нашего роутера или же принудительно указать запуск проверки накопителя данных на этапе следующего запуска системы Raspbian на роутере.

Чтобы программа fsck в принудительном порядке на этапе запуска Raspbian начала проверку подключенных устройств хранения данных на ошибки достаточно отредактировать файл:

Там увидим длинную строку, в нее нужно добавить следующую директиву:

Например, частично эта строка с добавленной директивой может выглядеть вот так:

  • «fsck.repair=yes» указывает что при наличии ошибок на диске на запрос о их исправлении нужно отвечать утвердительно — y/yes!
  • «fsck.mode=force» дает системе понять что проверку дисков нужно запускать в любом случае обязательно.

Сохранив изменения достаточно перезагрузить ОС командой:

После запуска снова проверяем статус всех служб, есть большая вероятность что теперь все будет в порядке!

Если проблемы не исчезли, то стоит внимательно изучить журнал запуска системы и ее служб, а потом принимать нужные меры.

Например если в логах увидели ‘I/O error’ или еще что-то подобное, связанное с картой памяти ‘mmcblk0’, то скорее всего она уже изношена и требует замены.

Команды для просмотра журналов системы, лог с момента последнего запуска ОС:

В завершение

О питании роутера и коммутатора я уже рассказал в предыдущей статье по данному проекту, но думаю не лишним будет еще раз здесь упомянуть.

Для надежной работы Raspberry Pi необходим хороший и стабильный источник питания с постоянным напряжением +5В, иначе возможны периодические хаотические зависания системы и сбои.

Поэтому не пожалейте на него 10-15$, а также будет замечательно если перед ним будет стоять еще и источник бесперебойного питания. К тому же, весь комплект (малинка+свитч) можно питать от аккумуляторного блока (PowerBank), имеющего два порта USB по +5В и током не менее 2А. В качестве примера такого пауербанка, из не дорогих, можно привести: «Trust Urban» (2USB x 2,4A = total 4,8A)

Cо всем уважением, прошу не писать в комментариях просьб и вопросов наподобие: «а как настроить на малинке service_1+service_2+protocol_X+Z» или «опишите как связать сеть A с сетями B-C через шифрованные туннели с авторизацией и метриками» и т.п.

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

Пожалуйста, оставляйте комментарии с замечаниями и вопросами строго по теме статьи!

Краткое видео с демонстрацией меню программы:

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

Было бы интересно увидеть и последнюю часть)

Владимир, у вас будет такая возможность
Решил разделить последний раздел «Кнопочное управление, дисплей, пищалка, термодатчик» на несколько отдельных разделов и описать все более подробно.

Супер статья! Просто нет слов насколько она понятна, полезна, не вызывает не единого вопроса!

Статья полностью завершена. Заснял небольшое видео работы с меню, а также там показано как программа реагирует на пропадание и появление интернет-подключения.

Поддерживаю мнение, что данный мануал просто великолепен! В моем случае, помог не только быстро и качественно добиться поставленной цели, но подробность описания еще и многому меня научила в плане работы с данной реализацией Raspbian. Низкий Вам поклон и +100500 в карму за проделанную работу, уважаемый автор!

ЗЫ. единственный затык произошел после редактирования /etc/fstab. а именно после добавления ,nodiratime в строку PARTUU , быстренько вернуть fstab в исходное состояние и ребутнуться. но все это даже к лучшему. вырвало меня из колеи копипаста и напомнило, что нужно думать и проверять. за что отдельное спасибо.

В статье я не ожидал что может быть вариант с недогрузкой Raspbian через невозможность монтирования самого корневого раздела (в следствии совершенной ошибки в fstab), описанный вами опыт может кому-то пригодится. )

Добавил в статью еще информацию и несколько примеров с тестами производительности CPU и RAM.

Отличная статья! Еще бы фильтр сайтов для детей.

Важно понимать что со временем интерес ребенка возьмет верх и он доберется до любого желаемого контента если не у себя дома (что будет лишь минусом в будущем доверии к родителям), то на домашнем компьютере у своего друга. Поэтому, фильтрация контента, различные ограничения и запреты — это достаточно неоднозначное решение.

Считаю что более сложно, но эффективно — оставить достаточно свободы и вместе с тем попробовать заранее объяснить ребенку что хорошо и что плохо и главное почему оно так. Это даст правильный вектор на будущее развитие и более подготовленное понимание неизвестных ему в его возрасте «взрослых» вещей.

Ответ на ваш вопрос и некоторые из возможных решений попробую описать ниже.

На стороне клиента (браузер):

  • Черный список доменов, помещенный в файл hosts операционной системы ноутбука или смартфона (IP для доменов — 127.0.0.1). Скорее всего малоэффективно, список получится огромным и с каждым днем появляются новые сайты — нужно пополнять;
  • Дополнение для браузера, которое блокирует загрузку плохих сайтов. Нужно выбрать и использовать плагин только от надежного разработчика с высоким рейтингом, почитать отзывы на разных сайтах;
  • Установить антивирус и файрвол с функцией родительского контроля.
  • IPTables — разбор сетевых пакетов и блокировка тех, в которых найдены слова и соответствия шаблонам из черного списка. Сложный способ, сомнительная эффективность, учитывая что многие сайты сейчас используют https;
  • SQUID — установка и настройка прокси сервера с подключением к нему списков нежелательных доменов, URL и т.п. Браузеры на клиентских устройствах придется настроить на использование прокси сервера;
  • DNS — для DHCP-демона, который раздает сетевые настройки клиентским устройствам, прописать DNS-сервера одного из провайдеров, который предоставляет услугу фильтрации нежелательного контента.

Вариант с использованием безопасного DNS — наиболее простой, опишу подробно как его реализовать для примера со сконфигурированным роутером из данной статьи.

В интернете есть не мало провайдеров, предоставляющих безопасный DNS с фильтрацией нежелательного контента как на платной, так и на бесплатной основе.

В любом случае, нужно понимать, что использование стороннего DNS-сервера даст возможность его владельцу собирать информацию о посещаемых вами сайтах и возможно в будущем использовать эту информацию в его личных целях (анализ, продажа и т.п.).

Вот некоторые из DNS-провайдеров, предлагающих фильтрацию нежелательных сайтов:

  • OpenDNS — Family Shield;
  • Norton DNS — Norton ConnectSafe (прекратил существование 2018 года).

В разделе Настройка демона ISC-DHCP-Server для нужной подсети (например для клиентов подключаемых только по Wi-Fi) необходимо изменить адреса DNS-серверов на те, которые предоставляет выбранный сервис.

Вот пример блока настроек для подсети «192.168.2.0» с прописанными ДНС-серверами от OpenDNS Family Shield:

Как это работает. Например ребенок запускает бнраузер с ноутбука, который подключен по беспроводной сети к нашему самодельному роутеру, операционная система на ноутбуке получит динамически назначиваемый IP-адрес, сетевой шлюз и список DNS-серверов по DHCP.

При попытке зайти на сайт с вредоносным контентом будет выполнен запрос IP-адреса для запрашиваемого браузером домена через полученные в сетевых настройках DNS-сервера (а они у нас в данном случае от OpenDNS), в ответ будет возвращен не реальный IP-адрес запрашиваемого домена, а IP-адрес сервера, например, с безопасной страницей-заглушкой. Все, доступ ограничен.

Пожалуй, первый увиденный мною реально полезный проект на малинке. Вдобавок отлично проработанный и описанный вами. Спасибо!

Вопросы:
1. Возможно ли перенести этот проект на мою Orange Pi Pc (система Rapsberry Pi для этой платы имеется, а цена меньше вдвое).
2. Не думали ли добавить локальный полноценный DNS сервер с поддержкой DNSCrypt Proxy 2, к примеру.

Здравствуйте, AMG! Спасибо за отзыв )
1. С платформой Orange Pi Pc не доводилось иметь дело. В списке поддерживаемых ОС к ней есть много Debian-подобных, например поддерживается тот же Raspbian. Вполне может быть, что при переносе придется что-то достраивать и перенастраивать.
2. Мой пример реализации — это скорее основа (просто и минимально), а что уже дальше прикручивать к этой умной коробочке пусть каждый решает для себя сам. Можно поднять различные сервера, личное облако, крутить кучу самописных скриптов, LXC-контейнеры, Docker, SSH-DNS-SSL туннели, заворачивать траффик в TOR, I2P.

Спасибо огромное за статью! Перелопатил очень много информации о том, как поднять AP на Малинке, только у Вас нашёл решение. Очень много полезной информации о командах в Raspbian.

Информации о том как настроить точку доступа на Raspberry Pi в интернете действительно полно, но она везде разбросана по кусочкам. В этой статье я постарался собрать только самое полезное и необходимое.
Тем не менее, в зависимости от версии ОС, модели беспроводного сетевого адаптера и других особенностей, процесс настройки может потребовать дополнительных решений, здесь уже нужно действовать по ситуации.
Спасибо за отзыв

Добрый день!
А можно с помощью этого девайся, при первом подключении к малинке через интернет, показывать клиенту стартовую страничку на которой просьба ввести номер телефона для авторизации? Спрашиваю для кафе, по новому закону мое кафе при раздаче интернета должна запрашивать данные пользователя иначе штраф.

Здравствуйте. При реализации указанного вами может возникнуть ряд вопросов:

  1. Как проверить что клиент ввел свой номер а не чужой, нужно ли это?
  2. Клиент приходит не сам, вводит свой номер телефона, получает пароль для доступа к Wi-Fi, этот же пароль он дает всем своим друзьям, нужно ли что-то предпринимать в этом случае?
  3. Где, в каком виде и как долго хранить номера телефонов, время подключения и другие данные по требованию? Кто их может запросить и в каких случаях?

Думаю стоит обратиться к юристу и подробно разузнать все детали закона, порядок работы с персональными данными клиентов (номера телефонов и т.п.). Будьте готовы к тому что технических деталей в законе может и не быть — они пишутся разными людьми с различным уровнем компетенции, иногда «глубина» этого уровня может вызвать смех и печаль. )

По 1-му вопросу — привязка к системе какого-то сервиса приема СМС. После ввода номера телефона на него отсылается сообщение с контрольным кодом, клиент вводит этот код в системе и получает временный пароль для подключения к Wi-Fi.

По 2-му вопросу — сложнее, нужно как-то реализовать схему: один пароль = подключение с 1-го устройства. Но и здесь пароль кто-то может подсмотреть и потом использовать когда клиент уже уйдет. В зависимости от требований закона, возможно придется делать привязки к MAC-адресам устройств, вести лог подключений и их фильтрацию.

Насчет 3-го вопроса — хранить все номера телефонов, метки времени и т.п. в базе данных, периодически резервируя ее в зашифрованном виде.

Несколько идей по самой реализации: написать приложение для WEB-браузера на основе фреймворка Flask или Django, все данные хранить в SQLite, периодически резервируя в архив с надежным паролем и отправляя на какой-то личный сервер/почту.

К Raspberry Pi подключить небольшой дисплей с тач-скрином, перенастроить и изолировать оконный менеджер чтобы было доступно только приложение для авторизации и экранная клавиатура. Также можно обойтись и без WEB-панели с браузером — применить дисплей без тач-скрина, к малинке подключить обычную клавиатуру, а программу сделать консольной, изолировав доступ к командной оболочке — так будет даже безопаснее.

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

Отличная статья!
Подскажите что нужно поменять в скрипте чтобы пройти из интернета в Хеома (порт 8090) для просмотра камер?

Xeoma (http://felenasoft.com/xeoma/ru) — это платный продукт с закрытым кодом, служит для организации видео-наблюдения. Данной программой не пользовался.

Для доступа из интернета понадобится «Белый» IP-адрес от вашего провайдера. Если ваш провайдер не использует NAT (трансляцию адресов, маскировку) то можно использовать и «Серый» (динамический) IP, в сочетании с одной из настроенных служб Dyn-DNS (периодическое получение текущего IP, с привязкой к бесплатному или купленному домену). Для этой цели можно воспользоваться старым проверенным сервисом freedns.afraid.org.

Если программа видео-наблюдения запущена на малинке, то порт 8090 уже активен, нужно лишь разрешить подключение к нему с наружного интерфейса (который смотрит в интернет) в брандмауэре IPTAbles. Для этого необходимо создать правило в цепочке «INPUT» для разрешения подключений через нужный интерфейс на порт 8090.

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

Если у вас малинка подключена к каналу интернет-провайдера не напрямую, а через промежуточный маршрутизатор, то придется также настроить «проброс порта» на этом устройстве (смотрите разделы «NAT», «Ports forwarding», «Перенаправление портов» и т.п.) чтобы сетевой пакет с портом назначения 8090, пришедший через канала провайдера, попал на малинку.

Отличная статья.
Добавил в закладки . буду чекать обновления и дополнения информации
Только вроде Ethernet мрдуль через USB интерфейс Малины не может дать больше 5 MB/s в связи с ограниченностью порта USB

Уже не раз качал торренты/ISO-образы с рабочей станции, которая подключена к малинке, а та в свою очередь подключена к интернет-провайдеру через USB-Ethernet.

Скорость закачки во многих случаях достигала и держалась стабильно: 10-12MB/s (80-96Mbit/s). Нагрузка на ядра CPU малинки составляла примерно 5-13%, причем в топе по потреблению этих ресурсов — скрипт rrouter.py. Использование ОЗУ — 65МБ.

Сперва сам был приятно удивлен, рассчитывал получить хотя-бы 40-50MBit.

USB-Ethernet адаптер — из не дорогих (

10$), на его корпусе указан только серийный номер, больше никаких опознавательных признаков нет, упаковку не сохранил. Команда ‘lsusb’ говорит что имеем дело с сетевым чипом от Realtek:

Пытаюсь третий день настроить это. При подключении инета напрямую от роутера к малине через эзернет инет есть. Сработало один раз на 15=минут до появлении странной аномалии при отключении инета во всей квартире. Некоторые устройства не подключены по вайфаю были и не должны быть связаны с малиной или компом. Восстановил инет в доме, но уже не работала малина тоесть инет есть на любом из инет (стандарт и адаптер) разъемов, но напрочь отсутствует при коммутации с компом. Что на компе, что на самой малине. Что я не так делаю? Раньше малина получала айпи инета 250. сейчас при подключении инета показывает 192.168.1.1 если без компа и 1.2 соответственно с компом. Инет не работает при подключении второго устройства в порт эзернет.

Ещё при ребуте писалось на винде про конфликт айпи адресов в сети но это не должно повлиять на доступ к инету на малине. Стоит поменять местами подключения конфликт уходит, eth0 становится 192.168.1.8 а инета по-прежнему нету на малине

Дополнил информацией раздел «Структура сети и ее работа», нарисовал наглядную иллюстрацию (рисунок 2) с двумя вариантами подключения малинового роутера к интернету.

Изучите эту информацию и приступайте к перенастройке.

У вас на домашнем роутере уже используется IP-адрес 192.168.1.1, также на нем работает служба раздачи динамический адресов (DHCP) для подсети 192.168.1.x, а еще там возможно есть Wi-FI со своей подсетью, которая отличается от 192.168.1.x, например — 192.168.2.x .

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

Для интерфейсов eth0 и wlan0 вам нужно выбрать и прописать другие номера подсетей (чтобы они не конфликтовали с подсетями 192.168.1.x, 2.x) и заменить эти адреса во всех конфигурационных файлах и скриптах для служб, где эти адреса были задействованы.

Например заменить адресацию так, как показано на рисунке 2:

  • eth0: 192.168.1.1 /24 —> 192.168.10.1 /24
  • wlan0: 192.168.2.1 /24 —> 192.168.20.1 /24

После этого цепочка «INTERNET — HOME ROUTER — RASPBERRY PI ROUTER» должна заработать исправно.

Потрясающий проект и статья. Скажите, а как можно настроить open vpn клиент.

Здравствуйте. Установка самого OpenVPN клиента не сложна — установить программу, импортировать конфигурационный файл с ключами шифрования и настроить в системе автозапуск.

Более сложно в этом проекте будет продумать структуру правил файрвола iptables: разрешить с внешних интрефейсов подключение только к VPN-серверу, сделать чтобы весь интернет-трафик с внутренних подсетей (LAN, WLAN) и с самой малинки шел через VPN-туннель и никак иначе (это так называемый Kill-Switch), позаботиться о безопасности.

Возможно со временем напишу об этом отдельную статью.

Здравствуйте. Скажу сразу мой вопрос уже реализован на другом железе, но ввиду необходимости теперь нужна реализация на малине.

Общая часть:
wlan0: Подключён к одной сети через маршрутизатор с провайдером предоставляющим интернет и раздаваемый в этой сети.
eth0: Подключён к другой сети имеющей другой сервер с провайдером предоставляющим интернет и раздаваемый в этой сети.
На eth0 поднят pptpd входящие соединения из текущей сети в малину.

Вопрос не могу понять где не так сделал, клиенты подсети после подключения к малине по VPN должны, но не получают интернет (на самом деле доступ к определённым частям сети) . Если подключить из напрямую в сеть то всё работает.
Так понимаю малина должна передать параметры которые получает сама от провайдера wlan0 соединения.

Ранее всё реализовано на плате Intel Atom и ос debian 8 правила iptables и копировал и за нова прописывал, так что считаю проблема где-то на уровне конфигурации интерфейсов.

Поделитесь своими идеями о реализации VPN туннеля.

Здравствуйте, Евген. Попробую что-то подсказать по вашей схеме.

Я имел небольшой опыт работы с туннелями при связывании удаленных офисов посредством PPTP, OpenVPN, там все делалось очень просто и буквально по мануалам, которые можно найти в свободном доступе.

Вы упомянули что сервер с работающей конфигурацией на Атоме у вас под Debian 8. Вот некоторые замечания, которые возможно будут полезны:

  1. Начиная с Debian 9 (stretch) и выше был изменен принцип именования сетевых интерфейсов, например eth0 (в 8) теперь может называться enp2s0 (в 9), wlan0 — wlp1s0 и т.п.;
  2. В операционной системе Raspbian Stretch (на основе Debian 9) и выше, в отличии от Raspbian jessie (на основе Debian 8), были внесены некоторые изменения относительно работы сети по умолчанию. Сетевыми настройками теперь управляет служба dhcpcd (DHCP Client Daemon). Данные что внесены в /etc/network/interfaces теперь могут работать не так как ожидается, в самом начале этого конфигурационного файла есть об этом замечание.
  1. Очень внимательно пересмотреть все конфигурационные файлы и скрипты, возможно где-то затаилась ошибка с неверным названием интерфейса;
  2. Прописать настройки всех сетевых интерфейсов в /etc/dhcpcd.conf и убрать все лишнее из /etc/network/interfaces. Проверить все ли работает;
  3. Если Raspbian у вас загружается в графической среде, то желательно проверить не мешает ли служба NetworkManager (отвечающая за настройку сетевых интерфейсов, туннелей, сетей, ее иконка висит в трее) той сетевой конфигурации, которая у вас задана после переноса настроек с предыдущего сервера. Возможно придется отключить эту службу;
  4. Собрать с рабочей и не рабочей конфигурации серверов данные: названия и IP-адреса всех сетевых интерфейсов, таблицы маршрутизации, списки загруженных правил IPTables. Сравнить их, найдя несоответствия приступить к поиску соответствующих настроек и служб;
  5. Изучить логи сетевой подсистемы и связанных служб на не работающей конфигурации.

Некоторые команды для сбора информации и диагностики (думаю вы их и так знаете):

Также, в качестве эксперимента, можно порекомендовать записать на Micro-SD карту Raspbian более старой версии, соответствующей Debian 8 (как в вашей рабочей конфигурации на Intel Atom), это будет Raspbian Jessie.

Потом перенести туда все настройки с рабочего сервера и проверить на работоспособность. Если на Raspbian Jessie все заработает, то скорее всего в Raspbian Stretch и выше проблема кроется где-то в измененных новых настройках или сетевых службах, что пришли с новой версией ОС.

Поделитесь своими идеями о реализации VPN туннеля.

Я бы первым делом попробовал это реализовать на основе OpenVPN, поскольку это очень гибкий инструмент с широким набором возможностей, не сложным конфигурационным файлом с множеством настроек. Из коробки имеем поддержку надежного шифрования трафика с использованием современных протоколов, управление интерфейсами, параметрами сетевых пакетов, маршрутами на стороне сервера и клиента и много всего другого. И это свободный продукт, Open Source!

источник

Читайте также:  Установка защиты цепи велосипеда

Добавить комментарий