Время на прочтение
7 мин
Количество просмотров 25K
Сразу скажу, что эта статья предназначена для обычных пользователей и для тех, для кого сетевые технологии — это хобби.
Если вам нужен собственный домашний роутер — отличной аппаратной платформой для него может стать Raspberry Pi 4 Model B. Более старые модели Raspberry Pi отличаются значительными ограничениями в плане поддерживаемой ими скорости передачи данных по сети. Эти ограничения столь велики, что они не подойдут для создания интернет-роутеров в том случае, если скорость доступа к интернету превышает 100 Мбит/с.
Итак, одноплатный компьютер Raspberry Pi 4 Model B устроит нас по следующим причинам:
- Он относительно недорог.
- Он достаточно быстр.
- Он может хорошо нагрузить работой свой гигабитный сетевой интерфейс.
- Он энергоэффективен.
Главной его проблемой, похоже, является тот факт, что у него есть только один сетевой интерфейс. А если создают роутер, то таких интерфейсов нужно как минимум два:
- Первый интерфейс подключают к модему или роутеру, дающему доступ в интернет (идеально — в режиме моста).
- Второй интерфейс подключают к домашней сети (возможно — к коммутатору).
В результате, если роутер создают на базе Raspberry Pi, то, вероятнее всего, докупят к нему USB3-сетевую карту за примерно $20, после чего проект будет завершён.
Raspberry Pi в роли коммутатора с двумя сетевыми интерфейсами
А что если я скажу вам, что то же самое можно сделать, воспользовавшись единственным встроенным сетевым интерфейсом Raspberry Pi 4?
Как это возможно?
Знакомство с VLAN
Я, как видите, знакомлю читателей с технологией, которая существует с 1990-х годов. Она широко используется в корпоративной среде.
И, так как у меня есть такое ощущение, что эта технология не особенно широко известно в кругах людей, далёких от администрирования корпоративных сетей, я думаю, что тему VLAN вполне можно тут обсудить.
Что такое VLAN?
Технология VLAN (Virtual Local Area Network, виртуальная локальная компьютерная сеть) позволяет создавать различные, отделённые друг от друга сети, используя одну и ту же физическую линию связи и один и тот же коммутатор. Это помогает сильно сократить количество проводных соединений и количество физических коммутаторов, необходимых в том случае, если в одном и том же месте нужно развернуть несколько отделённых друг от друга сетей.
Если вы хотите пропустить трафик разных сетей по одному и тому же кабелю или через один и тот же коммутатор — как идентифицировать разные потоки трафика?
При использовании технологии VLAN сетевые «пакеты» помечают с использованием тегов. Так как эта технология работает на уровне Ethernet, правильнее будет говорить не о «пакетах», а об «Ethernet-кадрах». Но я полагаю, что детали терминологии не особенно важны для понимания сути рассматриваемой технологии.
Тут достаточно понимать, что имеются теги, находящиеся перед Ethernet-кадрами. Эти теги сообщают устройствам, поддерживающим VLAN, о том, к какой именно сети принадлежит кадр, и, в результате, пакет, передаваемый по сети.
При таком подходе потоки трафика разных сетей можно легко отличить друг от друга. А в вышеупомянутых тегах нет ничего особенно интересного. Они называются VLAN ID и представляют собой всего лишь числа в диапазоне от 1 до 4096. Отмечу, что большинство недорогих коммутаторов могут поддерживать, самое большее, что-то в районе 32-64 VLAN. Лишь более дорогое, корпоративное оборудование, может похвастаться одновременной поддержкой 4096 VLAN. Но в нашем случае это, вероятно, значения не имеет.
Управляемый коммутатор
Теперь, когда мы разобрались с тем, что такое VLAN, подумаем о том, как нам воспользоваться этой технологией.
Для начала нам понадобится управляемый сетевой коммутатор, который поддерживает VLAN.
Самый дешёвый коммутатор с поддержкой VLAN, который мне удалось найти — это TP-LINK TL-SG105E, который стоит что-то около $25. Это — 5-портовый коммутатор, но, например, его 8-портовая версия, обычно, всего лишь на несколько долларов дороже этой.
Один из читателей отметил в комментариях к этому материалу, что этот коммутатор TP-LINK, возможно, не сможет обработать большое количество ARP-запросов, которые могут приходить на порт, подключённый к интернет-модему. В дискуссии на Hacker News этому роутеру тоже досталось немало негатива. Но я не знаю, будут ли коммутаторы Netgear, которые стоят почти столько же, значительно лучше того коммутатора, что выбрал я.
У подобных коммутаторов имеется веб-интерфейс, который позволяет настраивать VLAN прямо на устройстве.
Тегированный и нетегированный трафик
Если говорить о VLAN, то сетевой порт коммутатора может пребывать в двух состояниях:
- Он может являться членом какой-то конкретной сети (VLAN) (нетегированный порт).
- Он может отвечать за передачу трафика нескольких сетей (VLANs) (тегированный порт).
Если порт является членом VLAN — он ведёт себя как любой другой порт коммутатора. В этом режиме он, очевидно, может являться членом лишь одной сети/VLAN. Теги VLAN убирают из всего трафика, который исходит из этого порта.
Но порт, который предназначен для передачи «тегированного» VLAN-трафика, просто занимается перенаправлением этого трафика в том виде, в котором он его получает, в том числе — ничего не происходит и с VLAN-тегами.
Это — та самая хитрость, которую мы используем для передачи сетевых пакетов из разных сетей (VLANs) нашему Raspberry Pi-роутеру через единственный порт по единственному кабелю.
Raspberry Pi в роли коммутатора с одним сетевым интерфейсом
Давайте разберём эту схему.
Представим, что (возвращающийся) пакет из интернета прибывает на модем и передаётся на порт коммутатора 1.
Коммутатор знает о том, что любой трафик на этом порту принадлежит VLAN 10. Так как этот трафик надо отправить Raspberry Pi-роутеру, коммутатор добавит в пакет тег и перенаправит пакет (с тегом) Raspberry Pi — на порт коммутатора 2.
А Raspberry Pi-роутер, в свою очередь, тоже, как и коммутатор, настроен на работу с VLAN. Тег пакета сообщит роутеру о том, на какой виртуальный интерфейс нужно отправить этот пакет.
Вот пример конфигурации утилиты netplan, иллюстрирующий вышеописанную схему:
network:
version: 2
ethernets:
enp2s0f0:
dhcp4: no
vlans:
enp2s0f0.10:
id: 10
link: enp2s0f0
addresses:
- 68.69.70.71/24 (ненастоящий интернет-адрес)
gateway4: 68.69.70.1 (ненастоящий роутер провайдера)
enp2s0f0.20:
id: 20
link: enp2s0f0
addresses:
- 192.168.0.1/24 (внутренний сетевой адрес, работающий как шлюз)
Как видите — VLAN-пакеты, которые прибывают в виде тегированных пакетов, отправляются (без тегов) на виртуальный сетевой интерфейс, принадлежащий этой конкретной сети. Все эти виртуальные сетевые интерфейсы пользуются единым физическим интерфейсом (enp2s0f0). Виртуальные сетевые интерфейсы — это всего лишь имя физического интерфейса, к которому добавлена конструкция вида «.(VLAN ID)».
С этого момента вы, вероятно, уже поняли, к чему я клоню: эти два виртуальных сетевых интерфейса, в общем-то, очень похожи на роутер с двумя физическими сетевыми интерфейсами. В результате все необходимые операции по маршрутизации и по трансляции сетевых адресов, которые должны быть выполнены, выполняются не с применением физических интерфейсов, а с применением интерфейсов виртуальных.
Как работать с VLAN
Для того чтобы работать с VLAN нужен управляемый коммутатор, поддерживающий VLAN. У такого коммутатора имеется интерфейс управления, часто это — веб-интерфейс.
В данном примере я использую коммутатор TP-LINK TL-SG105E. Для того чтобы добраться до нужной мне страницы, я, в веб-интерфейсе устройства, прошёл по пути VLAN —> 802.1Q VLAN
Из этой таблицы мы можем извлечь следующие сведения:
- Порт 1 — это нетегированный член VLAN 10.
- Порт 2 — это тегированный член VLAN 10 и VLAN 20.
- Порт 3 — это нетегированный член VLAN 20.
Обратите внимание на то, что рекомендуется удалять порты из VLAN, которые их не используют. В результате я убрал порты 1, 2 и 3 из стандартной сети VLAN 1.
Теперь, если к внутренней LAN через этот же коммутатор будет подключено больше устройств, нужно будет сделать соответствующие порты нетегированными членами VLAN 20.
Возможные проблемы
▍Ограничение полосы пропускания сети
Очевидно, что если используется единственный интерфейс, то в нашем распоряжении оказывается лишь пропускная способность этого интерфейса. В большинстве случаев это — не проблема, так как гигабитный Ethernet работает в полнодуплексном режиме. Имеются физические соединения и для исходящего, и для входящего трафика.
В результате можно сказать, что полнодуплексное гигабитное Ethernet-соединение имеет непосредственную пропускную способность, равную 2 Гбит/с. Но мы, в основном, не рассматриваем подобные соединения с такой точки зрения.
Например, если мы, с компьютера, загружаем что-то на скорости в 200 Мбит/с, то этот трафик поступает к нам через VLAN 10 по пути входящего трафика. Затем он переправляется через VLAN 20 к компьютеру с использованием пути исходящего трафика. В результате тут никаких проблем не возникает.
Если планируется использовать Raspberry Pi ещё и как сервер резервного копирования данных (с подключённым к плате внешним жёстким диском), то трафик резервного копирования и интернет-трафик могут «бороться» за полосу пропускания одного и того же гигабитного интерфейса.
▍Воздействие на гигабитное интернет-подключение
Если вы сделаете себе такой маршрутизатор, о котором я тут рассказал, вы никогда не получите на нём полную скорость, характерную для гигабитного интернет-канала. Максимум, на который можно рассчитывать, вероятно, находится в районе 900 Мбит/с. (Тут я исхожу из предположения о том, что вы будете использовать x86-устройство, так как Raspberry Pi, в любом случае, не сможет, например, работать с таким трафиком в режиме файрвола).
Дело в том, что основной объём трафика связан с TCP-соединениями. Когда осуществляется загрузка каких-то материалов, данные передаются в обе стороны! Загружаемые данные — это основной трафик, но есть ещё и заметный постоянный поток данных, состоящий из пакетов, возвращающихся в интернет и сообщающих передающей стороне о том, что некие данные получены принимающей стороной (если принимающая сторона не получит подтверждения — данные будут отправлены повторно).
Помните о том, что, в нашей однопортовой системе, Raspberry Pi использует один и тот же гигабитный порт и для отправки данных в интернет через VLAN 10, и для приёма данных из интернета через VLAN 20. В результате поток трафика, идущего от вас в интернет, будет ограничивать максимально возможную скорость загрузки данных.
▍Raspberry Pi 4 Model B в роли роутера
Главное ограничение Raspberry Pi 4 Model B, которое становится проблемой для всё большего и большего количества людей — это производительность. Если вы используете IPTABLES в Linux для организации файрвола, то, по опыту знаю, пропускная способность сети падает, и составляет, максимум, 650 Мбит/с.
Но это можно счесть проблемой только в том случае, если используется гигабитный доступ в интернет, или если скорость обмена данными с интернетом превышает ту, с которой может справиться Raspberry Pi.
Если же ваша скорость подключения к интернету и близко не подходит к гигабитной — то вас эта проблема не коснётся.
Возможно, для создания маршрутизаторов, подобных вышеописанному, лучше подойдёт Raspberry Pi 400 или платформы, представленные вычислительными модулями, так как их процессоры быстрее, чем у Raspberry Pi 4 Model B.
Да, из дискуссии на Hacker News я узнал о том, что роутер с одним сетевым интерфейсом называют «router on a stick».
Итоги
Стоит ли вам собирать описанный здесь Raspberry Pi-роутер — зависит только от вас. Я пользуюсь чем-то подобным (применяя x86-сервер) уже лет 10, так как не могу провести второй кабель от модема до комнаты, где находится роутер. Вот как устроена моя домашняя сеть.
Пользуетесь ли вы домашними роутерами?
Беспроводные роутеры имеют несколько неприятных особенностей. Во-первых, они небезопасны, если только не разобраться с установкой OpenWrt. Во-вторых, со временем они перестают выпускаться, а значит, если ваш роутер сломается, вам придется разбираться с установкой OpenWrt на совершенно другой роутер. В-третьих, как правило, они довольно ограничены в ресурсах, а значит возложить на роутер какие-то дополнительные функции может быть проблематично. Между тем, абсолютно любой компьютер под управлением Linux может быть настроен в качестве полноценного Wi-Fi роутера, что решает проблемы безопасности, повторяемости и производительности. Для примера, рассмотрим создание беспроводного роутера на базе одноплатного компьютера Raspberry Pi.
Подготовительные работы
Я использовал уже не новую Raspberry Pi 2 Model B под управлением Raspbian Linux 9 (Stretch). В последних версиях этого дистрибутива SSH по умолчанию выключен. Чтобы его включить, вам понадобится USB-клавиатура и монитор с HDMI. Логинимся под пользователем pi с паролем raspberry, меняем пароль, включаем SSH:
passwd
sudo systemctl enable ssh.service
sudo systemctl start ssh.service
Из сетевых интерфейсов данный одноплатник имеет только один Ethernet-разъем. Чтобы у устройства появился второй разъем, я использовал сетевую карту от компании Olimex на базе чипа AX88772B. Вы можете помнить это устройство по заметке Снифинг Ethernet-трафика с платой Throwing Star. Чтобы малина также умела и Wi-Fi, был использован донгл Panda Wireless PAU07 (a.k.a Panda N600) на базе чипа Ralink RT5572. Вообще, это довольно неплохой и популярный чип. На eBay вы найдете много других устройств на его базе. Примите во внимание, что не всякий донгл работает с Linux, а из тех, что работают, не всякий поддерживает работу в качестве точки доступа. Поэтому перед покупкой устройства будет не лишним загуглить, подходит ли оно для задачи.
Внешний вид роутера у меня получился следующим:
С точки зрения ОС картина такая:
- eth0 — встроенный Ethernet, здесь у нас будет WAN;
- eth1 — сетевая карта на базе AX88772B будет использована для LAN;
- wlan0 — донгл Panda Wireless PAU07, здесь будет WLAN;
Само собой разумеется, все описанные далее шаги будут работать для любого компьютера под управлением Linux с подходящими сетевыми интерфейсами, не только Raspberry Pi. Это вполне может быть какой-то старый стационарный компьютер, нетбук, или другой одноплатник. Интересно, что существуют даже специальные одноплатники с Wi-Fi и двумя или более Ethernet-портами. Одним из таких одноплатников является Orange Pi R1. На AliExpress или eBay устройство можно купить где-то за 20$ с доставкой. Пользователь vova_ivanov из чата Hardware & Radio даже подсказал, что используемый в нем Realtek RTL8189 без проблем работает в роли точки доступа под Linux. А также предупредил, что Orange Pi R1 не умеет PoE и убивается им. В том же чате Xarlan подсказал, что больше подобных одноплатников можно найти на сайте board-db.org. В частности, довольно интересно выглядят Banana Pi BPI-R1, Banana Pi BPI-R2 и Banana Pi BPI-R64. Впрочем, эти устройства относятся уже к другому ценовому диапазону, а BPI-R64 на момент написания этих строк еще нигде не продавался.
Первоначальная настройка NAT
Открываем /etc/network/interfaces и пишем туда следующее:
auto lo
iface lo inet loopback
auto eth0
# Вариант А, без смены MAC:
# iface eth0 inet dhcp
# Вариант Б, со сменой MAC:
iface eth0 inet dhcp
hwaddress ether 11:22:33:44:55:66
auto eth1
iface eth1 inet static
address 10.128.10.1
network 10.128.10.0
netmask 255.255.255.0
broadcast 10.128.10.255
auto wlan0
iface wlan0 inet static
address 10.128.11.1
network 10.128.11.0
netmask 255.255.255.0
broadcast 10.128.11.255
Вариант со сменой MAC нужен исключительно в случае, если ваш интернет-провайдер ограничивает доступ по MAC-адресам, как это зачем-то делает мой. Если ваш ISP не страдает такой фигней, смело используйте вариант А.
Поскольку мы подправили /etc/network/interfaces, демон dhcpcd теперь будет отказываться стартовать. Для порядку отключим его, чтобы система при загрузке не ругалась ошибками:
sudo systemctl stop dhcpcd
sudo systemctl disable dhcpcd
Затем говорим:
sudo systemctl restart networking
Следующим шагом ставим dnsmasq, который будет играть роль DHCP-сервера и кэширующего DNS-сервера. Если нужно, в нем также есть функция TFTP-сервера. Такой сервер, к примеру, бывает нужен для установки OpenWrt на некоторые роутеры.
sudo apt install dnsmasq dnsutils
Правим /etc/dnsmasq.conf:
# Можно явно указать апстрим DNS-сервера
# Это может быть особенно полезно, если вы
# хотите заворачивать весь трафик в VPN
server=8.8.8.8
server=8.8.4.4
domain-needed
bogus-priv
# Listen only given interfaces
interface=lo
interface=eth1
interface=wlan0
bind-interfaces
# DNS cache size
cache-size=15000
# IP ranges
dhcp-range=eth1,10.128.10.50,10.128.10.250
dhcp-range=wlan0,10.128.11.50,10.128.11.250
# Default gateways
dhcp-option=eth1,3,10.128.10.1
dhcp-option=wlan0,3,10.128.11.1
# DNS servers
dhcp-option=eth1,6,10.128.10.1
dhcp-option=wlan0,6,10.128.11.1
Перезапускаем демона:
sudo systemctl restart dnsmasq
sudo systemctl status dnsmasq
Проверяем работу DNS-сервера:
DHCP и DNS настроены, осталось настроить NAT. Делается это при помощи iptables:
# enable IP-forwarding
sudo sh -c ‘echo 1 > /proc/sys/net/ipv4/ip_forward’
# for LAN
sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o eth1 -m conntrack \
—ctstate ESTABLISHED,RELATED -j ACCEPT
# for WLAN
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o wlan0 -m conntrack \
—ctstate ESTABLISHED,RELATED -j ACCEPT
# allow traffic between LAN and WLAN
sudo iptables -A FORWARD -i wlan0 -o eth1 -j ACCEPT
sudo iptables -A FORWARD -i eth1 -o wlan0 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Подключаем ноутбук ко второму Ethernet-порту малины. Проверяем, что нам выдали IP-адрес, и что имеется доступ в интернет. Если все работает, сохраняем сделанные изменения, чтобы они не потерялись после перезагрузки.
Для этого дописываем в /etc/sysctl.conf:
Выполняем: команду:
sudo sh -c ‘iptables-save > /etc/iptables.rules’
Создаем скрипт /etc/network/if-pre-up.d/iptables:
#!/bin/sh
set -e
iptables-restore < /etc/iptables.rules
exit 0
Говорим:
sudo chmod +x /etc/network/if-pre-up.d/iptables
Перезагружаем малину:
Проверяем, что все работает и после перезагрузки.
Настройка точки доступа Wi-Fi
Устанавливаем hostapd:
Правим /etc/default/hostapd
DAEMON_CONF=»/etc/hostapd/hostapd.conf»
Создаем файл /etc/hostapd/hostapd.conf:
interface=wlan0
ssid=RaspberryPi
country_code=RU
# Enable IEEE 802.11d
ieee80211d=1
# Enable IEEE 802.11n
ieee80211n=1
hw_mode=g
channel=5
# Use PSK
auth_algs=1
wpa=2
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
wpa_passphrase=s3cre7_pa55w0rd
SSID, пароль и номер канала, естественно, указываем какие нужно.
Запускаем hostapd:
sudo systemctl enable hostapd
sudo systemctl start hostapd
Должна появиться точка доступа с SSID RaspberryPi
. Пробуем к ней подключиться и проверяем, что все работает. Если вдруг что-то не работает, отладочный вывод можно получить командой:
sudo hostapd -dd /etc/hostapd/hostapd.conf
Делаем ребут:
Проверяем, что все работает и после ребута.
Заключение
Как видите, вся настройка занимает считанные минуты. Так как теперь у нас есть постоянно работающая машина под управлением Linux с выходом в интернет, почему бы заодно не воспользоваться и имеющимися на ней GPIO? К примеру, можно выводить прогноз погоды на HD44780-совместимые ЖК-индикаторы.
Если заплатить интернет-провайдуру за внешний IP (у моего провайдера эта услуга стоит 1.5$ в месяц), помимо роутера получим еще и домашний VDS. При желании на нем можно поднять веб-сервер, почтовый сервер, или даже VNC. Можно запустить какие-то дополнительные скрипты, например feed2email.py. Только следует учитывать, что по умолчанию SSH торчит наружу. Вам может захотеться сменить используемый им порт, ограничить доступ по IP при помощи фаервола, или же слушать только eth1 и wlan0.
Также теперь можно с легкость завернуть весь трафик в OpenVPN. Для этого на малине нужно 1) указать гугловые DNS в dnsmasq.conf, 2) запустить клиент OpenVPN обычным образом в каком-нибудь screen и 3) добавить правила фаервола для интерфейса tun0 аналогично тому, как это делалось для eth0. Понятно, что последнее можно обернуть в скрипт, чтобы постоянно не вспоминать эти пять команд.
Метки: Linux, Беспроводная связь, Девайсы, Сети, Электроника.
Технология WiFi в нашей время является одной из самых популярных технологий для осуществления беспроводной связи. Но в подобных условиях особенно остро стоит проблема перехвата пользовательской информации. И если вы хотите защитить свои данные от несанкционированных посягательств на них со стороны других лиц, то для использования технологии WiFi желательно использовать свой собственный роутер (маршрутизатор). И в данной статье мы рассмотрим создание своего собственного WiFi роутера на основе платы Raspberry Pi.
Ранее на нашем сайте мы также рассматривали создание ретранслятора WiFi сигнала на основе модуля ESP8266.
OpenWrt (Open Wireless Router) – это операционная система с открытым исходным кодом на основе Linux, которая была разработана для встраиваемой электроники. Она позволяет разработчикам модифицировать (настраивать) программное обеспечение на совместимых сетевых устройствах. Благодаря ей нам доступен следующий функционал:
- понятная и «естественная» блокировка рекламных объявлений, которая сделает ваш серфинг в сети интернет более комфортным;
- возможность использования VPN аддонов, исключающих возможность контроля со стороны интернет-провайдера вашего трафика и ваших поисковых запросов;
- обновления программного обеспечения. Многие производители роутеров спустя некоторое время прекращают выпуск для них обновлений прошивки, что делает их уязвимыми к новым возникающим угрозам безопасности. OpenWrt имеет огромное «живое» сообщество разработчиков, которое всегда выпускает обновления своего программного обеспечения, поэтому вы можете быть уверены в том, что ваш роутер будет защищен от новых угроз;
- поскольку OpenWrt основана на дистрибутиве Linux, это означает что она по умолчанию не восприимчива к большинству обычных атак.
В данном проекте мы рассмотрим установку программного обеспечения OpenWrt на плату Raspberry Pi, которую будем использовать в качестве роутера, работающего мостом между роутером от вашего интернет-провайдера и вашим компьютером.
Необходимые компоненты
- Плата Raspberry Pi 3-й или 4-й серии (купить на AliExpress).
- Источник питания.
- Ethernet LAN кабель.
- Обычный WiFi роутер (можно от провайдера).
- SD карта и модуль чтения SD карт.
Принципы работы нашего проекта
Основное устройство, которое предоставляет нам доступ в сеть интернет, это WiFi роутер от провайдера, но вместо непосредственного подключения наших устройств к этому роутеру мы будем подключать к нему нашу плату Raspberry Pi с помощью сетевого (LAN) кабеля. И в этом случае наша плата Raspberry Pi с загруженной в нее операционной системой (ОС) OpenWrt будет работать как точка доступа WiFi для всех ваших остальных устройств. В данной статье мы рассмотрим как установить и настроить OpenWrt на плату Raspberry Pi, чтобы эффективно использовать ее в качестве персонального WiFi роутера.
Принцип работы нашего проекта роутера наглядно представлен в следующем видео:
Установка OpenWrt на плату Raspberry Pi и настройка точки доступа WiFi
1. Вначале необходимо скачать файлы образа самой последней стабильной версии OpenWrt с ее официального сайта.
Выберите модель платы Raspberry Pi, которую вы будете использовать, и скачайте файл образа EXT4 (мы рекомендуем использовать плату Raspberry Pi 3-й или 4-й серии).
2. После успешного скачивания последней сборки ОС OpenWrt нам необходимо поместить ее на SD карту, но для этого нам понадобится два дополнительных инструмента: SD Card Formatter для очистки SD карты и Balena Etcher для записи файла образа на SD карту. Их можно скачать с их официальных сайтов.
3. После того как вы скачаете и установите эти программы, вставьте SD карту в модуль чтения для нее и затем в компьютер. Откройте SD Card Formatter > выберите SD карту > нажмите на format.
4. Откройте программу Balena Etcher Tool и выберите в ней “Flash from file option”.
5. Выберите файл образа (image file), который вы загрузили с официального сайта OpenWrt на шаге 1.
6. Нажмите на кнопку Select Target и выберите вашу карту.
7. И, наконец, нажмите на кнопку Flash Button. После этого OpenWrt будет смонтирована на вашу SD карту и теперь ее можно будет вставлять в плату Raspberry Pi.
8. Перед загрузкой Raspberry Pi нам необходимо указать IP шлюз по умолчанию (default gateway) для нашего роутера от провайдера. Для этого подключите ваш Wi-fi роутер к компьютеру, откройте CMD (командную строку) и выполните в ней следующую команду:
После чего в разделе LAN adapter option вы увидите Default Gateway IP для вашего роутера. Запишите его – он нам потребуется в дальнейшем.
9. Теперь вам необходимо отключиться от вашего Wi-fi. Вставьте подготовленную SD карту в вашу плату Raspberry Pi и подключите к ней источник питания. Используя кабель Ethernet LAN подключите плату Raspberry Pi к вашему компьютеру.
10. После этого вы увидите на экране компьютера основные свойства вашей Ethernet сети.
11. Откройте командную строку (Command Prompt) и выполните команду:
Эта команда покажет вам список всех доступных устройств в вашей сети. Запишите IP адрес вашего устройства, который будет в следующем формате:
Это будет IP адрес вашей платы Raspberry Pi и мы его будем использовать чтобы подключиться к плате по протоколу SSH (Secure Shell Protocol).
12. Если у вас Windows 10 или выше, вы можете непосредственно подключиться по протоколу SSH к плате Raspberry Pi используя команду:
Здесь root – это имя пользователя по умолчанию, а 192.x.x – IP адрес (если командная строка будет запрашивать у вас пароль, оставьте его пустым).
Примечание: командная строка спросит вас хотите ли вы продолжить соединение, напечатайте yes и нажмите enter.
Также для доступа к плате Raspberry Pi по протоколу SSH можно использовать программу PuTTy. В этом случае начните с SSH клиента, показанного на рисунке выше.
Когда вас спросят имя пользователя (Username) введите “root”, а поле для ввода пароля оставьте пустым.
13. Когда вы успешно подключитесь к плате Raspberry Pi по протоколу SSH вы увидите приглашение, которое будет означать что OpenWrt успешно установлена и загружена.
14. Выполните команду:
С ее помощью вы установите пароль для вашего устройства, он будет использоваться только когда вы будете снова подключаться к плате через протокол SSH или через web панель инструментов.
15. Теперь нам нужно отредактировать два файла конфигурации. Поскольку обычно используемый в Linux-подобных системах редактор ‘nano’ недоступен в OpenWrt, мы будем использовать текстовый редактор «vim».
16. Сначала нам необходимо изменить наш текущий каталог, сделаем это с помощью команды:
- Вы можете посмотреть все доступные файлы конфигурации с помощью команды:
- Сначала отредактируем файл сети с помощью команды:
19. После того как этот файл откроется, нажмите кнопку ‘i’ на клавиатуре чтобы начать его редактирование. Окно редактирования в этом случае будет выглядеть примерно следующим образом:
20. Сначала нам в настройки необходимо добавить IP шлюз по умолчанию для роутера, который мы определили на шаге 8.
Также нам необходимо добавить настройку dns с тем же самым IP.
option dns ‘192.168.x.x’ option gateway ‘192.168.x.x’ |
Эти изменения должны выглядеть примерно следующим образом:
21.Теперь вам необходимо изменить IP в опции ipaddr таким образом, чтобы первые 3 части IP адреса были бы такими же как у шлюза, а опция dns отличалась.Эти изменения должны выглядеть примерно следующим образом:
22. После того как вы закончите вносить все изменения в файл, для выхода из файла нажмите ESC.
После этого введите команду:
Нажмите Enter и тогда ваши изменения будут сохранены.
23. Теперь нам необходимо отредактировать этот файл по беспроводному каналу связи, для этого используйте команду:
— измените опцию отключения с ‘1’ на ‘0’;
— измените шифрование (encryption) с ‘none’ на ‘psk2’.
Создайте новую опцию для ключа (new option key) и введите пароль для точки доступа WiFi в кавычках. В этом случае сделанные изменения должны выглядеть примерно следующим образом:
24. Проделайте аналогичную процедуру сохранения и выхода из файла, то есть нажмите сначала ESC, а потом введите команду:
25. После того как вы нажмете Enter все необходимые настройки будут сделаны, нам нужно будет всего лишь перезагрузить сеть с помощью команды:
reboot network /etc/init.d/network restart |
26. Это приведет к закрытию вашего SSH соединения и рестарту вашей платы Raspberry Pi. Также вы можете отключить Ethernet LAN кабель от вашего компьютера.
27. После того как плата Raspberry Pi перезагрузится вы можете увидеть точку доступа OpenWrt среди ваших Wi-fi устройств находящихся поблизости. Вы можете легко к ней подключиться введя ключ, введенный вами ранее.
28. Вы можете открыть панель управления OpenWrt из любого браузера, просто введя там в строке браузера ее IP адрес. Зайти в нее вы сможете введя в качестве имени пользователя «root», а пароль для входа в нее вы установили на шаге 14.
29. После того все настройки в панели управления OpenWrt будут сделаны, мы можем подключить один конец Ethernet кабеля в ваш роутер от провайдера, а другой – в вашу плату Raspberry Pi.
Перезагрузите плату Raspberry Pi, отключив и подключив снова питание. После этого вы сможете заметить точку доступа OpenWrt среди всех доступных Wi-fi устройств. И если ваша плата Raspberry Pi подключена кабелем к роутеру, то вы можете успешно выходить в интернет, используя эту созданную нами точку доступа.
Загрузка…
1 717 просмотров
Описан процесс сборки самодельного универсального мини-сервера, по совместительству роутера, на основе Raspberry Pi. К устройству мы добавим OLED дисплей SSD1306, часы реального времени DS1307, датчик температуры DS18B20, пищалку, а также набор из пяти кнопок и RGB светодиод для управления и индикации различных событий.
Получим компактный, экономичный и многофункциональный компьютер, который можно использовать как маршрутизатор, сервер приложений, игровую консоль, модуль автоматического управления электронными устройствами и т. п.
Приведена принципиальная схема устройства, рассказано как все соединить и поместить в миниатюрный корпус, описан процесс изготовления коротеньких и надежных патч-кордов RJ-45.
Об установке и настройке программного обеспечения, скриптов можно будет прочитать в моей следующей публикации.
Содержание:
- Основные характеристики и возможности
- Комплектующие
- Принципиальная схема
- Печатная плата для крепления кнопок
- Крепление кнопочной панели
- Устанавливаем RGB-светодиод
- Подключение и крепление пьезозуммера (пищалки)
- Выводим свободные GPIO на корпус устройства
- Крепление дисплея SSD1306
- Подготовка и крепление модуля часов DS1307
- Нормализатор логических уровней
- Сборка корпуса устройства
- Самодельные патч-корды RJ-45
- Питание малинки и коммутатора (свича)
- В завершение
Основные характеристики и возможности
Данный мини-сервер изготавливался прежде всего для использования в качестве универсального маршрутизатора к проводному и 3G интернет-каналам, для раздачи его по проводам (RJ45) и Wi-Fi.
Рис. 1. Самодельный маршрутизатор на основе Raspberry Pi 3 model B с дисплеем, кнопками и часами.
Технические характеристики:
- Raspberry Pi 3 model B (BCM2837 64bit 4×1.2GHz CPU, 1GB, Bluetooth, Wi-Fi);
- OLED дисплей 128×64 — SSD1306;
- RTC часы DS1307 + датчик температуры DS18B20;
- 5 не фиксируемых кнопок для управления и выбора режимов;
- RGB-светодиод для индикации и оповещения о событиях;
- Пьезозуммер (пищалка) для подачи звуковых сигналов;
- 20 свободных GPIO, выведенных наружу (IO, I2C, SPI, 3V, 5V, GND).
Раньше я уже рассказывал что такое Raspberry Pi (малинка) и как можно использовать этот миниатюрный компьютер размером в кредитную карту.
Поскольку самодельный маршрутизатор, построенный на основе малинки, будет включен достаточно длительное время и загружен по минимуму, то вполне логично повесить на него еще какие-то дополнительные задачи.
Некоторые возможности:
- Маршрутизатор (роутер) для сетей Ethernet, 3G, Wi-Fi;
- Вывод статистики и состояния устройства на дисплей (загрузка CPU и памяти, внешний IP-адрес и т.п.);
- Вывод часов и температуры внутри устройства на дисплей;
- Звуковые оповещения различных событий (упал проводной интернет-канал, пришла почта, не доступен сайт и т.п.);
- Медиа-архив, торрент-клиент (с внешним USB-SSD накопителем);
- Включение/выключение различных электронных устройств (домашняя автоматика);
- Вся мощь ОС GNU/Linux + огромное количество различных программ;
- …
Для подключения к такому роутеру нескольких устройств по кабелю (витая пара) нужно докупить небольшой свич (ethernet switch) на 5 и более портов, желательно с питанием от +5В. Также к малинке можно подключать различные флешки, USB HDD/SSD, веб-камеры и прочую USB-электронику.
Для добавления к малинке еще одиного порта Ethernet нужно будет приобрести небольшой внешний адаптер USB-Ethernet. Как правило, все такие адаптеры без проблем распознаются операционной системой GNU/Linux, с Raspbian тоже проблем быть не должно.
К такому сетевому адаптеру можно будет подключить внешний проводной интернет-канал, а к интегрированному в малинку Ethernet-порту — коммутатор на 5 портов для подключения ПК, ноутбука и других устройств домашней сети.
Комплектующие
Все комплектующие для сборки подобного мини-сервера удобнее всего покупать в интернет-магазинах. С покупкой платформы Raspberry Pi проблем быть не должно. Можно использовать как 2-ю, так и 3-ю версию малинки.
Рис. 2. Raspberry Pi 3 model B — внешний вид, порты и важные компоненты.
Наиболее сложно доставаемая штука в данном случае — это хороший корпус для raspberry pi. Здесь не стоит жалеть денег и лучше сразу брать хороший алюминиевый корпус. Корпус из металла — прочный, хорошо отводит тепло, а также выступает в качестве экрана и его можно удобно переделать под свои цели.
Важно чтобы в таком корпусе были учтены отверстия под светодиодные индикаторы и Wi-Fi (Bluetooth) антенну, которые расположены на плате малинки.
Мною был куплен корпус Eleduino для Raspberry Pi черного цвета. В продаже также есть цвета: синий, красный, серый и серебристый. В комплекте с корпусом идут маленькие алюминиевые радиаторы для установки на чипы малинки, а также силиконовые подкладки под корпус (ножки).
Рис. 3. Eleduino — хороший металлический корпус для Raspberry Pi 2/3.
OLED дисплей SSD1306 с разрешением 128×64 пикселей — экономичен, небольшой по размерам, есть в разных цветах и умеет работать с шиной I2C. Отличный выбор для самодельного мини-сервера!
Рис. 4. OLED дисплей SSD1306 — готовый модуль для подключения по шине I2C.
Для подключения часов реального времени (RTC, Real Time Clock) можно купить специализированную микросхему, например DS1307Z, но удобнее взять готовый модуль на этой микросхеме — DS1307.
Рис. 5. Модуль часов реального времени DS1307 + 2C EEPROM 24C32.
Плюсы DS1307:
- Встроенная литиевая батарейка (CR2032-210mAh);
- Чип энергонезависимой памяти — I2C EEPROM 24C32 (32 KBit);
- Интерфейс для подключения датчика температуры — DS18B20;
- Низкая стоимость.
Также в конструкции использован RGB-светодиод диаметром 5мм, марку не знаю, взял первый что был в наличии. Для подачи звуковых сигналов применен пьезозуммер, извлеченный из старого ноутбука.
Похожий пьезоэлектрический звукоизлучающий элемент можно извлечь из наручных электронных часов или музыкальной открытки.
Рис. 6. Пьезозуммеры: в корпусе и без корпуса.
Микрокнопки — 5 штучек с размерами 6х6мм, высота цилиндра 3-5мм, каждая содержит по четыре ножки для припаивания к плате. Их также можно извлечь из нерабочей оргтехники и других электронных плат.
Рис. 7. Микрокнопки 6х6мм, 4 вывода DIP.
Примерная стоимость блоков и компонентов на момент написания статьи:
- Raspberry Pi 3 model B — 36$
- Металлический корпус для Raspberry Pi 2/3 — 10$
- OLED-дисплей SSD1306 I2C — 2.76$
- Модуль часов RTC DS1307 — 0,52$
- RGB-светодиод 5мм — 0,45$ (10шт.)
- Пьезо-зуммер — 0,68$ (10шт.)
- Кнопки 4 пина DIP — 0.65$ (10шт.).
Принципиальная схема
Рассмотрим принципиальную схему самодельного сервера-маршрутизатора на основе Raspberry Pi.
Рис. 8. Принципиальная схема включения модулей Raspberry Pi, SSD1306, DS1307, DS18B20, кнопок, светодиода и пищалки.
Раньше я уже рассказывал о безопасном подключении кнопок к GPIO, здесь все так же — каждая из кнопок подключена с двумя резисторами.
В сопротивлениях резисторов R4-R13 допустимы небольшие отклонения от указанных значений, к примеру можно использовать пары на 750 Ом и 16 кОм.
Каждый из каналов RGB-светодиода подключен к пинам GPIO через гасящие резисторы R2-R4, дальше в статье я расскажу о подборе их сопротивления.
Датчик температуры D18B20 (DALLAS) подключен к «1-Wire» интерфейсу — пину IO4 (7-й вывод GPIO), также к нему подключен подтягивающий резистор R1, необходимый для обеспечения работы данного интерфейса.
Модуль SSD1306 питается от напряжения +3,3В и напрямую подключен к выводам шины I2C малинки. Модуль часов DS1307 питается от линии +5В (от напряжения +3,3В он работать не сможет) и подключен к общей шине I2C через нормализатор логических уровней, выполненный на полевых транзисторах Q1 и Q2.
В одной из статей я описал зачем нужна нормализация логических уровней и как подключать к шине I2C устройства с разным напряжением питания.
Вы могли заметить что здесь на схеме не изображены подтягивающие резисторы, подключаемые к линиям питания +3,3В и +5В — эти резисторы уже установлены на модулях SSD1306 и DS1307, установка дополнительных резисторах не понадобится.
Свободные GPIO будут выведены на корпус устройства при помощи массива из 20 гнезд. Пьезоэлектрический зуммер подключен к общему (GND) и одному из выводов GPIO — IO18.
Хочу добавить что для более надежного подавления дребезга контактов между каждым из выводов GPIO, что подключен к кнопке, и землей (GND) желательно добавить по конденсатору на 100нФ (0,1мкФ). Об этом подробнее рассказано во тут.
Собранная конструкция роутера позже показала что программного подавления дребезга контактов не достаточно, иногда все же имеет место двойная реакция на единичные нажатия кнопки.
В более раннем варианте схемы было использовано не безопасное подключение модулей к шинам I2C и 1-Wire. Все модули питались от напряжения +5В, в то время как высокий логический уровень напряжения (1) для шины I2C и пина 1-Wire малинки — это +3,3В.
Датчик DS18B20 был впаян в модуль DS1307, на этом модуле вывод «Data» датчика также подтянут резистором к линии питания +5В, что является опасным при подключении его к шине 1-Wire на малинке.
Рис. 9. Опасное, но рабочее экспериментальное подключение модулей с питанием от +5В к шине I2C Raspberry Pi.
Тем не менее, такая схема уверенно работала на протяжении многих месяцев, спасало скорее всего то, что на одном из модулей были выпаяны подтягивающие резисторы и ток с напряжением +5В был достаточно мал чтобы выжечь ключи внутри контроллера GPIO.
В общем, старайтесь так не делать! Важно учитывать и соблюдать максимальные напряжения логических уровней на входах и выходах для каждого из используемых модулей!
Теперь перейдем к описанию процесса изготовления печатной плати для блочка с кнопками, подготовки корпуса и крепления всех блоков и компонентов.
Печатная плата для крепления кнопок
Пять кнопочек управления решил разместить с обратной стороны корпуса — над отверстиями для светодиодных индикаторов и антенны Wi-Fi.
Чтобы все спланировать, обрисовал боковую панель на листе бумаги в клеточку:
Рис. 10. Чертеж контуров боковой панели корпуса, где будут крепиться кнопки.
Разместив кнопочки на трафарете панели, можно прикинуть оптимальные расстояния между ними. В моем случае кнопки можно равномерно разместить через одну клеточку.
Рис. 11. Прикидываем размещение кнопок на трафарете панели корпуса. (кликабельно)
Теперь можно обрисовать границы будущей платы, которая будет крепиться к панели, и сделать разметку отверстий для кнопочек.
Из кусочка картона (бирюзового цвета) был вырезан прямоугольник размером как в будущей плате, приложив его к боковой панели и поместив ее в корпус можно убедиться что все хорошо размещено и ничего не мешает.
Рис. 12. Разметка платы для кнопок, проверка размещения в корпусе с помощью трафарета. (клик для увеличения)
Для сборки схемы с кнопками решил применить SMD резисторы, выбрал пары сопротивлений 820 Ом и 15 кОм.
Рис. 13. Кнопки и SMD-резисторы для сборки кнопочной панели.
Разводку печатной платы можно выполнить в одной из специализированных программ (KiCad, Sprint Layput и других) и потом изготовить методом Лазерно-Утюжной Технологии (ЛУТ).
Я же выполнил рисунок этой маленькой печатной платы быстрым классическим методом — простым карандашом на бумаге в клеточку (на которой был нарисован трафарет боковой панели корпуса).
Рис. 14. Печатная плата для кнопочной панели, разводка дорожек карандашом.
Важно: на печатной плате нет конденсаторов по 0,1мкФ для подавления дребезга контактов, о котором я писал при обзоре принципиальной схемы, эти конденсаторы можно просто подопаивать сверху со стороны дорожек.
Для изготовления печатной платы был найден кусочек двухстороннего стеклотекстолита толщиной примерно 1мм. Для будущей платы нужна только одна сторона с фольгой, поэтому слой фольги с второй стороны был аккуратно убран с помощью скальпеля.
Рис. 15. Заготовка под печатную плату для панели с кнопками.
Оставшуюся сторону с медной фольгой хорошо зачищаем, используя кусочек мелкозернистой наждачной бумаги. Зачистку поверхности наждачкой сначала выполняем вдоль, а потом завершаем легкими круговыми движениями.
С помощью ножниц вырезаем нарисованный трафарет печатной платы (рисунок 14) и небольшими капельками клея ПВА приклеиваем его к заготовке из стеклотекстолита.
Рис. 16. Клеим трафарет печатной платы на заготовку из стеклотекстолита.
Теперь с помощью керна нужно перенести на стеклотекстолит все точки на которых будут сверлиться отверстия под крепление панели и пайку деталей. Также легко наметил точки где будут размещены ножки SMD резисторов, чтобы потом было удобно рисовать дорожки.
Рис. 17. Переносим точки для сверления на стеклотекстолит при помощи керна.
Вот что получилось:
Рис. 18. Точки для сверления отверстий в стеклотекстолите намечены.
Можно приступать к сверлению отверстий. Нужно сделать отверстия под кнопки, а также два отверстия под крепление платки. Подобрав сверла нужного диаметра можно приступать к работе.
Для сверления использовал самодельную микродрель, состоящую из мощного микродвигателя (извлек из какого-то копира) и латунного цангового патрона для тонких сверл.
Рис. 19. Готовимся к сверлению отверстий в будущей платке для кнопок.
Подобный набор из патрона и цанг можно поспрашивать в магазинах электроинструмента, а также заказать в китайском интернет-магазине (1-2$).
Бывает что сверло очень тонкое и в патрон его зажать невозможно, в таком случае поможет небольшая хитрость: наматываем на сверло виток к витку и с натяжкой медную проволоку диаметром примерно 0,3мм (рисунок 19), теперь сверло с такой «катушкой» зажмется достаточно надежно.
Рис. 20. Отверстия в стеклотекстолите просверлены (сверла 0,8мм и 3мм).
Раньше (еще до знания технологии ЛУТ) для рисования дорожек я использовал лак в котором разводил чернило из шариковой ручки.
Искать лак и готовить краску не было времени, поэтому обратился за помощью к женщинам — подарили мне баночку уже не нужного лака для ногтей и немножко растворителя. Также в инструментах нашел стеклянный шприц с уже обрезанной толстой иглой, которым раньше рисовал печатные платы.
Рис. 21. Набор подручных средств для рисования печатной платы: лак для ногтей, растворитель, шприц, иголка.
В соответствии с трафаретом, нарисовал лаком на стеклотекстолите все дорожки. Подождал пока лак высохнет и подкорректировал форму дорожек при помощи иглы. Вот что получилось:
Рис. 22. Нарисованные лаком для ногтей дорожки самодельной печатной платы.
Травление печатной платы производил в хлорном железе. Как все было готово, очистил с оставшихся дорожек лак, используя промоченную в растворителе ватку.
Рис. 23. Готовая вытравленная печатная плата для кнопочной панели роутера на Raspberry Pi.
По слою оставшейся меди нужно пройтись мелкозернистой наждачной бумагой (нулевкой). Чтобы убрать весь мусор и опилки после шлифовки — протереть сторону с дорожками ваткой в спирте. Осталось залудить дорожки печатной платы припоем с канифолью и можно припаивать кнопки с резисторами.
Рис. 24. Готовая панель для пяти кнопок, подключаемых к Raspberry Pi. (кликабельно)
Крепление кнопочной панели
Приложив готовую печатную плату к металлической панели и поместив их в корпус, намечаем точки для сверления отверстий. Для этого был использован тонкий круглый надфиль с заостренным кончиком.
Рис. 25. Наметка точек для сверления в корпусе отверстий к которым будет прикреплена плата.
Просверлив отверстия и прикрутив плату с кнопками к металлу, можно выполнить пометку мест для сверления отверстий под сами кнопки.
Рис. 26. Наметка точек для сверления отверстий под кнопки.
Рис. 27. Готовая разметка для сверления отверстий под кнопки.
Отверстия сверлятся сначала сверлом небольшого диаметра, а потом доводятся до нужных размеров и формы с помощью круглого надфиля. Крепиться плата будет двумя долгими винтами диаметром 3мм и черного цвета (под цвет панели).
Чтобы плата держалась устойчиво и не висела на корпусах кнопок, были подобраны пластиковые стойки-шайбы. Две одинаковые найти не удалось, поэтому добавил к меньшей стойке одну металлическую шайбу.
Чтобы гайки со стороны дорожек ничего не закоротили, добавил две диэлектрические прокладки. К плате были припаяны соединительные проводники МГТФ (в изоляции из фторопласта). В конце все проводники можно зафиксировать вместе, поместив на них небольшой кусочек термоусадки. Получается вот такой план крепления:
Рис. 28. План крепления готовой печатной платы с кнопками к корпусу будущего роутера.
Все закреплено и четко вписывается в корпус будущего сервера:
Рис. 29. Панель с кнопками в металлическом корпусе для Raspberry Pi.
Устанавливаем RGB-светодиод
Трехцветный RGB-светодиод подключается через гасящие резисторы (рисунок 8). Подобрать сопротивление гасящего резистора можно экспериментально, подключив светодиод через переменный резистор на 3 кОм к источнику питания 3,3В (на пинах GPIO у нас будет именно такое напряжение при высоком уровне).
Сначала ручку переменного резистора устанавливаем в крайнее положение с наибольшим сопротивлением, потом подключаем к схеме питание и вращая ручку добиваемся хорошего уровня свечения. Для измерения потребляемого тока я дополнительно включил в разрыв цепи мультиметр в режиме измерения тока (200мА макс).
Рис. 30. Подбираем сопротивление гасящего резистора для светодиода.
Светодиод светится ярко, а его ток потребления составляет меньше 1мА! После отключения переменного резистора я померил его сопротивление — примерно 1кОм.
Рис. 31. Припаиваем резисторы и проводники к RGB-светодиоду.
Для подключения к GPIO пинам использованы пластиковые коннекторы, такие можно встретить в старых системных блоках и другой компьютерной технике.
Рис. 32. Подключаем коннекторы для GPIO к светодиоду.
Светодиод размещен между USB разъемами малинки, его свечение через корпус прекрасно видно, тем более в темноте (можно использовать как мини ночник).
Рис. 33. Расположение RGB-светодиода в корпусе для Raspberry Pi.
Подключение и крепление пьезозуммера (пищалки)
На рисунке ниже показаны два типа пищалок. Первая из них — электродинамическая, подключать ее напрямую к GPIO очень опасно — можно спалить порт.
А вот подключать напрямую пьезоэлектрическую пищалку вполне можно попробовать! К тому же, пьезоэлемент имеет плоскую форму и он очень тонкий, его удобно крепить к стенкам устройств.
Рис. 34. Два типа пищалок, электродинамическая и пьезоэлектрическая.
С креплением зуммера все решилось просто — приклеил его с помощью двухстороннего скотча. Для этого вырезал колечко точно по диаметру белой подкладки зуммера.
Рис. 35. Крепление зуммера к корпусу Raspberry Pi с помощью двухстороннего скотча.
Рис. 36. Пьезозуммер закреплен на металлическом корпусе роутера.
Останется только обрезать белый не нужный коннектор и припаять такие же коннекторы, которыми подключен светодиод.
Выводим свободные GPIO на корпус устройства
Покопавшись в хламе с различными коннекторами, разъемами и клеммами я не смог найти ничего подходящего, чем бы можно было удобно вывести 10-20 пинов GPIO наружу металлического корпуса для Raspberry Pi. Решил порыться в коробке с компьютерным хламом и нашел нечто интересное.
Рис. 37. Коллекция коннекторов: D-15 (VGA), COM-порт, USB.
Можно использовать шлейф с коннектором на 16 пин или же два коннектора от COM-портов, но я выбрал более удобный и удачный вариант — коннекторы от USB, два отдельных блока по 10 гнезд (на рисунке справа один из них).
Все проводники били откушены от коннекторов, а внутренние контактные пластинки изъяты для извлечения остатков проводников и пайки новых — во фторопластовой изоляции (МГТФ).
Рис. 38. Коннекторы от USB панельки (для подключения к пинам материнской платы).
Припаяв 20 контактов к проводникам и установив их в разъем можно немного отдохнуть, выпить воды/чая/кофе. Теперь осталось припаять еще 20 коннекторов (будут подключены к GPIO) с другой стороны проводников. :))
Рис. 39. Коннекторы от передних панелей системных блоков и готовые разъемы с припаянными проводниками.
Прежде чем припаивать коннекторы с другой стороны (рисунок выше справа), нужно укоротить сами проводники чтобы они хорошо расположились в корпусе с Raspberry Pi и ничему не мешали.
Для этого два черных коннектора были временно связаны вместе кусочком провода и размещены над платой малинки там, где они будут установлены. В моем случае, разъем будет установлен сразу за USB, с той же стороны что и гребенка GPIO.
Теперь берем по одному проводнику и измеряем его достаточную длину до нужного пина GPIO (с небольшим запасом), откусываем и припаиваем коннектор, параллельно записывая схематично на листе бумаги его название и расположение на разъеме. Делаем так 20 раз!
Когда все готово, можно приступать к вырезанию отверстия под разъем в корпусе. Здесь важно точно все измерить и не полениться проверить несколько раз, корпус должен хорошо закрываться с установленным разъемом.
Рис. 40. Готовый разъем для GPIO и разметка под отверстие в корпусе Raspberry Pi.
После разметки прямоугольника где будет отверстие под разъем, сверлим в нем по середине отверстие диаметром примерно 6-10мм.
Рис. 41. Подготовка к выпиливанию отверстия в металлическом корпусе.
Используя надфили выпиливаем отверстие под разъем. Особенно аккуратно работать нужно в самом конце, разъем должен плотно и точно помещаться в отверстие, не болтаться.
Рис. 42. Готовое отверстие под разъем для вывода 20 пинов GPIO на корпус.
Для фиксирования разъема в отверстии корпуса можно применить клей или же плавкий силикон.
Крепление дисплея
Дисплей SSD1306 будет размещен на верхней крышке корпуса, с левой стороны. Он должен быть отцентрирован по вертикали и смещен в сторону с достаточным отступом чтобы не касаться кнопочной панели.
Таким образом, над разъемами HDMI и Audio останется достаточно места под платку с часами реального времени — DS1307.
Рис. 43. Новенький дисплей SSD1306 и заготовка из органического стекла для окошка в корпусе.
Суть идеи по креплению дисплея:
- вырезаем в корпусе прямоугольное отверстие;
- вырезаем из оргстекла пластину под это отверстие с запасом по краям;
- стачиваем края пластины чтобы ее середина вписывалась в отверстие на корпусе;
- крепим пластину клеем;
- прикладываем дисплей к пластине и фиксируем его плавким силиконом.
Более хорошо понять суть идеи можно из рисунка:
Рис. 44. Схема крепления дисплея SSD1306 к металлическому корпусу роутера.
Под окошко дисплея размерами 26х15мм на заготовке из оргстекла был размечен прямоугольник. Далее, используя самодельный резак из ножовочного полотна по металлу, были вырезаны полоски (канавки) по которым будет убрана часть бокового материала, чтобы осталось примерно 1,2мм по толщине.
Рис. 45. Разметка и резка оргстекла с помощью самодельного резака из ножовочного полотна.
Теперь нужно убрать слой оргстекла вокруг окошка до толщины примерно 1,2мм. Данный процесс был выполнен с помощью скальпеля и набора надфилей. Поработать придется не мало. Ускорить работу можно если в наличии есть ручная машинка для фрезеровки.
Рис. 46. Панелька из оргстекла для крепления и защиты дисплея SSD1306.
Теперь пришло время для вырезания в корпусе прямоугольного отверстия под дисплей. Размеры прямоугольника будут такие же как и у прозрачного окна на панельке из органического стекла — 26х15мм.
На крышке корпуса была выполнена разметка окошка, а также просверлено отверстие возле одного из краев чтобы можно было запустить пилочку лобзика.
Рис. 47. Выпиливание окна под дисплей в металлическом корпусе с использованием лобзика.
Если нет лобзика то можно насверлить отверстий по периметру будущего окошка и потом напильником и надфилями выпилить серединку.
Важно выпиливать прямоугольник не по линии, а по ее краешку внутри (про запас), чтобы сама линия была видна. После этого, с помощью надфилей можно подогнать размеры так, чтобы панелька из оргстекла точно вписалась в окошко.
Рис. 48. Панелька из органического стекла под дисплей в металлическом корпусе.
Панелька из оргстекла была приклеена к корпусу клеем. Дисплей SSD1306 приложен к панельке и зафиксирован по периметру несколькими кусочками плавкого силикона.
Рис. 49. Дисплей SSD1306 прикреплен к металлическому корпусу для Raspberry Pi.
Подготовка и крепление модуля часов DS1307
Прежде чем заняться подключением и креплением модуля DS1307, его нужно немножко подготовить. Так же как и модуль дисплея, он будет подключен к шине I2C, но через нормализатор логических уровней.
Я рекомендую увеличить сопротивления подтягивающих резисторов, которые установлены на модуле, примерно в 2 раза, чтобы уменьшить нагрузку на каналы устройств, подключенных к шине I2C!
К примеру, если бы мы подключали к шине I2C малинки два устройства с питанием от +3,3В без схемы нормализации логических уровней (напрямую), то на одном из модулей подтягивающие резисторы желательно было бы выпаять. Об этой особенности я рассказывал в статье по PCF8591 и шине I2C.
Таким образом, выпаиваем из модуля DS1307 подтягивающие резисторы R2 и R3 (4,7 кОм) и на их место запаиваем резисторы сопротивлением примерно 10-12 кОм.
Платка DS1307 также содержит литиевую батарейку CR2032 — это не аккумулятор и поэтому заряжать ее нельзя. Остается загадкой почему производитель модулей DS1307 оставил включенным схему зарядки продавая в комплекте литиевую батарейку. Для отключения зарядки нужно выпаять еще один из резисторов — R5.
Рис. 50. Отпаиваем резисторы для шины I2C и зарядки батарейки на модуле DS1307.
Также на платке есть место под установку термодатчика DS18B20, который работает по шине 1-Wire.
Рис. 51. Установка датчика температуры DS18B20 на модуль часов DS1307.
В нашем случае можно использовать это посадочное место для датчика, предварительно перерезав дорожки, идущие к линиям «Data» и «VCC» со стороны где расположена батарейка.
Рис. 52. Отключаем подтягивающий резистор и питание +5В к датчику DS18B20 DS1307.
С другой стороны (где расположены электронные компоненты) между ножками «Data» и «VCC» нужно запаять резистор на 4,7-10К. Теперь к выводу «VCC» датчика можно припаять проводник, который будет подключен к линии питания +3,3В.
Отверстие для подключения, маркируемое как «DS» и расположенное со стороны датчика, теперь можно использовать для подключения провода данных, идущего к шине 1-Wire Raspberry Pi.
На платке Raspberry Pi нужно выкрутить один из винтов крепления к корпусу (тот что около аудио разъема) и на его место установить небольшую цилиндрическую стойку, на которой будет закреплен модуль DS1307.
В крепеже я нашел несколько вариантов крепления, мне больше понравился вариант с готовыми металлическими винтами-цилиндрами, которые содержат с противоположной стороны резьбу под винт 3мм.
Мне здесь повезло с высотой стоек — все вписывается идеально, в любом случае их высоту можно подкорректировать на электроточиле или же ручным напильником.
Рис. 53. Варианты комплектов крепежа для установки модуля часов DS1307.
Прикрутив платку DS1307 к корпусу получилась следующая картинка:
Рис. 54. Крепление модуля DS1307 внутри самодельного роутера на основе Raspberry Pi (клик для увеличения).
Нормализатор логических уровней
Схема нормализации логических уровней для модулей с питанием от +3,3В и +5В собрана на двух полевых транзисторах и подтягивающих резисторах, которые уже были установлены на платках изначально. Осталось как-то закрепить и подключить транзисторы BSS138.
Их ножки можно поприпаивать напрямую к проводникам, но лучше все же не полениться и изготовить небольшую платку — так будет надежнее и безопаснее.
Рис. 55. Цоколевка полевых транзисторов BSS138.
На бумаге в клеточку быстро начертил два варианта печатной платки, изготавливаемой из кусочка стеклотекстолита:
Рис. 56. Варианты печатных платок для подключения транзисторов BSS138 в схеме нормализации логических уровней.
В первом варианте шлюзы (G) транзисторов окажутся соединены, а во втором придется их дополнительно соединить проводником и платка получится еще более миниатюрной.
Рис. 57. Транзисторы BSS138 на миниатюрной платке.
Осталось все соединить и позаботиться об изоляции контактов платы. Здесь можно применить изоляционную ленту и даже строительный скотч:
Рис. 58. Платка нормализатора логических уровней припаяна к схеме и готова к изоляции.
Схема полностью в сборе!
Сборка корпуса устройства
Осталось собрать корпус соединив верхнюю и нижнюю крышки, а потом прикрутив боковые панели восемью винтами.
Рис. 59. Мини сервер и роутер на Raspberry Pi, осталось собрать корпус.
Корпус в сборе уже был показан на рисунке 1, вот еще одно фото готового устройства:
Рис. 60. Внешний вид готового устройства.
Самодельные патч-корды RJ-45
Для подключения Raspberry Pi к сетевому коммутатору (Switch) было решено изготовить короткие и надежные патч-корды под разъемы RJ-45.
Поскольку скорость передачи данных Ethernet-порта малинки — 100 МБит, то можно обойтись всего двумя парами проводников.
Длина проводников будет достаточно не большая (15см — до 1м), поэтому можно применить прочный телефонный кабель, содержащий 4 разноцветные жилки (жилы попарно не скручены как в кабеле UTP).
Такой телефонный кабель очень прочный и достаточно гибкий, он тонкий и с хорошо изолированными внутренними жилками.
Рис. 61. Коннекторы RJ-45, обжимной инструмент и телефонный кабель на 4 жилы.
Хочу заметить что не стоит покупать такой же обжимной инструмент, который изображен на рисунке выше. Проблема в том, что зубчики для прижимания пинов коннектора в этом инструменте движутся не прямо, а все же под небольшим углом к коннектору (за счет конструкции с точкой вращения), поэтому верхний зубец со временем может деформироваться, а потом и вовсе отвалиться, испортив вам при этом не мало коннекторов и нервов. Лучше купить более дорогой и качественный инструмент где зубья движутся к пинам коннектора прямо и ровно!
Нумерация и подключение жилок телефонного кабеля к коннектору RJ-45:
- 1 — желтый;
- 2 — бирюзовый;
- 3 — розовый;
- 6 — черный.
Смотрим схему:
Рис. 62. Распиновка RJ-45 для патч-корда из телефонного кабеля на 4 жилы.
Попробовав обжать кабель как есть я увидел что держится он в коннекторе очень не надежно. Решил применить разноцветные термоусадки — это усилит крепление кабеля в коннекторе и позволит пометить коннекторы/патч-корды разными цветами.
На каждый коннектор RJ-45 нужно подготовить два кусочка термоусадки — один короткий, другой примерно в 1,5 раза длиннее.
Рис. 63. Готовим термоусадки для хорошей обжимки кабеля в коннекторе RJ-45.
Кабель был очищен от внешней изоляции, оставив примерно 2см проводников для обжимки. На край изоляции была надета и прогрета коротенькая термоусадка, а затем на нее надет и нагрет более длинный кусочек термоусадки. Термоусадку, что подлиннее, желательно греть паяльником не касаясь ее, получится аккуратно и красиво.
Рис. 64. Подготовка кабеля для самодельного патч-корда с коннекторами RJ-45.
Подготовив кабель с двух сторон осталось только обжать коннекторы. Если у вас в наличии нет обжимного инструмента то можно аккуратно выполнить обжимку плоской отверткой — помещаем жилки кабеля соответственно схеме (рисунок 62), зажимаем кабель в коннекторе, а потом прижимаем каждый из пинов коннектора кончиком отвертки.
Получилось надежно и симпатично:
Рис. 65. Готовые самодельные патч-корды (2 пары жил) с коннекторами RJ-45.
Питание малинки и коммутатора (свича)
Коммутатор (5 портов) был куплен с расчетом на питание от линии +5В и током потребления — примерно 0,5А. В в интернет магазинах есть разные модели коммутаторов, но напряжение питания зачастую нигде не указано, а оно может быть и +12В, +9В, +7,5В…
Поэтому, более надежный вариант покупки — прогуляться по магазинам и самому почитать параметры маршрутизаторов и их источников питания. Пример модели с питанием от +5В: D-Link DES-1005.
Чтобы коммутатор можно было питать от USB-разъемов разных устройств (ноутбук, power-bank, адаптер питания с USB-поратми) его шнур питания нужно переделать.
Я отрезал от провода питания маршрутизатора сетевой адаптер и припаял к этому проводу USB-коннектор, который взял от нерабочей мышки A4TECH X7 (качественный коннектор, большое сечение жилок). Отрезанный маломощный блок питания от свича на +5В пригодится для других экспериментов и самоделок.
Если вы планируете питать маршрутизатор через адаптер только от сети 220В, то эту переделку можно и не выполнять.
Рис. 66. Подготовка кабеля питания для свича от USB-порта компьютера или сетевого адаптера.
Сначала попробовал питать коммутатор от USB-порта Raspberry Pi 3 — при большом трафике это приводит к перезагрузке или зависанию малинки. Ethernet-switch содержит внутренние преобразователи напряжения и потребляет не мало тока, он вполне способен перегрузить USB-порт малинки по линии питания.
В данной ситуации, самое лучшее решение — это покупка небольшого адаптера с двумя USB портами для питания малинки и коммутатора. Выходные параметры адаптера должны быть примерно такими: напряжение +5В, ток 2,5А и более.
Хочу отдельно обратить ваше внимание на кабели-переходники USB-miniUSB для питания Raspberry Pi — они должны быть качественными, из более дорогих, содержащие жилки достаточного сечения для пропускания через них тока 2-2,5А при напряжении 5В, что примерно равно мощности 10-13Вт.
Не пожалейте денег на качественный блок питания и соединительный кабель для малинки, это важно!
Также всю связку можно будет питать от пауер-банка (Power Bank) — как аварийный вариант, когда нет штатного питания из сети переменного тока.
В завершение
На этом «железная» часть по изготовлению самодельного мини-сервера и роутера на Raspberry Pi завершена. В следующей статье я расскажу как настроить операционную систему и все необходимые программы, приведу скрипты и эксперименты с кнопками, дисплеем, пищалкой, Wi-Fi, 3G…
Вы можете сконфигурировать свой одноплатный компьютер Raspberry Pi в роутер. Raspberry Pi имеет сетевой интерфейс Wi-Fi и проводной сетевой интерфейс. Вы можете настроить Raspberry Pi как беспроводной маршрутизатор или проводной маршрутизатор.
Вы можете подключить Raspberry Pi к беспроводной сети Wi-Fi, которая имеет подключение к Интернету, и направить интернет-трафик на интерфейс проводной сети. Таким образом, вы можете использовать Raspberry Pi в качестве проводного маршрутизатора.
Или вы можете подключиться к сети, которая имеет подключение к Интернету через интерфейс проводной сети, создать точку доступа Wi-Fi, используя сетевой интерфейс Wi-Fi Raspberry Pi, и маршрутизировать интернет-трафик к сетевому интерфейсу Wi-Fi. Таким образом, вы можете использовать Raspberry Pi в качестве беспроводного маршрутизатора.
В этой статье я покажу вам, как настроить Raspberry Pi в качестве проводного маршрутизатора. Итак, приступим.
Вещи, которые нужно:
Чтобы настроить Raspberry Pi в качестве проводного маршрутизатора, вам понадобятся следующие вещи:
1) Одноплатный компьютер Raspberry Pi
2) Адаптер питания Raspberry Pi или 2 шт.Внешний аккумулятор USB 1А
3) Устройство чтения SD-карт для прошивки Raspbian OS на карту microSD.
4) Карта microSD
5) Сетевой коммутатор
6) Ethernet-кабели
7) Сеть Wi-Fi для подключения Raspberry Pi к
Компьютер / ноутбук для настройки Raspberry Pi
Прошивка Raspbian OS на карту microSD:
Сначала посетите официальную страницу загрузки Raspbian и нажмите Скачать ZIP кнопка Распбиан Бастер Лайт изображение.
Ваш браузер должен начать загрузку образа Raspbian Buster Lite.
После завершения загрузки вы можете использовать balena Etcher или другие программы для записи образов для Raspberry pi, чтобы записать образ Raspbian Buster Lite на карту microSD. В этой статье я буду использовать Etcher.
Вы можете скачать Etcher, посетив официальный сайт balena Etcher. Затем загрузите и установите Etcher.
ПРИМЕЧАНИЕ: Etcher также работает в Linux. Чтобы установить Etcher в Linux, прочтите статью «Установка Etcher в Linux».
После установки Etcher запустите Etcher. Нажмите на Выбрать изображение.
Выберите образ Raspbian Buster Lite, который вы только что скачали, и нажмите Открыть.
Вставьте карту microSD в устройство чтения карт microSD и подключите ее к компьютеру. Затем нажмите на Выбрать цель.
Выберите свою SD-карту из списка и нажмите Продолжать.
Теперь нажмите на Вспышка.
Etcher должен начать прошивать SD-карту.
На этом этапе SD-карта должна быть перепрошита.
Теперь вы должны увидеть ботинок диск на вашем компьютере. Перейдите в него.
Создать новый файл, ssh (без расширения файла).
Создать новый файл wpa_supplicant.conf и введите в него следующие строки.
ctrl_interface = DIR = / var / run / wpa_supplicant GROUP = netdev
update_config = 1
страна = США
network =
ssid = «ВАШ_WIFI_SSID»
psk = «ВАШ_WIFI_PASSWORD»
scan_ssid = 1
приоритет = 1
Обязательно замените ВАШ_WIFI_SSID а также ВАШ_WIFI_PASSWORD на ваш Wi-Fi SSID и пароль.
Теперь откройте cmdline.текст файл и добавить ipv6.disable = 1 в конце строки, чтобы отключить IPv6.
Включение Raspberry Pi:
Теперь вставьте карту microSD в Raspberry Pi, подключите один конец кабеля Ethernet к Raspberry Pi, а другой конец — к сетевому коммутатору. Затем включите Raspberry Pi.
Подключение к Raspberry Pi через SSH:
После запуска Raspberry Pi должен получить IP-адрес из сети Wi-Fi. Вы можете использовать любой сетевой сканер или страницу администрирования вашего Wi-Fi роутера, чтобы узнать IP-адрес вашего Raspberry Pi.
Как только вы найдете IP-адрес своего Raspberry Pi, подключитесь к нему через SSH следующим образом:
$ ssh pi @ 192.168.0.105
Печатать да и нажмите .
Введите пароль по умолчанию малина и нажмите .
Вы должны войти в свой Raspberry Pi.
Настройка сети:
Теперь создайте файл конфигурации сети для wlan0 сетевой интерфейс следующим образом:
$ sudo nano / и т. д. / сеть / интерфейсы.d / wlan0
Теперь введите следующие строки и сохраните файл конфигурации, нажав + Икс с последующим Y а также .
разрешить горячее подключение wlan0
iface wlan0 inet dhcp
wpa-conf / и т.д. / wpa_supplicant / wpa_supplicant.conf
Теперь создайте файл конфигурации сети для eth0 сетевой интерфейс следующим образом:
$ sudo nano / и т. д. / сеть / интерфейсы.d / eth0
Теперь введите следующие строки и сохраните файл конфигурации, нажав + Икс с последующим Y а также .
авто eth0
iface eth0 inet статический
адрес 192.168.100.1
маска сети 255.255.255.0
Теперь отключите dhcpcd service с помощью следующей команды:
$ sudo systemctl отключить dhcpcd
Теперь перезапустите Raspberry Pi, чтобы изменения вступили в силу.
$ sudo перезагрузка
После запуска Raspberry Pi проверьте конфигурацию сети wlan0 сетевой интерфейс следующим образом:
$ ip addr показать wlan0
wlan0 должен получить IP-адрес через DHCP.
Также проверьте конфигурацию сети eth0 сетевой интерфейс следующим образом:
$ ip addr показать eth0
Статический IP-адрес должен быть назначен eth0 сетевой интерфейс.
wlan0 а также eth0, оба должны быть настроены правильно.
Настройка DHCP-сервера:
Теперь обновите кеш репозитория пакетов APT с помощью следующей команды:
$ sudo подходящее обновление
Установите сервер DHCP ISC с помощью следующей команды:
$ sudo apt установить isc-dhcp-server
Нажмите Y а затем нажмите для подтверждения установки.
Должен быть установлен DHCP-сервер ISC.
Теперь откройте dhcpd.conf файл следующим образом:
$ sudo nano / и т. д. / dhcp / dhcpd.conf
Установить доменное имя а также серверы доменных имен следующим образом.
Прокрутите немного вниз и раскомментируйте авторитетный; линия.
Также добавьте следующие строки в файл конфигурации и сохраните файл.
подсеть 192.168.100.0 маска сети 255.255.255.0
диапазон 192.168.100.50 192.168.100.240;
дополнительные маршрутизаторы 192.168.100.1;
опция маска подсети 255.255.255.0;
Теперь откройте / и т.д. / по умолчанию / isc-dhcp-сервер файл конфигурации следующим образом:
$ sudo nano / etc / default / isc-dhcp-сервер
Добавлять, eth0 к ИНТЕРФЕЙСЫv4 переменная и сохраните файл.
Теперь перезагрузите Raspberry Pi.
$ sudo перезагрузка
После запуска Raspberry Pi isc-dhcp-сервер служба должна быть активный (работает).
$ sudo systemctl статус isc-dhcp-server
Настройка межсетевого экрана и включение пересылки пакетов:
Теперь установите firewalld следующим образом:
$ sudo apt установить firewalld
Нажмите Y а затем нажмите для подтверждения установки.
firewalld должен быть установлен.
В Firewalld служба должна быть активный (работает) по умолчанию.
$ sudo systemctl статус firewalld
Теперь разрешите трафик DHCP через брандмауэр с помощью следующей команды:
$ sudo firewall-cmd —add-service = dhcp —permanent
Разрешите пересылку IP-пакетов с помощью следующей команды:
$ sudo firewall-cmd —add-masquerade —permanent
Наконец, перезагрузите Raspberry Pi.
$ sudo перезагрузка
Подключение клиентов к коммутатору:
После запуска Raspberry Pi подключите один конец другого кабеля Ethernet к коммутатору, а другой конец — к ноутбуку / настольному компьютеру или другим устройствам.
Вашему устройству должен быть назначен IP-адрес через DHCP-сервер, работающий на вашем Raspberry Pi, и у него должна быть возможность подключаться к Интернету.
Итак, вот как вы используете Raspberry Pi в качестве проводного маршрутизатора. Спасибо, что прочитали эту статью.