Статический IP на Raspberry PI
Компьютеры на одноплатной аппаратной платформе Raspberry Pi становятся всё популярнее и популярнее. Если раньше их покупали в основном инженеры и компьютерные специалисты, то сейчас их преобретают многие любители для домашних экспериментов и электронных поделок. Управляет таким компьютером операционная система на базе Linux (обычно это Ubuntu или её производные). По умолчанию сеть в этой операционной системе настроена так, что при включении Распберри Пи в локальную сеть (которой обычно управляет роутер), каждый раз ему динамически присваивается новый IP-адрес благодаря настроенному протоколу DHCP. Это не всегда удобно. Поэтому оптимальнее всего настроить статический IP на Raspberry Pi.
Делается это просто. Если вы знаете адрес своего роутера через которые организавана локалка — отлично, елси нет, то в терминале набераем команду:
Этим мы выводим на экран таблицу маршрутизации. Смотим на стобец Gateway (Шлюз), в ней должен отображаться текущий IP-адрес вашего маршрутизатора. Как правило, в домашних сетях это или 192.168.1.1 или 192.168.0.1. Пусть в моём примере это будет первый адрес. Запоминаем или записываем его.
Для того, чтобы через консоль настроить сеть вручную на Распберри Пи и сделать статический IP — введите команду:
В открывшемся конфиге ищем строку «iface eth0 inet dhcp» и стираем её. Вместо этого надо вписать следующее:
Думаю, что смысл строк ясен, но немного всё же поясню. В строке «Аddress (Адрес)» надо вписать Ай-Пи из подсети роутера, главное чтобы он не был уже занять каким-нибудь другим устройством. Маска в 99% домашних сетей — 255.255.255.0, в в строчку «Gateway (Шлюз)» указывается адрес самого роутера чтобы показать системе, что весь трафик надо как бы «прогонять» через этот хост.
Дальше нажимаем комбинацию клавиш «Ctrl+X» чтобы выйти из редактора. На запрос о сохранении файла надо будет нажать сначала кнопку «Y», а затем — «Enter». Для применения изменений надо перезапустить сетевую службу. Делается это вот такой командой:
Если вдруг система выдаст ошибку, то снова откройте файл и проверьте правильность ввода адресов.
Настройка сети на Raspberry Pi завершена.
Примечание:
На последних релизах операционной системы Raspbian JESSIE, конфиг сетевой карты из /etc/network/interfaces не читается и получение IP-адреса идёт только в автоматическом режиме. Чем руководствовались разработчики — не ясно, но теперь прописать статику стало в разы сложнее. Один из вариантов решения — прибить демона клиента DHCP. Конечно, можно, но есть и ещё вариант, который подсказал автор блога homeless.su — подправить его конфигурацию в файле /etc/dhcpcd.conf.
Открываем его через редактор nano:
Прокручиваем его в самый низ и дописываем вот это:
Само-собой, адреса надо прописать из своей сети. Перезагружаем свой Распберри Пи и проверяем — работает ли статический адрес.
Настройка сети Raspberry Pi 3
Основная операционная система предназначенная для Raspberry Pi — Raspbian — основана на Debian, поэтому и настройка сетевых интерфейсов здесь выполняется так же, как и в Debian. С проводным подключением всё достаточно просто. Вам достаточно подсоединить сетевой шнур к устройству, чтобы интернет начал работать. Немного сложнее настроить статический IP-адрес и беспроводное соединение с Wi-Fi.
Но, как бы там нибыло, без сети сейчас никуда. Поэтому в этой статье мы рассмотрим, как выполняется настройка сети Raspberry Pi 3 различными способами. Начнём с беспроводного подключения.
Подключение к Wi-Fi Raspberry Pi
1. Графический интерфейс
Проще всего подключиться к сети Wi-Fi через графический интерфейс. Для этого просто щёлкните по значку сети в верхнем правом углу экрана и выберите нужную сеть, затем введите для неё пароль:
Готово. Теперь подключение к Wi-Fi Raspberry Pi настроено.
2. raspi-config
Подключится к Wi-Fi через терминал ненамного сложнее. Здесь нам понадобится утилита raspi-config. Запустите её из главного меню и выберите Network Options:
Затем выберите Wi-Fi:
Дальше вам нужно ввести SSID вашей сети:
А потом пароль к ней:
Настройка завершена. Если проводного подключения нет, то устройство должно подключится к этой сети. Если вы не знаете, какой SSID (имя) у вашей Wi-Fi сети, смотрите следующий пункт.
3. Добавление Wi-Fi сети вручную
Сначала нужно посмотреть доступные Wi-Fi сети. Для этого используйте команду:
sudo iwlist wlan0 scan
Вам нужен параметр ESSID. Чтобы не хранить пароль к сети в открытом виде, воспользуемся утилитой wpa_passphrase для его шифрования:
Полученную конфигурацию сети нужно добавить в файл /etc/wpa_supplicant/wpa_supplicant.conf:
sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
network= <
ssid=»UKrtelecom_367120″
#psk=»12345678″
psk=450c6c130a6308081a2c7cbc0af3653627b08c44478be55b0980e4bdf34ee74f
>
Далее попросить систему перечитать конфигурацию сетевых интерфейсов с помощью команды:
wpa_cli -i wlan0 reconfigure
Убедится, что всё прошло успешно, вы можете, выполнив:
Если после слов inet addr содержится IP-адрес, значит вы подключены к этой сети. Если же нет, проверьте правильность ввода ESSID и пароля. Также можно попытаться получить IP-адрес командой:
sudo dhclient wlan0
Если вы хотите пользоваться 5ГГц Wi-Fi, то кроме всего этого вам нужно указать вашу страну в wpa_supplicant.conf:
sudo vi /etc/wpa_supplicant.conf
Настройки Raspberry Pi Wi-Fi завершена. Теперь устройство будет автоматически подключаться к выбранной сети после загрузки.
Настройка статического IP Raspberry Pi
После того, как вы настроили доступ к сети, нужно настроить статический IP-raspberry pi 3, чтобы ваше устройство всегда было доступно в локальной сети по одному и тому же адресу. Как я уже говорил в статье про настройку Raspberry Pi 3 после установки, сначала статический IP для устройства нужно установить на роутере. Иначе возникнет конфликт IP-адресов, и ничего работать не будет.
Сначала выполните инструкцию из той статьи, а потом переходите дальше. За получение IP-адреса в Raspbian отвечает служба dhcpcd и конфигурационный файл /etc/dhcpcd.conf. По умолчанию адреса для всех интерфейсов запрашиваются у роутера по DHCP. Но вы можете настроить статический IP, добавив в конец файла несколько строк. Их синтаксис такой:
interface имя_интерфейса
static ip_address = нужный_ip_адрес/подсеть
static routers = ip_роутера
static domain_name_servers = ip_dns_сервера
В качестве имени интерфейса можно использовать:
- eth0 — проводное подключение к интернету;
- wlan0 — беспроводное подключение.
Если вы подключены к сети и получили все нужные данные по DHCP, то узнать IP-адрес роутера можно, выполнив команду:
Здесь он находится в колонке gateway. И вам осталось ещё узнать IP-адрес DNS-сервера, а для этого просто посмотрите содержимое файла /etc/resolv.conf:
Чтобы установить статический IP 192.168.1.5 для проводного интерфейса, нужно добавить в конец конфигурационного файла такие строки:
sudo vi /etc/dhcpcd.conf
interface eth0
static ip_address=192.168.1.5/24
static routers=192.168.1.1
static domain_name_servers=8.8.8.8 8.8.4.4
Теперь после перезагрузки Raspberry Pi устройство будет игнорировать то, что говорит ему роутер по DHCP и брать именно указанный IP-адрес. В теории подключение к сети будет выполняется быстрее. Но на практике лучше всё же использовать DHCP.
Выводы
В этой статье мы разобрали, как выполняется настройка сети Raspberry Pi 3, а также как подключится к Wi-Fi с помощью этого устройства. Вы можете выбрать более простой путь, настроив всё с помощью графического интерфейса или разбираться в способе настройки через терминал.
Raspberry Pi в роли роутера с единственным сетевым интерфейсом
Сразу скажу, что эта статья предназначена для обычных пользователей и для тех, для кого сетевые технологии — это хобби.
Если вам нужен собственный домашний роутер — отличной аппаратной платформой для него может стать 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, иллюстрирующий вышеописанную схему:
Как видите — 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, так как не могу провести второй кабель от модема до комнаты, где находится роутер. Вот как устроена моя домашняя сеть.