Команда cat /etc/config/network на роутере с OpenWrt возвращает пустой файл или непонятную структуру — значит, конфигурация сети либо была повреждена, либо устройство работает на минимальных дефолтных настройках после прошивки. Файл /etc/config/network — это центральный узел всей сетевой подсистемы OpenWrt: именно здесь описываются интерфейсы, мосты, VLAN, статические маршруты и параметры переключателя (switch). Ошибка в одном блоке config interface способна полностью отрезать роутер от сети, включая доступ по SSH.
Этот материал разбирает структуру файла, синтаксис UCI, типовые секции и безопасный порядок правки, чтобы изменения не привели к потере связи с устройством. Информация актуальна для современных версий OpenWrt, где сетевой стек построен на netifd, а управление ведётся через подсистему UCI (Unified Configuration Interface).
Что такое /etc/config/network и зачем он нужен
Файл /etc/config/network хранится в текстовом виде и читается демоном netifd при загрузке системы и при выполнении команды /etc/init.d/network restart. В отличие от классических дистрибутивов Linux, где сеть настраивается через /etc/network/interfaces или Netplan, OpenWrt использует единый формат UCI для всех подсистем — сети, беспроводных интерфейсов, фаервола и DHCP.
Ключевая особенность: веб-интерфейс LuCI при сохранении настроек сети правит именно этот файл. Поэтому ручное редактирование и работа через графический интерфейс полностью эквивалентны — они изменяют одни и те же данные. Это позволяет свободно комбинировать оба подхода.
Типичные задачи, которые решаются правкой этого файла:
- 🌐 назначение статического IP-адреса на WAN или LAN вместо DHCP;
- 🔀 создание моста (bridge) между Ethernet-портами и Wi-Fi;
- 🏷️ настройка VLAN для разделения трафика провайдера (например, IPTV и интернет);
- 🛣️ добавление статических маршрутов до удалённых подсетей;
- 🔌 поднятие PPPoE-соединения с логином и паролем провайдера.
Синтаксис UCI: как устроен файл
Файл состоит из секций. Каждая секция начинается с ключевого слова config, за которым следует тип секции и, опционально, её имя. Внутри секции располагаются параметры двух видов: option для одиночных значений и list для списков. Комментарии начинаются с символа #.
config interface 'lan'
option device 'br-lan'
option proto 'static'
option ipaddr '192.168.1.1'
option netmask '255.255.255.0'
list dns '192.168.1.1'
Здесь секция типа interface с именем lan описывает локальный интерфейс: он привязан к устройству br-lan, использует статический протокол и адрес 192.168.1.1 с маской /24. Имена секций в одинарных кавычках обязательны, если вы хотите ссылаться на них из других конфигов — например, фаервол OpenWrt привязывает зоны именно к именам интерфейсов из этого файла.
Безымянные секции тоже допустимы — например, config route или config switch_vlan часто пишутся без имени. Для работы с ними из командной строки используются позиционные индексы.
Чем отличаются option и list
Option задаёт одиночный параметр и перезаписывает предыдущее значение при повторе. List добавляет элемент в список: несколько строк list dns создадут список из нескольких DNS-серверов. Порядок list-строк сохраняется и влияет на приоритет.
Основные секции файла
Структура конкретного файла зависит от аппаратной платформы роутера: на устройствах со встроенным коммутатором будут секции switch, на платформах с DSA — секции device и bridge-vlan. Ниже — типовой набор, который встречается чаще всего.
| Тип секции | Назначение | Ключевые параметры |
|---|---|---|
| interface | Логический сетевой интерфейс (lan, wan, wan6) | proto, device, ipaddr, netmask, gateway |
| device | Физическое или виртуальное устройство, включая мосты | name, type, ports, macaddr |
| switch / switch_vlan | Настройка встроенного коммутатора (старые платформы) | device, vlan, ports, vid |
| route | Статический IPv4-маршрут | interface, target, netmask, gateway |
| globals | Глобальные параметры, например префикс ULA для IPv6 | ula_prefix, packet_steering |
Параметр proto в секции interface определяет способ получения адреса. Наиболее употребимые значения: static (ручная настройка), dhcp (клиент DHCP), pppoe (туннель провайдера), none (интерфейс без адреса, например для моста). Набор доступных протоколов зависит от установленных пакетов — PPPoE требует соответствующего модуля, который в типовых сборках присутствует.
⚠️ Внимание: при сменеprotoсstaticнаdhcpили наоборот старые параметры (ipaddr,netmask) в файле могут остаться. Лишние опции обычно игнорируются, но для чистоты конфигурации их лучше удалить — это упрощает диагностику при сбоях.
Типовые примеры конфигурации
Ниже — несколько рабочих шаблонов, которые можно адаптировать под свою сеть. Перед применением сверьте имена физических портов (eth0, eth1, wan, lan1 и т.п.) с выводом команды ip link — они различаются между моделями роутеров.
Мост для локальной сети с объединением портов:
config device
option name 'br-lan'
option type 'bridge'
list ports 'lan1'
list ports 'lan2'
config interface 'lan'
option device 'br-lan'
option proto 'static'
option ipaddr '192.168.1.1'
option netmask '255.255.255.0'
option ip6assign '60'
WAN-интерфейс через PPPoE, если провайдер выдаёт доступ по логину и паролю:
config interface 'wan'
option device 'wan'
option proto 'pppoe'
option username 'ваш_логин'
option password 'ваш_пароль'
option ipv6 'auto'
Статический маршрут до удалённой подсети через шлюз в локальной сети:
config route
option interface 'lan'
option target '10.10.0.0'
option netmask '255.255.0.0'
option gateway '192.168.1.254'
Безопасное редактирование и применение изменений
Править файл можно встроенным редактором vi (он есть в базовой системе OpenWrt) или через утилиту uci, которая изменяет конфигурацию программно. Второй способ предпочтительнее для автоматизации и снижает риск синтаксических ошибок. Пример установки статического адреса через UCI:
uci set network.lan.ipaddr='192.168.2.1'
uci commit network
/etc/init.d/network restart
Команда uci commit записывает изменения на постоянное хранилище, а перезапуск сервиса network применяет их. Обратите внимание: до выполнения commit изменения, сделанные через uci set, хранятся во временной области и откатываются командой uci revert network. Это встроенный механизм страховки.
☑️ Безопасная правка /etc/config/network
⚠️ Внимание: при редактировании по SSH есть риск потерять соединение после /etc/init.d/network restart, если новая конфигурация содержит ошибку. В OpenWrt предусмотрен механизм failsafe mode: при проблемах с загрузкой роутер можно запустить в аварийном режиме с адресом 192.168.1.1 и откатить правки. Порядок входа в failsafe зависит от модели и версии загрузчика — сверьтесь с официальной документацией OpenWrt для вашего устройства.
Ещё один защитный приём — команда luci-reload не относится сюда, а вот связка uci commit с последующей проверкой через logread позволяет увидеть ошибки netifd до того, как вы потеряете доступ. Сообщения о неудачном поднятии интерфейса видны в системном журнале.
Типичные ошибки и их диагностика
Самая частая проблема — интерфейс не поднимается после правок. Проверка начинается с команды ifstatus lan (или имя нужного интерфейса): она показывает состояние, полученные адреса и причину сбоя, если netifd её зафиксировал. Поле up: false вместе с текстом ошибки сужает поиск до конкретной секции.
Другой распространённый сценарий — конфликт привязки устройства. Если в секции interface указано device, которого не существует (опечатка в имени порта или мост не создан), интерфейс останется неактивным без явной ошибки в файле. Сверьте имена с выводом ip link и bridge link.
- 🧩 опечатка в имени секции — фаервол или DHCP «не видят» интерфейс, потому что ссылаются на другое имя;
- 🔁 дублирование option вместо list — второй DNS-сервер перезаписывает первый;
- 🚧 отсутствие секции device для моста — br-lan не создаётся, и LAN остаётся без адреса;
- 📡 неверный proto для провайдера — PPPoE-логин в секции с proto 'dhcp' работать не будет.
Если файл повреждён настолько, что восстановить его вручную сложно, можно сгенерировать базовую конфигурацию заново командой /bin/config_generate — она создаёт дефолтный вариант под текущую платформу. Предварительно сохраните старый файл, чтобы перенести из него нестандартные настройки.
Резервное копирование и перенос конфигурации
Файл /etc/config/network входит в стандартный список сохраняемых файлов OpenWrt, поэтому он автоматически попадает в архив резервной копии, создаваемый через LuCI или командой sysupgrade -b. При обновлении прошивки с сохранением настроек файл также переживает перезапись системы.
Однако переносить файл один-в-один между разными моделями роутеров нельзя: имена портов и структура коммутатора привязаны к конкретному железу. Конфигурация секций switch и device с одного роутера почти наверняка не заработает на другом — переносите только логические секции interface с ручной корректировкой привязок к портам.
Для ручного бэкапа достаточно скопировать файл по SCP или в локальный каталог:
cp /etc/config/network /root/network.backup
или с компьютера:
scp root@192.168.1.1:/etc/config/network ./network.backup
Часто задаваемые вопросы
Чем отличается /etc/config/network от /etc/network/interfaces?
Файл /etc/network/interfaces используется в Debian-подобных системах и читается ifupdown. В OpenWrt этот механизм не применяется — сетью управляет netifd, который читает только /etc/config/network в формате UCI.
Можно ли редактировать файл, пока работает LuCI?
Да, но с оговоркой: если в LuCI открыта страница сетевых настроек и вы нажмёте «Сохранить», веб-интерфейс перезапишет файл своей версией и затрёт ручные правки. Сначала применяйте изменения в одном месте, потом переходите к другому.
Как откатить изменения, если роутер перестал отвечать?
Если доступ по SSH ещё есть — выполните cp /root/network.bak /etc/config/network и перезапустите сеть. При полной потере связи используйте failsafe mode: роутер загрузится с минимальной конфигурацией и адресом 192.168.1.1, после чего файл можно исправить. Порядок входа в failsafe зависит от модели.
Что означает параметр ip6assign в секции lan?
Он задаёт размер IPv6-префикса, который делегируется на этот интерфейс из полученного от провайдера пула. Значение 60 означает выделение префикса /60. Если IPv6 от провайдера не используется, параметр можно опустить.
Как добавить второй IP-адрес на один интерфейс?
Стандартный способ — создать alias-секцию: config interface 'lan2' с тем же device, proto 'static' и другим адресом. Либо добавить дополнительный адрес через ip addr add для временных задач — такая настройка не переживёт перезапуск сети.