WLAN-Accesspoint Konfigurationen
Archivierte Anleitung
Dieser Artikel wurde archiviert. Das bedeutet, dass er nicht mehr auf Richtigkeit überprüft oder anderweitig gepflegt wird. Der Inhalt wurde für keine aktuell unterstützte Ubuntu-Version getestet. Wenn du Gründe für eine Wiederherstellung siehst, melde dich bitte in der Diskussion zum Artikel. Bis dahin bleibt die Seite für weitere Änderungen gesperrt.
Artikel für fortgeschrittene Anwender
Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
In diesem Artikel werden verschiedene Skripte beschrieben, mit denen unter Ubuntu und auch anderen Linux-Distributionen bei Bedarf verschiedene WLAN-Router für diverse Einsatzszenarien konfiguriert werden können. Die jeweiligen Skripte wurden ebenfalls auf dem Raspberry Pi™ (Version B) ausgiebig getestet. Basisartikel dazu ist WLAN Router.
Als Software werden beispielsweise Squid, Privoxy, hostapd:, iptables, iw, ISC-DHCPD und bridge-utils: verwendet. Diese Wiki-Artikel dienen als Grundlage und sollten bekannt sein.
Vorbereitungen¶
Programme installieren¶
Die für die genannten Skriptvarianten gezeigten Programme müssen natürlich zuvor installiert [1] und ggf. konfiguriert werden. Entsprechende Vorlagen sind hier angegeben. skriptname.sh ist durch den tatsächlich gewünschten Namen zu ersetzen.
Skript anlegen¶
Anlegen und ausführbar machen eines Skripts über Terminal [2]:
touch skriptname.sh chmod +x skriptname.sh
Anschließend kann man das erzeugte Skript mit einem Editor [3] bearbeiten und den gewünschten Code hier kopieren und einfügen. Teilweise enthalten die Skripte Kennwörter im Klartext. Daher den Zugang zum verwendeten System und/oder die Zugriffsrechte entsprechend anpassen. Siehe auch chmod.
Skript starten und beenden¶
Die Skripte sind vom Grundgerüst her identisch aufgebaut. Verschiedene Startparameter sind möglich. Auch hier ist skriptname.sh durch den tatsächlich verwendeten Namen zu ersetzen.
Skript mit den gewünschten Startoptionen aufrufen [4][5]:
sudo ./skriptname.sh -start # startet das Skript und die Konfiguration sudo ./skriptname.sh -stop # startet das Skript, beendet die Konfiguration und die verwendeten Dienste sudo ./skriptname.sh # ohne Option identisch wie -stop sudo ./skriptname.sh -h # gibt eine kurze Hilfe zur Syntax aus
Skript konfigurieren¶
Bei jedem Skript können verschiedene Optionen verändert und Variablen gesetzt werden. Diese sind durch Kommentarzeilen entsprechend beschrieben. Im Normalfall müssen nur bestimmte IP-Adressen des eigenen Routers, Gateways usw. angepasst werden.
Variablen und Optionen können im Skript im Bereich zwischen ...
## freie Variablen ... ... ## Ende freie Variablen
... bearbeitet und angepasst werden.
Dienste konfigurieren¶
Alle hier verwendeten Dienste wie z.B. Squid oder der isc-dhcpd-Server 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 Speicher und Rechenleistung nicht unnötig zu verschwenden oder ungewollte Systemfunktionen zu vermeiden. Dies erfolgt über Runlevel.
Dienste bei Systemstart deaktivieren:
sudo update-rc.d DIENST disable
Das entsprechende Beispiel, um Squid Version 3.x nicht automatisch bei Systemstart auszuführen:
sudo update-rc.d squid3 disable
Für die jeweils benötigten und installierten Dienste geht man entsprechend vor.
Network-Manager deaktivieren¶
Wer ein Skript auf einem Desktop-System mit grafischer Oberfläche und dem Network-Manager testen oder verwenden möchte, muss diesen vorab deaktivieren, ansonsten wird die Netzwerkkonfiguration des Systems blockiert. Bestehende Verbindungen werden dabei getrennt.
sudo service network-manager stop
Der Network-Manager kann anschließend wieder aktiviert werden:
sudo service network-manager start
Skripte¶
WLAN-Router mit Gast-Netzwerk¶
Erforderliche Programme:
Funktionsbeschreibung:
LAN/WLAN-Router im Bridged-Mode
Ethernetschnittstelle 1 verbindet zum vorhandenen Router (Internetanbindung)
WLAN-Accesspoint
zweiter unabhängiger WLAN-Accesspoint mit eigenem Kennwort und eigenem IP-Adressbereich für einen Gast-Zugang
Konfiguration mit einem (nicht alle Adapter bzw. Treiber unterstützen diese Funktion) oder zwei unabhängigen WLAN-Adaptern möglich
separater DHCP-Server für WLAN 2, also den Gast-Zugang (dnsmasq_base)
kein Zugriff auf WLAN-Netzwerk 1 und Ethernet 2 möglich (NAT/iptables)
Ethernetschnittstelle 2 für das lokale Netzwerk (optional)
DHCP-Server für das WLAN-Netz 1 und Ethernet 2 bleibt der vorhandenen Router
alle Clients (WLAN 1 und Ethernet 1/2) befinden sich im selben Netzwerk (Bridge)
Erfolgreich getestet mit einem TP-Link TL-WN822N v1.1 USB WLAN-Adapter mit Atheros-Otus Chipsatz als einziger WLAN-Adapter. Geräte-ID: 0CF3:1002
, Treibermodul carl9170
.
instant_AP-bridge_vWLAN.sh:
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 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385
#!/bin/bash ## Instant WLAN Access-Point an Ethernet Router with transparent bridged interfaces and VLAN ## (WLAN-Guest Accesspoint) ## for Raspberry Pi™ with Raspian and other Linux based Systems ## ## elektronenblitz63 ubuntuusers.de 2013 ## published under GPL v3 ## ## Version 1.7.1.5bvw / 17. Oktober 2013 ## ## have fun :-) ## freie Variablen ## Source-Interface / WAN-Schnittstelle ## durch die interfaces gesteuerte Schnittstelle für die Internetverbindung ## Bezeichnung ggf. anpassen ## Standard eth0 / Ethernet sourceiface=eth0 ## Bridge-Konfiguration bridgeiface=br0 forward_delay=2 stp=1 brageing=10000 brage=40 braddress=192.168.178.6 brbroadcast=192.168.178.255 brnetmask=255.255.255.0 briptablemasq=192.168.178.0/24 ## IP-Adresse des Routers/Gateway wangateway=192.168.178.1 ## manuelle DNS-Konfiguration aktiviert (1) oder deaktiviert (0) (Standard) manDNS=0 # manuelle DNS-Konfiguration sys_domain="domain fritz.box" sys_search="search fritz.box" sys_dns0="nameserver 192.168.178.1" ## optional DNS 2 & 3 aktivieren ## Beispiel # sys_dns1="nameserver 8.8.4.4" # sys_dns2="nameserver 8.8.8.8" sys_dns1="" sys_dns2="" ## Konfiguration der WLAN-Schnittstelle, die den Accesspoint erzeugt ## Bezeichnung ggf. anpassen wlaniface=wlan0 ## Konfiguration der virtuellen WLAN-Schnittstelle ## Bezeichnung ggf. anpassen vlaniface=wlan1 vaddress=192.168.3.1 vbroadcast=192.168.3.255 vnetmask=255.255.255.0 viptablemask=192.168.3.0/24 ## dnsmasq-base Konfiguration ## Start- Endadresse / lease vlan_startaddress=192.168.3.10 vlan_endaddress=192.168.3.15 vlan_leasetime=infinite ## Konfiguration der zweiten lokalen LAN-Schnittstelle ## Bezeichnung ggf. anpassen locallan=eth1 ## lokales LAN aktivieren (1), oder nicht (0) ## abschalten, sollte keine zweite Ethernetschnittstelle vorhanden sein locallan_on=0 ## erste WLAN-Schnittstelle wlan0 wlan_modul="carl9170" # WLAN tx power in dBm wlan0 txpower=15 ## WLAN-Interface 2 virtuell (0) oder physikalisch (zweiter WLAN-Adapter) (1) second_phy=0 ## zweite WLAN-Schnittstelle wlan1 (0ptional) ## nur wirksam bei second_phy=1 wlan_modul2="rt2800usb" # Sendeleistung für WLAN-Adapter 2 (wlan1) einstellen # nur bei zweitem WLAN-Adapter wirksam # tx power in dBm txpower2=15 ## Regionseinstellung regcode="DE" regdelay=3 # Lease-Time DHCP-Server dnsmasq_base für das Gastnetzwerk (wlan1) leasetime=infinite ## Steuerung hostapd Schnittstelle wlan0 hostapdservice="hostapd -B" hostapdconf="/etc/hostapd_vlan.conf" ## Konfigurationsdatei hostapd Schnittstelle wlan1 (optional) ## nur wirksam bei second_phy=1 hostapdconf1="/etc/hostapd_vlan1.conf" ## Iptables-Filter bei Programmende löschen # Standard=1 # bei pppoe-Verbindungen oder Bridge-Konfiguration auf 0 setzen delfilter=1 ## zeige Konfiguration nach Ablauf des Skripts (1/0) showconfig=1 ## Ende freie Variablen # Skript if [ "$1" = "-h" ]; then echo Verwendung: instant_AP-bridge.sh [-start] [-stop] [-h] echo Syntax: echo "sudo ./instant_AP-bridge_vWLAN.sh -start startet den AP" echo "sudo ./instant_AP-bridge_vWLAN.sh -stop beendet die Konfiguration und schließt den AP" echo "sudo ./instant_AP-bridge_vWLAN.sh beendet die Konfiguration und schließt den AP" echo "Ende" exit fi echo -e "Konfiguration ausführen ...\n" # Konfiguration löschen, Dienste stoppen sleep 1 service hostapd stop /usr/bin/killall hostapd /usr/bin/killall dnsmasq squid /bin/rm -f /var/run/hostapd/$wlaniface /bin/rm -f /var/run/hostapd/$wlaniface1 /usr/bin/killall dnsmasq wpa_supplicant wpa_cli wpa_action /sbin/sysctl -w net.ipv4.ip_forward=0 ## Bridge löschen echo "lösche Bridge und Konfiguration ..." /sbin/ifconfig br0 down /sbin/brctl delif $bridgeiface $sourceiface /sbin/brctl delif $bridgeiface $locallan /sbin/ifconfig $bridgeiface down /sbin/brctl delbr $bridgeiface echo "entferne WAN-Konfiguration ..." /sbin/ifconfig $sourceiface 0.0.0.0 sleep 1 /sbin/ifconfig $sourceiface down echo "entferne WLAN-Konfiguration ..." /sbin/iwconfig $wlaniface mode managed sleep 1 /sbin/ifconfig $wlaniface 0.0.0.0 sleep 1 /sbin/ifconfig $wlaniface down sleep 1 if [ "$delfilter" = "1" ]; then echo "lösche iptables-Filter ..." /sbin/iptables -F /sbin/iptables -X /sbin/iptables -t nat -F /sbin/modprobe -rfv iptable_nat ipt_MASQUERADE xt_conntrack iptable_filter fi echo "Router & WLAN Access-Point Konfiguration beendet." if [ "$1" != "-start" ]; then echo "stoppe alle Dienste, und Verbindungen ..." exit fi ## start Konfiguration echo -e "Starte alle Dienste, und Verbindungen ...\n" ## reintialisiere WLAN-Adapter echo "WLAN-Treibermodul Adapter 1: $wlan_modul" /sbin/modprobe -rf $wlan_modul $wlan_modul2 sleep 1 echo -e "WLAN-Adapter 1 reinitialisieren ...\n" /sbin/modprobe -rf $wlan_modul sleep 1 /sbin/modprobe $wlan_modul sleep 1 ## reintialisiere WLAN-Adapter 2 (optional) if [ "$second_phy" = "1" ]; then echo "WLAN-Treibermodul Adapter 2: $wlan_modul2" echo -e "WLAN-Adapter 2 reinitialisieren ...\n" /sbin/modprobe $wlan_modul2 sleep 1 fi ## MAC-Adress Konfiguration wlan-Adapter 1 für hostapd currentmacset=$(cat $hostapdconf | grep bssid) currentmac=$(ifconfig $wlaniface | grep -i link | awk {'print $6'}) echo "erkannte MAC-Adresse des WLAN-Adapters 1:" $currentmac sleep 1 echo -e "ändere hostapd-Konfiguration für WLAN-Adapter 1 ($wlaniface)\n" /bin/sed -i "s/$currentmacset/bssid=$currentmac/g" $hostapdconf ## initialize WAN-Port /sbin/ifconfig $sourceiface up sleep 1 if [ "$second_phy" = "1" ]; then ## MAC-Adress Konfiguration wlan-Adapter 2 für hostapd currentmacset2=$(cat $hostapdconf1 | grep bssid) currentmac2=$(ifconfig $vlaniface | grep -i link | awk {'print $6'}) echo "erkannte MAC-Adresse des WLAN-Adapters 1:" $currentmac2 sleep 1 echo -e "ändere hostapd-Konfiguration für WLAN-Adapter 2 ($vlaniface)\n" /bin/sed -i "s/$currentmacset2/bssid=$currentmac2/g" $hostapdconf1 fi ## initialize WAN-Port /sbin/ifconfig $sourceiface up sleep 1 ## Sendeleistung / deaktivate WLAN-Powermanagement / set Tx-Power echo "deaktiviere Stromsparmechanismen für $wlaniface" /sbin/iw dev $wlaniface set power_save off sleep 1 echo -e "setze Sendeleistung des WLAN-Adapters $wlaniface ($txpower"dBm")\n" /sbin/iwconfig $wlaniface txpower $txpower sleep 1 if [ "$second_phy" = "1" ]; then echo "deaktiviere Stromsparmechanismen für $vlaniface" /sbin/iw dev $vlaniface set power_save off sleep 2 echo -e "setze Sendeleistung des WLAN-Adapters $vlaniface ($txpower2"dBm")\n" /sbin/iwconfig $vlaniface txpower $txpower2 sleep 1 fi ## Regionseinstellung echo -e "setze Regionseinstellung des Systems: $regcode\n" /sbin/iw reg set $regcode sleep $regdelay # aut. Dienste nach Reinitialisierung des WLAN-Adapters beenden /usr/bin/killall wpa_supplicant wpa_cli wpa_action ifplugd ## start hostapd echo -e "Starte hostapd-Service\n" $hostapdservice $hostapdconf sleep 1 echo ## start hostapd für WLAN-Adapter 2 (optional) if [ "$second_phy" = "1" ]; then echo -e "Starte hostapd-Service\n" $hostapdservice $hostapdconf1 sleep 1 echo fi ## Bridge konfigurieren /sbin/brctl addif $bridgeiface $sourceiface if [ "$locallan_on" = "1" ]; then /sbin/brctl addif $bridgeiface $locallan echo -e "Ethernerschnittstelle 2 aktiviert.\n" fi /sbin/brctl setfd $bridgeiface $forward_delay /sbin/brctl stp $bridgeiface $stp ## Optional aktivieren # /sbin/brctl setageing $bridgeiface $brageing # /sbin/brctl setmaxage $bridgeiface $brage ## initialize Bridge-Port echo "Bridge-Schnittstelle initialisieren (statisch)" echo -e "Interface: $bridgeiface IP-Adresse: $braddress Broadcast: $brbroadcast Netzmaske: $brnetmask\n" /sbin/ifconfig $bridgeiface $braddress broadcast $brbroadcast netmask $brnetmask /sbin/route add default gw $wangateway metric 0 dev $bridgeiface sleep 1 /sbin/ifconfig $sourceiface up ## vLAN-Schnittstelle statisch konfigurieren echo "VLAN-Schnittstelle initialisieren (statisch)" echo -e "Interface: $vlaniface IP-Adresse: $vaddress Broadcast: $vbroadcast Netzmaske: $vnetmask\n" /sbin/ifconfig $vlaniface $vaddress broadcast $vbroadcast netmask $vnetmask sleep 1 ## Netze trennen / NAT / Ping unterbinden /sbin/iptables -A INPUT -p icmp --icmp-type 8 -i $vlaniface -j DROP /sbin/iptables -t nat -A POSTROUTING -o $bridgeiface -j MASQUERADE /sbin/iptables -A FORWARD -i $vlaniface --dst $briptablemasq -j DROP ## Port forwarding /sbin/sysctl -w net.ipv4.ip_forward=1 ## starting DHCP-Service VLAN echo -e "starte dnsmasq-base\n" echo "DHCP-Range dnsmasq-base ..." echo -e "$vlaniface Startadresse: $vlan_startaddress Endadresse: $vlan_endaddress Lease: $vlan_leasetime\n" /usr/sbin/dnsmasq -h -I $bridgeiface -i $vlaniface -F $vlan_startaddress,$vlan_endaddress,$vlan_leasetime sleep 1 echo "dnsmasq - Dienstekonfiguration:" ps aux | grep [d]ns echo ## DNS setzen ## verwende erkanntes Gateway echo "DNS-Konfiguration ..." if [ "$manDNS" = "0" ]; then echo -e "nameserver" $(route -n | grep UG | awk {'print $2'}) | tee /etc/resolv.conf echo else echo -e "$sys_domain\n$sys_search\n$sys_dns0\n$sys_dns1\n$sys_dns2" | tee /etc/resolv.conf sleep 1 echo fi ## Ausgabe der aktuellen Konfiguration if [ "$showconfig" = "1" ]; then echo -e "System DNS-Check und Routing:" cat /etc/resolv.conf echo /sbin/route -n echo echo -e "Konfiguration Bridge:\n" /sbin/ifconfig $bridgeiface | egrep 'Link|inet Adresse' echo /sbin/brctl show echo /sbin/brctl showmacs $bridgeiface echo /sbin/brctl showstp $bridgeiface echo echo -e "Konfiguration lokales WAN:\n" /sbin/ifconfig $sourceiface | egrep 'Link|inet Adresse' echo echo -e "Konfiguration lokales LAN:\n" /sbin/ifconfig $locallan | 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 /sbin/ifconfig $vlaniface | egrep 'Link|inet Adresse' echo /sbin/iwconfig $vlaniface | egrep 'IEEE|Power|Mode' echo ## Ausgabe der aktuellen Konfiguration echo -e "Regionseinstellung des/der WLAN-Adapters:\n" /sbin/iw reg get echo echo "Dienstestatus:" service hostapd status if [ "$second_phy" = "1" ]; then ps aux | grep [h]ostapd fi else exit 0 fi
Dienstekonfiguration via /etc/hostapd_vlan.conf bei Verwendung eines einzigen WLAN-Adapters. Der Eintrag
bssid=xx:xx:xx:xx:xx:xx
wird durch das Skript mit der tatsächlichen MAC-Adresse des WLAN-Adapters überschrieben:# WLAN0-Konfiguration interface=wlan0 bssid=b2:af:41:3a:eb:b5 driver=nl80211 bridge=br0 # WLAN-Konfiguration ssid=WLAN_AP channel=4 # Verschlüsselung / hier rein WPA2 wpa=2 rsn_preauth=1 rsn_preauth_interfaces=wlan0 wpa_key_mgmt=WPA-PSK rsn_pairwise=CCMP # Zugangsschlüssel (PSK) / hier in Klartext (ASCII) wpa_passphrase=1234567890abcdefghijklmn # WLAN1-Konfiguration / VLAN bss=wlan1 driver=nl80211 ssid=Guest_Net # Verschlüsselung / hier rein WPA2 wpa=2 rsn_preauth=1 rsn_preauth_interfaces=wlan0 wpa_key_mgmt=WPA-PSK rsn_pairwise=CCMP # Zugangsschlüssel (PSK) / hier in Klartext (ASCII) wpa_passphrase=1234567890 # 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 # Schlüsselintervalle / Standardkonfiguration wpa_group_rekey=600 wpa_ptk_rekey=600 wpa_gmk_rekey=86400
Werden zwei WLAN-Adapter verwendet, so muss eine zweite Konfigurationsdatei für hostapd angelegt werden. Das Skript startet dann entsprechend eine weitere Instanz.
/etc/hostapd_vlan.conf für den ersten WLAN-Adapter. Der Eintrag
bssid=xx:xx:xx:xx:xx:xx
wird durch das Skript mit der tatsächlichen MAC-Adresse des ersten WLAN-Adapters überschrieben:# WLAN0-Konfiguration interface=wlan0 bssid=b2:af:41:3a:eb:b5 driver=nl80211 bridge=br0 # WLAN-Konfiguration ssid=WLAN_AP channel=1 # Verschlüsselung / hier rein WPA2 wpa=2 rsn_preauth=1 rsn_preauth_interfaces=wlan0 wpa_key_mgmt=WPA-PSK rsn_pairwise=CCMP # Zugangsschlüssel (PSK) / hier in Klartext (ASCII) wpa_passphrase=1234567890abcdefghijklmn # 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 # Schlüsselintervalle / Standardkonfiguration wpa_group_rekey=600 wpa_ptk_rekey=600 wpa_gmk_rekey=86400
/etc/hostapd_vlan1.conf für den zweiten WLAN-Adapter. Der Eintrag
bssid=xx:xx:xx:xx:xx:xx
wird durch das Skript mit der tatsächlichen MAC-Adresse des zweiten WLAN-Adapters überschrieben:# WLAN0-Konfiguration interface=wlan1 bssid=b2:af:41:3a:eb:b5 driver=nl80211 # WLAN-Konfiguration ssid=Guest_Net channel=11 # Verschlüsselung / hier rein WPA2 wpa=2 rsn_preauth=1 rsn_preauth_interfaces=wlan0 wpa_key_mgmt=WPA-PSK rsn_pairwise=CCMP # Zugangsschlüssel (PSK) / hier in Klartext (ASCII) wpa_passphrase=1234567890 # 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 # Schlüsselintervalle / Standardkonfiguration wpa_group_rekey=600 wpa_ptk_rekey=600 wpa_gmk_rekey=86400
WLAN-Repeater¶
Erforderliche Programme:
ISC-DHCPD (Server)
Funktionsbeschreibung:
LAN/WLAN-Router mit einem einzigen oder alternativ zwei WLAN-Adaptern
nur wenige Adapter unterstützen ein virtuelles Interface im Infrastrukturmodus neben der AP-Funktion
erfolgreich getestet mit einem TP-Link TL-WN822N v1.1 USB WLAN-Adapter mit Atheros-Otus Chipsatz als einzigen WLAN-Adapter. Geräte-ID:
0CF3:1002
, Treibermodulcarl9170
.
Konstrukt arbeitet quasi als Bridge, ist somit mit jedem WLAN-Accesspoint kompatibel
WLAN-Accesspoint über WLAN-Interface 1
separater DHCP-Server (isc-dhcpd-server)
WLAN-Interface 2 verbindet zum vorhandenen Router (Internetanbindung im Infrastruktur-Modus)
Ethernetschnittstelle 1 für das lokale Netzwerk
alle Clients (WLAN 1 und Ethernet 1) befinden sich im selben Netzwerk
instant_AP-WLAN_Bridge.sh:
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 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473
#!/bin/bash ## Instant WLAN Access-Point and Ethernet Router with transparent bridged interfaces ## (Wireless-Bridge) ## for RaspberryPi™ with Raspbian and other Linux based Systems ## ## elektronenblitz63 ubuntuusers.de 2013 ## published under GPL v3 ## ## Version 1.7.1.3wb / 16. Oktober 2013 ## have fun :-) ## freie Variablen ## Accesspoint Konfiguration für den Verbindungsaufbau zum vorhandenen WLAN # SSID (Name) des WLAN Accesspoints eintragen ssid="Deine_WLAN_SSID" # MAC-Adresse des WLAN Accesspoints eintragen # Beispiel: # mac="00:15:0E:31:7A:1A" mac="00:15:0E:31:7A:1A" # Einstellungen zur Verschlüsselung (WPA1 und/oder WPA2) # die Vorgabe deckt im Normalfall alle Konfigurationsmöglichkeiten ab # Konfiguration wpa-supplicant proto="WPA RSN" key_mgmt="WPA-PSK" pairwise="TKIP CCMP" group="TKIP CCMP" # WPA1 - WPA2 - WPA1/2 Verschlüsselung # Zugangskennwort in Klartext (WPA1/2-Zugangsschlüssel / PSK) psk="Dein_WLAN_Kennwort" ## Konfiguration wpa_supplicant # Einstellungen müssen in der Regel nicht angepasst werden configfile="wpa_supplicant.tmp" ctrliface="ctrl_interface=/var/run/wpa_supplicant" eapolv="eapol_version=1" apscan="ap_scan=1" # Pause vor dem Start der Konfiguration / Wert ggf. erhöhen wpa_delay=4 ## Treiber für wpa_supplicant ## wext oder nl80211 wpadriver="wext" ## Bridge-Konfiguration bridgeiface=br0 forward_delay=2 stp=1 brageing=10000 brage=40 braddress=192.168.3.1 brbroadcast=192.168.3.255 brnetmask=255.255.255.0 wangateway=192.168.3.1 iptablemask=192.168.3.0/24 ## DHCP-Server Einstellungen ## isc-dhcpd Konfiguration isc_serverconf="/etc/default/isc-dhcp-server" ## isc-dhcpd Start- Endadresse / Options isc_configfile="/etc/dhcp/dhcpd.conf" isc_subnet=192.168.3.0 isc_netmask=255.255.255.0 isc_startaddress=192.168.3.10 isc_endaddress=192.168.3.20 isc_leasetime=infinite # isc-dhcpd Optionen / Vorgabe nicht ändern isc_option0="option routers" isc_option1="option domain-name-servers" ## DNS-Server ## mehrere, durch Komma getrennte Einträge sind möglich dns_ip=192.168.178.1 ## Konfiguration der WLAN-Schnittstelle, welche die Verbindung zum Router aufbaut ## Bezeichnung ggf. anpassen wlaniface=wlan0 # Stromsparmechanismen WLAN (off/on) powersave=off ## WLAN-Interface 2 ## virtuelles Interface - wird vom Skript erzeugt wlaniface2=wlan1 # WLAN statisch oder dynamisch (1/0) (1 DHCP/Standard) konfigurieren wlan2_dhcp=1 # statische Konfiguration (Optional) wlan2_address=192.168.178.5 wlan2_broadcast=192.168.5.255 wlan2_netmask=255.255.255.0 wlan2_gateway=192.168.178.1 ## manuelle DNS-Konfiguration aktiviert (1) oder deaktiviert (0) (Standard) manDNS=0 # manuelle DNS-Konfiguration sys_domain="domain fritz.box" sys_search="search fritz.box" sys_dns0="nameserver 192.168.178.1" ## optional DNS 2 & 3 aktivieren ## Beispiel # sys_dns1="nameserver 8.8.4.4" # sys_dns2="nameserver 8.8.8.8" sys_dns1="" sys_dns2="" ## WLAN-Interface 2 virtuell (0) oder physikalisch (zweiter WLAN-Adapter) (1) second_phy=0 ## zweite WLAN-Schnittstelle wlan1 (0ptional) ## nur wirksam bei second_phy=1 wlan_modul2="rt2800usb" # Anpassung der MAC-Adresse WLAN-Interface 2 # nur bei virtuellem Interface wirksam lastoctet=ff ## Bezeichnung ggf. anpassen locallan=eth0 # Sendeleistung für WLAN-Adapter 1 (wlan0) einstellen # tx power in dBm txpower=15 # Sendeleistung für WLAN-Adapter 2 (wlan1) einstellen # nur bei zweitem WLAN-Adapter wirksam # tx power in dBm txpower2=15 ## Regionseinstellung regcode="DE" # Pause zur Konfigurationsübernahme / Wert ggf. erhöhen regdelay=3 ## Steuerung hostapd hostapdservice="hostapd -B" hostapdconf="/etc/hostapd_wlanbridge.conf" ## Iptables-Filter bei Programmende löschen (1/0) # Standard=1 delfilter=1 ## zeige Konfiguration nach Ablauf des Skripts (1/0) showconfig=1 ##Konfigurationsdatei Info zuletzt erkannter WLAN-Adapter/Treibermodul wlan_adapterfile="wlan_adapter.txt" ## Ende freie Variablen # Skript if [ "$1" = "-h" ]; then echo Verwendung: instant_AP-bridge.sh [-start] [-start -D] [-stop] [-h] echo Syntax: echo "sudo ./instant_AP-Bridge.sh -start startet den AP" echo "sudo ./instant_AP-Bridge.sh -stop beendet die Konfiguration und schließt den AP" echo "sudo ./instant_AP-Bridge.sh beendet die Konfiguration und schließt den AP" echo "Ende" exit fi ## manuelle DNS-Konfiguration abfragen if [ "$2" = "-D" ]; then manDNS=1 echo -e "manuelle DNS_Konfiguration aktiviert.\n" else manDNS=0 fi echo -e "Konfiguration ausführen ...\n" # Konfiguration löschen, Dienste stoppen sleep 1 service hostapd stop service isc-dhcp-server stop /bin/rm -f /var/run/hostapd/$wlaniface /usr/bin/killall dnsmasq dhclient /usr/bin/killall wpa_supplicant wpa_cli wpa_action isc-dhcp-server hostapd /bin/rm /var/run/wpa_supplicant/* /sbin/sysctl -w net.ipv4.ip_forward=0 ## Bridge löschen echo "lösche Bridge und Konfiguration ..." /sbin/ifconfig br0 down /sbin/brctl delif $bridgeiface $wlaniface /sbin/brctl delif $bridgeiface $locallan /sbin/ifconfig $bridgeiface down /sbin/brctl delbr $bridgeiface echo "entferne WLAN-Konfiguration ..." /sbin/iwconfig $wlaniface mode managed sleep 1 if [ "$second_phy" = "0" ]; then iw dev $wlaniface2 del fi if [ "$delfilter" = "1" ]; then echo "lösche iptables-Filter ..." /sbin/iptables -F /sbin/iptables -X /sbin/iptables -t nat -F /sbin/modprobe -rfv iptable_nat ipt_MASQUERADE xt_conntrack iptable_filter fi echo "Bridge & WLAN Access-Point Konfiguration beendet." if [ "$1" != "-start" ]; then echo "stoppe alle Dienste, und Verbindungen ..." exit fi ## start Konfiguration echo -e "Starte alle Dienste, und Verbindungen ...\n" ## WLAN-Verbindung vorbereiten echo -e "\nlege Konfigurationsdatei $configfile an.\n" echo $ctrliface > $configfile echo $eapolv >> $configfile echo $apscan >> $configfile echo 'network={' >> $configfile echo ssid='"'$ssid'"' >> $configfile echo bssid=$mac >> $configfile echo proto=$proto >> $configfile echo key_mgmt=$key_mgmt >> $configfile echo pairwise=$pairwise>> $configfile echo group=$group >> $configfile echo psk='"'$psk'"' >> $configfile echo '}' >> $configfile ## isc-dhcpd Konfiguration vorbereiten echo -e "\nlege Konfigurationsdatei $isc_serverconf an:\n" echo -e "DHCPD_CONF=$isc_configfile\nINTERFACES="$bridgeiface"" | tee $isc_serverconf echo -e "\nlege Konfigurationsdatei $isc_configfile an:\n" echo -e "subnet $isc_subnet netmask $isc_netmask { range $isc_startaddress $isc_endaddress; }\n$isc_option0 $braddress;\n$isc_option1 $dns_ip;" | tee $isc_configfile echo ## Modulerkennung WLAN wlan_modul=$(find /sys/class/net/$wlaniface/device/driver/module/drivers/ | grep usb | cut -c 55-70) lastknownmodule=$(cat $wlan_adapterfile) if [ "$second_phy" = "1" ]; then wlan_modul2=$(find /sys/class/net/$wlaniface2/device/driver/module/drivers/ | grep usb | cut -c 55-70) fi if [ "$lastknownmodule" = "" ]; then lastknownmodule="none" fi ## reinitialisiere WLAN-Adapter if [ "$second_phy" = "0" ]; then echo "WLAN-Treibermodul $wlan_modul erkannt, vorheriges Modul: $lastknownmodule" echo -e "WLAN-Adapter reinitialisieren ...\n" if [ "$wlan_modul" = "$lastknownmodule" ]; then /sbin/modprobe -rf $wlan_modul sleep 1 /sbin/modprobe $wlan_modul sleep 1 else /sbin/modprobe -rf $lastknownmodule sleep 1 /sbin/modprobe -rf $wlan_modul sleep 1 /sbin/modprobe $wlan_modul sleep 1 echo $wlan_modul > $wlan_adapterfile sleep 1 fi fi if [ "$second_phy" = "1" ]; then echo "WLAN-Treibermodul 1 $wlan_modul erkannt" echo "WLAN-Treibermodul 2 $wlan_modul2 erkannt" /sbin/modprobe -rf $wlan_modul $wlan_modul2 sleep 1 echo "lade Module $wlan_modul $wlan_modul2" /sbin/modprobe $wlan_modul sleep 1 /sbin/modprobe $wlan_modul2 sleep 1 fi ## MAC-Adress Konfiguration WLAN-Interface if [ "$second_phy" = "0" ]; then currentmac=$(ifconfig $wlaniface | grep -i link | awk {'print $6'}) cutmac=$(ifconfig $wlaniface | grep -i link | awk {'print $6'} | cut -c 1-15) newmacaddress=$cutmac$lastoctet echo "erkannte MAC-Adresse des WLAN-Adapters" $currentmac sleep 1 fi ## deaktivate WLAN-Powermanagement / set Tx-Power echo "setze Stromsparmechanismen für $wlaniface (Powersave = $powersave)" /sbin/iw dev $wlaniface set power_save $powersave sleep 1 if [ "$second_phy" = "1" ]; then echo "setze Stromsparmechanismen für $wlaniface2 (Powersave = $powersave)" /sbin/iw dev $wlaniface2 set power_save $powersave sleep 1 echo "setze Sendeleistung des WLAN-Adapters $wlaniface2 ($txpower2"dBm")" /sbin/iwconfig $wlaniface2 txpower $txpower2 sleep 1 fi echo "setze Sendeleistung des WLAN-Adapters $wlaniface ($txpower"dBm")" /sbin/iwconfig $wlaniface txpower $txpower sleep 1 ## Regionseinstellung echo -e "setze Regionseinstellungen des Systems (Regionscode $regcode)\n" /sbin/iw reg set $regcode sleep $regdelay ## start hostapd echo "Starte hostapd-Service" $hostapdservice $hostapdconf sleep 1 echo ## zweite WLAN-Schnittstelle erzeugen if [ "$second_phy" = "0" ]; then ## WLAN-Schnittstellenerkennung wiphy=$(iw list | grep Wiphy | awk {'print $2'}) echo "suche WLAN-Interface ..." echo "physikalisch Schnittstelle $wiphy gefunden" echo "erzeuge zweites virtuelles WLAN-Interface $wlaniface2" /sbin/iw phy $wiphy interface add $wlaniface2 type managed sleep 1 ## MAC-Adresse ändern echo -e "ändere MAC-Adresse von $wlaniface2. Setze $newmacaddress\n" ip link set dev $wlaniface2 addr $newmacaddress sleep $wpa_delay else echo "verwende zweiten WLAN-Adapter $wlaniface2" fi ## starte WLAN-Verbindung zum Accesspoint echo "starte Verbindung zu WLAN-Accesspoint $mac - $ssid" echo "Using interface $wlaniface with hwaddr $newmacaddress" echo -e "einen Moment bitte, starte wpa_supplicant ...\n" /sbin/wpa_supplicant -D$wpadriver -i$wlaniface2 -c$configfile -B echo ## WLAN-Schnittstelle 2 konfigurieren if [ "$wlan2_dhcp" = "0" ]; then echo "WLAN-Schnittstelle 2 initialisieren (statisch)" echo -e "Interface: $wlaniface2 IP-Adresse: $wlan2_address Broadcast: $wlan2_broadcast Netzmaske: $wlan2_netmask\n" /sbin/ifconfig $wlaniface2 $wlan2_address broadcast $wlan2_broadcast netmask $wlan2_netmask /sbin/route add default gw $wlan2_gateway metric 0 dev $wlaniface2 ## DNS setzen ## verwende erkanntes Gateway echo "DNS-Konfiguration ..." if [ "$manDNS" = "0" ]; then echo -e "nameserver" $(route -n | grep UG | awk {'print $2'}) | tee /etc/resolv.conf echo else echo -e "$sys_domain\n$sys_search\n$sys_dns0\n$sys_dns1\n$sys_dns2" | tee /etc/resolv.conf sleep 1 echo fi echo -e "WLAN-Schnittstelle initialisieren (DHCP). Einen Moment bitte ...\n" /sbin/dhclient $wlaniface2 sleep 1 fi ## Bridge konfigurieren /sbin/brctl addif $bridgeiface $locallan /sbin/brctl setfd $bridgeiface $forward_delay /sbin/brctl stp $bridgeiface $stp ## Optional aktivieren # /sbin/brctl setageing $bridgeiface $brageing # /sbin/brctl setmaxage $bridgeiface $brage ## initialize Bridge-Port echo "Bridge-Schnittstelle initialisieren (statisch):" echo -e "Bridge: $bridgeiface IP-Adresse: $braddress Broadcast: $brbroadcast Netzmaske: $brnetmask\n" /sbin/ifconfig $bridgeiface $braddress broadcast $brbroadcast netmask $brnetmask /sbin/route add default gw $wangateway metric 1 dev $bridgeiface sleep 1 ## starting Services echo -e "starte isc-dhcp-server\n" echo "DHCP-Range isc-dhcp-server:" echo -e "Schnittstelle: $bridgeiface Startadresse: $isc_startaddress Endadresse: $isc_endaddress Lease: $isc_leasetime\n" service isc-dhcp-server start sleep 1 echo ## Forwarding & NAT /sbin/iptables -A FORWARD -o $wlaniface2 -i $bridgeiface -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 $wlaniface2 -j MASQUERADE echo "aktiviere Port-Forwarding ..." /sbin/sysctl -w net.ipv4.ip_forward=1 echo -e "Konfiguration beendet.\n" ## Ausgabe der aktuellen Konfiguration if [ "$showconfig" = "1" ]; then echo -e "System DNS-Check und Routing:" cat /etc/resolv.conf echo /sbin/route -n echo echo -e "Konfiguration Bridge:\n" /sbin/ifconfig $bridgeiface | egrep 'Link|inet Adresse' echo /sbin/brctl show echo /sbin/brctl showmacs $bridgeiface echo /sbin/brctl showstp $bridgeiface echo echo -e "Konfiguration lokales LAN (keine IP-Adresse im Bridged-Mode!):\n" /sbin/ifconfig $locallan | egrep 'Link|inet Adresse' echo echo -e "Konfiguration WLAN (keine IP-Adresse im Bridged-Mode!):\n" /sbin/ifconfig $wlaniface | egrep 'Link|inet Adresse' echo /sbin/iwconfig $wlaniface | egrep 'IEEE|Power|Mode' echo echo "Controll-Interface:" /sbin/iwconfig mon.$wlaniface echo "Virtuelles WLAN-Interface im Infrastruktur-Modus:" /sbin/ifconfig $wlaniface2 | egrep 'Link|inet Adresse' echo /sbin/iwconfig $wlaniface2 | egrep 'IEEE|Power|Mode' echo echo -e "Regionseinstellung des WLAN-Adapters:\n" /sbin/iw reg get echo echo "Dienstestatus:" service hostapd status service isc-dhcp-server status else exit 0 fi
Dienstekonfiguration: der isc-dhcp Server wird durch das Skript konfiguriert. Es empfiehlt sich, die ursprünglichen Konfigurationsdateien /etc/default/isc-dhcp-server
und /etc/dhcpd/dhcp.conf
vorab zu sichern. Die Einstellung für den Funkkanal (channel=4
) muss mit dem Funkkanal des WLAN-Accesspoint übereinstimmen, wenn für die Konfiguration nur ein einziger WLAN-Adapter verwendet wird! Werden zwei Adapter verwendet, so sollte der Abstand zum Funkkanal des Accesspoints mindestens 5 Kanäle betragen, um Störungen zu vermeiden.
/etc/hostapd_wlanbridge.conf:
# Schnittstelle und Treiber interface=wlan0 driver=nl80211 bridge=br0 # WLAN-Konfiguration ssid=WLAN_AP channel=4 # 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
WLAN-Router und Proxyserver¶
Erforderliche Programme:
Squid (Version 2.x oder 3.x)
Funktionsbeschreibung:
LAN/WLAN-Router im Bridged-Mode mit transparente Bridge, transparentem Proxyserver Squid und Werbeblocker Privoxy
Ethernetschnittstelle 1 verbindet zum vorhandenen Router (Internetanbindung)
WLAN-Accesspoint
Ethernetschnittstelle 2 für das lokale Netzwerk (optional)
DHCP-Server bleibt der vorhandenen (FRITZ!Box-)Router
alle Clients befinden sich im selben Netzwerk
eine Proxy-Konfiguration der Clients ist nicht erforderlich, da transparente Konfiguration des Proxyservers
instant_AP-bridge_Proxy.sh:
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 348 349
#!/bin/bash ## Instant WLAN Access-Point an Ethernet Router with transparent bridged interfaces ## for Raspberry Pi™ with Raspian and other Linux based Systems ## ## with transparent Proxyserver Squid and Privoxy Contentfilter ## ## elektronenblitz63 ubuntuusers.de 2013 ## published under GPL v3 ## ## Version 1.7.1.4bp / 08. ONovember 2013 ## have fun :-) ## freie Variablen ## Source-Interface / WAN-Schnittstelle ## durch die interfaces gesteuerte Schnittstelle für die Internetverbindung ## Bezeichnung ggf. anpassen ## Standard eth0 / Ethernet sourceiface=eth0 ## Bridge-Konfiguration bridgeiface=br0 forward_delay=2 stp=1 # optional brageing=10000 brage=40 # WLBridge statisch (0) oder dynamisch (1) konfigurieren (0 statisch/Standard) # bedingt empfehlenswert, da so wechselnde IP-Adresse möglich # die IP-Adresseinstellungen in Squid, Privoxy und Tor müssenn dementsprechend angepasst werden. bridge_dhcp=0 ## Adresskonfiguration statisch / IP-Bereich ggf. anpassen # die IP-Adresseinstellungen in Squid, Privoxy müssenn dementsprechend angepasst werden. braddress=192.168.178.5 brbroadcast=192.168.178.255 brnetmask=255.255.255.0 ## IP-Adresse des Routers/Gateway wangateway=192.168.178.1 ## manuelle DNS-Konfiguration aktiviert (1) oder deaktiviert (0) (Standard) manDNS=1 # manuelle DNS-Konfiguration sys_domain="domain fritz.box" sys_search="search fritz.box" sys_dns0="nameserver 192.168.178.1" ## optional DNS 2 & 3 aktivieren ## Beispiel # sys_dns1="nameserver 8.8.4.4" # sys_dns2="nameserver 8.8.8.8" sys_dns1="" sys_dns2="" ## Konfiguration der WLAN-Schnittstelle die den Accesspoint erzeugt ## Bezeichnung ggf. anpassen wlaniface=wlan0 ## aut. Modulerkennung aktiviert (1) oder abgeschaltet (0) ## nur für RaspberryPi auto_ident=1 ## verwendetes WLAN-Modul bei auto_ident=0 eintragen wlan_modul="carl9170" ## Konfiguration der lokalen LAN-Schnittstelle ## Bezeichnung ggf. anpassen locallan=eth1 ## lokales LAN aktivieren (1), oder nicht (0) ## abschalten, sollte keine zweite Ethernetschnittstelle vorhanden sein locallan_on=1 # Sendeleistung einstellen # Optionen: auto|fixed|limit txpoweroption="limit" # tx power in dBm txpower=15 ## Regionseinstellung regcode="DE" regdelay=3 # Lease-Time leasetime=infinite ## Steuerung hostapd hostapdservice="hostapd -B" hostapdconf="/etc/hostapd_wlanbridge.conf" ## Iptables-Filter bei Programmende löschen # Standard=1 # bei pppoe-Verbindungen oder Bridge-Konfiguration auf 0 setzen delfilter=1 ## zeige Konfiguration nach Ablauf des Skripts (1/0) ## zur Diadnose bei Fehlfunktionen showconfig=1 ##Konfigurationsdatei Info zuletzt erkannter WLAN-Adapter/Treibermodul wlan_adapterfile="wlan_adapter.txt" ## verwendete Squid-version (v2.x - v3.x) ## squid v2.x - squid=squid ## squid v3.x - squid=squid3 squid=squid3 ## Ende freie Variablen # Skript if [ "$1" = "-h" ]; then echo Verwendung: instant_AP-bridge.sh [-start] [-stop] [-h] echo Syntax: echo "sudo ./instant_AP-bridge_Proxy.sh -start startet den AP" echo "sudo ./instant_AP-bridge_Proxy.sh -stop beendet die Konfiguration und schließt den AP" echo "sudo ./instant_AP-bridge_Proxy.sh beendet die Konfiguration und schließt den AP" echo "Ende" exit fi echo -e "Konfiguration ausführen\n" # Konfiguration löschen, Dienste stoppen sleep 1 service hostapd stop /usr/bin/killall hostapd service $squid stop service privoxy stop service tor stop /usr/bin/killall dnsmasq squid /bin/rm -f /var/run/hostapd/$wlaniface /sbin/sysctl -w net.ipv4.ip_forward=0 ## Bridge löschen echo "lösche Bridge und Konfiguration" /sbin/brctl delif $bridgeiface $sourceiface /sbin/brctl delif $bridgeiface $locallan /sbin/ifconfig $bridgeiface down /sbin/brctl delbr $bridgeiface echo "entferne WAN-Konfiguration" /sbin/ifconfig $sourceiface 0.0.0.0 sleep 1 /sbin/ifconfig $sourceiface down echo "entferne LAN-Konfiguration" /sbin/ifconfig $locallan 0.0.0.0 sleep 1 /sbin/ifconfig $locallan down echo "entferne WLAN-Konfiguration" /sbin/iwconfig $wlaniface mode managed sleep 1 /sbin/ifconfig $wlaniface 0.0.0.0 sleep 1 /sbin/ifconfig $wlaniface down sleep 2 if [ "$delfilter" = "1" ]; then echo "lösche iptables-Filter" /sbin/iptables -F /sbin/iptables -X /sbin/iptables -t nat -F /sbin/modprobe -rfv iptable_nat ipt_MASQUERADE xt_conntrack iptable_filter fi echo "Router & WLAN Access-Point Konfiguration beendet." if [ "$1" != "-start" ]; then echo "stoppe alle Dienste, und Verbindungen" exit fi ## start Konfiguration echo -e "Starte alle Dienste, und Verbindungen\n" ## Modulerkennung WLAN if [ "$auto_ident" = "1" ]; then wlan_modul=$(find /sys/class/net/$wlaniface/device/driver/module/drivers/ | grep usb | cut -c 55-70) lastknownmodule=$(cat $wlan_adapterfile) echo "WLAN-Treibermodul $wlan_modul erkannt, vorheriges Modul: $lastknownmodule" else echo "Autoerkennung des WLAN-Treibermodul deaktiviert." echo -e "verwendet $wlan_modul\n" echo $wlan_modul > $wlan_adapterfile fi lastknownmodule=$(cat $wlan_adapterfile) if [ "$lastknownmodule" = "" ]; then lastknownmodule="none" echo "WLAN-Treibermodul $wlan_modul erkannt, vorheriges Modul: $lastknownmodule" fi ## reinitialisiere WLAN-Adapter echo -e "WLAN-Adapter reinitialisieren ...\n" if [ "$wlan_modul" = "$lastknownmodule" ]; then /sbin/modprobe -rf $wlan_modul sleep 1 /sbin/modprobe $wlan_modul sleep 1 else /sbin/modprobe -rf $lastknownmodule sleep 1 /sbin/modprobe -rf $wlan_modul sleep 1 /sbin/modprobe $wlan_modul sleep 1 echo $wlan_modul > $wlan_adapterfile sleep 1 fi ## initialize WAN-Port /sbin/ifconfig $sourceiface up sleep 1 ## deaktivate WLAN-Powermanagement / set Tx-Power echo -e "deaktiviere Stromsparmechanismen für $wlaniface" /sbin/iw dev $wlaniface set power_save off sleep 1 echo -e "setze Sendeleistung des WLAN-Adapters $wlaniface" # /sbin/iw dev $wlaniface set txpower $txpoweroption $txpower /sbin/iwconfig $wlaniface txpower $txpower sleep 1 ## Regionseinstellung echo -e "setze Regionseinstellung des WLAN-Adapters $wlaniface" /sbin/iw reg set $regcode sleep $regdelay ## start hostapd echo -e "Starte hostapd-Service:\n" $hostapdservice $hostapdconf sleep 1 echo ## Bridge konfigurieren /sbin/brctl addif $bridgeiface $sourceiface if [ "$locallan_on" = "1" ]; then /sbin/brctl addif $bridgeiface $locallan echo -e "Ethernerschnittstelle 2 aktiviert.\n" fi /sbin/brctl setfd $bridgeiface $forward_delay /sbin/brctl stp $bridgeiface $stp ## Optional aktivierbar # /sbin/brctl setageing $bridgeiface $brageing # /sbin/brctl setmaxage $bridgeiface $brage ## initialize Bridge-Port if [ "$bridge_dhcp" = "0" ]; then echo "Bridge-Schnittstelle $bridgeiface initialisieren (statisch):" echo -e "Interfac: $bridgeiface IP-Adresse: $braddress Broadcast: $brbroadcast Netzmaske: $brnetmask" /sbin/ifconfig $bridgeiface $braddress broadcast $brbroadcast netmask $brnetmask /sbin/route add default gw $wangateway metric 0 dev $bridgeiface sleep 1 else echo -e "Bridge $bridgeiface automatisch initialisieren (DHCP). Einen Moment bitte ...\n" /sbin/dhclient $bridgeiface sleep 1 fi /sbin/ifconfig $sourceiface up ## Forwarding to squid /sbin/iptables -t nat -A PREROUTING -i $bridgeiface -p tcp --dport 80 -j REDIRECT --to-port 3128 ## optional aktivieren #/sbin/iptables -t nat -A PREROUTING -i $bridgeiface -p tcp --dport 22 -j REDIRECT --to-ports 3128 ## starting Services echo -e "starte Proxyserver Squid\n" service $squid start sleep 1 echo -e "Starte Privoxy\n" service privoxy start sleep 1 ## DNS setzen ## verwende erkanntes Gateway echo "DNS-Konfiguration ..." if [ "$manDNS" = "0" ]; then echo -e "nameserver" $(route -n | grep UG | awk {'print $2'}) | tee /etc/resolv.conf #echo -e "nameserver 192.168.178.5" | tee /etc/resolv.conf echo else echo -e "$sys_domain\n$sys_search\n$sys_dns0\n$sys_dns1\n$sys_dns2" | tee /etc/resolv.conf sleep 1 echo fi ## Ausgabe der aktuellen Konfiguration if [ "$showconfig" = "1" ]; then echo -e "System DNS-Check und Routing:" cat /etc/resolv.conf echo /sbin/route -n echo echo -e "Konfiguration Bridge:\n" /sbin/ifconfig $bridgeiface | egrep 'Link|inet Adresse' echo /sbin/brctl show echo /sbin/brctl showmacs $bridgeiface echo /sbin/brctl showstp $bridgeiface echo echo -e "Konfiguration lokales WAN:\n" /sbin/ifconfig $sourceiface | egrep 'Link|inet Adresse' echo echo -e "Konfiguration lokales LAN:\n" /sbin/ifconfig $locallan | 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 ## Ausgabe der aktuellen Konfiguration echo -e "Regionseinstellung des WLAN-Adapters:\n" /sbin/iw reg get echo echo "Iptables:" iptables -t nat -L echo echo "Dienstestatus:" service hostapd status service $squid status service privoxy status else exit 0 fi
Dienstekonfiguration via /etc/hostapd_wlanbridge.conf:
# Schnittstelle und Treiber interface=wlan0 driver=nl80211 bridge=br0 # WLAN-Konfiguration ssid=WLAN_AP channel=4 # 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
/etc/squid3/squid.conf (hier für Squid v3.x, unter v2.x sehen die acl-Regeln für
localhost
etwas anders aus. Beachtet dazu die originalsquid.conf
nach der Installation). Die Einstellungen für den verwendeten IP-Bereich im lokalen Netzwerk muss angepasst werden. Zusätzliche Funktionen und Filterregeln, wie zeitgesteuerte Berechtigungen für einzelne Clients usw. können natürlich nach Belieben hinzugefügt werden:# WELCOME TO SQUID 3.1.20 acl manager proto cache_object acl localhost src 127.0.0.1/32 ::1 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1 # Example rule allowing access from your local networks. acl localnet src 192.168.0.0/24 # lokale Rechner freigegeben acl lokale_rechner src 192.168.178.0/24 http_access allow lokale_rechner acl SSL_ports port 443 # https acl SSL_ports port 563 # snews acl SSL_ports port 873 # rsync acl Safe_ports port 80 # http acl Safe_ports port 20 # ftp acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl Safe_ports port 631 # cups acl Safe_ports port 873 # rsync acl Safe_ports port 901 # SWAT acl purge method PURGE acl CONNECT method CONNECT # Only allow cachemgr access from localhost http_access allow manager localhost http_access deny manager # Deny requests to certain unsafe ports http_access deny !Safe_ports # Deny CONNECT to other than secure SSL ports http_access deny CONNECT !SSL_ports # We strongly recommend the following be uncommented to protect innocent # web applications running on the proxy server who think the only # one who can access services on "localhost" is a local user #http_access deny to_localhost # Example rule allowing access from your local networks. http_access allow localhost #Allow ICP queries from local networks only icp_access allow localnet icp_access deny all # And finally deny all other access to this proxy http_access deny all # Squid normally listens to port 3128 http_port 3128 transparent # Leave coredumps in the first cache dir coredump_dir /var/spool/squid3 # Add any of your own refresh_pattern entries above these. refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern . 0 20% 4320 forwarded_for off via off # Weiterleitung auf privoxy cache_peer 127.0.0.1 parent 8118 7 no-query default
/etc/privoxy/config:
# privoxy lauscht auf ... listen-address 127.0.0.1:8118 user-manual /usr/share/doc/privoxy/user-manual confdir /etc/privoxy logdir /var/log/privoxy forwarded-connect-retries 1 accept-intercepted-requests 0 allow-cgi-request-crunching 0 split-large-forms 0 keep-alive-timeout 5 socket-timeout 300 actionsfile match-all.action actionsfile default.action actionsfile user.action filterfile default.filter filterfile user.filter logfile logfile toggle 1 enable-remote-toggle 0 enable-remote-http-toggle 0 enable-edit-actions 0 enforce-blocks 0 buffer-limit 4096
Tor WLAN-Router (Onion-Router)¶
Erforderliche Programme:
Funktionsbeschreibung:
LAN/WLAN-Router im Bridged-Mode mit transparenter Bridge und Anbindung an das Tor-Netzwerk
Ethernetschnittstelle 1 verbindet zum vorhandenen Router (Internetanbindung)
WLAN-Accesspoint
Ethernetschnittstelle 2 für das lokale Netzwerk (optional)
DHCP-Server beleibt der vorhandenen Router
alle Clients befinden sich im selben Netzwerk
eine Proxy-Konfiguration der Clients und verwendeten Internetbrowser ist nicht erforderlich, da transparente Konfiguration
Zeitsynchronisation über NTP-Server (optional)
instant_AP-bridge_Tor.sh:
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
#!/bin/bash ## Instant WLAN Access-Point an Ethernet Router with transparent bridged interfaces and Tor Network ## for Raspberry Pi™ with Raspian and other Linux based Systems ## ## elektronenblitz63 ubuntuusers.de 2013 ## published under GPL v3 ## ## Version 1.7.1.4bt / 17. ONovember 2013 ## have fun :-) ## freie Variablen ## Source-Interface / WAN-Schnittstelle ## durch die interfaces gesteuerte Schnittstelle für die Internetverbindung ## Bezeichnung ggf. anpassen ## Standard eth0 / Ethernet sourceiface=eth0 ## Bridge-Konfiguration bridgeiface=br0 forward_delay=2 stp=1 # optional brageing=10000 brage=40 # Bridge statisch (0) oder dynamisch (1) konfigurieren (0 statisch/Standard) # bedingt empfehlenswert, da so wechselnde IP-Adresse möglich # die IP-Adresseinstellungen in und Tor müssenn dementsprechend angepasst werden! bridge_dhcp=0 ## Adresskonfiguration statisch / IP-Bereich an das eigene Netzwerk anpassen # die IP-Adresseinstellungen in Squid, Privoxy und Tor müssenn dementsprechend angepasst werden. braddress=192.168.178.5 brbroadcast=192.168.178.255 brnetmask=255.255.255.0 ## IP-Adresse des Routers/Gateway wangateway=192.168.178.1 ## manuelle DNS-Konfiguration aktiviert (1) oder deaktiviert (0) (Standard) manDNS=0 # manuelle DNS-Konfiguration sys_domain="domain fritz.box" sys_search="search fritz.box" sys_dns0="nameserver 192.168.178.1" ## optional DNS 2 & 3 aktivieren ## Beispiel # sys_dns1="nameserver 8.8.4.4" # sys_dns2="nameserver 8.8.8.8" sys_dns1="" sys_dns2="" ## Konfiguration der WLAN-Schnittstelle die den Accesspoint erzeugt ## Bezeichnung ggf. anpassen wlaniface=wlan0 ## aut. Modulerkennung aktiviert (1) oder abgeschaltet (0) ## nur für RaspberryPi auto_ident=1 ## verwendetes WLAN-Modul bei auto_ident=0 eintragen wlan_modul="carl9170" ## Konfiguration der lokalen LAN-Schnittstelle ## Bezeichnung ggf. anpassen locallan=eth1 ## lokales LAN aktivieren (1), oder nicht (0) ## abschalten, sollte keine zweite Ethernetschnittstelle vorhanden sein locallan_on=1 # Sendeleistung einstellen # Optionen: auto|fixed|limit txpoweroption="limit" # tx power in dBm txpower=15 ## Regionseinstellung regcode="DE" regdelay=3 # Lease-Time leasetime=infinite ## Steuerung hostapd hostapdservice="hostapd -B" hostapdconf="/etc/hostapd_tor.conf" ## Iptables-Filter bei Programmende löschen # Standard=1 # bei pppoe-Verbindungen oder Bridge-Konfiguration auf 0 setzen delfilter=1 ## zeige Konfiguration nach Ablauf des Skripts (1/0) ## zur Diadnose bei Fehlfunktionen showconfig=1 ##Konfigurationsdatei Info zuletzt erkannter WLAN-Adapter/Treibermodul wlan_adapterfile="wlan_adapter.txt" ## NTP Timeserver aktiv (1) / nicht aktiv (0) ntp_timeset=0 ntp_command="ntpdate -u" ntp_server="ntp.ubuntu.com" ## Ende freie Variablen # Skript if [ "$1" = "-h" ]; then echo Verwendung: instant_AP-bridge.sh [-start] [-stop] [-h] echo Syntax: echo "sudo ./instant_AP-bridge_Tor.sh -start startet den AP" echo "sudo ./instant_AP-bridge_Tor.sh -stop beendet die Konfiguration und schließt den AP" echo "sudo ./instant_AP-bridge_Tor.sh beendet die Konfiguration und schließt den AP" echo "Ende" exit fi echo -e "Konfiguration ausführen\n" # Konfiguration löschen, Dienste stoppen service hostapd stop /usr/bin/killall hostapd service tor stop /usr/bin/killall dnsmasq /bin/rm -f /var/run/hostapd/$wlaniface /sbin/sysctl -w net.ipv4.ip_forward=0 ## Bridge löschen echo "lösche Bridge und Konfiguration" /sbin/brctl delif $bridgeiface $sourceiface /sbin/brctl delif $bridgeiface $locallan /sbin/ifconfig $bridgeiface down /sbin/brctl delbr $bridgeiface echo "entferne WAN-Konfiguration" /sbin/ifconfig $sourceiface 0.0.0.0 sleep 1 /sbin/ifconfig $sourceiface down if [ "$locallan_on" = "1" ]; then echo "entferne LAN-Konfiguration" /sbin/ifconfig $locallan 0.0.0.0 sleep 1 /sbin/ifconfig $locallan down fi echo "entferne WLAN-Konfiguration" /sbin/iwconfig $wlaniface mode managed sleep 1 /sbin/ifconfig $wlaniface 0.0.0.0 sleep 1 /sbin/ifconfig $wlaniface down sleep 2 if [ "$delfilter" = "1" ]; then echo "lösche iptables-Filter" /sbin/iptables -F /sbin/iptables -X /sbin/iptables -t nat -F /sbin/modprobe -rfv iptable_nat ipt_MASQUERADE xt_conntrack iptable_filter fi echo "Router & WLAN Access-Point Konfiguration beendet." if [ "$1" != "-start" ]; then echo "stoppe alle Dienste, und Verbindungen" exit fi ## start Konfiguration echo -e "Starte alle Dienste, und Verbindungen\n" ## Modulerkennung WLAN if [ "$auto_ident" = "1" ]; then wlan_modul=$(find /sys/class/net/$wlaniface/device/driver/module/drivers/ | grep usb | cut -c 55-70) lastknownmodule=$(cat $wlan_adapterfile) echo "WLAN-Treibermodul $wlan_modul erkannt, vorheriges Modul: $lastknownmodule" else echo "Autoerkennung des WLAN-Treibermodul deaktiviert." echo -e "verwendet $wlan_modul\n" echo $wlan_modul > $wlan_adapterfile fi lastknownmodule=$(cat $wlan_adapterfile) if [ "$lastknownmodule" = "" ]; then lastknownmodule="none" echo "WLAN-Treibermodul $wlan_modul erkannt, vorheriges Modul: $lastknownmodule" fi ## reintialisiere WLAN-Adapter echo -e "WLAN-Adapter reinitialisieren ...\n" if [ "$wlan_modul" = "$lastknownmodule" ]; then /sbin/modprobe -rf $wlan_modul sleep 1 /sbin/modprobe $wlan_modul sleep 1 else /sbin/modprobe -rf $lastknownmodule sleep 1 /sbin/modprobe -rf $wlan_modul sleep 1 /sbin/modprobe $wlan_modul sleep 1 echo $wlan_modul > $wlan_adapterfile sleep 1 fi ## initialize WAN-Port /sbin/ifconfig $sourceiface up sleep 1 ## deaktivate WLAN-Powermanagement / set Tx-Power echo -e "deaktiviere Stromsparmechanismen für $wlaniface" /sbin/iw dev $wlaniface set power_save off sleep 1 echo -e "setze Sendeleistung des WLAN-Adapters $wlaniface" # /sbin/iw dev $wlaniface set txpower $txpoweroption $txpower /sbin/iwconfig $wlaniface txpower $txpower sleep 1 ## Regionseinstellung echo -e "setze Regionseinstellung des WLAN-Adapters $wlaniface" /sbin/iw reg set $regcode sleep $regdelay ## start hostapd echo -e "Starte hostapd-Service:\n" $hostapdservice $hostapdconf sleep 1 echo ## Bridge konfigurieren /sbin/brctl addif $bridgeiface $sourceiface if [ "$locallan_on" = "1" ]; then /sbin/brctl addif $bridgeiface $locallan echo -e "Ethernerschnittstelle 2 aktiviert.\n" fi /sbin/brctl setfd $bridgeiface $forward_delay /sbin/brctl stp $bridgeiface $stp ## Optional aktivierbar # /sbin/brctl setageing $bridgeiface $brageing # /sbin/brctl setmaxage $bridgeiface $brage ## initialize Bridge-Port if [ "$bridge_dhcp" = "0" ]; then echo "Bridge-Schnittstelle $bridgeiface initialisieren (statisch):" echo -e "Interfac: $bridgeiface IP-Adresse: $braddress Broadcast: $brbroadcast Netzmaske: $brnetmask" /sbin/ifconfig $bridgeiface $braddress broadcast $brbroadcast netmask $brnetmask /sbin/route add default gw $wangateway metric 0 dev $bridgeiface sleep 1 else echo -e "Bridge $bridgeiface automatisch initialisieren (DHCP). Einen Moment bitte ...\n" /sbin/dhclient $bridgeiface sleep 1 fi /sbin/ifconfig $sourceiface up ## Forwarding to Tor /sbin/iptables -t nat -A PREROUTING -i $bridgeiface -p tcp --dport 22 -j REDIRECT --to-ports 22 /sbin/iptables -t nat -A PREROUTING -i $bridgeiface -p udp --dport 53 -j REDIRECT --to-ports 53 /sbin/iptables -t nat -A PREROUTING -i $bridgeiface -p tcp --syn -j REDIRECT --to-ports 9040 ## starting Tor echo -e "Starte Tor ...\n" service tor start ## DNS setzen ## verwende erkanntes Gateway echo "DNS-Konfiguration ..." if [ "$manDNS" = "0" ]; then echo -e "nameserver" $(route -n | grep UG | awk {'print $2'}) | tee /etc/resolv.conf echo else echo -e "$sys_domain\n$sys_search\n$sys_dns0\n$sys_dns1\n$sys_dns2" | tee /etc/resolv.conf sleep 1 echo fi ## NTP Zeit-Syncronisation if [ "$ntp_timeset" = "1" ]; then echo "Zeitsyncronisation über $ntp_server:" $ntp_command $ntp_server fi ## Ausgabe der aktuellen Konfiguration if [ "$showconfig" = "1" ]; then echo -e "System DNS-Check und Routing:" cat /etc/resolv.conf echo /sbin/route -n echo echo -e "Konfiguration Bridge:\n" /sbin/ifconfig $bridgeiface | egrep 'Link|inet Adresse' echo /sbin/brctl show echo /sbin/brctl showmacs $bridgeiface echo /sbin/brctl showstp $bridgeiface echo echo -e "Konfiguration lokales WAN:\n" /sbin/ifconfig $sourceiface | egrep 'Link|inet Adresse' echo echo -e "Konfiguration lokales LAN:\n" /sbin/ifconfig $locallan | 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 ## Ausgabe der aktuellen Konfiguration echo -e "Regionseinstellung des WLAN-Adapters:\n" /sbin/iw reg get echo echo "Iptables:" iptables -t nat -L echo echo "Dienstestatus:" service hostapd status service tor status else exit 0 fi
Dienstekonfigurationen via /etc/tor/torrc. Dies ist nur die erforderliche Basiskonfiguration. Insbesondere die Einstellung für die sog. Entry- und Exit-Nodes sollte verfeinert werden. Genauere Informationen dazu in Tor - Konfiguration. Die IP-Einstellung für
TransListenAddress
undDNSListenAddress
ist an die tatsächliche IP-Konfiguration der Bridge anzugleichen:Log notice file /var/log/tor/notices.log AutomapHostsSuffixes .onion,.exit AutomapHostsOnResolve 1 TransPort 9040 TransListenAddress 192.168.178.5 DNSPort 53 DNSListenAddress 192.168.178.5 EntryNodes {de} ExitNodes {de}
/etc/hostapd_tor.conf:
# Schnittstelle und Treiber interface=wlan0 driver=nl80211 bridge=br0 # WLAN-Konfiguration ssid=WLAN_AP_TOR channel=4 # 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
Links¶