LINUX.ORG.RU
ФорумAdmin

Не создается wifi сеть (проблема с hostapd)

 , , , ,


1

1

Делаю все по инструкции - http://habrahabr.ru/post/122876/. Запускаюсь и получаю:

$ sudo sh start3.sh
net.ipv4.ip_forward = 1
Configuration file: /etc/hostapd.conf
nl80211: Could not configure driver mode
nl80211: deinit ifname=wlp2s0 disabled_11b_rates=0
nl80211 driver initialization failed.
wlp2s0: interface state UNINITIALIZED->DISABLED
wlp2s0: AP-DISABLED 
hostapd_free_hapd_data: Interface wlp2s0 wasn't started
net.ipv4.ip_forward = 0
$ 

Если перед этим отключить network-manager, то вайфай-точка определяется андройдом, но без интернета:

$ sudo service network-manager stop
$ sudo sh start3.sh
net.ipv4.ip_forward = 1
Configuration file: /etc/hostapd.conf
Using interface wlp2s0 with hwaddr d0:53:49:8d:3f:91 and ssid "laptop-wifi"
wlp2s0: interface state UNINITIALIZED->ENABLED
wlp2s0: AP-ENABLED 

Что не так?

$ sudo cat /etc/hostapd.conf
# Define interface
interface=wlp2s0
# Select driver
driver=nl80211
# Set access point name
ssid=laptop-wifi
# Set access point harware mode to 802.11g
hw_mode=g
# Set WIFI channel (can be easily changed)
channel=6
# Enable WPA2 only (1 for WPA, 2 for WPA2, 3 for WPA + WPA2)
wpa=2
wpa_passphrase=wifipass
$ sudo cat /etc/dnsmasq.conf 
# Bind to only one interface
bind-interfaces
# Choose interface for binding
interface=wlp2s0
# Specify range of IP addresses for DHCP leasses
dhcp-range=192.168.150.2,192.168.150.10
$ sudo cat start3.sh
#!/bin/bash

# Start
# Configure IP address for WLAN
sudo ifconfig wlp2s0 192.168.150.1
# Start DHCP/DNS server
sudo service dnsmasq restart
# Enable routing
sudo sysctl net.ipv4.ip_forward=1
# Enable NAT
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# Run access point daemon
sudo hostapd /etc/hostapd.conf

# Stop
# Disable NAT
sudo iptables -D POSTROUTING -t nat -o eth0 -j MASQUERADE
# Disable routing
sudo sysctl net.ipv4.ip_forward=0
# Disable DHCP/DNS server
sudo service dnsmasq stop
$ 
$ ifconfig 
enp1s0f1  Link encap:Ethernet  HWaddr f0:76:1c:7e:21:28  
          inet addr:10.78.89.21  Bcast:10.78.95.255  Mask:255.255.248.0
          inet6 addr: fe80::f276:1cff:fe7e:2128/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1642159 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2053612 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:756152822 (756.1 MB)  TX bytes:2552790282 (2.5 GB)

lo        Link encap:Локальная петля (Loopback)  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:18762 errors:0 dropped:0 overruns:0 frame:0
          TX packets:18762 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1565942 (1.5 MB)  TX bytes:1565942 (1.5 MB)

wlp2s0    Link encap:Ethernet  HWaddr d0:53:49:8d:3f:91  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:164816 errors:0 dropped:4 overruns:0 frame:0
          TX packets:143585 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:189540522 (189.5 MB)  TX bytes:22717249 (22.7 MB)

$ 

Перемещено Klymedy из linux-org-ru

Для работы с wifi-интерфейсом напрямую и пользованием NetworkManager, последнему нужно указать игнорирование виртуального интерфейса в режиме AP. Если же тебе нужна вафля только в режиме точки доступа, то NetworkManager лучше отключить вовсе, он любит лезть куда не надо и при этом грузить проц не пойми чем.

В общем случае, точка доступа - это вай-фай интерфейс в режиме Access Point Infrastructure, dhcp-сервер на этот интерфейсе и правильно настроенный фаерволл для доступа в интернет клиентами. Собственно твой андроид смог подключиться к точке доступа, но не получил IP-адрес. Это произошло из-за того, что на твоём вай-фай интерфейсе не был назначен адрес 192.168.0.1 (который и будет шлюзом для клиентов) и не выдаются параметры dns/gateway в dhcp-ответе сервера (не помню, может dnsmasq их и сам должен подхватывать, но это вряд ли). Плюс рекомендую посмотреть iptables -t filter -L FORWARD на предмет policy, не стоит ли там DROP/REJECT, должно быть ACCEPT или правила с ACCEPT для клиентов.

nickleiten ★★★ ()
Последнее исправление: nickleiten (всего исправлений: 1)

немного разобрался, но проблема осталась

понял, почему у меня не включалась раздача интернета. В скрипте был неправильно указан интерфейс (остался eth0, хотя тут он enp1s0f1). Сейчас интернет раздается, все ок. Но для этого я также вынужден отключать nm через sudo service network-manager stop. Прописал sudo service network-manager stop в начало скрипта, и sudo service network-manager start в конец. NM выключается, но не включается. Я думаю, что проблема в том, что выключаю я его некорректно, через ctrl+c. А как сделать по другому?

Вот что у меня сейчас в скрипте:

#!/bin/bash
# Start
sudo service network-manager stop
# Configure IP address for WLAN
sudo ifconfig wlp2s0 192.168.150.1
# Start DHCP/DNS server
sudo service dnsmasq restart
# Enable routing
sudo sysctl net.ipv4.ip_forward=1
# Enable NAT
sudo iptables -t nat -A POSTROUTING -o enp1s0f1 -j MASQUERADE
# Run access point daemon
sudo hostapd /etc/hostapd.conf

# Stop
# Disable NAT
sudo iptables -D POSTROUTING -t nat -o eth0 -j MASQUERADE
# Disable routing
sudo sysctl net.ipv4.ip_forward=0
# Disable DHCP/DNS server
sudo service dnsmasq stop
sudo service network-manager start
А вот пример выполнения:
$ sudo sh start5.sh 
net.ipv4.ip_forward = 1
Configuration file: /etc/hostapd.conf
Failed to update rate sets in kernel module
Using interface wlp2s0 with hwaddr d0:53:49:8d:3f:91 and ssid 'laptop-wifi'
wlp2s0: STA 4c:0b:3a:cb:c3:91 IEEE 802.11: authenticated
wlp2s0: STA 4c:0b:3a:cb:c3:91 IEEE 802.11: associated (aid 1)
wlp2s0: AP-STA-CONNECTED 4c:0b:3a:cb:c3:91
wlp2s0: STA 4c:0b:3a:cb:c3:91 RADIUS: starting accounting session 56879C37-00000000
wlp2s0: STA 4c:0b:3a:cb:c3:91 WPA: pairwise key handshake completed (RSN)
wlp2s0: AP-STA-DISCONNECTED 4c:0b:3a:cb:c3:91
^C$ 

Для работы с wifi-интерфейсом напрямую и пользованием NetworkManager, последнему нужно указать игнорирование виртуального интерфейса в режиме AP.

Как бы еще это сделать :) Вот что у меня в конфе nm:

$ sudo cat /etc/NetworkManager/NetworkManager.conf
[main]
plugins=ifupdown,keyfile,ofono
dns=dnsmasq

[ifupdown]
managed=false
$ 

Inideddi ()

sudo iptables -t nat -A POSTROUTING -o enp1s0f1 -j MASQUERADE

...

sudo iptables -D POSTROUTING -t nat -o eth0 -j MASQUERADE

Здесь вот с интерфейсами что-то напутано.

Я думаю, что проблема в том, что выключаю я его некорректно, через ctrl+c. А как сделать по другому?

Если я правильно понял вы скрипт по ctrl-c прибиваете. Запускайте hostapd с ключем -B, а сам скрипт измените на что-то типа:

start() {
 здесь запуск
}
stop() {
 здесь остановка
}
case "$1" in
 start)
  start
  ;;
 stop)
  stop
  ;;
esac
ну и выполнять скрипт с параметром start/stop

anc ★★★★★ ()
Ответ на: комментарий от anc

Здесь вот с интерфейсами что-то напутано.

точно, поправил.

Запускайте hostapd с ключем -B
добавил ключ в скрипте, но все равно кажется, что что-то я не то сделал)
$ sudo cat start7.sh 
#!/bin/bash
# 
Start () {
sudo service network-manager stop
# Configure IP address for WLAN
sudo ifconfig wlp2s0 192.168.150.1
# Start DHCP/DNS server
sudo service dnsmasq restart
# Enable routing
sudo sysctl net.ipv4.ip_forward=1
# Enable NAT
sudo iptables -t nat -A POSTROUTING -o enp1s0f1 -j MASQUERADE
# Run access point daemon
sudo hostapd -B /etc/hostapd.conf
}

# 
Stop () {
# Disable NAT
sudo iptables -D POSTROUTING -t nat -o enp1s0f1 -j MASQUERADE
# Disable routing
sudo sysctl net.ipv4.ip_forward=0
# Disable DHCP/DNS server
sudo service dnsmasq stop
sudo service network-manager start
}
case "$1" in
 start)
  start
  ;;
 stop)
  stop
  ;;
$ sudo sh start7.sh start 
start: не указано имя задачи
Try `start --help' for more information.
$ 

Inideddi ()
Ответ на: комментарий от Inideddi

1. в конце esac
2. Stop != stop тоже самое и со start.
Можите что бы не путать название параметра и имя функции переименовать функцию в my_start

my_start() {
 здесь запуск
}
my_stop() {
 здесь остановка
}
case "$1" in
 start)
  my_start
  ;;
 stop)
  my_stop
  ;;
esac

anc ★★★★★ ()
Последнее исправление: anc (всего исправлений: 1)
Ответ на: комментарий от anc

опять не хочет ((

$ sudo sh start8.sh start
net.ipv4.ip_forward = 1
Configuration file: /etc/hostapd.conf
Failed to update rate sets in kernel module
Using interface wlp2s0 with hwaddr d0:53:49:8d:3f:91 and ssid 'laptop-wifi'
random: Only 15/20 bytes of strong random data available from /dev/random
random: Not enough entropy pool available for secure operations
WPA: Not enough entropy in random pool for secure operations - update keys later when the first station connects
$ sudo cat start8.sh
#!/bin/bash
# 
my_start () {
sudo service network-manager stop
# Configure IP address for WLAN
sudo ifconfig wlp2s0 192.168.150.1
# Start DHCP/DNS server
sudo service dnsmasq restart
# Enable routing
sudo sysctl net.ipv4.ip_forward=1
# Enable NAT
sudo iptables -t nat -A POSTROUTING -o enp1s0f1 -j MASQUERADE
# Run access point daemon
sudo hostapd -B /etc/hostapd.conf
}

# 
my_stop () {
# Disable NAT
sudo iptables -D POSTROUTING -t nat -o enp1s0f1 -j MASQUERADE
# Disable routing
sudo sysctl net.ipv4.ip_forward=0
# Disable DHCP/DNS server
sudo service dnsmasq stop
sudo killall hostapd
sudo service network-manager start

}
case "$1" in
 start)
  my_start
  ;;
 stop)
  my_stop
  ;;
esac
$

Inideddi ()
Ответ на: комментарий от Inideddi

Вот это:

 random: Only 15/20 bytes of strong random data available from /dev/random
random: Not enough entropy pool available for secure operations
WPA: Not enough entropy in random pool for secure operations - update keys later when the first station connects 
намекает. Сорри, мне для протестить нэма машин под рукой. Поищите в инете есть инфа по таким ошибкам для hostapd.

anc ★★★★★ ()
Ответ на: комментарий от nickleiten

нет, не помогает (( дописал, вот что происходит, если запускаю скрипт со включенным NetworkManager:

$ sudo sh start3.sh
net.ipv4.ip_forward = 1
Configuration file: /etc/hostapd.conf
Could not set interface wlp2s0 flags: Name not unique on network
nl80211 driver initialization failed.
iptables: No chain/target/match by that name.
net.ipv4.ip_forward = 0
$ 
$ sudo cat /etc/NetworkManager/NetworkManager.conf
[main]
plugins=ifupdown,keyfile,ofono
dns=dnsmasq

[ifupdown]
managed=false

[keyfile]
unmanaged-devices=interface-name:wlp2s0
$ 
$ sudo cat start3.sh
#!/bin/bash

# Start
# Configure IP address for WLAN
sudo ifconfig wlp2s0 192.168.150.1
# Start DHCP/DNS server
sudo service dnsmasq restart
# Enable routing
sudo sysctl net.ipv4.ip_forward=1
# Enable NAT
sudo iptables -t nat -A POSTROUTING -o enp1s0f1 -j MASQUERADE
# Run access point daemon
sudo hostapd /etc/hostapd.conf

# Stop
# Disable NAT
sudo iptables -D POSTROUTING -t nat -o eth0 -j MASQUERADE
# Disable routing
sudo sysctl net.ipv4.ip_forward=0
# Disable DHCP/DNS server
sudo service dnsmasq stop
$ 

Inideddi ()
Ответ на: комментарий от Inideddi

Could not set interface wlp2s0 flags: Name not unique on network

Эта ошибка возникает при одинаковых мак-адресах на разных виртуальных интерфейсах. Попробуйте в конфигурационном файле /etc/hostapd.conf добавить параметр:

bssid=00:11:22:33:44:55
Естественно мак-адрес подставье свой и в последнем или предпоследнем байте увеличьте на единицу значение.

nickleiten ★★★ ()
Ответ на: комментарий от nickleiten

то же самое получается (

$ sudo ifconfig -a
enp1s0f1  Link encap:Ethernet  HWaddr f0:76:1c:7e:21:28  
          inet addr:10.78.89.21  Bcast:10.78.95.255  Mask:255.255.248.0
          inet6 addr: fe80::f276:1cff:fe7e:2128/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:716798 errors:0 dropped:0 overruns:0 frame:0
          TX packets:421884 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:896236190 (896.2 MB)  TX bytes:61493565 (61.4 MB)

lo        Link encap:Локальная петля (Loopback)  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:7792 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7792 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:888900 (888.9 KB)  TX bytes:888900 (888.9 KB)

wlp2s0    Link encap:Ethernet  HWaddr d0:53:49:8d:3f:91  
          inet addr:192.168.150.1  Bcast:192.168.150.255  Mask:255.255.255.0
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:14955 errors:0 dropped:0 overruns:0 frame:0
          TX packets:22971 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1864052 (1.8 MB)  TX bytes:30056173 (30.0 MB)

$ 
$ sudo cat /etc/NetworkManager/NetworkManager.conf
[main]
plugins=ifupdown,keyfile,ofono
dns=dnsmasq

[ifupdown]
managed=false

[keyfile]
unmanaged-devices=interface-name:wlp2s0
bssid=d0:53:49:8d:3f:92
$ 
$ sudo sh start3.sh
net.ipv4.ip_forward = 1
Configuration file: /etc/hostapd.conf
Could not set interface wlp2s0 flags: Name not unique on network
nl80211 driver initialization failed.
iptables: No chain/target/match by that name.
net.ipv4.ip_forward = 0
$ 

Inideddi ()
Ответ на: комментарий от nickleiten

да, точно, моя ошибка. исправил, теперь конфликта нет, сеть видна, но подключиться к ней не удается.. пробовал удалять с телефона, вводить пароль заново - не помогает.

$ sudo sh start3.sh
net.ipv4.ip_forward = 1
Configuration file: /etc/hostapd.conf
Failed to update rate sets in kernel module
Using interface wlp2s0 with hwaddr d0:53:49:8d:3f:92 and ssid 'laptop-wifi'
recv: Network is down
$ sudo cat /etc/hostapd.conf 
# Define interface
interface=wlp2s0
# Select driver
driver=nl80211
# Set access point name
ssid=laptop-wifi
# Set access point harware mode to 802.11g
hw_mode=g
# Set WIFI channel (can be easily changed)
channel=6
# Enable WPA2 only (1 for WPA, 2 for WPA2, 3 for WPA + WPA2)
wpa=2
wpa_passphrase=wifipass
bssid=d0:53:49:8d:3f:92
$  

Inideddi ()
Ответ на: комментарий от Inideddi

Посмотрите dmesg на тему ошибки аутентификации клиента, если клиент нормально подключается и сам отключается - проблема в dnsmasq. Для примера, попробуйте изменить параметр dhcp-range в его конфиге:

dhcp-range=lan,192.168.150.2,192.168.150.10,255.255.255.0,12h

И добавьте туда же параметр:

dhcp-authoritative
Это позволит серверу выдавать нужные айпи-адреса, а не только те, которые запрашивает клиент.

nickleiten ★★★ ()
Ответ на: комментарий от nickleiten

dnsmasq поправил, но все равно не подключается. На телефоне действительно выается ошибка идетификации, после нескольких попыток подключиться

root@AspireE5571:~# sudo cat /etc/dnsmasq.conf 
# Bind to only one interface
bind-interfaces
# Choose interface for binding
interface=wlp2s0
# Specify range of IP addresses for DHCP leasses
# dhcp-range=192.168.150.2,192.168.150.10
dhcp-range=lan,192.168.150.2,192.168.150.10,255.255.255.0,12h
dhcp-authoritative
root@AspireE5571:~# 

Inideddi ()
Ответ на: комментарий от ZenitharChampion

Да, просто добавляешь строку с интерфейсами для игнорирования. Например,

[keyfile]
unmanaged-devices=interface-name:wlp2s0
unmanaged-devices=interface-name:tun0
unmanaged-devices=interface-name:ppp0

nickleiten ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.