Tips en Trucs 2017

Software Wireless Access Point

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.

Bridged Wireless Access Point

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.

Met een Raspberry Pi

WLAN-Bridge

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

Met een openSUSE Leap 42.2 Desktop systeem

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

Met een openSUSE Leap 42.2 Laptop systeem

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