ubuntuusers.de

WLAN-Accesspoint Konfigurationen

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

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

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:

Wiki/Icons/terminal.png

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:

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, Treibermodul carl9170.

  • 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

/squid/squid-logo.png

WLAN-Router und Proxyserver

Erforderliche Programme:

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 original squid.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_logo1.png

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 und DNSListenAddress 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

Diese Revision wurde am 1. Februar 2018 14:23 von Heinrich_Schwietering erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Internet, Shell, Netzwerk, WLAN