Настройка сети в 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 — названия переменных.
Настройка сетевых интерфейсов
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
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
Config wifi device radio0
For working with wifi in openWrt there is a script /sbin/wifi. The file /etc/config/wireless is responsible for wifi configuration.
The the configuration file can be created by default having run the following:
wifi detect > /etc/config/wireless
config wifi-device radio0 option type mac80211 option channel 11 option hwmode 11g option path 'pci0000:00/0000:00:1c.2/0000:05:00.0' # REMOVE THIS LINE TO ENABLE WIFI: option disabled 1 config wifi-iface option device radio0 option network lan option mode ap option ssid OpenWrt option encryption none
Let’s change it under our configuration.
The file /etc/config/wireless is for open network:
config wifi-device radio0 option type mac80211 option channel 'auto' option hwmode 11g option path 'pci0000:00/0000:00:1c.2/0000:05:00.0' option disabled 0 config wifi-iface option device radio0 option network wwan option mode sta option ssid testwifi option encryption none
The file /etc/config/wireless is for encrypted network:
config wifi-device 'radio0' option type 'mac80211' option channel '6' option hwmode '11ng' option path 'pci0000:00/0000:00:1c.2/0000:05:00.0' option disabled '0' config wifi-iface option device 'radio0' option network 'wwan' option mode 'sta' option ssid 'testwifi' option encryption 'psk2' option key '1234567890'
sta — is a client mode; ap — is an access point mode
For automatic receiving the address via dhcp it is necessary to create the interface in file/etc/config/network:
config interface wwan option proto 'dhcp'
Let’s run the following commands for applying of new settings:
At the stage of OpenWrt configuration wpa-supplicant is to be selected, in the different way wifi will not be linked up by the script openWrt /sbin/wifi:
The running of «wifi down» makes wifi disable and results in missing of interface wlan0.
The running of «wifi up» links up the interface wlan0 and the network is connected.
By successful completing of operation there will be approximately the following log on the screen:
wifi up Successfully initialized wpa_supplicant [ 10.975345] iwl3945 0000:05:00.0: loaded firmware version 15.32.2.9 [ 14.670591] wlan0: authenticate with bc:ae:c5:c3:ab:d5 [ 14.673644] wlan0: send auth to bc:ae:c5:c3:ab:d5 (try 1/3) [ 14.675760] wlan0: authenticated [ 14.676031] iwl3945 0000:05:00.0: wlan0: disabling HT as WMM/QoS is not supported by the AP [ 14.676335] iwl3945 0000:05:00.0: wlan0: disabling VHT as WMM/QoS is not supported by the AP [ 14.680246] wlan0: associate with bc:ae:c5:c3:ab:d5 (try 1/3) [ 14.682727] wlan0: RX AssocResp from bc:ae:c5:c3:ab:d5 (capab=0x401 status=0 aid=1) [ 14.684368] wlan0: associated
Error introducing is possible (if there is no wpa-supplicant) :
wifi up command failed: Device or resource busy (-16)
It is possible to be connected to the network in a manual mode by the following command:
iw dev wlan0 connect -w testwifi
Config wifi device radio0
Для работы с wifi в openWrt существует скрипт /sbin/wifi. Файл /etc/config/wireless отвечает за конфигурацию wifi.
Создать конфигурационный файл по умолчанию можно, выполнив:
wifi detect > /etc/config/wireless
Он примерно будет иметь следующий вид:
config wifi-device radio0 option type mac80211 option channel 11 option hwmode 11g option path 'pci0000:00/0000:00:1c.2/0000:05:00.0' # REMOVE THIS LINE TO ENABLE WIFI: option disabled 1 config wifi-iface option device radio0 option network lan option mode ap option ssid OpenWrt option encryption none
Изменяем его под свою конфигурацию.
Файл /etc/config/wireless для открытой сети:
config wifi-device radio0 option type mac80211 option channel 'auto' option hwmode 11g option path 'pci0000:00/0000:00:1c.2/0000:05:00.0' option disabled 0 config wifi-iface option device radio0 option network wwan option mode sta option ssid testwifi option encryption none
Файл /etc/config/wireless для шифрованой сети:
config wifi-device 'radio0' option type 'mac80211' option channel '6' option hwmode '11ng' option path 'pci0000:00/0000:00:1c.2/0000:05:00.0' option disabled '0' config wifi-iface option device 'radio0' option network 'wwan' option mode 'sta' option ssid 'testwifi' option encryption 'psk2' option key '1234567890'
sta — режим клиента; ap — режим точки доступа
Для автоматического получения адреса по dhcp в файле /etc/config/network необходимо создать интерфейс:
config interface wwan option proto 'dhcp'
Выполнить для применения новых настроек:
На этапе конфигурации openWrt нужно отметить wpa-supplicant, иначе wifi не будет подниматься скриптом openWrt /sbin/wifi:
Выполнение «wifi down» приводит к отключению wifi и пропаданию интерфейса wlan0.
Выполнение «wifi up» поднимает интерфейс wlan0, и происходит подключение к сети.
При успешном выполнении операции на экране будет примерно следующий лог:
wifi up Successfully initialized wpa_supplicant [ 10.975345] iwl3945 0000:05:00.0: loaded firmware version 15.32.2.9 [ 14.670591] wlan0: authenticate with bc:ae:c5:c3:ab:d5 [ 14.673644] wlan0: send auth to bc:ae:c5:c3:ab:d5 (try 1/3) [ 14.675760] wlan0: authenticated [ 14.676031] iwl3945 0000:05:00.0: wlan0: disabling HT as WMM/QoS is not supported by the AP [ 14.676335] iwl3945 0000:05:00.0: wlan0: disabling VHT as WMM/QoS is not supported by the AP [ 14.680246] wlan0: associate with bc:ae:c5:c3:ab:d5 (try 1/3) [ 14.682727] wlan0: RX AssocResp from bc:ae:c5:c3:ab:d5 (capab=0x401 status=0 aid=1) [ 14.684368] wlan0: associated
Возможно появление ошибки (при отсутствии wpa-supplicant) :
wifi up command failed: Device or resource busy (-16)
Подключиться в ручном режиме к сети можно с помощью команды:
iw dev wlan0 connect -w testwifi