Каталог
|
Реализация маршрутизатора на одноплатном компьютере Orange Pi R12021-04-19 Все статьи →Реализация маршрутизатора на одноплатном компьютере Orange Pi R1 В данной статье я кратко опишу, как сконфигурировать маршрутизатор основанный на одноплатном компьютере под управлением полноценной операционной системы GNU/Linux. В качестве основной аппаратной платформы будет использоваться Orange Pi R1. Вполне резонно возникает вопрос, зачем нужно такое решение, если сейчас без каких либо проблем можно приобрести готовое устройство. Суть в том, что реализовать сложную систему маршрутизации трафика, полноценный firewall, шифрованную файловую систему, логи, VPN и т.д. на обычном заводском маршрутизаторе пользовательского сегмента невозможно. Конечно всегда остается вариант приобретения промышленного сетевого оборудования, но это не целесообразно для небольших сетей с точки зрения стоимости, его габаритов и такого не маловажного фактора как энергопотребление. С появлением одноплатных компьютеров и последующим стремительном их развитии, подобные задачи стали доступными для рядового пользователя. Сейчас существует огромное количество производителей (Banana Pi, SeedStudio, NanoPi, Orange Pi и многие другие) предоставляющих в своем модельном ряду устройства различного класса предназначенные для решения задач маршрутизации. Почему я решил использовать Orange Pi R1, а не какой-либо другой одноплатный компьютер? Все очень просто, основная моя сеть состоит из двух стационарных компьютеров выступающих в роли рабочих систем общего назначения, одного удаленного сетевого хранилища предоставляющего доступ одновременно нескольким пользователям и одного WEB сервера. Устройства подключенные по WiFi я не учитываю ввиду того, что какой-либо ощутимой нагрузки на сеть они не дают. В более масштабных сетях я использую Banana Pi R2. Там она себя оправдывает на все сто процентов, но в данном случае это расточительство. Поскольку Orange Pi является одной из самых распространенных в наших широтах платформой, а ее продукция как нельзя лучше подходит под требования цены и качества, я решил остановить свой выбор на ней. Стоит отметить, что уже существует обновленная версия - Orange Pi R1 Plus и если есть возможность, то предпочтительней взять ее. Существует еще один интересный вариант в лице NanoPi R1 (https://arduino.ua/ru/prod1725-nanopi-r1-1gb) В любом случае, независимо от того что вы выберете, суть конфигурации не изменится. Примечание: данную статью ни в коем случае не нужно рассматривать, как полноценное руководство! Всю дополнительную информацию, вы с легкостью найдете на страницах открытой (свободной) документации (man). Основное оборудование:
Примечание: центральный процессор H2 Cortex-A7 (Quad-core 32-bit), как ни странно оказался довольно-таки горячим парнем и даже при простое, находясь в помещении с температурой окружающей среды 23?С стабильно имел температуру 56?С. А при такой температуре он ощутимо начинал троттлить. И только после установки активного охлаждения троттлинг полностью пропал, а температура на нем стала в районе 25?С. Категорически не рекомендую использовать данный одноплатный компьютер без активного охлаждения. Если вас по каким либо причинам такое решение не устраивает, то тогда стоит обратить внимание на NanoPi R1. Дополнительное оборудование:
Операционная система:
Примечания:
С вводной частью разобрались, переходим непосредственно к конфигурированию. Конфигурация Патч-корд от маршрутизатора (Ethernet порт LAN) подключаем к Ethernet порту Orange Pi R1 на котором находиться наклейка с MAC адресом, данный порт в последствии станет WAN портом. Подключаемся по SSH к Orange Pi R1, предварительно залогинившись как root пользователь. root@64R3B:~# ssh root@192.168.1.11 Примечание: 192.168.1.11 - IP адрес выданный Orange Pi R1 маршрутизатором к которому он подключен. Обязательно замените его на тот адрес, который был выдан вашим маршрутизатором!!! Для подтверждения логирования система запросит ввод пароля. Пароль по дефолту - 1234 После входа вам будет предложено сменить пароль пользователя root, ввести имя пользователя user и его пароль, а также выбрать командную оболочку и locale (локаль). Примечание: настоятельно рекомендую не устанавливать простых паролей, в качестве командной оболочки выберете bash, а locale установите в дефолтное значение (Set user language based on your location? [Y/n] - следует нажать n). После предварительной настройки, перезагружаем ОС и подключаемся заново. root@orangepi-r1:~# reboot Как мы видим, система выводит сообщение: -bash: warning: setlocale: LC_ALL: cannot change locale (ru_UA.UTF-8) Что бы это сообщение больше не выводилось и локаль была правильно сконфигурирована, редактируем файл locale расположенный в директории /etc/default. Перед внесением новых параметров обязательно удаляем предыдущие! root@orangepi-r1:~# nano /etc/default/locale
Примечание: для сохранения изменений в файле открытом в текстовом редакторе nano, нажмите сочетание клавиш Ctrl+O, а для выхода из текстового редактора нажмите сочетание клавиш Ctrl+X Проверяем наличие раскоментированной строки в файле locale.gen расположенном в /etc root@orangepi-r1:~# nano /etc/locale.gen
Конфигурируем локаль, после чего перезагружаем ОС и подключаемся заново. root@orangepi-r1:~# locale-gen en_US.UTF-8
root@orangepi-r1:~# reboot Сообщение: -bash: warning: setlocale: LC_ALL: cannot change locale (ru_UA.UTF-8) повторно не отобразилось, значит локаль сконфигурирована корректно. Перед тем как приступить к дальнейшей настройке, проверим параметры локали. root@orangepi-r1:~# locale
root@orangepi-r1:~# locale -a
Убедившись что локаль сконфигурирована корректно, приступаем к настройке сетевых интерфейсов. Первым делом, проверяем какие сетевые интерфейсы присутствуют в системе. root@orangepi-r1:~# ifconfig
Как мы видим, в системе присутствуют три интерфейса: enxc0742bffb830, eth0 и wlan0. lo является виртуальным сетевым интерфейсом и в данном руководстве мы не будем его рассматривать.
Следующим шагом проверяем наличие связи с глобальной сетью. root@orangepi-r1:~# ping -c3 google.com
Отлично, связь с глобальной сетью присутствует. Для удобства изменяем имена сетевых интерфейсов на классические. Для этого в файл armbianEnv.txt расположенный в директории /boot добавляем параметр extraargs=net.ifnames=0 root@orangepi-r1:~# nano /boot/armbianEnv.txt
После завершения редактирования файла armbianEnv.txt, следует перезагрузить систему и подключится заново. root@orangepi-r1:~# reboot Проверяем применились ли изменения. root@orangepi-r1:~# ifconfig
Теперь, имя сетевого интерфейса enxc0742bffb830 изменилось на eth1. Приступаем непосредственно к конфигурации сетевых интерфейсов. Для этого в файл interfaces расположенный в директории /etc/network вносим изменения. root@orangepi-r1:~# nano /etc/network/interfaces
Примечание: hwaddress ether - этот параметр отвечает за клонирование/изменение MAC адреса сетевой карты. Если ваш провайдер привязывает выданный вам IP адрес к адресу сетевой карты, замените XX:XX:XX:XX:XX:XX адресом вашей сетевой. Если такой привязки не требуется, то просто закомментируйте данную строку. address, network, netmask, broadcast интерфейсов eth0 и wlan0 измените по своему усмотрению (приведенные параметры указаны чисто в целях примера). В случае, когда ваш провайдер раздает адреса не по DHCP, а использует статику, вам потребуется изменить настройки сетевого интерфейса eth1 в соответствии с настройками выданными вашим провайдером. Пример:
Для корректной работы с беспроводным интерфейсом, следует отключить NetworkManager. Если этого не сделать, то беспроводной интерфейс wlan0 будет недоступен для конфигурации и использования. Убедимся что интерфейс wlan0 отключен. root@orangepi-r1:~# nmcli device status
Видим, что интерфейс wlan0 отключен, хотя ничего другого и не следовало ожидать :) Отключаем NetworkManager и убираем его из автозагрузки, после перезагружаем сеть. Если подключение по SSH не прервалось, то все настроено правильно. На всякий случай проверяем наличие связи с глобальной сетью, после чего перезагружаем систему и подключаемся заново. root@orangepi-r1:~# systemctl stop NetworkManager root@orangepi-r1:~# systemctl disable NetworkManager
root@orangepi-r1:~# systemctl restart networking root@orangepi-r1:~# ping -c3 google.com
root@orangepi-r1:~# reboot Проверяем применились ли настройки к сетевым интерфейсам. root@orangepi-r1:~# ifconfig
Далее открываем файл hostname располагающийся в директории /etc и изменяем дефолтное имя хоста. После изменения файла перезагружаем систему и подключаемся заново. root@orangepi-r1:~# nano /etc/hostname
root@orangepi-r1:~# reboot С первоначальной конфигурацией закончили. Перед тем как продолжить, следует обновить репозитории и систему в целом. Когда система завершит полное обновление, перезагружаем ее и подключаемся заново. root@TEST0:~# apt-get update root@TEST0:~# apt-get upgrade root@TEST0:~# reboot Устанавливаем dnsmasq root@TEST0:~# apt-get install dnsmasq Приступаем к конфигурации dnsmasq.conf расположенном в директории /etc. Открываем файл и прописываем настройки в самый конец файла, сохраняем изменения и перезагружаем dnsmasq root@TEST0:~# cat /etc/dnsmasq.conf
root@TEST0:~# systemctl restart dnsmasq Примечание: естественно все адреса вы вносите в соответствии с вашими настройками сетевых интерфейсов. server=88.54.0.251 - это DNS моего провайдера, вы внесите DNS своего провайдера. server=8.8.8.8 - это базовый DNS Google. Перед тем, как приступить к конфигурации iptables, следует включить маршрутизацию пакетов между сетевыми интерфейсами. Раскомментируем строку net.ipv4.ip_forward=1 в файле sysctl.conf располагающемся в директории /etc, сохраняем изменения и применяем их. root@TEST0:~# nano /etc/sysctl.conf
root@TEST0:~# sysctl -p Остается только прописать правила iptables и сделать их исполняемыми на постоянной основе. Создаем файл iptables.sh в директории /etc и вносим в него нужные настройки. root@TEST0:~# nano /etc/iptables.sh
Присваиваем права на исполнение файлу iptables.sh. Перед применением правил iptables проверяем, что таблица правил чистая. root@TEST0:~# iptables -L -v -n
Применяем правила. root@TEST0:~# /etc/iptables.sh Если соединение осталось активным, то вы все сделали правильно. :) Проверим еще раз iptables root@TEST0:~# iptables -L -v -n Теперь следует сделать так, чтобы данные правила применялись при каждой загрузке системы. Для этого создаем файл iptables в директории /etc/network/if-pre-up.d, вносим в него данные и присваиваем права на исполнение. root@TEST0:~# /etc/network/if-pre-up.d/iptables
root@TEST0:~# chmod +x /etc/network/if-pre-up.d/iptables На этом базовая конфигурация маршрутизатора реализованного на одноплатном компьютере под управлением ОС GNU/Linux завершена. Подключаем кабель провайдера в сетевой интерфейс eth1, а сетевой интерфейс eth0 соединяем со свитчем, в который подключаем все компьютеры локальной сети. Перезагружаем систему. Примечание: как вы заметили, я не вдавался в подробности вносимых изменений в конфигурационные файлы, если вы хотите разобраться за что отвечает та или иная строка - просто откройте требуемый man. Уточню только один момент - $IPT -A FORWARD -i eth1 -o eth0 -j REJECT (в файле iptables.sh) отвечает за блокирование доступа из внешнего мира в локальную сеть. Таким образом, вы не сможете например обновить систему и т.д. Но поскольку iptables.sh был создан для удобной работы с iptables, вы с легкостью в любой момент можете добавить или убрать те или иные правила. Не забывайте после внесения каких-либо изменений перезагрузить iptables или саму ОС.
Благодарим Вас за обращение! Ваш отзыв появится после модерации администратором.
Alex
10.05.2023 10:13:04
Отличная статья
kek
04.02.2023 19:58:41
дуже вiдмиiно
Сергій
03.05.2021 21:26:29
Гарна пошагова інструкція!
|