Pull to refresh

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

*nix *
В этой статье я расскажу о том как настроить сеть в 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
Tags:
Hubs:
Total votes 35: ↑32 and ↓3 +29
Views 241K
Comments 35
Comments Comments 35