Om een Hotspot of Wireless Access Point te maken heb je een computer nodig met twee netwerkverbindingen waarvan er minstens één een WiFi verbinding moet zijn. De WiFi verbinding wordt als Access Point ingezet, terwijl de andere netwerkverbinding zorgt voor de verbinding met een bestaand netwerk en internet. De meeste Access Point worden actief bij het starten van de computer. Vandaag toon ik hoe je met scripts een Access Point opzet als je hem nodig hebt, dus bij het uitvoeren van het script.
Met het softwarepakket hostapd kan je een Access Point van de WiFi verbinding maken. Eenmaal de WiFi verbinding als Access Point werkt, verbinden we deze met de overblijvende netwerkverbinding met een brug. Deze brug zorgt dat alle netwerkverkeer dat toekomt aan het Access Point naar het netwerk (internet) wordt doorgestuurd en omgekeerd. De brug tussen de WiFi verbinding en de tweede netwerkverbinding zorgt er met andere woorden voor dat deze door het netwerk als één netwerkverbinding wordt gezien.
Raspberry Pi's worden voor allerlei zaken gebruikt en staan daardoor soms verspreid opgesteld waardoor ze uitermate geschikt zijn als Access Point. Door het volgende script op een Raspberry Pi uit te voeren, wordt deze een Access Point met de naam PindaNet met het wachtwoord pin+4567.
#!/bin/bash # Controleer of het script de bash shell gebruikt if [ -z ${BASH+x} ]; then echo "Dit is een bash script." echo "Gebruik: sudo bash SoftAP.sh" exit 1 fi # Controleer of het script met root rechten is gestart if [ $EUID != 0 ]; then echo "Dit script heeft rootrechten nodig." echo "Gebruik: sudo bash SoftAP.sh" 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="PindaNet" # SSID (zichtbare naam) van de Hotspot KEY="pin+4567" # Wachtwoord # Controleer de aanwezigheid van een WiFi netwerk interface ip a show dev $LANIF if [ $? != 0 ]; then echo "Geen WiFi interface gevonden." exit 1 fi # indien nodig hostapd en installeren if [ ! -e /usr/sbin/hostapd ]; then apt-get update apt-get upgrade -y apt-get install -y hostapd fi GATEWAY=`ip route | grep default | awk '{print $3}'` # SoftAP starten IPWAN=`ip addr show $WANIF | grep "inet " | awk '{print $2}'` BRDWAN=`ip addr show $WANIF | grep "inet " | awk '{print $4}'` ip link set dev $LANIF up dhclient eth0 -r ip link add name br0 type bridge ip link set br0 up ip link set $WANIF master br0 mv /etc/hostapd.conf /etc/hostapd.conf.ori cat > /etc/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=[HT20][SHORT-GI-20][DSSS_CK-HT40] # 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 systemctl start hostapd.service dhclient br0 ip route add default via $GATEWAY echo Access Point $ESSID is in de lucht echo Het IP adres van deze computer is $IPWAN printf '\033[1;32;40mDruk Return om het Access Point af te sluiten.\033[0;37;40m' # Groene letters op zwarte achtergrond read Keypress # SoftAP stoppen IPWAN=`ip addr show br0 | grep "inet " | awk '{print $2}'` BRDWAN=`ip addr show br0 | grep "inet " | awk '{print $4}'` ip link set br0 down systemctl stop hostapd.service mv /etc/hostapd.conf.ori /etc/hostapd.conf ip link set eth0 nomaster ip link delete br0 type bridge dhclient eth0 ip route add default via $GATEWAY ip link set dev $LANIF down echo Access Point $ESSID is niet meer in de lucht exit
Een openSUSE Leap 42.2 Desktop systeem gebruikt voor de configuratie van het netwerk wicked. Ons Access Point script wordt dan voor een openSUSE Leap 42.2 Desktop:
#!/bin/bash read -p "Wachtwoord: " -s Wachtwoord echo beheerder=`echo $Wachtwoord | su - -c 'echo $USER'` if [ "$beheerder" != 'root' ] ; then echo "Script onderbroken wegens foutief wachtwoord." exit 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="PindaNet" # SSID (zichtbare naam) van de Hotspot KEY="pin+4567" # Wachtwoord # Controleer de aanwezigheid van een WiFi netwerk interface ip a show dev $LANIF if [ $? != 0 ]; then echo "Geen WiFi interface gevonden." exit 1 fi # indien nodig hostapd en ralink firmware installeren if [ ! -e /usr/sbin/hostapd ]; then # zypper ar http://download.opensuse.org/repositories/driver:/wireless/openSUSE_12.2 Wireless # zypper --non-interactive --gpg-auto-import-keys install hostapd ralink-firmware echo $Wachtwoord | su -c "zypper --non-interactive install hostapd" fi GATEWAY=`ip route | grep default | awk '{print $3}'` systemctl show --property=UnitFileState NetworkManager.service | grep enabled NetworkManager=$? # SoftAP starten IPWAN=`ip addr show $WANIF | grep "inet " | awk '{print $2}'` BRDWAN=`ip addr show $WANIF | grep "inet " | awk '{print $4}'` if [ $NetworkManager = 0 ]; then echo $Wachtwoord | su -c "/usr/sbin/rfkill unblock 0" echo $Wachtwoord | su -c "systemctl stop NetworkManager.service" fi echo $Wachtwoord | su -c "ip link set dev $LANIF up" echo $Wachtwoord | su -c "ip addr del $IPWAN dev $WANIF" echo $Wachtwoord | su -c "ip link add name br0 type bridge" echo $Wachtwoord | su -c "ip link set br0 up" echo $Wachtwoord | su -c "ip addr add $IPWAN broadcast $BRDWAN dev $WANIF" echo $Wachtwoord | su -c "ip link set $WANIF master br0" echo $Wachtwoord | su -c "mv /etc/hostapd.conf /etc/hostapd.conf.ori" cat > 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 echo $Wachtwoord | su -c "mv hostapd.conf /etc/hostapd.conf" echo $Wachtwoord | su -c "systemctl start hostapd.service" echo $Wachtwoord | su -c "ip addr add $IPWAN broadcast $BRDWAN dev br0" echo $Wachtwoord | su -c "ip addr del $IPWAN dev $WANIF" echo $Wachtwoord | su -c "ip route add default via $GATEWAY" echo $Wachtwoord | su -c "yast2 firewall services add zone=EXT service=service:dnsmasq-dhcp" echo $Wachtwoord | su -c "yast2 firewall services add zone=EXT service=service:dnsmasq-dns" echo Access Point $ESSID is in de lucht echo Het IP adres van deze computer is $IPWAN printf '\033[1;32;40mDruk Return om het Access Point af te sluiten.\033[0;37;40m' # Groene letters op zwarte achtergrond read Keypress # SoftAP stoppen IPWAN=`ip addr show br0 | grep "inet " | awk '{print $2}'` BRDWAN=`ip addr show br0 | grep "inet " | awk '{print $4}'` echo $Wachtwoord | su -c "ip link set br0 down" echo $Wachtwoord | su -c "systemctl stop hostapd.service" echo $Wachtwoord | su -c "mv /etc/hostapd.conf.ori /etc/hostapd.conf" echo $Wachtwoord | su -c "ip link set eth0 nomaster" echo $Wachtwoord | su -c "ip link delete br0 type bridge" #echo $Wachtwoord | su -c "brctl delbr br0" echo $Wachtwoord | su -c "ip addr add $IPWAN broadcast $BRDWAN dev $WANIF" echo $Wachtwoord | su -c "ip route add default via $GATEWAY" echo $Wachtwoord | su -c "ip link set dev $LANIF down" if [ $NetworkManager = 0 ]; then echo $Wachtwoord | su -c "systemctl start NetworkManager.service" fi echo $Wachtwoord | su -c "yast2 firewall services remove zone=EXT service=service:dnsmasq-dhcp" echo $Wachtwoord | su -c "yast2 firewall services remove zone=EXT service=service:dnsmasq-dns" echo Access Point $ESSID is niet meer in de lucht exit
Een openSUSE Leap 42.2 Laptop systeem gebruikt voor de netwerkconfiguratie NetworkManager. In het volgende script wordt geen brug gebruikt, maar krijgt het WLAN netwerk en het ethernet netwerk een eigen subnet. Dit schermt bepaalde netwerkdiensten uit uw netwerk af, waardoor deze niet door WLAN gebruikers bereikbaar zijn. M.a.w. veiliger, maar minder mogelijkheden.
#!/bin/bash ESSID="PindaNet" # SSID (zichtbare naam van de Hotspot) KEY="pin+4567" # Wachtwoord read -p "Wachtwoord: " -s Wachtwoord echo beheerder=`echo $Wachtwoord | su - -c 'echo $USER'` if [ "$beheerder" != 'root' ] ; then echo "Script onderbroken wegens foutief wachtwoord." exit fi LANIF=`nmcli device | grep wifi | awk '{print $1}'` # Netwerkverbinding naar het LAN (WiFi) WANIF=`nmcli connection show --active | grep Wired | grep -v vmnet | cut -c 75-` # Netwerkverbinding naar het internet IPWAN=`ip addr show $WANIF | grep "inet " | awk '{print $2}'` # IP adres van de internet netwerkverbinding WiFiStatus=`nmcli radio wifi` nmcli radio wifi on echo $Wachtwoord | su -c "nmcli connection add type wifi con-name SoftAP ifname $LANIF ssid $ESSID" echo $Wachtwoord | su -c "nmcli connection mod SoftAP connection.autoconnect no" echo $Wachtwoord | su -c "nmcli connection mod SoftAP 802-11-wireless.mode ap" echo $Wachtwoord | su -c "nmcli connection mod SoftAP 802-11-wireless-security.key-mgmt wpa-psk" echo $Wachtwoord | su -c "nmcli connection mod SoftAP 802-11-wireless-security.psk-flags 1" echo $Wachtwoord | su -c "nmcli connection mod SoftAP ipv4.method shared" echo $Wachtwoord | su -c "nmcli connection mod SoftAP 802-11-wireless-security.psk $KEY" echo $Wachtwoord | su -c "nmcli connection up SoftAP ifname $LANIF" echo Access Point $ESSID is in de lucht echo Het IP adres van deze computer is $IPWAN echo -e '\033[1;32;40mDruk Return om het Access Point af te sluiten\033[0;37;40m.' # Groen op zwart read Keypress echo $Wachtwoord | su -c "nmcli connection down SoftAP" echo $Wachtwoord | su -c "nmcli connection delete SoftAP" if [ "$WiFiStatus" == "disabled" ]; then nmcli radio wifi off echo "WiFi uitgeschakeld." fi echo Access Point $ESSID is niet meer in de lucht