[[Vorlage(Getestet, )]] {{{#!vorlage Wissen [:Editor: Einen Editor öffnen] [:Terminal:Ein Terminal öffnen] [:sudo: root-Rechte] [:Pakete_installieren:Installation von Programmen] }}} [[Inhaltsverzeichnis(-)]] [[Bild(Wiki/Icons/Oxygen/network-wireless.png,48,align=left)]] 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 [:interfaces:/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 [#Koexistenz-mit-dem-Network-Manager Instant-AP-Skript - Koexistenz mit dem Network-Manager] beachten. Ab [:Trusty Tahr:Ubuntu 14.04] ist dies auch über den [:Network-Manager:] und mit WPA(2)-Verschlüsselung möglich. Es wird allerdings ein [wikipedia:Ad-hoc-Netz: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 [https://wireless.wiki.kernel.org/en/users/drivers KernelWiki/Wireless] {en} und entsprechend in [:WLAN/Karten:]. Abfrage dazu mittels [:iw:]: {{{#!vorlage Befehl 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 [http://www.linuxwireless.org/en/users/Drivers/ath9k_htc ath9k_htc] {en} oder [http://www.linuxwireless.org/en/users/Drivers/carl9170 carl9170] {en} 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]: {{{#!vorlage Paketinstallation hostapd, universe, der IEEE 802.11 AP/IEEE 802.1X [wikipedia:IEEE_802.1X:Authenticator]. Erzeugt den WLAN Access-Point. dnsmasq, universe, ein DHCP- und DNS-Cache, siehe auch [:Dnsmasq:] und [:Router:] }}} = Konfiguration = Bei Desktop-Systemen mit grafischer Oberfläche muss die Netzwerkverwaltung über den [:Network-Manager:] (NM) deaktiviert werden. Über einen Rechtsklick [[Vorlage(Tasten, rmb)]] auf das NM-Symbol im Panel ist die Verwaltung der LAN- und WLAN-Verbindungen zu deaktivieren, um die Konfiguration über die [:interfaces:/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`. ##Soll die Internetverbindung über ein DSL-Modem hergestellt werden, ist der Artikel [:DSL_ohne_Router#PPPoE-Verbindung-mit-pppoeconf:pppoeconf] zu beachten und die Konfiguration entsprechend anzupassen. == hostapd == {{{#!vorlage 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 [wikipedia:WPA2:WPA2-AES]-Verschlüsselung verwendet. [wikipedia:Wired_Equivalent_Privacy:WEP], [wikipedia:Wi-Fi_Protected_Access: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. [:WLAN/Sonderzeichen: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: [:WLAN/wpa_supplicant#Schluessel:WPA-Schlüssel] und [http://darkvoice.dyndns.org/wlankeygen/ Schlüsselgenerator] {de}. == Programmparameter == Mögliche Startparameter zeigt: {{{#!vorlage befehl hostapd -h }}} Konfiguration testen: {{{#!vorlage befehl 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''': {{{#!vorlage Befehl 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=,,,infinite dhcp-host=,,infinite dhcp-host=,,infinite }}} == Funktionsprüfung == Nun startet man das Netzwerk neu, beobachte die Terminalausgabe und überprüft anschließend die Konfiguration: {{{#!vorlage Befehl sudo /etc/init.d/networking restart }}} ##Alternativ auch invoke-rc.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: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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 }}} {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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. [[Bild(./Netzwerk02_Instant01.png, 340, align=right)]] = Instant-AP Skript = Über ein [:Shell/Bash-Skripting-Guide_für_Anfänger: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: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: {{{#!vorlage Befehl sudo update-rc.d hostapd disable }}} == Koexistenz mit dem Network-Manager == Eine zusätzliche vereinfachte [post:4876767: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]: {{{#!vorlage Befehl touch instant_AP.sh chmod +x instant_AP.sh }}} Folgenden Inhalt einfügen: {{{#!code bash #!/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: {{{#!vorlage Befehl 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. {{{#!vorlage Befehl 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: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 [:Netzwerkbrücke: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 [http://www.linuxwireless.org/en/users/Drivers/ath9k 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: {{{#!vorlage Paketinstallation bridge-utils , Dienstprogramme zur Konfiguration einer Netzwerkbrücke }}} 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: {{{#!vorlage Befehl cat /var/log/syslog | egrep 'hostapd|dnsmasq' }}} = Ereignisse auswerten = Um Ereignisse wie das An- oder Abmelden eines Clients auszuwerten, kann `hostapd_cli` verwendet werden. {{{#!vorlage befehl man hostapd_cli }}} `hostapd_cli` als Daemon starten und bei entsprechenden Ereignissen ein Skript abarbeiten. Beispiel: {{{#!vorlage befehl 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: {{{#!code bash #!/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 = * [wikipedia:Private_IP-Adresse:IP-Adressen] in lokalen Netzwerken * [wikipedia:Wireless_Local_Area_Network#Frequenzen_und_Kan.C3.A4le:Frequenzeinstellungen] * [http://www.iso.org/iso/english_country_names_and_code_elements ISO Ländercodes] {en} = Problembehebung = == Fonera WLAN-Router == Die erste Version des [wikipedia:La_Fonera: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 [http://trac.freewlan.info/wiki/Documentation/Installation.html#Howtoinstalltheadd-ons freeWLAN-Wikis] {en} 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 = * [http://w1.fi/hostapd/ hostapd] Homepage {en} * [:Internet_und_Netzwerk:] und [:Netzwerk:] {Übersicht} - Übersichten zu verschiedenen Netzwerkthemen * [:Router:] * [:Heimnetzwerk:] - Daten in einem lokalen Netzwerk (LAN) austauschen * [:WLAN:] {Übersicht} Übersichtsartikel * [wikipedia:Domain_Name_System:DNS] #tag: Netzwerk, WLAN