WiFi Hotspot mit dem Linux NetworkManager erstellen

Einen WiFi Hotspot ohne hostapd und dnsmasq und ohne /etc/network/interfaces einrichten. Getestet mit Q4OS Linux Centaurus & Trinity Desktop auf Debian 10.7. Funktioniert auch mit Linux Mint 20.

Pakete installieren

apt update && apt install network-manager

Sind die Pakete hostapd oder dnsmasq installiert, deinstallieren. Oder diese Anleitung wird nicht funktionieren weil der NetworkManager das Paket dnsmasq-base benötigt und nicht dnsmasq, um DHCP- und DNS Services bei geteilter Internetverbindung zur Verfügung stellen zu können.

apt remove hostapd dnsmasq

Master Mode

Das Interface muss den Modus AP unterstützen.

nmcli -f WIFI-PROPERTIES device show wlan0
WIFI-PROPERTIES.WEP:                    ja
WIFI-PROPERTIES.WPA:                    ja
WIFI-PROPERTIES.WPA2:                   ja
WIFI-PROPERTIES.TKIP:                   ja
WIFI-PROPERTIES.CCMP:                   ja
WIFI-PROPERTIES.AP:                     ja
WIFI-PROPERTIES.ADHOC:                  ja
WIFI-PROPERTIES.2GHZ:                   ja
WIFI-PROPERTIES.5GHZ:                   nein
iw list | less
nmcli device status
DEVICE           TYPE      STATE            CONNECTION
eth0             ethernet  verbunden        LAN
wlan0            wifi      nicht verbunden  --
lo               loopback  nicht verwaltet  --
ifconfig
wlan0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 00:00:00:00:00:00  txqueuelen 1000  (Ethernet)
        RX packets 8465  bytes 1312953 (1.2 MiB)
        RX errors 0  dropped 39  overruns 0  frame 0
        TX packets 15953  bytes 7343867 (7.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
iwconfig
wlan0  IEEE 802.11  ESSID:off/any
          Mode:Managed  Access Point: Not-Associated   Tx-Power=20 dBm
          Retry short limit:7   RTS thr=2347 B   Fragment thr:off
          Encryption key:off
          Power Management:off
nmcli device show wlan0
GENERAL.DEVICE:                         wlan0
GENERAL.TYPE:                           wifi
GENERAL.HWADDR:                         00:00:00:00:00:00
GENERAL.MTU:                            1500
GENERAL.STATE:                          30 (nicht verbunden)
GENERAL.CONNECTION:                     --
GENERAL.CON-PATH:                       --
nmcli -f GENERAL device show wlan0
GENERAL.DEVICE:                         wlan0
GENERAL.TYPE:                           wifi
GENERAL.NM-TYPE:                        NMDeviceWifi
GENERAL.VENDOR:                         Edimax Technology Co., Ltd
GENERAL.PRODUCT:                        EW-7811Un 802.11n Wireless Adapter [Realtek RTL8188CUS]
GENERAL.DRIVER:                         rtl8192cu
GENERAL.DRIVER-VERSION:                 4.19.0-13-686-pae
GENERAL.FIRMWARE-VERSION:               N/A
GENERAL.HWADDR:                         00:00:00:00:00:00
GENERAL.MTU:                            1500
GENERAL.STATE:                          30 (nicht verbunden)
GENERAL.REASON:                         39 (Das Gerät wurde durch den Benutzer oder Client getrennt)
GENERAL.UDI:                            /sys/devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0/net/wlan0
GENERAL.IP-IFACE:                       --
GENERAL.IS-SOFTWARE:                    nein
GENERAL.NM-MANAGED:                     ja
GENERAL.AUTOCONNECT:                    ja
GENERAL.FIRMWARE-MISSING:               nein
GENERAL.NM-PLUGIN-MISSING:              nein
GENERAL.PHYS-PORT-ID:                   --
GENERAL.CONNECTION:                     --
GENERAL.CON-UUID:                       --
GENERAL.CON-PATH:                       --
GENERAL.METERED:                        unbekannt
nmcli general

NetworkManager

vi /etc/NetworkManager/NetworkManager.conf
[device]
wifi.scan-rand-mac-address=no

# Fehlermeldung "CTRL-EVENT-SCAN-FAILED ret=-95 retry=1" beheben
# match-device=driver:iwlwifi

[ifupdown]
managed=false

[main]
plugins=ifupdown,keyfile

[keyfile]
# Vom NetworkManger ausschliessen
# unmanaged-devices=mac:<hwaddr>
# unmanaged-devices=interface-name:<interface>

Falls in der Logdatei mit dem Befehl

tail -f /var/log/syslog | grep --color wlan0

diese Fehlermeldeung 1x pro Sekunde angezeigt wird:

CTRL-EVENT-SCAN-FAILED ret=-95 retry=1

in der NetworkManager.conf bei [device] die Zeile

match-device=driver:iwlwifi

einfügen.

Wenn managed=true, dann wird /etc/network/interfaces vom NetworkManager unterstützt was zu Konflikten führen kann.

NetworkManager neu starten

service network-manager restart

Status

service network-manager status

Verbindungen

Der NetworkManager speichert die Konfigurationsdateien der Verbindungen in

ls -al /etc/NetworkManager/system-connections

Verbindungen anzeigen

nmcli connection show

Siehe auch: nmcli Schummelzettel

Funknetzwerk erstellen

Zuerst nachsehen auf welchen Kanälen die anderen Hospots senden und einen freien Kanal für die Konfiguration auswählen. Wegen der Kanalüberlappung Kanal 1, 5, 9 oder 13 bevorzugen.

Kanäle und Frequenzen

iwlist wlan0 channel
wlan0  13 channels in total; available frequencies :
          Channel 01 : 2.412 GHz
          Channel 02 : 2.417 GHz
          Channel 03 : 2.422 GHz
          Channel 04 : 2.427 GHz
          Channel 05 : 2.432 GHz
          Channel 06 : 2.437 GHz
          Channel 07 : 2.442 GHz
          Channel 08 : 2.447 GHz
          Channel 09 : 2.452 GHz
          Channel 10 : 2.457 GHz
          Channel 11 : 2.462 GHz
          Channel 12 : 2.467 GHz
          Channel 13 : 2.472 GHz
nmcli device wifi list
N-USE  SSID              MODE   CHAN  RATE        SIGNAL  BARS  SECURITY
        HH00VM_0000_0.5G  Infra  1     270 Mbit/s  74      ▂▄▆_  WPA2
        A1-000000         Infra  1     195 Mbit/s  32      ▂▄__  WPA2
*       UPC Wi-Free       Infra  11    130 Mbit/s  30      ▂___  WPA2 802.1X
        UPC Wi-Free       Infra  11    130 Mbit/s  22      ▂___  WPA2 802.1X
        UPC-guest0000000  Infra  11    130 Mbit/s  20      ▂___  WPA1 WPA2
        UPC0000000        Infra  11    130 Mbit/s  20      ▂___  WPA1 WPA2
        --                Infra  100   405 Mbit/s  20      ▂___  WPA1 WPA2
systemctl restart wpa_supplicant
wpa_cli -iwlan0 scan_results
bssid / frequency / signal level / flags / ssid
00:00:00:00:00:00	2437	-64	[WPA2-PSK-CCMP][WPS][ESS]	A1-000000
00:00:00:00:00:00	2412	-66	[WPA2-PSK-CCMP+TKIP][WPS][ESS]	HH00VM_0000_2.4G
00:00:00:00:00:00	5300	-79	[WPA2-PSK-CCMP][WPS][ESS]	A1-000000
00:00:00:00:00:00	5500	-79	[WPA-PSK-TKIP][WPA2-PSK-CCMP][ESS]	\x00\x00\x00\x00\x00\x00
00:00:00:00:00:00	2462	-78	[WPA2-EAP-CCMP+TKIP][ESS]	UPC Wi-Free

Entweder auf der Kommandozeile das Funknetzwerk erstellen mit

# nmcli connection down Hotspot
# nmcli connection delete Hotspot
nmcli device wifi hotspot ifname wlan0 con-name Hotspot ssid Hotspot band bg channel 3 password 'GeheimesPasswort'
nmcli connection modify Hotspot ipv4.method shared ipv4.addresses 192.168.167.1/24 ipv4.gateway 192.168.167.1
nmcli connection up Hotspot
nmcli connection show --active

und fertig.

Oder im NetworkManager den Menüpunkt Verbindungen bearbeiten… aufrufen

und ein neues Funknetzwerk erstellen

Im Reiter Funknetzwerk die SSID vergeben, Modus=Hotspot

Im Reiter Sicherheit des Funknetzwerkes das WiFi Passwort eingeben, Sicherheit=WPA & WPA2 Personal

Im Reiter IPv4-Einstellungen als Methode Gemeinsam mit anderen Rechnern auswählen und optional das Netzwerk und Gateway hinzufügen. Wenn frei gelassen, wird das Netz 10.42.0.1/24 mit Gateway 10.42.0.1 zugewiesen.

Speichern und fertig. Das Funknetzwerk ist nun erstellt aber es sind noch Anpassungen in der Konfigurationsdatei der Verbindung notwendig, insbesondere im Abschnitt [wifi-security].

Verbindung bearbeiten

vi /etc/NetworkManager/system-connections/Hotspot.nmconnection
[connection]
id=Hotspot
uuid=00000000-0000-0000-0000-000000000000
type=wifi
autoconnect=true
permissions=
timestamp=0000000000

[wifi]
band=bg
channel=3
hidden=false
mac-address=01:02:03:04:05:06
mac-address-blacklist=
mode=ap
seen-bssids=00:00:00:00:00:00;
ssid=Hotspot

[wifi-security]
group=ccmp;
key-mgmt=wpa-psk
pairwise=ccmp;
proto=rsn;
psk=MeinGeheimesHotspotPasswort

[ipv4]
address1=192.168.167.1/24,192.168.167.1
dns-search=
method=shared

[ipv6]
addr-gen-mode=stable-privacy
dns-search=
ip6-privacy=0
method=shared

Fertig

NetworkManager neu starten

service network-manager restart

und die Konfigurationsdatei der Verbindung sichern.

cd /etc/NetworkManager/system-connections
cp Hotspot.nmconnection Hotspot.nmconnection.wlan0

Dies für den Fall dass die NetworkManager GUI die Konfiguration fälschlicherweise überschreibt und die Verbindung nicht mehr funktioniert.

WLAN Passwort anzeigen

nmcli dev wifi show-password

Test

Die Schnittstelle hat jetzt eine IP-Adresse

ifconfig
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.167.1  netmask 255.255.255.0  broadcast 192.168.167.255
        inet6 fe80::0000:0000:0000:0000  prefixlen 64  scopeid 0x20<link>
        ether 00:00:00:00:00:00  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 12  overruns 0  frame 0
        TX packets 387  bytes 76059 (74.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ist im Master Mode

iwconfig
wlan0  IEEE 802.11  Mode:Master  Tx-Power=20 dBm
          Retry short limit:7   RTS thr=2347 B   Fragment thr:off
          Power Management:off

und ist verbunden

nmcli device status
DEVICE           TYPE      STATE            CONNECTION
eth0             ethernet  verbunden        LAN
wlan0            wifi      verbunden        Hotspot
lo               loopback  nicht verwaltet  --

Das Hotspot-Netzwerk ist vollständig konfiguriert

nmcli device show wlan0
GENERAL.DEVICE:                         wlan0
GENERAL.TYPE:                           wifi
GENERAL.HWADDR:                         00:00:00:00:00:00
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (verbunden)
GENERAL.CONNECTION:                     Hotspot
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/2
IP4.ADDRESS[1]:                         192.168.167.1/24
IP4.GATEWAY:                            192.168.167.1
IP4.ROUTE[1]:                           dst = 192.168.167.0/24, nh = 0.0.0.0, mt = 600
IP4.ROUTE[2]:                           dst = 0.0.0.0/0, nh = 192.168.167.1, mt = 600
IP6.ADDRESS[1]:                         fe80::0000:0000:0000:0000/64
IP6.GATEWAY:                            --
IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 600
IP6.ROUTE[2]:                           dst = ff00::/8, nh = ::, mt = 256, table=255
nmcli -f GENERAL device show wlan0
GENERAL.DEVICE:                         wlan0
GENERAL.TYPE:                           wifi
GENERAL.NM-TYPE:                        NMDeviceWifi
GENERAL.VENDOR:                         Edimax Technology Co., Ltd
GENERAL.PRODUCT:                        EW-7811Un 802.11n Wireless Adapter [Realtek RTL8188CUS]
GENERAL.DRIVER:                         rtl8192cu
GENERAL.DRIVER-VERSION:                 4.19.0-13-686-pae
GENERAL.FIRMWARE-VERSION:               N/A
GENERAL.HWADDR:                         00:00:00:00:00:00
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (verbunden)
GENERAL.REASON:                         0 (Kein Grund angegeben)
GENERAL.UDI:                            /sys/devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0/net/wlan0
GENERAL.IP-IFACE:                       wlan0
GENERAL.IS-SOFTWARE:                    nein
GENERAL.NM-MANAGED:                     ja
GENERAL.AUTOCONNECT:                    ja
GENERAL.FIRMWARE-MISSING:               nein
GENERAL.NM-PLUGIN-MISSING:              nein
GENERAL.PHYS-PORT-ID:                   --
GENERAL.CONNECTION:                     Hotspot
GENERAL.CON-UUID:                       00000000-0000-0000-0000-000000000000
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/4
GENERAL.METERED:                        nein (geraten)

wird geroutet

route | grep --color wlan0
default         192.168.167.1   0.0.0.0         UG    600    0        0 wlan0
192.168.167.0   0.0.0.0         255.255.255.0   U     600    0        0 wlan0

ist in der Firewall

iptables -L | grep --color 192\.168\.167\.0
ACCEPT     all  --  anywhere             192.168.167.0/24     state RELATED,ESTABLISHED
ACCEPT     all  --  192.168.167.0/24     anywhere

Die Verbindung ist aktiv

nmcli connection show --active
NAME          UUID                                  TYPE      DEVICE
LAN           00000000-0000-0000-0000-000000000000  ethernet  enp4s0
Hotspot       00000000-0000-0000-0000-000000000000  wifi      wlan0
UPC Wi-Free   00000000-0000-0000-0000-000000000000  wifi      wlp3s0

Der Hotspot ist betriebsbereit und wird nach einem Neustart automatisch aktiviert.

iw dev
phy#2
        Interface wlan0
                ifindex 5
                wdev 0x200000001
                addr 00:00:00:00:00:00
                ssid Hotspot
                type AP
                channel 3 (2462 MHz), width: 20 MHz, center1: 2412 MHz
                txpower 20.00 dBm
nmcli device wifi list
IN-USE  SSID              MODE   CHAN  RATE        SIGNAL  BARS  SECURITY
        Hotspot           Infra  3     65 Mbit/s   100     ▂▄▆█  WPA2
        UPC-guest0000000  Infra  1     130 Mbit/s  37      ▂▄__  WPA1 WPA2
*       UPC Wi-Free       Infra  1     130 Mbit/s  36      ▂▄__  WPA2 802.1X
        A1-000000         Infra  6     195 Mbit/s  35      ▂▄__  WPA2
        UPC-guest0000001  Infra  44    405 Mbit/s  25      ▂___  WPA1 WPA2
        UPC0000000        Infra  11    130 Mbit/s  22      ▂___  WPA1 WPA2

IN-USE  SSID     MODE   CHAN  RATE      SIGNAL  BARS  SECURITY
*       Hotspot  Infra  3     0 Mbit/s  0       ____  WPA2

Debug

iw event

Verbindungsaufbau mit dem Hotspot

wlan0 (phy #2): mgmt TX status (cookie 60): acked
wlan0 (phy #2): mgmt TX status (cookie 61): acked
wlan0: new station 00:00:00:00:00:00
wlan0 (phy #2): mgmt TX status (cookie 62): acked
wlan0 (phy #2): mgmt TX status (cookie 63): acked

Verbindungsabbau

wlan0: del station 00:00:00:00:00:00
wlan0 (phy #2): mgmt TX status (cookie d7): acked

Siehe auch