- Software access point
- Contents
- Requirements
- Wi-Fi device must support AP mode
- Wireless client and software AP with a single Wi-Fi device
- Configuration
- Wi-Fi link layer
- Network configuration
- Bridge setup
- NAT setup
- Tools
- linux-wifi-hotspot
- RADIUS
- Troubleshooting
- WLAN is very slow
- NetworkManager is interfering
- Cannot start AP mode in 5Ghz band
- Беспроводная точка доступа, используя Linux
- Создаем точку доступа Wi-Fi под Linux из USB модема
- Предисловие
- Запускаем драйвера. Wi-Fi, просто Wi-Fi
- Запускаем драйвера. Сильные духом
- Страшная тайна firmware!
- Танцы с бубном. Hostapd
- Лирическое отступление
- Вместо послесловия
Software access point
A software access point, also called virtual router or virtual Wi-Fi, enables a computer to turn its wireless interface into a Wi-Fi access point. It saves the trouble of getting a separate wireless router.
Contents
Requirements
Wi-Fi device must support AP mode
You need a nl80211 compatible wireless device, which supports the AP operating mode. This can be verified by running the iw list command, under the Supported interface modes block there should be AP listed:
Wireless client and software AP with a single Wi-Fi device
Creating a software AP is independent from your own network connection (Ethernet, wireless, . ). Many wireless devices even support simultaneous operation both as AP and as wireless «client» at the same time. Using that capability you can create a software AP acting as a «wireless repeater» for an existing network, using a single wireless device. The capability is listed in the following section in the output of iw list :
The constraint #channels means that your software AP must operate on the same channel as your Wi-Fi client connection; see the channel setting in hostapd.conf below.
If you want to use the capability/feature, perhaps because an Ethernet connection is not available, you need to create two separate virtual interfaces for using it. Virtual interfaces for a physical device wlan0 can be created as follows: The virtual interfaces with unique MAC address are created for the network connection ( wlan0_sta ) itself and for the software AP/hostapd «wireless repeater»:
Random MAC address can be generated using macchanger.
Configuration
Setting up an access point consists of two main parts:
- Setting up the Wi-Fi link layer, so that wireless clients can associate to your computer’s software access point and exchange IP packets with it.
- Setting up the network configuration on your computer, so that it properly relays IP packets between its own internet connection and the wireless clients.
Wi-Fi link layer
The actual Wi-Fi link is established via the hostapd package, which has WPA2 support.
Adjust the options in hostapd configuration file if necessary. Especially, change the ssid and the wpa_passphrase . See hostapd Linux documentation page for more information.
For automatically starting hostapd on boot, enable the hostapd.service .
If you are starting hostapd on boot, make sure the wireless network interface is brought up first, otherwise it will fail. To ensure your wireless interface is ready, edit the unit configuration file and state that it is bound to and should start after your network interface:
Also make sure that the interface is not managed by other network managers. If you are using NetworkManager, see NetworkManager#Ignore specific devices.
Network configuration
There are two basic ways for implementing this:
- bridge: creates a network bridge on your computer, wireless clients will appear to access the same network interface and the same subnet that is used by your computer.
- NAT: with IP forwarding/masquerading and DHCP service, wireless clients will use a dedicated subnet, data from/to that subnet is NAT-ted. This is similar to a normal Wi-Fi router which is connected to the internet.
The bridge approach is simpler, but it requires that any service that is needed by the wireless clients, in particular DHCP, is available on the computer’s external interface. This means it will not work if the external modem which assigns IP addresses, supplies the same one to different clients.
The NAT approach is more versatile, as it clearly separates Wi-Fi clients from your computer and it is completely transparent to the outside world. It will work with any kind of network connection, and (if needed) traffic policies can be introduced using the usual iptables approach.
It is possible to combine these two approaches: for example having a bridge that contains both an ethernet device and the wireless device with a static ip, offering DHCP and setting NAT configured to relay the traffic to an additional network device connected to the WAN.
Bridge setup
You need to create a network bridge and add your network interface (e.g. eth0 ) to it. You should not add the wireless device (e.g. wlan0 ) to the bridge; hostapd will add it on its own.
NAT setup
In that article, the device connected to the LAN is net0 . That device would be in this case your wireless device (e.g. wlan0 ).
Tools
linux-wifi-hotspot
The linux-wifi-hotspot AUR package provides a script that can create either a bridged or a NATed access point for internet sharing. It combines hostapd, dnsmasq and iptables for the good functioning of the access point. Includes both command line and gui. The basic syntax to create a NATed virtual network is the following:
Alternatively, the template configuration provided in /etc/create_ap.conf can be adapted to ones need and the script run with:
To use the GUI, run in terminal:
Enable/start the create_ap.service to run the script at boot time with the configuration specified in /etc/create_ap.conf .
RADIUS
See [1] for instructions to run a FreeRADIUS server for WPA2 Enterprise.
This article or section needs expansion.
Troubleshooting
WLAN is very slow
Frequent causes for a lower than expected throughput include
- An improper choice of operation mode with a hw_mode lower than the one supported can limit the router artificially. Check that a modern operating mode is selected.
- A crowded or otherwise noise afflicted channel can severely degrade performance especially in densely populated areas. Try changing to a different channel or even switch frequencies.
- The availability of too little entropy can lead to poor performance. Consider installing haveged.
NetworkManager is interfering
hostapd may not work, if the device is managed by NetworkManager. You can mask the device using MAC:
Or interface name:
Cannot start AP mode in 5Ghz band
Apparently with the special country code 00 (global), all usable frequencies in the 5Ghz band will have the no-ir (no-initiating-radiation) flag set, which will prevent hostapd from using them. You will need to have crda installed and have your country code set to make frequencies allowed in your country available for hostapd.
Источник
Беспроводная точка доступа, используя Linux
Самый первый шаг, конечно же:
Мда, в исходниках уже есть 2.0. Такой он, Debian stable. Но на самом деле это нам не особо помешает — версия 1.0 у меня работает достаточно стабильно.
Настройка:
Отредактировать файл /etc/default/hostapd.conf. В нём раскомментировать строку вида Это путь к файлу конфигурации демона hostapd.
Затем идем дальше — редактировать /etc/hostapd/hostapd.conf. Предоставлю содержимое моего файла конфигурации. Предупреждаю, парсер конфигурационных опций у этого демона очень чувствителен и ругается даже на пустые строки с пробелом. На комментарии не ругается.
Сетевой интерфейс беспроводной карты
Драйвер сетевой карты — обычно для hostapd отлично работает nl80211, не вижу смысла менять, да и говорят, что он работает в большинстве случаев.
Название точки доступа, т.н. SSID
Режим работы сетевой карты — 801.11b/g/n. На самом деле — там всегда должно оставаться g, даже если карта способна на n, для настройки режима n придётся кое-что поменять, смотрите дальше:
Беспроводной канал — от 1 до 13. Для лучшей производительности рекомендуются 1, 6 или 11 канал.
Версия WPA
Пароль беспроводной точки
Дополнительные настройки WPA2:
Следующая опция устанавливает блокировку MAC-адресов. Пока не знаю, как это настроить, да и штука довольно бесполезная, но все говорят, что без блокировки эту опцию нужно выставить в ноль — что я и сделал:
Конфиг автоматически проверяется перед запуском, так что — смело пробуйте запустить hostapd. Команды управления:
Напомню — также в Debian можно использовать команды вида service hostapd start, что легче в написании.
Пару шагов для устойчивости:
- Нельзя забывать, что для шифрования WPA/WPA2 пароль должен быть не короче 8 символов. Если поменять пароль на лету, используя SSH сессию через беспроводной канал, можно внезапно отрезать себя от сервера — hostapd не захочет запускаться и единственное средство связи с сервером будет потеряно. Работает — не трогай, ну а если трогаешь — трогай осторожно.
- В случае многопользовательской системы советую поставить права чтения файлов вида 700, чтобы простые пользователи не могли узнать пароль для точки доступа — если вас это волнует, конечно.
Что ещё могу сказать? С мобильными устройствами проблем нет, с ноутбуком под Windows 7 — крайне редко (примерно раз-два в месяц) не получается подключиться к точке. Лечится командой service hostapd restart, велика вероятность, что в новых релизах эта проблема убрана — есть версия hostapd 2.0.0, но компилировать и ставить её я пока что не пытался.
Пока всё. К точке можно попробовать подключиться, но… Для успешного подключения к точке доступа нужен DHCP сервер, без него к точке полноценно не подключишься — те же операционные системы не дадут этого сделать, поскольку без получения адреса само подключение не имеет особого смысла. Вот его и настроим!
Когда я только начинал учиться настраивать сервера под свои нужды, первое, на что я тогда я наткнулся — это пакет isc-dhcp-server, его я и планировал предложить, и статья уже была готова, но… Я нашёл dnsmasq, и моя жизнь изменилась в лучшую сторону. Dnsmasq — это и кэширующий DNS, и DHCP сервер со своим набором различных фич. Как только я заглянул в его конфиг, мое зрение улучшилось, все мысли в мозгу внезапно стали упорядоченными и я достиг просветления. Реально, конфиг очень простой и понятный. Но пока подготавливаем площадку для работы dnsmasq. Что же делать?
1) Придумать, как будут выглядеть адреса в нашей локальной сети. Я выбрал адреса типа 192.168.51.x.
2) Настроить сетевой интерфейс, на котором будет работать dnsmasq. На самом деле — очень важный шаг, который пропускают многие в своих мануалах по настройке DHCP-серверов. Дело в том, что компьютеру, на котором работает DHCP-сервер, необходимо прописать статический адрес — кто выдаст адрес DHCP-серверу, если он сам не может запуститься без адреса, а адрес себе он выдать не может, потому что не запущен?
Итак, открываем для редактирования файл /etc/network/interfaces и добавляем туда абзац вида:
Сохраняем и перезапускаем наш сетевой интерфейс, на котором настроен DHCP:
Проверяем состояние, сверяем настройки с теми, что должны быть:
3) Нужно удалить любые DNS и DHCP серверы, чтобы dnsmasq мог спокойно запуститься — иначе выдаёт ошибку. У меня были установлены bind9 и isc-dhcp-server, пришлось избавиться от них. Если работаем по SSH из сети, в которой раньше адреса раздавал покойный DHCP-сервер, не перезагружаемся — выдавать адреса уже некому.
4) Нужно создать условия для работы сервера — создать пользователя для того, чтобы под ним запускать dnsmasq, прописать в системных настройках DNS-сервера, к которым dnsmasq будет обращаться и ещё пару мелочей.
Прописываем DNS сервера Гугла. Правда, первой строчкой у нас будет localhost. Это сделано для того, чтобы остальные системные приложения на нашем же сервере, когда им надо получить адрес от DNS-сервера, обращались сначала к dnsmasq, а не к Гуглу. Ну а dnsmasq достаточно умён, чтобы игнорировать эту строчку:
Нужно защитить это файл от перезаписи при каждом запуске системы. Перезаписывает его dhclient, если что. Честно говоря, блокировка от записи — лишь один из способов того, как не допустить перезапись =) Есть и другие, но этот самый простой:
Что же, если вы по каким-либо причинам считаете блокирование файла неверным путём или также хотите использовать DNS, которые столь настойчиво предлагает dhclient? Тогда, как советует merlin-vrn, нужно использовать программу resolvconf.
Если пакет resolvconf ещё не установлен, устанавливаем. Единственное, что нужно для того, чтобы прописать статический адрес DNS для системы — отредактировать /etc/resolvconf/resolv.conf.d/base, вписав туда всё, что мы бы вписали в /etc/resolv.conf:
service resolvconf reload — готово!
Добавляем группу и пользователя:
5) Ставим Dnsmasq, он запускается и готов к работе, но мы его отключаем — ещё не настроен, нечего ему тут делать:
6) Чистим оригинальный файл от стандартного конфига:
Ну а теперь мы готовы настраивать. Скажу сразу — у dnsmasq много разных опций, которые я при написании статьи подробно описывал в комментариях… Пока не понял, что топик раздулся до неприличных и нечитаемых размеров, как будто недостаточно того, что статья и так переполнена текстом и отформатирована, как кусок незнамо чего. Поэтому — я оставлю конфиг с самыми важными без длинных комментариев и всяких дополнительных опций, а конфиг с дополнительными опциями будет под спойлером.
Источник
Создаем точку доступа Wi-Fi под Linux из USB модема
Все началось, когда я заменил материнскую плату в своем домашнем компьютере. В старой плате был встроенный USB Wi-Fi адаптер на обычном Realtek 8187, который два года исправно работал точкой доступа под Windows. В новой плате Wi-Fi модуля не было, зато у меня появился целый сервер на замечательном Intel Atom 525 с одним маленьким недостатком — в нем было очень мало PCI слотов.
Немного поразмышляв, я решил сделать невинную, как мне сначала казалось вещь — запустить программную Wi-Fi точку доступа на обычном USB адаптере. Если бы меня предупредили что меня ожидает, я бы отказался от идеи с самого начала! Я раздобыл недорогой адаптер и, только в процессе возни с ним, стал осознавать что использование «неправильного» USB на «неправильном» чипсете это настоящее насилие для Linux! Гуру Линукса отказывались от помощи!
Тем не менее, мне удалось подружить Debian 6.0 с чипсетами Ralink 2870/3070 и Atheros 9170, и я готов раскрыть эту страшную тайну всему миру!
Предисловие
В последние годы Wi-Fi система в ядре Linux подверглась серьезной доработке. Идея была очень простой — разбить подсистему на модули, вынести повторяющиеся процедуры MAC уровня в отдельные модули ядра и отдельные демоны и переписать заново драйвера физических устройств. Так появилась пачка компонентов, про которые можно почитать на сайте разработчиков: wireless.kernel.org/en/users/Documentation
Как это часто бывает, красивые теории подверглись воздействию суровой прозе жизни. В нашем случае это выглядит так: для каждого чипсета Ralink 2870/3070 и Atheros 9170 в ядро включены две версии драйверов — «old school», которые работают из коробки, но не могут быть запущена в режиме Master (режим для запуска Access Point) и новые «net-link style» которые все умеют но не работают из коробки. По-умолчанию взаимоисключающие драйвера пытаются запуститься одновременно с печальным результатом. Но довольно сетований, скорее за дело!
Запускаем драйвера. Wi-Fi, просто Wi-Fi
Если вы обычный пользователь, и хотите просто подключаться к имеющимся Wi-Fi сетям, то на Debian 6 (и других подобных убунтариях) вам нужно сделать следующее:
Для чипсета RT2870/3070 на коем собраны популярные Dlink DWA-140, TL-WN727N рекомендую оставить драйвер старого стиля rt2870sta, к которым не забываем скачать firmware.
apt-get install firmware-ralink wireless-tools
Далее идем в /etc/modprobe.d/blacklist.conf и блокируем запуск драйверов нового стиля:
После чего можно подключить USB свисток и внимательно посмотреть dmesg. Если в нем будут писать про конфликты драйверов, то вы ошиблись или не запретили все конфликтующие драйвера. Если будет написано про отсутствие firmware, значит у вас отсутствует firmware (чертовски неожиданно?). Наберите ls -l /lib/firmare должно быть что то типа такого:
-rw-r—r— 1 root root 8192 Мар 6 22:34 rt2561.bin
-rw-r—r— 1 root root 8192 Мар 6 22:34 rt2561s.bin
-rw-r—r— 1 root root 8192 Мар 6 22:34 rt2661.bin
-rw-r—r— 1 root root 8192 Мар 6 22:34 rt2860.bin
-rw-r—r— 1 root root 8192 Мар 19 11:46 rt2870.bin
-rw-r—r— 1 root root 4096 Янв 4 05:40 rt2870.bin.old
-rw-r—r— 1 root root 8192 Дек 28 2009 rt2870.bin.ralink
-rw-r—r— 1 root root 4096 Мар 6 22:34 rt3070.bin
-rw-r—r— 1 root root 4096 Мар 6 22:34 rt3071.bin
-rw-r—r— 1 root root 8192 Мар 6 22:34 rt3090.bin
-rw-r—r— 1 root root 2048 Мар 6 22:34 rt73.bin
Пытливый читатель наверно заметил подвох, мы еще вспомним о нем.
Для Ar9170 аналогичная процедура. На нем собраны Dlink DWA-130, 160 а так же очень популярный в узких кругах TL-WN821N v2. В мои же руки попал Netgear WNA1000.
apt-get install firmware-atheros wireless-tools
Блеклистим carl9170 и вперед!
Потом идем в /etc/network/interfaces и пишем там нечто вроде:
Запускаем ifup wlan0 . Далее какой нибудь графической утилитой можно подключиться к сети. Для окончательной настройки подойдет, например, «Network manager»
Если у тебя, уважаемый хабраюзер уже замигал Wi-Fi и больше ничего не требуется, то смело закрывай тему.
Запускаем драйвера. Сильные духом
Итак, настойчивый хабраюзер, несмотря на скепсис признанных гуру, мы все еще хотим запустить USB Wi-Fi в режиме точки доступа.
Для начала два простых совета по выбору адаптера:
- Все что угодно, только не Realtek!
- Остальные чипсеты/драйвера смотрим в справочнике: wireless.kernel.org/en/users/Devices/USB
Теперь вычеркнем все рекомендации из раздела «просто Wi-Fi»! 90% блогов в интернете забиты этой ерундой. Мы будем отключать драйвера старого стиля и запускать новые, которые ни черта не работают из коробки даже в новейших версиях ядер, а значит пришло время компиляции. Пока ты читаешь эту хабрастатью, разработчики наверняка исправили 1-2 бага в драйверах и добавили новый, а значит качаем самую свежую версию compat-wireless: www.orbit-lab.org/kernel/compat-wireless-2.6
Она совместима с драйверами начиная от 2.6.14
Далее следуем инструкциям: wireless.kernel.org/en/users/Download/stable
Компилируется все очень долго игнорируя флаг включения многопоточности:
declare -x CONCURRENCY_LEVEL=»4″
После компиляции и инсталляции не забываем отключить старый стиль в /etc/modprobe.d/blacklist.conf
И конечно не забываем выгрузить ранее загруженные драйвера:
Драйвера нового стиля корректно выгружать так (пригодится при отладке):
Страшная тайна firmware!
Кажется все. Запускаем modprobe … и полное разочарование! В логах опять ругается на firmware. Дело в том что новые драйвера имеют и фирмваре другое. Для Ralinka идем сюда: www.ralinktech.com/support.php?s=2 и скачиваем нечто вида RT2870_Firmware_V22.
Распаковываем и пишем в /lib/firmware, удивляясь как это файл с одинаковым именем может отличаться ровно в два раза по размеру! Внимательный читатель уже отметил этот факт раньше. Дело в том, что несколько месяцев назад разработчики объединили драйвера для чипсетов rt2870 и rt3070 в один. Не мудрствуя лукаво назвали драйвера и фирмваре по имени 2870. Вы видели на странице Ралинка фирмваре 3070? И я не видел, а оно там есть! Адаптер DWA-140 сделан на чипсете 3070 и распознается драйверами rt2800usb.
С Атеросом немного проще, идем на страницу разработчиков и скачиваем свежую версию: wireless.kernel.org/en/users/Drivers/carl9170#Firmware
Чтобы точно разобраться с фирмваре, смотрим что хочет модуль драйвера, например:
modinfo carl9170 | grep firm
А потом проверяем что необходимое фирмваре есть:
ls /lib/firmware/
Далее уже привычные манипуляции с rmmod, modprobe и lsmod и ура! Мы подняли правильные драйвера, а значит пришло время набрать заветную команду
iwconfig wlan0 mode Master
Бах! Ошибка! SET failed on device wlan0 ; Invalid argument. Неужели все было проделано зря? Конечно нет. Просто у новой подсистемы свой путь, и как это часто бывает с новым и хорошим, он категорически отрицает старое и хорошее. На форумах этот вопрос обсуждают примерно так:
— Why?
— RTFM!
— Cам ты RTFW! Небо, небо не видело такого кю!
Мануал сообщает нам что отныне все настройки для точки доступа делаются через программу hostapd: wireless.kernel.org/en/users/Documentation/hostapd
Подключаем репозиторий sid в Дебиан (во всех остальных безнадежно старые версии) и ставим новые утилиты работы с радио fw и демон hostapd
apt-getinstall iw hostapd
После чего пишем iw list и видим заветные Supported interface modes: AP, а заодно и список частот.
Танцы с бубном. Hostapd
Перед началом настройки конфига нужно знать три важные вещи.
1. Внутри этого демона сидит маленький и вредный поганец, который непредсказуемым образом меняет состояние интерфейса в процессе запуска/перезапуска. Иногда wlan0 исчезает, иногда у него исчезает IP, иногда помогает ifdown ifup, иногда не помогает. Ralink в таких условиях совсем плох, Атерос чуть стабильнее. Поэтому перед любом запуске hostapd проверяем, что радиоинтерфейс поднят, и IP адрес на нем жив. Если не удается поднять интерфейс значит применяем насилие — ребутим Линукс! (Да да это не шутка!)
2. Все настройки сначала проверяем без шифрования! И не забываем проверять dhcpd, который тоже любит умирать при перезагрузке интерфейсов. Вот почему Linux + USB = ненависть! Лучше настройку hostapd проводить без dhcp, с фиксированным IP адресе на клиенте, и лишь в конце перейти к настройке dhcpd.
3. Для проверки всегда сначала запускаем hostapd -d /etc/hostapd/hostapd.conf c диагностикой в консоль.
Теперь конфиг hostapd с пояснением. ( Update: поправлены комментарии, # не работает в конце строки)
После запуска прежде всего набираем ifconfig и видим что появился специальный интерфейс
mon.wlan0 Link encap:UNSPEC HWaddr 30-46-9A-00-6D-04-00-00-00-00-00-00-00-00-00-00
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:42603 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3887500 (3.7 MiB) TX bytes:0 (0.0 B)
Теперь в консоли (если запускали hostapd -d) смотрим что происходит в процессе аутентификации. Если настроен WPA и соединиение не проходит дальше фазы 2/4 значит ошибочно набран пароль. Там еще можно увидеть множество непонятных сообщений.
Лирическое отступление
Так получилось, что ковырясь с hostapd я потерял всякую надежду запустить свой Dlink DWA-140 на чипсете Ralink 3070. Мне совершенно точно удалось запустить его в работу без шифрования, но при включении шифрования или я допускал ошибку, или действительно этот модуль плохо взаимодействует с ядерными модулями шифрования ( на форумах я видел описание проблемы и одна из версий решения указывала на модули шифрования ecb и arc4).
Финальный аккорд с включением шифрования я уже реализовал на Netgear WNA1000 на чипсете Atheros 9170, который действительно лучше работает и корректно подгружает все модули шифрования.
Теперь я думаю что можно таки было запустить Ralink с шифрованием и призываю поставить жирную точку в том вопросе счастливых обладателей DWA-140. Пишите о своих успехах или проблемах в комментариях, попробуем разобраться вместе.
Вместо послесловия
Теперь у нас в кладовке или на шкафу тихо жужжит маленький сервер с USB Wi-Fi адаптером, можно насладиться проделанной работой. Но не тут то было! В современной многоэтажке нашпигованной точками доступа со всех сторон идут помехи. Чтобы выбрать канал я советую изучить эфир программой InSSIDer
Вот так выглядел выбор канала у меня вечерком у окошка:
Источник