debian.org / О Debian Где взять Debian Поддержка Уголок разработчика Новости Wiki

Автор Тема: Делаем софтовую точку доступа (Soft AP) [Инструкция]  (Прочитано 5063 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн CoolAller

  • Topic Author
  • Сообщений: 805
Инструкция предназначена для debian-based дистрибутивов, но без проблем работает и на других.

Нам понадобится hostapd — собственно для раздачи wi-fi, dnsmasq — для раздачи ip-адресов и notify-send (libnotify-bin) — для оповещений. iptables на данный момент доступен из коробки.

Устанавливаем hostapd:
sudo aptitude install hostapdОстанавливаем его:
Если используется Systemd, останавливаем командой:
sudo systemctl stop hostapdЕсли используется Sysvinit, останавливаем командой:
sudo service hostapd stop
В файле /etc/default/hostapd раскомментируем и исправляем строку:
DAEMON_CONF="/etc/hostapd/hostapd.conf"
Создаем и редактируем файл /etc/hostapd/hostapd.conf
interface=wlan0
driver=nl80211
ssid=Internet
hw_mode=g
ieee80211n=1   # (для включения режима n, не отменяет необходимость предыдущей строки hw_mode=g. Если не планируется использование режима n, то строку ieee80211n не пишем)
channel=6   # (в режиме n 2.4GHz доступны 3 неперекрывающихся канала: 1, 6, 11)
wpa=2
wpa_passphrase=12345678
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
auth_algs=1
macaddr_acl=0

В графе wpa_passphrase не забудьте изменить пароль на свой.
В общем-то тут все просто — имя точки доступа, пароль, канал, на котором будет работать и драйвер.
Под спойлером ниже приведено краткое описание и дополнительные опции:
driver=nl80211 - так называется тип драйвера относящийся к типу mac80211. В таблице можно посмотреть что подходит под этот тип. (Чипсеты ralink подходят).
macaddr_acl=0 - точка принимает всех клиентов, если их mac адресов нет в "черном списке". Файл "черного списка" в файле /etc/hostapd.deny. Также файл можно переопределить в конфиге переменной deny_mac_file=/etc/имя_файла. Если указать macaddr_acl=1, то будем отклонять каждого клиента кто не задан в файле accept_mac_file=/etc/hostapd.accept.
ssid=Internet - имя точки доступа.
channel=6 -  обратите особое внимание на канал n, на частоте 2.4 GHz всего 3 основных канала - 1, 6 и 11.
hw_mode=g - режим работы точки в IEEE 802.11g (2.4 GHz), теоретическая пропускная способность 54 Мбит/с. Обязательно указывать даже при стандарте N, если не указать, то по умолчанию будет использоваться IEEE 802.11b (2,4 GHz), теоретическая пропускная способность 11 Мбит/с.
hw_mode=a - режим работы точки в IEEE 802.11a (5 GHz), теоретическая пропускная способность 54 Мбит/с.
ieee80211ac=1 - режим работы точки в IEEE 802.11ac (5 GHz), теоретическая пропускная способность 1300 Мбит/с.
ieee80211n=1 - указывает режим работы точки в IEEE 802.11n, (2,4/ 2,4 и 5 GHz), теоретическая пропускная способность от 150 Мбит/с до 450 Мбит/с в зависимости от адаптера.
wmm_enabled=1 - режим приоритета мультимедиа трафика.
auth_algs=1 - значение 1 позволяет использовать только алгоритмы аутентификации WPA2. Значение 2 означает WEP. Никогда не используйте шифрование WEP (Wired Equivalent Privacy), поскольку оно давно взломано. Значение 3 позволяет использовать оба алгоритма.
ignore_broadcast_ssid=0 - значение 0 означает, что SSID сети виден всем, значение 1 - скрывает SSID сети.
wpa=2 - опции WPA шифрования. Значение 1 означает использовать только WPA1, при значении 2 можно использовать только WPA2, при значении 3 можно использовать WPA и WPA2.
wpa_passphrase=password_wifi_key - наша парольная фраза.
wpa_key_mgmt=WPA-PSK - указывает алгоритмы ключей шифрования, которые вы хотите разрешить. Вы можете выбрать WPA-PSK, WPA-EAP или оба варианта. PSK означает Pre-Shared Key (предварительно распространенные ключи). EAP означает Extensible Authentication Protocol — расширяемый протокол аутентификации, представляющий собой систему, поддерживающую множество разных методов аутентификации. Для вашей компактной конфигурации с предварительно распространенными ключами он не понадобится.
wpa_pairwise=CCMP TKIP - принимаемые парные алгоритмы шифрования для RSN/WPA(v1).
rsn_pairwise=CCMP - принимаемые парные алгоритмы шифрования для RSN/WPA2 rsn_pairwise=CCMP
(CCMP — протокол шифрования 802.11i созданный для замены TKIP, обязательного протокола шифрования в WPA и WEP, как более надёжный вариант. CCMP является обязательной частью стандарта WPA2, и необязательной частью стандарта WPA.). wpa_pairwise и rsn_pairwise показывают, какие шифры можно использовать для шифрования данных; можно использовать CCMP, TKIP или оба. CCMP значительно устойчивей, чем TKIP, поэтому можно попробовать разрешить только CCMP. Клиенты Windows печально известны капризностью и проблемами при использовании стойких шифров, поэтому для них лучше разрешить TKIP.
wmm_enabled=1 - поддержка QoS.


Совет:
При выборе канала для вашей точки досупа, выбирайте наименее забитые каналы и каналы где присутствует наибольшее отрицательное dBm. Более детально можно прочитать здесь.
Для выбора канала, окружающие ваc сети можно посмотреть командой:
sudo iw dev wlan0 scanИли воспользоваться программой LinSSID (доступна для Debian x64)


Устанавливаем dnsmasq:
sudo aptitude install dnsmasqОстанавливаем его:
Если используется Systemd, то останавливаем командой:
sudo systemctl stop dnsmasqЕсли используется Sysvinit:
sudo service dnsmasq stop
dnsmasq хорош тем, что в нем все есть и он прост для настройки. Открываем файл конфигурации /etc/dnsmasq.conf и вписываем в него строки:
interface=wlan0
dhcp-range=192.168.2.2,192.168.2.100,12h

Тут все крайне просто, но если нужно, можно добавить альтернативный dns сервер, а также можно хосты принудительно направлять на 127.0.0.1, тем самым блокируя их. Подробности в справке man dnsmasq. Еще один момент, обязательно адреса dhcp-range должны быть в одной сети с wlan0. если Вы по каким-либо соображениям в скрипте запуска не будете принудительно менять ip адрес для wlan0, то укажите тут пул такой же, как в wlan0. Например дома есть роутер с адресом 192.168.1.1 и сеть 192.168.1.0/24, то dhcp-range нужно указать в пределах этого пространства, а также, чтобы он не пересекался с пулом адресов, выдаваемых dhcp-сервером роутера. Мы пойдем путем по-проще и сами укажем другую подсеть.

Теперь отключим автозагрузку демонов:
Если используется Systemd:
sudo systemctl disable hostapd
sudo systemctl disable dnsmasq
Если используется Sysvinit:
sudo update-rc.d hostapd disable
sudo update-rc.d dnsmasq disable

Ко всему этому осталось только включать/отключать роутинг и добавлять/удалять правило из iptables (скрипт ниже)

sysctl net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

Для решения проблемы с PMTU (Веб браузеры связываются, но просто висят без пересылки данных и т.д.) разработчики iptables предусмотрели специальную опцию и для ее активации можно в терминале выполнить:
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtuИ можно попытаться сохранить: service iptables save (но возможно слетит после перезагрузки, поэтому я добавил эту команду в скрипт инициализации wifi-ap, чтобы не городить еще один скрипт в автозагрузке)

То есть делать это удобнее с помощью одного скрипта wifi-ap:

Если используется Systemd, то скрипт будет выглядеть следующим образом:
#!/bin/bash
#script to start/stop hostapd, dnsmasq, add/remove iptables rule

set -e
exec 3>&1
exec 2>&1 >> /tmp/wifi-ap

function print_help(){
    echo "Start/Stop Software Access Point"
    echo
    echo "Usage `basename $0` options..."
    echo "wifi-ap on to start Software AP"
    echo "wifi-ap off to stop Software AP"
    echo
    echo "log-file - /tmp/wifi-ap"
    echo
}
if [ $# = 0 ]; then
    print_help >&3
        exit 0
fi

if [ $1 = on ]; then
        systemctl stop network-manager
        ifconfig wlan0 192.168.2.1
        systemctl start dnsmasq
        sysctl net.ipv4.ip_forward=1
        iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
        iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
        systemctl start hostapd
        notify-send --expire-time=4000 "Software Access Point" "<b>start</b>"
    exit 0
fi

if [ $1 = off ]; then
        systemctl stop dnsmasq
        systemctl stop hostapd
        ifconfig wlan0 192.168.1.4
        sysctl net.ipv4.ip_forward=0
        iptables -D POSTROUTING -t nat -o ppp0 -j MASQUERADE
        systemctl start network-manager
        notify-send --expire-time=4000 "Software Access Point" "<b>stop</b>"
    exit 0
fi


Если используется Sysvinit, то скрипт будет выглядеть следующим образом:
#!/bin/bash
#script to start/stop hostapd, dnsmasq, add/remove iptables rule

set -e
exec 3>&1
exec 2>&1 >> /tmp/wifi-ap

function print_help(){
    echo "Start/Stop Software Access Point"
    echo
    echo "Usage `basename $0` options..."
    echo "wifi-ap on to start Software AP"
    echo "wifi-ap off to stop Software AP"
    echo
    echo "log-file - /tmp/wifi-ap"
    echo
}
if [ $# = 0 ]; then
    print_help >&3
        exit 0
fi

if [ $1 = on ]; then
        service network-manager stop
        ifconfig wlan0 192.168.2.1
        service dnsmasq start
        sysctl net.ipv4.ip_forward=1
        iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
        iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
        service hostapd start
        notify-send --expire-time=4000 "Software Access Point" "<b>start</b>"
    exit 0
fi

if [ $1 = off ]; then
        service dnsmasq stop
        service hostapd stop
        ifconfig wlan0 192.168.1.4
        sysctl net.ipv4.ip_forward=0
        iptables -D POSTROUTING -t nat -o ppp0 -j MASQUERADE
        service network-manager start
        notify-send --expire-time=4000 "Software Access Point" "<b>stop</b>"
    exit 0
fi

UPD:
В Network Manager версий 0.9.xx появилась неприятная особенность, он монопольно захватывает управление WiFi адаптером и не передает управление hostapd при этом устройства будут видеть ваш SSID, но не смогут подключаться к вашей Soft AP, поэтому пришлось добавить в скрипт остановку и последующий запуск NM после завершения использования Soft AP (это никак не сказывается на работе уже установленных соединений с помощью NM). Если ситуация изменится, то эти строки (systemctl stop network-manager/service network-manager stop и systemctl start network-manager/service network-manager start) можно будет удалить. Если данный вариант решения проблемы по какой-то причине вас не устраивает, то можно полностью отключить управление Network Manager'ом вашего Wi-Fi адаптера добавив либо его mac-адрес, либо наименование интерфейса в файл конфигурации: /etc/NetworkManager/NetworkManager.conf
[keyfile]
unmanaged-devices=mac:[mac address of interface to exclude]
unmanaged-devices=interface-name:wlan0
Пример: unmanaged-devices=mac:00:22:68:1c:59:b1;mac:00:1E:65:30:D1:C4;interface-name:wlan0

Перезапуск Network Manager в данной версии не требуется, конфигурация применяется сразу же после сохранения файла конфигурации, если у вас не так, то перезапустите NM командой:
sudo systemctl restart NetworkManager.service В последней версии NetworkManager (1.2.0 и выше) можно указывать параметрами командной строки устройства которыми NM не должен управлять, таким образом если у вас указанная версия, то можно вместо отключения NM добавить в скрипт:
nmcli dev set wlan0 managed noИ затем:
nmcli dev set wlan0 managed yes

Сохраняем скрипт в текстовом редакторе и разрешаем выполнение: chmod +x wifi-ap
Чтобы каждый раз не указывать местоположение данного скрипта, а запускать командой из терминала, его можно поместить в /usr/bin/ или в /usr/local/bin/

Скрипт принимает 2 параметра, on и off. Вы легко можете подкорректировать его под себя и, если нужно, заменить интерфейс ppp0 на eth0 (или другой, на Ваше усмотрение).

PS. Команду запускать с Root правами, т.е. через sudo:
sudo wifi-ap on
sudo wifi-ap off

Приятного использования.

Внимание: обнаружен баг из-за которого при запуске скрипта не запускается dnsmasq и выводится сообщение: See 'systemctl status dnsmasq.service' and 'journalctl -xn' for details.
Это связано с обновлением пакета dns-root-data, из-за которого в Debian Jessie перестает нормально работать dnsmasq. Решение такое, либо удалить пакет dns-root-data, либо обновить этот пакет из репозитория sid.

Возможно вас заинтересует статья о реализации криптостойкого шифрования WiFi с помощью hostapd.
« Последнее редактирование: 06 Август 2018, 12:27:21 от CoolAller »
 
Пользователи, которые поблагодарили этот пост: ulyssesd

Оффлайн vic5710

  • Сообщений: 426
  • не умножайте сущностей сверх необходимых
CoolAller, попробовал ваш мануал-УМВР. респект и уважуха
 

Оффлайн Malaheenee

  • Сообщений: 2565
  • Учтите, мы можем дать и вредный совет.
При всем уважении к автору - копипаст. Не рассмотрены: автоматический выбор канала (hostapd); блокировка рекламы (dnsmasq); закрытие доступа к сети извне (iptables); интеграция в эту цепочку прокси-сервера (squid); удаленный контроль (ssh); поднятие AP кнопкой включения wi-fi (acpid).. При этом чтобы за этой машиной мог работать пользователь.
[ot]Ничего личного, просто надоели бесконечные мега-инструкции, передираемые авторами без раздумий и чтения официальной документации.[/ot]
Debian Sid: XFCE x 1, openbox x 2.
Все мы где-то, когда-то и в чем-то были новичками.
 

Оффлайн CoolAller

  • Topic Author
  • Сообщений: 805
Malaheenee, ничего личного, дайте ссылку на ресурс откуда копипаст, только сначала проверьте ее работоспособность и я уберу эту. Пользователь вполне может работать за машиной по этой инструкции, мне неизвестны ваши затруднения. Вы так же можете дописать что-то стоящее к настоящей инструкции, если посчитаете, что это изменит пользовательский опыт в лучшую сторону.
PS. Помоему блокировка рекламы; интеграция в эту цепочку прокси-сервера и т.д. в данную тему "Создание Soft AP" вообще не входит. Удачного вам дня  :)
« Последнее редактирование: 24 Ноябрь 2015, 14:01:02 от CoolAller »
 
Пользователи, которые поблагодарили этот пост: oermolaev

Оффлайн Palzuncoff

  • Сообщений: 56
все получилось, сетка поднялась, но к ней невозможно подключится, пишет неверный пароль, пароли проверял.
 

Оффлайн CoolAller

  • Topic Author
  • Сообщений: 805
Palzuncoff, значит что-то не сделали, смотрите внимательнее, только что сам проверил, все работает. Если вы копировали раньше эту инструкцию, то я ее обновил и внес коментарии, сейчас она находится в актуальном состоянии. Читайте UPD.
« Последнее редактирование: 27 Апрель 2016, 09:02:19 от CoolAller »
 

Оффлайн endru

  • Сообщений: 1574
  • Новосибирск
  • Jabber: endru@jabber.ru
Этот раздел для обсуждения темы, а не для решения проблем.
Palzuncoff, при проблемах, создавайте отдельную тему.

Оффлайн Mit

  • Сообщений: 40
привет. взял дешевый адаптер на чипе реалтек 8187. можно с ним организовать точку доступа??
 

Оффлайн CoolAller

  • Topic Author
  • Сообщений: 805
Mit, из сводной таблицы по wireless chipsets видим: AP/Master mode rtl8187 - not working yet. Там вроде две модификации с буквой B и без нее. По-моему просто rtl8187 не поддерживает этот режим в принципе, по крайней мере там написано: AP (Master) mode: unsupported. Если же у вас другая модификация (в подробности не вдавался) и вы уверены, что Master mode все же поддерживается, то можно попробовать скомпилировать драйвера с сайта производителя. Если нужен донгл с поддержкой Master Mode, то лучше озадачится этим вопросом перед покупкой и выбирать или Ralink или Atheros предварительно изучив спецификации, поддержка чипсетов Realtek в linux оставляет желать лучшего.


« Последнее редактирование: 29 Декабрь 2016, 19:28:28 от CoolAller »
 

Оффлайн CoolAller

  • Topic Author
  • Сообщений: 805
Может кому поможет, недавно настраивал Soft AP на донгле с чипом Realtec - RTL8188, использовал взятый с github патченый hostapd RTL8188-hostapd-master и драйвер rtl8188eu-master.
« Последнее редактирование: 17 Август 2017, 21:23:32 от CoolAller »
 

Теги: