ubuntuusers.de

WLAN Router

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist mit keiner aktuell unterstützten Ubuntu-Version getestet! Bitte teste diesen Artikel für eine Ubuntu-Version, welche aktuell unterstützt wird. Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Wiki/Icons/Oxygen/network-wireless.png Um einen Ubuntu-Rechner als WLAN-Access-Point und Router zu verwenden, wird nachfolgend die Konfiguration aufbauend auf den Artikeln Router, Dnsmasq und der Konfigurationsdatei /etc/network/interfaces beschrieben. Die Konfiguration kann sowohl auf Desktop-Systemen mit grafischer Oberfläche als auch mit einer Serverversion vorgenommen werden.

Wer eine einfache und schnelle Lösung für zwischendurch sucht, um z.B. ein Android-Smartphone über WLAN mit dem Internet zu verbinden,

Ab Ubuntu 14.04 ist dies auch über den Network-Manager und mit WPA(2)-Verschlüsselung möglich. Es wird allerdings ein Ad-Hoc-Netzwerk erzeugt. Entsprechende Konfigurationsmöglichkeiten und Hinweise sind im Artikel Internetverbindungsfreigabe beschrieben.

Voraussetzungen

Hardware

Die WLAN-Hardware und der verfügbare Treiber müssen bestimmte Voraussetzungen erfüllen, um den benötigten Access-Point im Master-Modus überhaupt aktivieren zu können. Dazu zählen beispielsweise WLAN-Karten, die durch den Treiber hostap (für Prism2/2.5/3 Chipsatz basierende Karten) unterstützt werden oder solche, die mit dem aktuellen mac80211/nl80211-Subsystem arbeiten.

Eine Übersicht geeigneter Systemtreiber und WLAN-Karten findet man auf KernelWiki/Wireless 🇬🇧 und entsprechend in WLAN/Karten.

Abfrage dazu mittels iw:

iw list 

Erfolgt eine lange Ausgabe mit den Eigenschaften der erkannten WLAN-Karte, dann wird diese durch hostapd unterstützt. Wichtig sind noch die Angaben AP und AP/VLAN unter Supported interface modes: bei der Ausgabe.

...
	Supported interface modes:
		 * IBSS
		 * managed
		 * AP
		 * AP/VLAN
		 * WDS
		 * monitor
		 * mesh point
	software interface modes (can always be added):
		 * AP/VLAN
		 * monitor
...

Wird stattdessen folgendes angezeigt, so unterstützt der verwendete Treiber hostapd nicht.

nl80211 not found.

Auch wenn eine entsprechende Unterstützung angezeigt wird, kann es bei bestimmten Chipsätzen, insbesondere von Realtek, Probleme geben, da der Treiber oder die Hardware selbst das bei dieser Konfiguration erforderliche MAC- und Packet-Forwarding nicht unterstützt. Der Accesspoint selbst wird zwar initialisiert, es findet jedoch keinerlei Datenübertragung statt. In der oben verlinkten Tabelle auf linuxwireless.org ist daher in der entsprechenden Spalte der Tabelle ein Fragezeichen eingetragen.

Aktuelle USB WLAN-Sticks mit Atheros-Chipsätzen, die z.B. mit den Treibern ath9k_htc 🇬🇧 oder carl9170 🇬🇧 arbeiten, erfordern eine Kernelversion 3.x und hostapd Version 0.7.3. oder höher, damit der Access-Point erstellt werden kann.

Software

Zusätzlich benötigt werden [4]:

  • hostapd (universe, der IEEE 802.11 AP/IEEE 802.1X Authenticator. Erzeugt den WLAN Access-Point.)

  • dnsmasq (universe, ein DHCP- und DNS-Cache, siehe auch Dnsmasq und Router)

Befehl zum Installieren der Pakete:

sudo apt-get install hostapd dnsmasq 

Oder mit apturl installieren, Link: apt://hostapd,dnsmasq

Konfiguration

Bei Desktop-Systemen mit grafischer Oberfläche muss die Netzwerkverwaltung über den Network-Manager (NM) deaktiviert werden. Über einen Rechtsklick rechte Maustaste auf das NM-Symbol im Panel ist die Verwaltung der LAN- und WLAN-Verbindungen zu deaktivieren, um die Konfiguration über die /etc/network/interfaces zu ermöglichen. Der Manager sollte ansonsten vollständig deinstalliert werden, um Konflikte zu vermeiden.

Die Konfigurationsdateien können mit einem Editor [1] und Root-Rechten [3] bearbeitet werden. Hier im Beispiel wird die Internetverbindung über LAN (eth0) aufgebaut, die WLAN-Schnittstelle hat die Bezeichnung wlan0.

hostapd

Hinweis:

Ab Ubuntu 10.04 muss die Datei /etc/init.d/hostapd nicht mehr umgeschrieben werden. Der Dienst (Daemon) muss nur noch in /etc/default/hostapd aktiviert werden.

Auch die Datei /etc/hostapd.conf muss nicht mehr manuell anlegt werden. Die Konfigurationsdateien liegen alle unter /etc/hostapd/.

Nach der Installation aller erforderlichen Programmpakete muss zunächst die Datei /etc/init.d/hostapd bearbeitet werden. Nur zwei Einträge sind an beliebiger Stelle einzufügen:

DAEMON_CONF="/etc/hostapd.conf"   # Verweis auf die Konfigurationsdatei
RUN_DAEMON=yes                    # aktiviert hostapd bei Systemstart
...

hostapd bietet eine Vielzahl an Konfigurationsmöglichkeiten an, auf die hier im Detail nicht eingegangen werden kann. Eine komplette Beschreibung findet man in der Dokumentation unter /usr/share/doc/hostapd/examples/hostapd.conf.gz.

In der Beispielkonfiguration wird eine sichere WPA2-AES-Verschlüsselung verwendet. WEP, WPA1-TKIP oder ein gemischter Modus WPA1/2 sind ebenfalls möglich. WEP ist veraltet, unsicher und sollte nicht mehr verwendet werden. WPA1-TKIP und gemischter Modus sind nur bedingt zu empfehlen. Nur WPA2-AES bietet eine sehr hohe Sicherheit.

Basiskonfiguration in der Datei /etc/hostapd.conf [1]:

# Schnittstelle und Treiber
interface=wlan0
driver=nl80211

# WLAN-Konfiguration
ssid=WLAN_AP-SSID
channel=1

# ESSID sichtbar
ignore_broadcast_ssid=0

# Ländereinstellungen
country_code=DE
ieee80211d=1

# Übertragungsmodus
hw_mode=g

# Optionale Einstellungen
# supported_rates=10 20 55 110 60 90 120 180 240 360 480 540

# Draft-N Modus aktivieren (optional, nur für entsprechende Karten)
# ieee80211n=1

# Übertragungsmodus / Bandbreite 40MHz
# ht_capab=[HT40+][SHORT-GI-40][DSSS_CCK-40]

# Beacons
beacon_int=100
dtim_period=2

# MAC-Authentifizierung
macaddr_acl=0

# max. Anzahl der Clients
max_num_sta=20

# Größe der Datenpakete/Begrenzung
rts_threshold=2347
fragm_threshold=2346

# hostapd Log Einstellungen
logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2

# temporäre Konfigurationsdateien
dump_file=/tmp/hostapd.dump
ctrl_interface=/var/run/hostapd
ctrl_interface_group=0

# Authentifizierungsoptionen 
auth_algs=3

# wmm-Funktionalität
wmm_enabled=0

# Verschlüsselung / hier rein WPA2
wpa=2
rsn_preauth=1
rsn_preauth_interfaces=wlan0
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP

# Schlüsselintervalle / Standardkonfiguration
wpa_group_rekey=600
wpa_ptk_rekey=600
wpa_gmk_rekey=86400

# Zugangsschlüssel (PSK) / hier in Klartext (ASCII)
wpa_passphrase=1234567890abcdefghijklmn

Das WPA-Kennwort muss mindestens 8 Zeichen und darf maximal 63 Zeichen (ASCII) bzw. 64 Zeichen (hex-Code) lang sein. Sonderzeichen wie beispielsweise deutsche Umlaute sind problematisch, da die Kompatibilität zwischen verschiedenen Betriebssystemen nicht mehr gewährleistet ist und sollten vermieden werden.

Folgende Zeichen sind in der SSID und im Zugangsschlüssel erlaubt:

a-z A-Z 0-9 ! " # $ % & '( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~

Hilfsmittel zur Erzeugung von Zugangsschlüsseln: WPA-Schlüssel und Schlüsselgenerator 🇩🇪.

Programmparameter

Mögliche Startparameter zeigt:

hostapd -h 

Konfiguration testen:

hostapd -dd /etc/hostapd.conf 

interfaces

Konfiguration der /etc/network/interfaces:

auto lo
iface lo inet loopback

# LAN / automatische Konfiguration über DHCP
auto eth0
iface eth0 inet dhcp

# WLAN mit statischer Konfiguration
auto wlan0
iface wlan0 inet static
address 192.168.3.1
netmask 255.255.255.0
broadcast 192.168.3.255

# vorhandene Regeln und Ketten zuerst löschen (Restart-Funktionalität)
up /sbin/iptables -F
 up /sbin/iptables -X
  up /sbin/iptables -t nat -F

# Maskieren der LAN-Schnittstelle, Port-Forwarding & Nat aktivieren
up iptables -A FORWARD -o eth0 -i wlan0 -s 192.168.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
 up iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
  up iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 
   up sysctl -w net.ipv4.ip_forward=1 

# hostapd und dnsmasq neu starten
   up /etc/init.d/hostapd restart
    up /etc/init.d/dnsmasq restart

Sollte die feste / statische IP für den Adapter wlan0 nicht vergeben werden, kann es hilfreich sein den Aufruf auto wlan0 aus der Konfiguration von /etc/network/interfaces zu entfernen.

dnsmasq

Basiskonfiguration der /etc/dnsmasq.conf:

sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf.bak     # Originaldatei vorab sichern 

Inhalt:

# DHCP-Server aktiv für Interface
interface=wlan0

# DHCP-Server nicht aktiv für Interface
no-dhcp-interface=eth0

# IP-Adressbereich / Lease-Time
dhcp-range=interface:wlan0,192.168.3.20,192.168.3.200,infinite

Feste IP für die angeschlossenen Clients vergeben (optional). Die Konfiguration erfolgt über die /etc/dnsmasq.conf

dhcp-host=<MAC-Adresse>,<Name>,<IP-Adresse>,infinite
dhcp-host=<MAC-Adresse>,<IP-Adresse>,infinite
dhcp-host=<Rechnername>,<IP-Adresse>,infinite

Funktionsprüfung

Nun startet man das Netzwerk neu, beobachte die Terminalausgabe und überprüft anschließend die Konfiguration:

sudo /etc/init.d/networking restart 

Fehlerfreie Ausgabe nach einem Neustart der Netzwerkkonfiguration:

# die automatisch konfigurierte LAN-Verbindung über DHCP ist hier weitestgehend ausgeblendet
...
DHCPREQUEST of 192.168.178.24 on eth0 to 255.255.255.255 port 67
DHCPACK of 192.168.178.24 from 192.168.178.1
bound to 192.168.178.24 -- renewal in 416998 seconds.
net.ipv4.ip_forward = 1
 * Stopping advanced IEEE 802.11 management hostapd
   ...done.
 * Starting advanced IEEE 802.11 management hostapd
   ...done.
 * Restarting DNS forwarder and DHCP server dnsmasq
   ...done.

Erfolgreiche Konfiguration der Schnittstelle für das hier gezeigte Beispiel:

ifconfig
iwconfig 

Ausgabe:

...
mon.wlan0 Link encap:UNSPEC  Hardware Adresse 00-01-36-0E-44-C4-30-30-00-00-00-00-00-00-00-00  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metrik:1
          RX packets:3935 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:1000 
          RX bytes:286055 (286.0 KB)  TX bytes:0 (0.0 B)

wlan0     Link encap:Ethernet  Hardware Adresse 00:01:36:0e:44:c4  
          inet Adresse:192.168.3.1  Bcast:192.168.3.255  Maske:255.255.255.0
          inet6-Adresse: fe80::201:36ff:fe0e:44c4/64 Gültigkeitsbereich:Verbindung
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metrik:1
          RX packets:1018 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1200 errors:0 dropped:0 overruns:0 carrier:0
          Kollisionen:0 Sendewarteschlangenlänge:1000 
          RX bytes:197229 (197.2 KB)  TX bytes:929548 (929.5 KB)

wlan0     IEEE 802.11bg  Mode:Master  Frequency:2.412 GHz  Tx-Power=20 dBm   
          Retry  long limit:7   RTS thr=2347 B   Fragment thr=2346 B   
          Power Management:off
          
mon.wlan0  IEEE 802.11bg  Mode:Monitor  Tx-Power=20 dBm   
          Retry  long limit:7   RTS thr=2347 B   Fragment thr=2346 B   
          Power Management:off

Die erzeugten Filtertabellen:

sudo iptables -t filter -n -L -v 

Ausgabe für die Kette "FORWARD"

Chain FORWARD (policy ACCEPT 12 packets, 912 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  wlan0  eth0    192.168.0.0/24       0.0.0.0/0           ctstate NEW 
    7   532 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           ctstate RELATED,ESTABLISHED
sudo iptables -t nat -n -L -v 

Ausgabe für die Kette "POSTROUTING":

Chain POSTROUTING (policy ACCEPT 180 packets, 17217 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   37  2734 MASQUERADE  all  --  *      eth0    0.0.0.0/0            0.0.0.0/0 

Nach erfolgreicher Konfiguration sollte der Access Point bei einem manuellen Scan auf den Clients angezeigt werden:

sudo iwlist scan 

Ausgabe:

Cell 01 - Address: 00:01:36:0E:44:C4
          ESSID:"WLAN_AP-SSID"
          Protocol:IEEE 802.11bg
          Mode:Master
          Frequency:2.412 GHz (Channel 1)
          Quality:87/100  Signal level:-40 dBm  Noise level:-96 dBm
          Encryption key:on
          Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s
                    9 Mb/s; 12 Mb/s; 18 Mb/s; 24 Mb/s; 36 Mb/s
                    48 Mb/s; 54 Mb/s
          Extra:bcn_int=100
          Extra:atim=0
          IE: IEEE 802.11i/WPA2 Version 1
          Group Cipher : CCMP
          Pairwise Ciphers (1) : CCMP
          Authentication Suites (1) : PSK

Nun kann ein Verbindungsversuch gestartet werden.

./Netzwerk02_Instant01.png

Instant-AP Skript

Über ein Bash-Skript kann ein WLAN Access-Point erzeugt und die vorhandene Internetverbindung über LAN durchgereicht werden. Dies ist bei Desktopsystemen sehr praktisch, da die benötigte Konfiguration über den Network-Manager beibehalten werden kann. Die Datei /etc/network/interfaces muss dazu nicht verändert werden. hostapd ist wie beschrieben einzurichten. So kann "zwischendurch" schnell mal ein WLAN-AP erstellt werden.

Das Skript verwendet dnsmasq-base zur Konfiguration. Manuelle Änderungen im Skript wie die verwendeten Schnittstellen und IP-Adressen werden für dnsmasq automatisch übernommen bzw. gemäß der getroffenen Einstellungen generiert.

Alle hier verwendeten Dienste wie hostapd werden durch das jeweilige Skript gestartet und auch wieder beendet. Werden diese Dienste nicht direkt bei Systemstart benötigt, so sollte man diese grundsätzlich deaktivieren, um ungewollte Systemfunktionen zu vermeiden.

Dienst bei Systemstart deaktivieren:

sudo update-rc.d hostapd disable  

Koexistenz mit dem Network-Manager

Eine zusätzliche vereinfachte Variante des Skripts ermöglicht es, die Basisverbindung über den Network-Manager aufzubauen. So kann die Ethernet- oder z.B. auch UMTS/GPRS Verbindungen weiterhin über den NM verwaltet werden. Nur WLAN wird durch das Skript gesteuert.

Variante für LAN auf WLAN

Dieses Skript bietet erweiterte Optionen für die Konfiguration speziell für Ethernet-Verbindungen und z.B. den Aufbau einer transparenten Netzwerkbrücke zwischen LAN und WLAN. Der Network-Manager wird allerdings deaktiviert, UMTS/GPRS Verbindungen können so nicht genutzt werden.

Dnsmasq kann ebenfalls verwendet und muss dann wie bereits beschrieben nachinstalliert werden. Die erforderliche Startoption lautet -D. Eine Beispielkonfiguration der /etc/dnsmasq.conf ist im Skript hinterlegt und braucht nur übernommen zu werden. Manuelle Änderungen im Skript wie die verwendeten Schnittstellen und IP-Adressen sind zu berücksichtigen.

Skript mit einem Editor [1] oder über Terminal anlegen und ausführbar machen [2]:

touch instant_AP.sh
chmod +x instant_AP.sh 

Folgenden Inhalt einfügen:

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
#!/bin/bash
## Instant WLAN Access-Point
## elektronenblitz63 ubuntuusers.de 2012
## published under GPL v3
##
## Version 1.6.0 vom 31.Januar 2012
# Bridged-Modus möglich 
# kleinere Fehler beseitigt
# Ausgaben verbessert
#
## Version 1.5.2 vom 12.November 2011
# voreingestellte freie DNS geändert
# Restart des Network-Managers erst bei -stop
# entferne iptables-Filter bei -stop
##
## Beispielkonfiguration der dnsmasq.conf
##
# # DHCP-Server dnsmasq aktiv für Interface
#
# interface=wlan0

## DHCP-Server dnsmasq nicht aktiv für Interface
#
# no-dhcp-interface=eth0

# # IP-Adressbereich / Lease-Time
# dhcp-range=192.168.3.20,192.168.3.25,infinite
#
## Ende Beispielkonfiguration dnsmasq.conf

## freie Variablen

## Konfiguration der Ethernet-Schnittstelle 
## LAN statisch (Standard ist automatisch über DHCP) / Startoption [-f]
laniface=eth0
laddress=192.168.178.6
lbroadcast=192.168.178.255
lnetmask=255.255.255.0
lgateway=192.168.178.1
lmacaddress=00:12:79:c0:49:ae
#
## Konfiguration der WLAN-Schnittstelle
## WLAN statisch
wlaniface=wlan0
waddress=192.168.3.1
wbroadcast=192.168.3.255
wnetmask=255.255.255.0
iptablemask=192.168.0.0/24

### manuelle DNS (drei DNS Einträge, 1xDomain und 1xSearch sind möglich)
# Beispiel
# dns="nameserver 192.168.178.1 nameserver 192.168.178.1 nameserver 192.168.178.1 domain fritz.box search fritz.box"
dns="nameserver 8.8.4.4 nameserver 8.8.8.8 nameserver 213.73.91.35" 

## dnsmasq-base Konfiguration
# DHCP-Adresspool umfasst x-Adressen
ipaddresses=10

# Basisadresse DHCP-Adresspool (WLAN-IP + X)
wlanbaseip=1

# Lease-Time
leasetime=infinite

## MAC-Adresse (optional) (Startoption [-m])
lmacaddress=00:12:79:c0:49:ae

## Pause vor LAN-Verbindungstest
pause=4

## Proxyserver (squid)
proxy="squid"

## Proxy Server auf Port x (squid 3128 / tinyproxy 3128 / polipo 8123)
proxyport=3128

## Bridge-Konfiguration
## vor Ubuntu 11.x - /usr/sbin/brctl
## ab Ubuntu 11.x - /sbin/brctl
br_util=/sbin/brctl
bridge0=br0
brdelay=5
brstp=0

## Steuerung Dienste
## alt
# hostapdrestart="/etc/init.d/hostapd"
## neu
hostapdservice="service hostapd"

## Ende freie Variablen
##
# Skript
#
pingout=""

## aut. Adressberechnung DHCP-Range für dnsmasq
## gemäß Vorgabe WLAN-Schnittstelle
ipaddresses=$[$ipaddresses+$wlanbaseip]
 baseendaddr="`echo $waddress | tr -s . " " | awk {'print $4'}`"
  basestartaddr="`echo $waddress | tr -s . " " | awk {'print $1,$2,$3'} | tr -s " " .`"
   endaddr="$basestartaddr""."$[$startaddr+$ipaddresses]
    startaddr="$basestartaddr""."$[$baseendaddr+$wlanbaseip]

pingout=""
A=1
B=0
D=0
P=0
Br=0

if [ "$1" = "-h" ]; then
echo Verwendung: instant_AP.sh [-start] [-restart] [-stop] [-D] [-d] [-f] [-m] [-h] [-B]
echo Syntax:
echo "sudo ./instant_AP.sh  wie [-d] startet mit Standardparametern (DHCP)"
echo "sudo ./instant_AP.sh -f statische LAN-Konfiguration"
echo "sudo ./instant_AP.sh -f -m  statische LAN-Konfiguration, MAC-Änderung"
echo "sudo ./instant_AP.sh -D verwendet dnsmasq.conf und nicht dnsmasq-base"
echo "sudo ./instant_AP.sh -start -f statische LAN-Konfiguration"
echo "sudo ./instant_AP.sh -restart -f statische LAN-Konfiguration"
echo "sudo ./instant_AP.sh  -B Bridged-Modus ohne DHCP-Server. Dynamische und Statische Schnittstellenparameter werden ignoriert"
echo "sudo ./instant_AP.sh -stop beendet den AP"
echo "Ende"
 exit
fi

while getopts ":DdfmhPB" OPTION ; do
 case $OPTION in
  D) echo "vewende dnsmasq.conf und nicht dnsmasq-base"; D=1;;
  d) echo "konfiguriere LAN über DHCP"; A=1;;
  f) echo "konfiguriere LAN statisch"; A=2;;
  m) echo "MAC-Change LAN ein"; B=1;;
  P) echo "Portumleitung für Proxy-Server Port" $proxyport "aktiviert"; P=1;;
  B) echo "Bridge-Modus aktiviert"; Br=1;;
 esac
  done

echo "starte gewählte Konfiguration ..."
 sleep 2

if [ "$Br" = "1" ]; then A=3
 echo "Bridge-Mode aktiviert - Sonstige Parameter für Schnittstelleneinstellungen werden ignoriert"
  fi

if [ "$1" != "-start" ]; then
 echo "stoppe alle Dienste, und Verbindungen, lösche Itables-Filter ..."

# Konfiguration löschen
/sbin/iptables -F
 /sbin/iptables -X
  /sbin/iptables -t nat -F

defgw="`route -n | grep UG | awk {'print $2'}`"
 /sbin/route del default gw $defgw $laniface
   echo '' | tee /etc/resolv.conf

$hostapdservice stop 
 /sbin/ifconfig $wlaniface down
  sleep 1
  /sbin/iwconfig $wlaniface mode managed
   sleep 1
   /sbin/ifconfig $laniface down
    sleep 1
     /usr/bin/killall dnsmasq
      /sbin/sysctl -w net.ipv4.ip_forward=0
       /sbin/modprobe -rfv iptable_nat ipt_MASQUERADE xt_conntrack iptable_filter   

## Bridge löschen
/sbin/ifconfig $bridge0 down
 sleep 1
  $br_util delif $bridge0 $laniface
   $br_util delif $bridge0 $wlaniface
    $br_util delbr $bridge0

if [ "$1" = "-stop" ]; then
 echo
  echo "reaktiviere Network-Manager."
   service network-manager start
    service network-manager restart
echo "WLAN Access-Point Konfiguration beendet."
 exit
  fi
 fi

## MAC-Adresse abgleichen
if [ "$B" = "1" ]; then
 currentmac="`ifconfig $laniface | grep Adresse | awk {'print $6'}`"
  echo Schnittstelle $laniface, MAC-Adresse: $currentmac 
   echo Vorgabe: $lmacaddress

 if [ "$currentmac" = "$lmacaddress" ]; then
   echo Übereinstimmende MAC-Adresse 
else
   /sbin/ifconfig $laniface down
 /sbin/ip link set dev $laniface addr $lmacaddress

currentmac="`ifconfig $laniface | grep Adresse | awk {'print $6'}`"
 echo versuche MAC-Adresse zu ändern ...
  echo Schnittstelle $laniface, MAC-Adresse: $currentmac 

if [ "$currentmac" = "$lmacaddress" ]; then
 echo Änderung der MAC-Adresse erfolgreich! 
  else
 echo Änderung der MAC-Adresse nicht erfolgreich!
echo fahre fort ...
fi
 fi
  fi

# Grundkonfiguration 
echo beende Network-Manager
 service network-manager stop
  echo "starte alle Dienste, und Verbindungen ..."

# LAN aut.m über DHCP nur wenn kein Bridged-Mode gewählt
if [ "$Br" = "0" ] & [ "$A" = "1" ]; then
 echo "starte automatische LAN-Verbindung ..."
  /sbin/dhclient $laniface
fi

# LAN statisch nur wenn kein Bridged-Mode gewählt
if [ "$Br" = "0" ] & [ "$A" = "2" ]; then
  echo "starte statische LAN-konfiguration ..."
   /sbin/ifconfig $laniface down
    sleep 2
     /sbin/ifconfig $laniface $laddress broadcast $lbroadcast netmask $lnetmask
      sleep 2
       echo

echo setze Gateway und Route ...
 /sbin/route add default gw $lgateway $laniface
  sleep 1
   echo

echo setze DNS
echo '# erzeugt durch instant_AdHoc.sh' | tee /etc/resolv.conf
 echo $dns | awk {'print $1,$2'} | tee -a /etc/resolv.conf
  echo $dns | awk {'print $3,$4'} | tee -a /etc/resolv.conf
   echo $dns | awk {'print $5,$6'} | tee -a /etc/resolv.conf 
    echo $dns | awk {'print $7,$8'} | tee -a /etc/resolv.conf
     echo $dns | awk {'print $9,$10'} | tee -a /etc/resolv.conf
 fi
 sleep $pause

## Vorbereitung Bridge
if [ "$Br" = "1" ]; then

## vorhandene Schnittstellenkonfiguration löschen
/sbin/ifconfig $wlaniface down
 sleep 1
  /sbin/ifconfig $wlaniface up
   sleep 1
    /sbin/ifconfig $wlaniface 0.0.0.0
     sleep 1
     /sbin/ifconfig $laniface down
      sleep 1
       /sbin/ifconfig $laniface up
        sleep 1

## Bridge anlegen
 $br_util addbr $bridge0
  $br_util addif $bridge0 $laniface
   $br_util stp $bridge0 $brstp
    $br_util setfd $bridge0 $brdelay
     sleep 2

## Dienste steuern
service dnsmasq stop
 echo "fordere IP-Adresse für Bridge an ..."
  /sbin/dhclient $bridge0
   $hostapdservice restart
    $br_util addif $bridge0 $wlaniface
else

## ohne Bridge-Mode
## WLAN-Schnittstelle statisch konfigurieren
echo "WLAN-Schnittstelle initialisieren ..."
 /sbin/ifconfig $laniface up
  sleep 1
   /sbin/ifconfig $wlaniface $waddress broadcast $wbroadcast netmask $wnetmask
    $hostapdservice restart
     echo
echo "starte IP-Forward, Masquerading und NAT"
/sbin/iptables -A FORWARD -o $laniface -i $wlaniface -s $iptablemask -m conntrack --ctstate NEW -j ACCEPT
 /sbin/iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
  /sbin/iptables -t nat -A POSTROUTING -o $laniface -j MASQUERADE 
   /sbin/sysctl -w net.ipv4.ip_forward=1 
fi

## dnsmasq-base starten
echo
 echo starte dnsmasq-base
if [ "$D" = "0" ]; then
 echo DHCP-Range dnsmasq-base - Startadresse: $startaddr Endadresse: $endaddr
  /usr/sbin/dnsmasq -i $wlaniface -I $laniface -F $startaddr,$endaddr,$leasetime
   echo
else
 
## dnsmasq neu starten
echo "verwende dnsmasq.conf"
 /etc/init.d/dnsmasq restart
  echo fertig ...
fi

## Portumleitung für Squid Proxyserver
if [ "$P" = "1" ]; then
 /sbin/iptables -t nat -A PREROUTING -i $wlaniface -p tcp --dport 80 -j REDIRECT --to-port $proxyport

## optional Port 443 HTTPS
#  /sbin/iptables -t nat -A PREROUTING -i $wlaniface -p tcp --dport 443 -j REDIRECT --to-port $proxyport

    echo "Port 80 (HTTP) " $wlaniface "auf Port $proxyport umgeleitet ("$proxy "Proxyserver)"
   echo "Starte" $proxy "Proxyserver ..."
 sleep 2

if [ "$proxy" != "squid" ]; then
 /etc/init.d/$proxy restart
  else
   service squid start -n
 fi
fi

## Ausgabe der aktuellen Konfiguration
 echo "DNS-Konfiguration"
  cat /etc/resolv.conf
   echo
    /sbin/route -n
     echo

if [ "$Br" = "1" ]; then
 echo "Konfiguration Bridge:"
  $br_util show
   echo
    /sbin/ifconfig $bridge0 | egrep 'Link|inet Adresse'
     echo
fi
 echo "Konfiguration LAN:"
  /sbin/ifconfig $laniface | egrep 'Link|inet Adresse'
   echo
    echo "Konfiguration WLAN:"
     /sbin/ifconfig $wlaniface | egrep 'Link|inet Adresse'
      echo
       /sbin/iwconfig $wlaniface | egrep 'IEEE|Power|Mode'
        echo      
         /sbin/iwconfig mon.$wlaniface

exit 0

Die verwendeten Schnittstellen für LAN und WLAN, sowie die gewünschten IP-Adressen sind ggf. noch anzupassen. Alle erforderlichen Parameter können im Deklarationsblock des Skripts geändert werden.

Im Terminal [2] als root [3] kann das Skript nun mit verschiedenen Parametern aufgerufen werden:

sudo ./instant_AP.sh [-start|-restart|-stop]
sudo ./instant_AP.sh                    # startet mit automatischer Konfiguration (wie [-start])
sudo ./instant_AP.sh -start             # startet alle Verbindungen und Dienste mit automatischer Konfiguration
sudo ./instant_AP.sh -restart           # erneuert alle Verbindungen und Dienste mit automatischer Konfiguration
sudo ./instant_AP.sh -stop              # beendet alle Verbindungen und Dienste 

Zusätzliche Optionen für eine statische Konfiguration der LAN-Schnittstelle und eine Änderung der MAC-Adresse sind möglich, sollte dies für eine Verbindung erforderlich sein. Das Skript gibt entsprechende Rückmeldungen. Am Ende wird die Konfiguration der LAN- und WLAN-Schnittstelle sowie die Routingtabelle zur Funktionsprüfung ausgegeben.

sudo ./instant_AP.sh [-start|-restart|-stop] [-D] [-d] [-f] [-m] [-h] [-P] [-B]
sudo ./instant_AP.sh -h                # gibt eine Hilfe zur Syntax aus
sudo ./instant_AP.sh -f                # startet LAN mit statischer Konfiguration
sudo ./instant_AP.sh -P                # startet Proxyserver Squid
sudo ./instant_AP.sh -start -d -m      # startet LAN mit automatischer Konfiguration und ändert die MAC-Adresse
sudo ./instant_AP.sh -start -m -f      # startet LAN mit statischer Konfiguration und ändert die MAC-Adresse
sudo ./instant_AP.sh -restart -m       # erneuert alle Verbindungen mit automatischer Konfiguration und ändert die MAC-Adresse (andere Schreibweise)
sudo ./instant_AP.sh -restart -fm      # erneuert alle Verbindungen mit statischer Konfiguration und und ändert die MAC-Adresse (andere Schreibweise)
sudo ./instant_AP.sh -D                # verwendet dnsmasq.conf und nicht dnsmasq-base (erweiterte Konfiguration dnsmasq)
sudo ./instant_AP.sh -B                # transparenter Bridged-Mode wird aktiviert (Eintrag ''bridge=br0'' in der /etc/hostapd.conf erforderlich) 

Die Optionen können beliebig kombiniert werden. Bei Option -df wird eine statische Konfiguration, und bei -fd eine dynamische Konfiguration der LAN-Schnitstelle ausgeführt, also immer die zuletzt angegebene Option verwendet. Parameter -stop erfortert keine Option, bzw. ignoriert diese.

Eine dazu passende Anleitung zur Konfiguration des Proxyservers Squid findet sich in Internetverbindungsfreigabe - Proxyserver.

Nachdem das Skript und alle Dienste beendet, sowie die Einstellungen zurückgesetzt wurden, kann wieder der Network-Manager verwendet werden.

Netzwerkbrücke

Sofern die WLAN-Hardware dies unterstützt, kann eine Brücke (sog. Bridging) zwischen LAN und WLAN hergestellt werden um einen gemeinsamen IP-Adressbereich für das lokale Netzwerk verwenden zu können. Die Basiskonfiguration ist in Router beschieben. Die Verbindung ist "transparent", d.h. alle angeschlossenen Geräte verhalten sich so, als wären sie direkt miteinander verbunden.

Die Hard- und Firmware der WLAN-Karte muss dies allerdings unterstützen, ansonsten funktioniert die Brücke nicht und der Adressbereich muss dann für LAN und WLAN getrennt werden. Atheros basierende Karten, z.B. AR5008 mit dem Kernelmodul ath9k, unterstützen diese Funktion.

Neben der beschriebenen statischen Konfiguration für die Brücke in der interfaces muss hostapd und dnsmasq entsprechend konfiguriert werden. dnsmasq wird nur benötigt, wenn die Verbindung über DSL-Modem aufgebaut wird und kein anderer DHCP-Server vorgeschaltet ist (Router).

Folgendes Paket muss zunächst installiert [4] werden:

  • bridge-utils (Dienstprogramme zur Konfiguration einer Netzwerkbrücke)

Befehl zum Installieren der Pakete:

sudo apt-get install bridge-utils  

Oder mit apturl installieren, Link: apt://bridge-utils

Einstellungen für das oben verwendete Beispiel:
Konfiguration der Brücke in der /etc/network/interfaces

auto lo
iface lo inet loopback

# Netzwerkbrücke
auto br0
iface br0 inet static
address 192.168.3.1
netmask 255.255.255.0
broadcast 192.168.3.255
bridge_ports eth1
# Einstellung für Verzögerung (forward-delay) in folgender Zeile testen, ggf. erhöhen
bridge_fd 0
# Einstellung für STP in folgender Zeile testen und ggf. auf 'yes' setzen
bridge_stp no

Die WLAN-Schnittstelle, hier wlan0, muss nicht in der Konfiguration der Bridge angegeben werden, dies erledigt hostapd. Das ist auch nur möglich, wenn sich die WLAN-Karte bereits im Master-Modus befindet.

Einstellung der /etc/hostapd.conf

...
interface=wlan0
bridge=br0
driver=nl80211
...

Optional die Konfiguration der /etc/dnsmasq.conf

# DHCP-Server nicht aktiv für Interface
no-dhcp-interface=eth0        # Internetverbindung  
no-dhcp-interface=eth1        # lokales Netzwerk
no-dhcp-interface=wlan0       # lokales WLAN

# DHCP-Server aktiv für Interface
interface=br0

# IP-Adressbereich / Lease-Time
dhcp-range=interface:br0,192.168.3.20,192.168.3.200,infinite
...

Systemlog abfragen

Ereignisse zu hostapd und dnsmasq werden im Systemlogbuch unter /var/log/syslog abgelegt und könne mit einem entsprechenden Filter ausgelesen werden:

cat /var/log/syslog | egrep 'hostapd|dnsmasq' 

Ereignisse auswerten

Um Ereignisse wie das An- oder Abmelden eines Clients auszuwerten, kann hostapd_cli verwendet werden.

man hostapd_cli 

hostapd_cli als Daemon starten und bei entsprechenden Ereignissen ein Skript abarbeiten. Beispiel:

sudo hostapd_cli -p /var/run/hostapd -i [Interface] -a /Pfad/Skript -B 

Das Controllinterface und WLAN-Interface wie z.B wlan0 bitte entsprechend anpassen. Die Einstellung für das Controllinterface, hier der Standard /var/run/hostapd, wird in der Datei /etc/hostapd.conf festgelegt.

Einfaches Beispiel des aufgerufenen Skripts, um die Ereignisse in einer Protokolldatei abzulegen:

1
2
3
#!/bin/bash
## Ereignisse in Textdatei speichern
echo $* >> /Pfad/Dateiname

Ereignisse, wenn sich z.B. ein Client verbindet oder trennt, werden mit Angabe der Schnittstelle und der MAC-Adresse des Clients übergeben:

[Interface] AP-STA-CONNECTED [MAC-Adresse]
[Interface] AP-STA-DISCONNECTED [MAC-Adresse]

Zusatzinformationen

Problembehebung

Fonera WLAN-Router

Die erste Version des Fonera-Routers verhindert, dass ein per WLAN verbundener Client im (Heim-)Netzwerk erkannt wird. Das kann durch das Einspielen einer alternativen Firmware umgangen werden. Zuerst muss freeWLAN auf der Fonera installiert werden, dazu den Anweisungen des freeWLAN-Wikis 🇬🇧 folgen.

Wenn dies geschehen ist, im Webbrowser die Adresse http://169.254.255.1 eingeben, zum Tab "Advanced" wechseln und den Punkt "Network Settings" auswählen. Dort findet man die Einstellung "Private Wireless IP Settings". Nun noch "Yes" auswählen und etwas warten.

Diese Revision wurde am 12. Februar 2023 11:50 von kB erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: WLAN, Netzwerk, ungetestet