Tips en Trucs 2012

Soft Access Point

Bij mooi weer en één of andere samenkomst in open lucht (denk aan barbecue's e.d.m.) loopt het tegenwoordig vol met mensen met draagbare computers (smartphone's, netbooks en tablets). Een moderne gastheer of -vrouw zorgt dat de gasten gebruik kunnen maken van een WiFi-verbinding. Iedereen weet dat zo'n WiFi-hotspot een beperkte reikwijdte heeft. En je best niet het wachtwoord van uw WiFi-hotspot van alledag aan iedereen meedeelt. Met behulp van een computer met een vaste ethernet verbinding naar het internet en een draadloze netwerkkaart (al dan niet via USB) maken we een extra Access Point (WiFi Hotspot). Deze opzet kan gebruikt worden op alle plaatsen waar je het bereik van een WiFi netwerk wilt vergroten, of op plaatsen waar je tijdelijk een WiFi hotspot wilt opzetten (denk aan klaslokalen, vergaderruimte, cafetaria, enz.).

Om grote afstanden te overbruggen zonder het trekken van (ethernet)kabels kan je gebruik maken van het electriciteitsnet via Powerline adapters.

De voorbereiding

Aangezien de SoftAP software niet goed samenwerkt met NetworkManager (een netwerksysteem waarmee elke gebruiker het netwerk kan configureren, vooral handig bij WiFi verbindingen) moeten we deze uitschakelen. Als vervangend netwerksysteem gebruik je het door de systeembeheerder root in te stellen traditionele systeem met ifup. In de taakbalk is het pictogram voor het instellen van het netwerk vervangen door een rood pictogram met een witte X. M.a.w. daar we NetworkManager juist hebben uitgeschakeld, kan de gebruiker het netwerk niet langer zelf instellen. Hoewel niet echt noodzakelijk, herstart je nu de computer. De kans is groot dat het opstarten van de computer veel langer duurt dan voordien. Bij het overschakelen naar de traditionele ifup methode heeft openSUSE de opstartservice NetworkManager en afgeleiden niet uitgeschakeld, m.a.w. de opstartprocedure probeert nog steeds de uitgeschakelde NetworkManager te starten, wat niet lukt en na een tijdje wordt opgegeven. Deze gefaalde opstartdiensten kun je opsporen met de volgende opdracht:
systemctl --failed list-units
UNIT                     LOAD   ACTIVE SUB    JOB DESCRIPTION
network-remotefs.service loaded failed failed     LSB: Configure the remote-fs depending network interfaces
NetworkManager.service   loaded failed failed     Network Manager

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.
JOB    = Pending job for the unit.

2 units listed. Pass --all to see inactive units, too.
Druk op de toets Q om de melding te verlaten. Deze diensten kun je met de volgende opdrachten uit de opstartprocedure halen:
sudo systemctl disable NetworkManager.service
sudo systemctl disable network-remotefs.service
Om een SoftAP op te zetten, heb je het pakket hostapd nodig.
sudo zypper install hostapd

De WiFi hotspot activeren

Deze procedure kwam tot stand na veel speurwerk, testen, opnieuw proberen, anders proberen, enz. Want volgens verschillende bronnen, werkt de hostapd bridge combinatie niet met dynamische IP adressen die je van een thuisrouter krijgt. Maar het experimenteren loonde en werkt bij mij tot grote voldoening op verschillende computers met verschillende netwerkkaarten (enkel getest met openSUSE 12.1). Daarbij is de volgorde van de uit te voeren opdrachten, zeer belangrijk.

Afwerken

Nu alles werkt, kunnen we alle opdrachten in het script SoftAP.sh verzamelen:
#!/bin/bash
# werkt enkel met de Traditionele methode ifup

# Controleer of het script met root rechten is gestart
if [[ $EUID -ne 0 ]]; then
   echo "Dit script heeft rootrechten nodig." 1>&2
   exit 1
fi

WANIF="eth0"     # Netwerkverbinding naar het internet
LANIF="wlan0"    # Netwerkverbinding naar het LAN (WiFi).
MODE="g"         # WiFi mode a,b,g
CHANNEL="6"      # Te gebruiken WiFi kanaal
ESSID="SoftAP"   # SSID (zichtbare naam) van de Hotspot
KEY="snt+-456"   # Wachtwoord

# SoftAP starten
if [ $1 = start ]; then
	ifconfig $WANIF 0.0.0.0
	brctl addbr br0
	brctl setfd br0 0
	dhclient $WANIF
	brctl addif br0 $WANIF
cat > /tmp/hostapd.conf <<:end
interface=$LANIF
driver=nl80211
channel=$CHANNEL
ssid=$ESSID
hw_mode=$MODE
auth_algs=1
# Wireless Multimedia Extension/Wi-Fi Multimedia needed for
# IEEE 802.11n (HT)
wmm_enabled=1
# 1 to enable 802.11n
ieee80211n=1
ht_capab=[HT40-][SHORT-GI-20][SHORT-GI-40]

# WEP/WPA/WPA2 bitmask, 0 for open/WEP, 1 for WPA, 2 for WPA2
wpa=2

# WPA2 settings
wpa_passphrase=$KEY
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP
rsn_pairwise=CCMP

bridge=br0
:end
	hostapd -B /tmp/hostapd.conf
	ifconfig br0 up
	dhclient br0
	ifconfig $WANIF 0.0.0.0
	route
	exit
else
# SoftAP stoppen
	ifconfig br0 down
	killall hostapd
	rm /tmp/hostapd.conf
	killall dhclient
	brctl delbr br0
	dhclient $WANIF
	route
	exit
fi
De hotspot SoftAP wordt gestart door de volgende opdracht uit te voeren:
sudo sh SoftAP.sh start
De hotspot SoftAP wordt uit de ether genomen door de volgende opdracht uit te voeren:
sudo sh SoftAP.sh stop

Handige hulpopdrachten

De gebruikte voorbeelden zijn afkomstig van een systeem die als actieve hotspot gebruikt wordt.

ip a

Toont de configuratie van uw netwerk. ip is in feite de nieuwe opdracht om een netwerk te configureren en vervangt daarbij onder andere ifconfig.
dany@linux-ezca:~> ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP qlen 1000
    link/ether 00:23:26:fb:17:0e brd ff:ff:ff:ff:ff:ff
    inet6 fe80::223:26ff:fefb:170e/64 scope link 
       valid_lft forever preferred_lft forever
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 state UP qlen 1000
    link/ether b4:82:fe:3e:3d:22 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::b682:feff:fe3e:3d22/64 scope link 
       valid_lft forever preferred_lft forever
8: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether 00:23:26:fb:17:0e brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.7/24 brd 192.168.1.255 scope global br0
    inet6 fe80::223:26ff:fefb:170e/64 scope link 
       valid_lft forever preferred_lft forever
9: mon.wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UNKNOWN qlen 1000
    link/ieee802.11/radiotap b4:82:fe:3e:3d:22 brd ff:ff:ff:ff:ff:ff

brctl show

Toont de configuratie van de netwerkbruggen.
dany@linux-ezca:~> sudo /sbin/brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.002326fb170e       no              eth0
                                                        wlan0

iw list

Toont de mogelijkheden van de Wifi verbindingen.
dany@linux-ezca:~> sudo /usr/sbin/iw list
Wiphy phy0
        Band 1:                                                                                                                                  
                Capabilities: 0x11ee
                        HT20/HT40
                        SM Power Save disabled
                        RX HT20 SGI
                        RX HT40 SGI
                        TX STBC
                        RX STBC 1-stream
                        Max AMSDU length: 3839 bytes
                        DSSS/CCK HT40
                Maximum RX AMPDU length 65535 bytes (exponent: 0x003)
                Minimum RX AMPDU time spacing: 8 usec (0x06)
                HT TX/RX MCS rate indexes supported: 0-15
                Frequencies:
                        * 2412 MHz [1] (13.0 dBm)
                        * 2417 MHz [2] (13.0 dBm)
                        * 2422 MHz [3] (13.0 dBm)
                        * 2427 MHz [4] (13.0 dBm)
                        * 2432 MHz [5] (13.0 dBm)
                        * 2437 MHz [6] (13.0 dBm)
                        * 2442 MHz [7] (13.0 dBm)
                        * 2447 MHz [8] (13.0 dBm)
                        * 2452 MHz [9] (13.0 dBm)
                        * 2457 MHz [10] (13.0 dBm)
                        * 2462 MHz [11] (13.0 dBm)
                        * 2467 MHz [12] (13.0 dBm) (passive scanning)
                        * 2472 MHz [13] (13.0 dBm) (passive scanning)
                        * 2484 MHz [14] (disabled)
                Bitrates (non-HT):
                        * 1.0 Mbps
                        * 2.0 Mbps (short preamble supported)
                        * 5.5 Mbps (short preamble supported)
                        * 11.0 Mbps (short preamble supported)
                        * 6.0 Mbps
                        * 9.0 Mbps
                        * 12.0 Mbps
                        * 18.0 Mbps
                        * 24.0 Mbps
                        * 36.0 Mbps
                        * 48.0 Mbps
                        * 54.0 Mbps
        max # scan SSIDs: 4
        max scan IEs length: 2257 bytes
        Coverage class: 0 (up to 0m)
        Available Antennas: TX 0 RX 0
        Supported interface modes:
                 * IBSS
                 * managed
                 * AP
                 * AP/VLAN
                 * WDS
                 * monitor
                 * mesh point
                 * P2P-client
                 * P2P-GO
        Supported commands:
                 * new_interface
                 * set_interface
                 * new_key
                 * new_beacon
                 * new_station
                 * new_mpath
                 * set_mesh_params
                 * set_bss
                 * authenticate
                 * associate
                 * deauthenticate
                 * disassociate
                 * join_ibss
                 * join_mesh
                 * remain_on_channel
                 * set_tx_bitrate_mask
                 * action
                 * frame_wait_cancel
                 * set_wiphy_netns
                 * set_channel
                 * set_wds_peer
                 * connect
                 * disconnect
        Supported TX frame types:
                 * IBSS: 0x0000 0x0010 0x0020 0x0030 0x0040 0x0050 0x0060 0x0070 0x0080 0x0090 0x00a0 0x00b0 0x00c0 0x00d0 0x00e0 0x00f0
                 * managed: 0x0000 0x0010 0x0020 0x0030 0x0040 0x0050 0x0060 0x0070 0x0080 0x0090 0x00a0 0x00b0 0x00c0 0x00d0 0x00e0 0x00f0
                 * AP: 0x0000 0x0010 0x0020 0x0030 0x0040 0x0050 0x0060 0x0070 0x0080 0x0090 0x00a0 0x00b0 0x00c0 0x00d0 0x00e0 0x00f0
                 * AP/VLAN: 0x0000 0x0010 0x0020 0x0030 0x0040 0x0050 0x0060 0x0070 0x0080 0x0090 0x00a0 0x00b0 0x00c0 0x00d0 0x00e0 0x00f0
                 * mesh point: 0x0000 0x0010 0x0020 0x0030 0x0040 0x0050 0x0060 0x0070 0x0080 0x0090 0x00a0 0x00b0 0x00c0 0x00d0 0x00e0 0x00f0
                 * P2P-client: 0x0000 0x0010 0x0020 0x0030 0x0040 0x0050 0x0060 0x0070 0x0080 0x0090 0x00a0 0x00b0 0x00c0 0x00d0 0x00e0 0x00f0
                 * P2P-GO: 0x0000 0x0010 0x0020 0x0030 0x0040 0x0050 0x0060 0x0070 0x0080 0x0090 0x00a0 0x00b0 0x00c0 0x00d0 0x00e0 0x00f0
        Supported RX frame types:
                 * IBSS: 0x00d0
                 * managed: 0x0040 0x00d0
                 * AP: 0x0000 0x0020 0x0040 0x00a0 0x00b0 0x00c0 0x00d0
                 * AP/VLAN: 0x0000 0x0020 0x0040 0x00a0 0x00b0 0x00c0 0x00d0
                 * mesh point: 0x00b0 0x00c0 0x00d0
                 * P2P-client: 0x0040 0x00d0
                 * P2P-GO: 0x0000 0x0020 0x0040 0x00a0 0x00b0 0x00c0 0x00d0