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:
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,
kann nach dem Artikel Internetverbindungsfreigabe/ICS mit NetworkManager vorgehen
oder den Abschnitt Instant-AP-Skript - Koexistenz mit dem Network-Manager beachten.
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 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.
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¶
IP-Adressen in lokalen Netzwerken
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.
Links¶
hostapd Homepage 🇬🇧
Internet und Netzwerk und Netzwerk - Übersichten zu verschiedenen Netzwerkthemen
Heimnetzwerk - Daten in einem lokalen Netzwerk (LAN) austauschen
WLAN Übersichtsartikel