С настройками по умолчанию Raspberry Pi присваивается динамический (т.е. случайно выбранный) IP-адрес внутри локальной сети.
Это удобно тем, что это работает «из коробки» и не нуждается в какой-либо настройке. И неудобно, если Raspberry Pi будет использоваться в качестве локального сервера.
Представьте, установили вы кучу сервисов, которые доступны по сети по IP-адресу, вы привыкли пользоваться этим IP-адресом, вбили его в настройки и закладки на всех своих устройствах. Тут возникает необходимость перезагрузки роутера, а после перезагрузки роутер присваивает «малине» уже совсем другой IP-адрес. И все пути доступа придется переписывать заново.
Что делать? Принудительно назначить статический IP-адрес в настройках Raspbian и навсегда забыть о подобной проблеме.
Что нам понадобится
Для осуществления описываемых в этой статье действий понадобится:
- Raspberry Pi 3 Model B
- Подключение к локальной сети по Ethernet или Wi-Fi
Настройка статического IP-адреса в Raspbian
В интернете опубликовано множество инструкций по присвоению статического IP для Raspberry Pi, и практически все они сводятся к одному из двух вариантов:
- Правка конфигурации в /etc/network/interfaces
- Остановка DHCP-демона
Так вот, первый вариант в новых релизах Raspbian не работает совсем: после очередного обновления «малина» начинает игнорировать это файл конфигурации, а сетевые настройки получает по DHCP-протоколу. А второй вариант хоть и рабочий, но избыточен: зачем полностью отключать у себя DHCP, если можно его просто обойти?
Поэтому пойдем другим путем: пропишем статический IP-адрес в конфигурации DHCP, но сам DHCP-демон отключать не будем.
Но перед этим нужно узнать IP-адрес роутера в своей локальной сети. Обычно он выглядит как 192.168.0.1 или 192.168.1.1. Если вы его знаете — отлично. Если нет — его всегда можно посмотреть, выполнив консольную команду:
netstat -r –n
Адрес шлюза — это и есть IP-адрес роутера. Запомним его.
Узнав IP-адрес роутера, отредактируем файл конфигурации DHCP на Raspberry Pi:
sudo nano /etc/dhcpcd.conf
Допишем в конце строку:
nodhcp
И после этой строки назначим статический адрес для Ethernet-подключения:
interface eth0 static ip_address=192.168.0.243/24 static routers=192.168.0.1 static domain_name_servers=192.168.0.1
И для подключения через встроенный Wi-Fi-адаптер:
interface wlan0 static ip_address=192.168.0.243/24 static routers=192.168.0.1 static domain_name_servers=192.168.0.1
Если вместо встроенного Wi-Fi по каким-то причинам используется внешний Wi-Fi адаптер (например, вас не устраивает уровень приема сигнала встроенного адаптера и вы подключаете более мощный адаптер с антенной), то его интерфейс будет называться уже wlan1, а конфигурируется он аналогичным образом:
interface wlan1 static ip_address=192.168.0.243/24 static routers=192.168.0.1 static domain_name_servers=192.168.0.1
Из текста настроек понятно, что в строке static ip_address прописывается желаемый статический IP-адрес «малины», а в строках static routers и static domain_name_servers прописывается IP-адрес роутера.
После этого остается только перезагрузить Raspberry Pi для применения изменений:
sudo reboot
Заключение
Назначение статического IP-адреса — одно из первых действий, которые нужно сделать на Raspberry Pi после установки и настройки OS Raspbian, если «малина» будет задействована в качестве локального сервера.
Единожды потраченные 5 минут на правку файлов конфигурации навсегда избавят от возможных неудобств с внезапным изменением IP-адреса «малины» в будущем.
Raspberry Pi 3B (английская сборка)в интернет-магазине GearBest Raspberry Pi 3B (китайская сборка)в интернет-магазине GearBest
Если посмотреть man файла dhcpcd.conf, то в примере для статического адреса показано присвоение маски подсети:
~:# man dhcpcd.conf
static ip_address=192.168.0.243/24
Если можно, вопрос. У вас IP-адреса eth0 и wlan0 одинаковые. Как вручную указать Raspberry Pi через какой интерфейс вы хотите к ней подключиться?
>Если посмотреть man файла dhcpcd.conf, то в примере для статического адреса показано присвоение маски подсети:
Да, вы правы. Забыл про маску подсети. Поправил статью, спасибо.
>Если можно, вопрос. У вас IP-адреса eth0 и wlan0 одинаковые. Как вручную указать Raspberry Pi через какой интерфейс вы хотите к ней подключиться?
Можно прописать нужный интерфейс подключения в /etc/network/interfaces.
Или в графическом интерфейсе Raspbian выбрать нужное подключение (wlan или ethernet), а ненужное соединение отключить — эти настройки вроде как запоминаются.
Я ориентировался на то, что wlan мне не нужен (слишком сильные просадки по скорости по сравнению с ethernet-подключением) и использоваться будет только ethernet. Но если по какой-то причине придется отключить кабель и временно использовать wi-fi, то для удобства хотелось бы иметь доступ по тому же ip-адресу. Поэтому вписал один и тот же ip в обоих интерфейсах подключения.
Я, чисто из спортивного интереса, включил оба интерфейса. Снаружи подключаюсь к малинке по SSH. Через eth0 по IP:192.168.1.133 подключается идеально. А с wlan0 проблема. ifconfig не показывает присвоения IP-адреса, хотя я пытался и через DHCP и статически задать 192.168.1.132. Соответственно через wlan0 SSH не подключается. При этом wlan0 работает. Команда iwlist wlan0 scan | grep «ESSID\|IE: IEEE» показывает мою Wi-Fi сеть поднятую моим роутером.
А по hostname -I какие IP выдаются? И меняется ли что-то, если отключить eth0?
А как понять, с какого интерфейса малинка в интернет ходит, если включены WLAN и LAN?
Внешне она доступна по обоим адресам, а какой выбирает для исходящих соединений?
Например, поставить пакет iptraf (sudo apt-get install iptraf) и посмотреть в нем через какие интерфейсы идет трафик.
Или если интернет-канал быстрый, то можно просто прогнать тест скорости speedtest.net в браузере. По Wi-Fi скорость не поднимется выше 20-30мбит, а по проводу будет в районе максимально доступной по тарифу.
я обычно регистрирую устройство в рутере по физ.адресу, обзываю его и рисую какой-нибудь ИП. ДЧСП без проблем обходит его. По-моему так проще. Т.е. в само локальное устройство не лезу — только в рутер. Или это неправильно?
Правильно. Тоже нормальный способ, только другой.
провернул это на подключении к оптоволоконному роутеру от ростелеком, и он деликатно вертел эти настройки и всё равно выдаёт такой IP, какой хочет. А я уже обрадовался, что с малиной будет иначе, нежели с другими устройствами: в настройках роутера мой любимый ELTEX упорно дает ставить устройствам статический IP.
Здравствуйте! Извините, я опять с вопросом беспокою вас. Существует ли аналог команды hostname -I для Windows? В официальном сайте написано, что если не удается подключится через Putty, то наверняка неверный Ip address. И пишется написать команду hostname -I v raspberry shell. Как я могу набрать команду в raspberry shell, для получение ip-addressa чтобы получить подключение. Извините и за глупый вопрос)
Заранее огромнейшее спасибо!
Здравствуйте, хотелось бы узнать, можно ли иметь статический ip в двух wi fi сетях одновременно? Просто иногда приходится таскать малинку с собой, дома подключил её данным способом, а когда раздаю интернет с телефона например она к нему не коннектится.
По-моему телефон не может выступать в роли роутера. Просто раздавать интернет (т.е. быть модемом) — да, но организовать через него работу локальной сети не получится.
Могу ошибаться, но по-моему это так.
Вы ошибаетесь. Все в точности наоборот.
При данных настройках dhcp отключится на всех интерфейсах и станет невозможным подключение инета, например, через вифи. Дабы этого не происходило строку:
nodhcp
необходимо удалить. А также удалить статический маршрут оставив только:
interface eth0
static ip_address=192.168.0.243/24
Да. Вы правы. У меня если делать как в статье, то по ВайФай роутер не может выдать адрес. А по вашему методу, роутер адрес выдает.
Автору спасибо!
у меня это работает
Здравствуйте, а как прописать 2 wi-fi сети (основную и резервную) подскажите какие настройки нужно сделать?
Надо в файле /etc/wpa_supplicant/wpa_supplicant.conf последовательно прописать несколько шаблонов настроек для разных Wi-Fi сетей. Один шаблон у вас скорее всего уже есть (если нет — для простоты воспользуйтесь стандартной утилитой raspi-config и настройте через нее), данные для второй сети и всех последующих можно вписать по аналогии.