Настройка сети в OpenWRT

    В этой статье я расскажу о том как настроить сеть в OpenWRT. В частности расскажу о том как сделать несколько SSID на одной радиокарте, настроить WPA2-Enterprise, поднять VLAN и как настроить программный свитча(swconfig).

    UCI


    Все настройки будем проводить через консоль так как она не ограничена в возможностях в отличии от веб интерфейса. Для настроек системы в OpenWRT используется подсистема UCI(Unified Configuration Interface), которая позволяет централизовано настраивать всевозможные сервисы начиная с сервиса монтирования файловых систем и заканчивая сервисом QoS. Все настройки UCI находятся в директории "/etc/config/" и имеют одинаковый синтаксис. Для управления системой UCI используется программа uci. С помощью неё можно редактировать конфигурационные файлы, просматривать текущие настройки и прочее. uci очень удобно использовать для конфигурирования системы из скриптов. Так-же есть возможность писать расширения для uci. Синтаксис конфигурационных файлов такой:
    config 'example' 'test'
            option   'string'      'some value'
            option   'boolean'     '1'
            list     'collection'  'first item'
            list     'collection'  'second item'
    

    config 'example' 'test' — начало секции, example — тип по которому uci поймет как трактовать опции в этой секции, test — идентификатор секции. option или list определяет тип настроек, list — составные настройки(например список интерфейс для прослушивания apache'ем). string, boolean, collection — названия переменных.

    Настройка сетевых интерфейсов


    Конфигурационный файл — /etc/config/network.
    В простейшем случае настройка сети выглядит так:
    config interface lan
            option ifname   eth1
            option proto    static
            option ipaddr   192.168.0.10
            option netmask  255.255.255.0
            option gateway  192.168.0.1
            option dns      192.168.0.1
    

    Где lan это роль данного интерфейса. Нужна она для того что-бы можно было абстрагироваться от названия интерфейсов. Например можно в фаерволе указать что разрешить весь входящий трафик c lan.
    Пример добавления статического маршрута:
    config route
            option interface lan
            option target    10.1.1.1
            option netmask   255.255.255.255
            option gateway   192.168.0.100
    

    Отмечу что интерфейс обязательно надо указывать.
    Пример настройки влана и добавление его в bridge:
    config interface guest
            option ifname "eth1.123"
            option type bridge
            option proto static
            option netmask 255.255.255.0
            option ipaddr 192.168.2.2
    

    Создаст интерфейс «br-guest» и включит в него интерфейс eth1.123(123 vlan-id на интерфейсе eth1). Ниже будет пример как добавить в этот бридж беспроводной интерфейс.
    Так как чипсеты используемые в роутерах обычно имеют 1-2 ethernet порта, а хочется побольше, то используется отдельных контроллер для ethernet. Он подключается одним портом в главный чипсет, а остальными наружу. Непосредственно в сетевой системе такой программный коммутатор никак не представлен. Коммутатор можно настроить через утилиту swconfig, либо через uci. Предположим у нас есть один ethernet порт eth0 подключенный к 5-му порту управляемого коммутатора:
    config 'switch' 'eth0'
       option 'enable'      '1'
       option 'enable_vlan' '1'
       option 'reset'       '1'
    
    config 'switch_vlan'
       option 'vlan'       '0'
       option 'device'     'eth0'
       option 'ports'      '0 1 2 5t'
    
    config 'switch_vlan'
       option 'vlan'       '1'
       option 'device'     'eth0'
       option 'ports'      '3 5t'
    
    config 'switch_vlan'
       option 'vlan'       '124'
       option 'device'     'eth0'
       option 'ports'      '6t 5t'
    

    Здесь eth0 — название интерфейса куда подключен коммутатор. В первой секции включаем коммутатор и включаем поддержку теггированного(трафика с вланом) трафика. Каждая секция switch_vlan отвечает за определенный VLAN указанный в опции vlan. Этот тег будет использоваться для добавления метки для портов указанных в секции ports. Буква t у порта обозначает что трафик в этот порт должен быть передан теггированным(с меткой), в остальные перечисленные порты он попадет без метки. Запись '0 1 2 5t' нужно читать так: передай нетегированный трафик с портов 0, 1, 2 в порт 5 с меткой 0. Так как VLAN с меткой 0 это тоже самое что трафик без метки, то на нашем порту eth0 мы получим трафик с портов 0, 1, 2 без всяких вланов. В следующей секции написано: ports='3 5t', vlan=1. Это значит что нетегированный трафик с порта 3 придет на eth0 с vlan-id=1(не рекомендую использовать vlan-id=1). В последней секции написано vlan=124, port=«6t 5t» — это значит что трафик пришедший на порт6 с тегом 124 придет на eth0 с тегом 124.
    В network можно настроить подключения типа PPTP, PPPoE и даже 6to4.

    Настройка wi-fi:


    Конфигурационный файл находиться тут — /etc/config/wireless.
    Настройка радио интерфейсов разделена на две части: настройки уровня phy(физика) и настройка интерфейса. Минимальные настройки выглядят так:
    config 'wifi-device' 'radio0'
            option 'type'    'mac80211'
            option 'channel' '6'
    config 'wifi-iface'
            option 'device' 'radio0'
            option 'network' 'guest'
            option 'mode' 'ap'
            option 'ssid' 'guest'
            option 'encryption' 'none'
    

    В первой секции мы указали что тип чипсета/драйвера — mac80211(определяется при загрузке), используемый канал — 6. Так-же можно указать используемые стандарты, мощность передатчика, используемые антенны и прочее. Во второй секции уже описываем сам интерфейс. Интерфейсов может быть несколько, например с разными SSID. В опции device необходимо указать идентификатор секции с описание устройства, в данном случае radio0. network=guest значит что нужно прикрепить это устройство к интерфейсу guest использующемся в network. Так как у нас(смотри выше) в описание сети написано что interface=guest это бридж, то этот беспроводной интерфейс добавить в бридж br-guest.
    Пример настройки multi-ssid с шифрованием wpa2-enterprise+ccmp:
    config 'wifi-iface'           
            option 'device' 'radio1'
            option 'network' 'wlan'
            option 'mode' 'ap'
            option 'ssid' 'super'
            option 'encryption' 'wpa2'
            option 'server' '192.168.0.11'
            option 'port' '1812'
            option 'key' 'secret'
                                                                            
    config 'wifi-iface'       
            option 'device' 'radio1'
            option 'network' 'wlan'   
            option 'mode' 'ap'              
            option 'ssid' 'puper'             
            option 'encryption' 'wpa2'                    
            option 'server' '192.168.0.11'                              
            option 'port' '1812'                                                
            option 'key' 'secret' 
    

    OpenWRT создаст два интерфейса с разными ssid(super и puper) и будет их авторизовывать через RADIUS-сервер 192.168.0.11. key — это ключ RADIUS'а. Обычно можно поднимать до 4 SSID, зависит от радиокарты. Отмечу так-же что OpenWRT для каждого wifi устройства автоматически создает устройства типа monitor, с помощью которых можно ловить заголовки уровня 802.11.
    Ссылки по теме:
    wiki.openwrt.org/doc/uci
    wiki.openwrt.org/doc/uci/network
    wiki.openwrt.org/doc/uci/wireless
    wiki.openwrt.org/doc/uci/network/switch
    Share post

    Comments 35

      +1
      А на каком оборудовании проводили тестирование?
      Мне не удалось заставить работать vlan'ы с номерами больше 15 на роутерах dir-300 и dir-320.
        +1
        эти встроенные коммутаторы умеют до 16 вланов, вот и все.
          0
          В финальной версии 10.03.1 в web интерфейсе в разделе по vlan — прямо русским по белому написано что vlan больше 15ти быть не может. Скорее всего это ограничение железа. Хотя чесно сказать не очень понимаю зачем может понадобиться больше. Буду признателен если кто то просвятит ну или ссылкой кинется, чтоб я тоже осознал…
          0
          Например на WNDR-3700. Странно что есть такое ограничение на вланы. Это при вешании влана в самой системе или на свитч через swconfig?
            +3
            ок, а в чем разница вашего топика и wiki.openwrt.org?
              +3
              Вообще openwrt — крутая штука. Благодаря тому, что на борту полноценный Linux, прямо сейчас имею халявный инет(так уж случилось, что мой провайдер не отключает порт на свитче, а всего-лишь блокирует доступ к инет-ресурсам) через ipip-туннель, халявное телевидение от всем известного «билайна»(вот же они достали звонками типа — «а почему вы не пользуетесь интернетом, хотя мы провели вам наш кабель?»). Да и вообще, чувствуешь что «железка» полностью под твои контролем, что к сожалению недостижимо с родной прошивкой.
                0
                А можно поподробнее про телевидение?
                  0
                  Мне тоже, хехе, интересно
                    0
                    ок, дабы раскрыть тему, накатаю сегодня пост с подробныи описанием.
                    0
                    к сожалению, оно только кажется крутой штукой.
                    когда захочется большего и вы полезете смотреть init-скрипты и всякие врапперы конфигов, вид у вас почти наверняка будет примерно вот такой:

                      0
                      И чем оно там отличается от любого другого дистрибутива linux?
                        0
                        а вы почитайте, скажем, обработчик конфига iptables.
                        +1
                        согласен, uci — богомерзкая вещь)
                      0
                      Крутил-вертел с несколькими SSID — не получилось. Авторизация не проходила. Попробую с новыми силами и новой прошивкой.
                        0
                        Искренне завидую у меня вот валяется DIR-620
                        нечаяно ее «понизил» до уровня тупого свича и, собака, не хочет перешиватся (или руки у перешивающих были обе левые)
                          +1
                          Вгоните в аварийный режим (как — не скажу, гугл в помощь) и прошейте, в крайнем случае — через JTAG.
                            0
                            Дык аварийный режим (30\30\30) не работает: через консольку — пишет после U-boot-а bad magic number, а сам u-boot не дает выбирать никакие другие пункты загрузки (тупо не реагирует на нажатися, но возможно из-за кривости рук паявших кабель) для JTAG — вроде надо програматор или как, если вы в курсе пожалуйста в личку ибо ОЧЕНЬ интересует
                          0
                          Как раз на днях настраивал свой DIR-320. Хотел ещё гостевой доступ как-то прикрутить с ограничением диким по скорости. Хотя судя во всему в статье ничего инересного не найду. Завтра подробнее буду разбираться.
                            0
                            если вы говорите о втором ssid без пароля, отделенный от основной сети и с шейпером, то, внезапно, это есть в стандартноый прошивке к 320-му.
                              0
                              У меня задача посложнее. Я хочу сеть с интернетом принять в VLAN и выдавать в неё полноценный доступ по WPA2, а также доступ только в интернет открытый+отдавать её же на одном из портов LAN. А не тегированный трафик выдавать на оставшиеся порты LAN. Не думаю, что такое возможно на стандартной прошивке.
                            0
                            Не напишите статью как в OpenWRT ставить свои драйверы (в частности сетевые)?
                            Это актуально для меня сейчас.
                              0
                              Интересуют два вопроса:
                              1) Можно-ли установить OpenWRT, оставив ядро от DD-WRT ?? А то Asus RT-N16 не поддерживается опеном.
                              2) Есть-ли сборки OpenWRT с ядрами 2.6 ??
                                0
                                Сорри за оффтоп, но как раз подумываю о покупке нового роутера, и в частности посматриваю на RT-N16. Не подскажете, насколько он хорош, насколько мощен (может ли держать под l2tp большие скорости — свыше 1,5 мегабайта в секунду — у меня примерно при такой скорости умирает wl500gpv2, параллельно раздавая торрентов пачку — если что-то качать на такой скорости отваливается DNS), насколько хорошо дружит с альтернативными прошивками и тд?
                                  0
                                  RT-N16 пока не поддерживается. wiki.openwrt.org/toh/start — список поддерживаемого оборудования. Например мне понравился wndr3700, мощный проц, 2 радиокарты(2,4 +5 ГГц)
                                    0
                                    Да мне бы вообще, без привязки к OpenWRT :)
                                    0
                                    Asus RT-N16 официально (!) поддерживает DD-WRT promos.asus.com/US/ASUS_DD-WRT/index.htm
                                    Достаточно мощный проц, причем разгоняется. Очень мощный Wi-Fi (по умолчанию 17 mW), при установке радиатора на радиомодуль увеличивается до 250 mW (что уже даже теоретически вредно для здоровья).
                                    Используется в весьма жестких условиях: тянет OpenVPN с зверской криптографией (требования факультетской сети) у меня в общаге на 15 мегабит в секунду (без разгона). С учетом использования 256 битного AES, с обновлением SSL ключей раз в 30 секунд и TLS подписью каждого (!!!) пакета. Для сравнения на компе этот VPN выдает 90 мегабит при загрузке 2 гигагерцового Core 2 Duo на 17%. Так что результат вполне неплох.
                                      0
                                      Спасибо, любопытно.
                                    0
                                    Я вообще на оригинальную прошивку вернулся. Задачи у него простые. И ещё хотелось IPTV смотреть по WiFi. В новой версии как раз появился UDP-proxy.
                                      0
                                      Насчет первого сказать ничего не могу, а насчет второго: у меня wl500g и вот тут сказано, что есть на оба ядра, и 2.4, и 2.6. Кроме того есть svn сборки, где ядро 3.03 ))
                                        0
                                        > А то Asus RT-N16 не поддерживается опеном.
                                        На всякий случай, если вы ждёте поддержки BCM4716 в OpenWRT, то во-первых сейчас появилась поддержка в trunk-е, но включение WiFi со стандартным драйвером b43 (не поддерживает 802.11n) на некоторых роутерах (а возможно на всех с BCM4716) приводит к неприятным последствиям: dev.openwrt.org/ticket/12906 dev.openwrt.org/ticket/12965
                                        Во-вторых на trunk можно накатить проприетарный WiFi-драйвер forum.openwrt.org/viewtopic.php?pid=191270#p191270 тогда этого бага можно избежать (и будет работать 802.11n) но будет другой (проблема коммуникации между LAN и WLAN, обсуждаемая на последних страницах треда по ссыке).

                                        В общем пока уровень поддержки на уровне альфа-версий, но постепенно оно начинает работать. Хорошо хоть сейчас для Ethernet драйвер со свободной лицензией есть lwn.net/Articles/531856/ а раньше и его не было.
                                        0
                                        Купил себе TP-LINK TL-WR1043ND. Сразу поставил последний стабильный OpenWRT. Сейчас на борту: Wi-Fi (mixed 802.11 b/g/n) WP2 Personal, 1Gb switch (4 порта), WAN (PPPoE), OpenVPN, настроенный firewall, transmission (правда пока не функционирует — так как нет еще внешнего жесткого диска). На очереди установка miredo (последний раз был пакет какой-то кривой) и еще хотелось бы очень no-ip (вот с этим сложнее).
                                          +1
                                          Есть пакет ddns-scripts
                                            0
                                            Это для no-ip?
                                              0
                                              Спасибо, вопрос снят =) уже нагуглил =)
                                                0
                                                Еще раз благодарствую =) Уже настроил =)

                                            Only users with full accounts can post comments. Log in, please.