Een WAP of Wi-Fi Access Point (draadloos toegangspunt) is een apparaat dat Wi-Fi apparaten zoals smartphones, tablets, notebooks, enz. mogelijk maakt om verbinding te maken met een draadloos netwerk. Een nadeel van draadloze Wi-Fi verbindingen is dat ze over grotere afstanden minder snel werken. De nieuwe Wi-Fi componenten worden tegenwoordig vandaag zelfs standaard in Desktop computers gebouwd. Veel mensen gebruiken echter de draadverbinding naar het netwerk, deze is namelijk sneller en veel stabieler. De draadloze mogelijkheden van de desktopcomputer wordt dan helemaal niet gebruikt. Deze nieuwe desktop wi-fi componenten zijn sneller en reiken verder dan de in uw router ingebouwde wi-fi componenten. De niet gebruikte wi-fi componenten in uw desktop kunnen we dus inzetten als tweede Wi-Fi Access Point, waardoor je een betere Wi-Fi dekking krijgt. Daarenboven kan je het tweede Access Point aanbieden aan derden bij een barbecue in de tuin, edm.
Het SoftWAP script dat ik vandaag publiceer is geƫvolueerd uit het SoftAP script dat ik hier vroeger publiceerde. Het is dus een stuk moderner en houdt onder andere rekening met NetWorkManager, bestaande netwerkverbindingen en gebruikt een afzonderlijk netwerk. NetworkManager wordt in moderne distributies gebruikt om de gebruiker het netwerk zelf te laten instellen. De bestaande netwerkverbindingen worden minder agressief behandeld, waardoor andere diensten minder gestoord worden. Zo worden de VMWare diensten niet langer gestoord. Het gebruik van een apart netwerk zorgt ervoor dat je het WiFi Access Point netwerk eenvoudiger kunt afschermen van uw thuisnetwerk.
Het script gebruikt enkele apparaat afhankelijke en persoonlijke instellingen. Deze staan vooraan in het script. De apparaat afhankelijke instellingen kan je opvragen met de volgende opdracht:
dany@linux-55yl:~> ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 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 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 64:70:02:11:f2:5f brd ff:ff:ff:ff:ff:ff
inet 192.168.1.65/24 brd 192.168.1.255 scope global enp3s0
valid_lft forever preferred_lft forever
inet6 fe80::6670:2ff:fe11:f25f/64 scope link
valid_lft forever preferred_lft forever
3: eno1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
link/ether 4c:72:b9:62:8f:c4 brd ff:ff:ff:ff:ff:ff
4: wlp4s0: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN qlen 1000
link/ether f4:b7:e2:bf:ff:91 brd ff:ff:ff:ff:ff:ff
7: vmnet1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 00:50:56:c0:00:01 brd ff:ff:ff:ff:ff:ff
inet 192.168.208.1/24 brd 192.168.208.255 scope global vmnet1
valid_lft forever preferred_lft forever
inet6 fe80::250:56ff:fec0:1/64 scope link
valid_lft forever preferred_lft forever
8: vmnet8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 00:50:56:c0:00:08 brd ff:ff:ff:ff:ff:ff
inet 192.168.179.1/24 brd 192.168.179.255 scope global vmnet8
valid_lft forever preferred_lft forever
inet6 fe80::250:56ff:fec0:8/64 scope link
valid_lft forever preferred_lft forever
Daarbij stelt lo de loopback netwerkkaart voor. Deze wordt gebruikt voor interne communicatie. Netwerkkaarten waarvan de namen beginnen met de letters enp hebben in de hardware een ingebouwde locatie aanduiding. Netwerkkaarten waarvan de namen beginnen met de letters eno zijn on-board netwerkkaarten. Netwerkkaarten waarvan de namen beginnen met de letters wlp zijn draadloze Wi-Fi netwerkkaarten. De interfaces die beginnen met de letters vmnet zijn virtulele netwerkkaarten die door VMware gebruikt worden.
#!/bin/bash
#
# SoftWAP Version 14.07
# 2014 Dany Pinoy <pindanet.be>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
WANIF="enp3s0" # Naam netwerkkaart naar het internet, het huidige IP en Broadcast adres worden in de volgende tweer regels opgezocht
WANIP=`/sbin/ip -f inet -oneline addr show $WANIF | cut -d " " -f7`
WANBRD=`/sbin/ip -f inet -oneline addr show $WANIF | cut -d " " -f9`
LANIF="wlp4s0" # Netwerkverbinding naar het LAN (WiFi)
LANIP="192.168.0.1" # Het IP adres van het toekomstige Wi-Fi Access Point, mag niet in het bereik liggen van uw intern netwerk, in het voorbeeld 192.168.1.x
LANBRD="192.168.0.255" # Het broadcast adres van uw Wi-Fi Access Point (255 als laatste cijfer)
LANSUBNET="192.168.0.0" # Het Wi-Fi subnet (nul als laatste cijfer)
LANRANGE="192.168.0.100 192.168.0.200" # De IP adressen voorbehouden voor de apparaten die met het Access Point verbonden worden
MODE="g" # WiFi mode a, b, g
CHANNEL="6" # Te gebruiken WiFi kanaal, door dit aan te passen worden andere Wi-Fi netwerken minder gestoort en omgekeerd
ESSID="PindaSoftAP" # De naam van het Access Point
KEY="snt+4567" # Het wachtwoord om een verbinding met het Access Point op te bouwen
NTPSERVER=`dig be.pool.ntp.org | grep ^be.pool.ntp.org | head -1 | awk '{print $5}'`
WAIT="1" # Sommige opdrachten zetten acties in gang die wat tijd vragen, hier wordt 1 seconde gewacht, maak dit indien nodig groter
# Controleer of het script met rootrechten is gestart, m.a.w. start het script met sudo sh SoftWAP.sh
if [[ $EUID -ne 0 ]]; then
echo "Dit script heeft rootrechten nodig." 1>&2
exit 1
fi
# Controleer de aanwezigheid van de WiFi netwerkverbinding
ip a show dev $LANIF
if [ $? != 0 ]; then
echo "De WiFi verbinding $LANIF is niet actief of ontbreekt."
exit 1
fi
# Controleer de aanwezigheid van de WAN netwerkverbinding
ip a show dev $WANIF
if [ $? != 0 ]; then
echo "De internet verbinding $WANIF is niet actief of ontbreekt."
exit 1
fi
# Indien nodig hostapd installeren
if [ ! -e /usr/sbin/hostapd ]; then
zypper --non-interactive install hostapd
fi
# Indien nodig dhcp-server installeren
if [ ! -e /usr/sbin/dhcpd ]; then
zypper --non-interactive install dhcp-server
fi
# Originele hostapd configuratie veilig stellen
if [ ! -e /etc/hostapd.conf.ori ]; then
cp /etc/hostapd.conf /etc/hostapd.conf.ori
fi
# Schakel de eventuele actieve NetworkManager uit
NETWORKMANAGERACTIF=`nmcli -t -f RUNNING nm`
if [ $NETWORKMANAGERACTIF == "running" ]; then
GATEWAY=`ip route | grep default | awk '{print $3}'`
nmcli nm wifi | grep enabled
WIFIACTIF=$?
if [ $WIFIACTIF != 0 ]; then
nmcli nm wifi on
echo "WiFi geactiveerd."
sleep $WAIT # Wacht tot WiFi geïnitialiseerd is
fi
systemctl stop NetworkManager.service
echo "Networkmanager uitgeschakeld."
# Herstel de netwerkverbinding zonder NetworkManager
ip link set dev $WANIF up
sleep $WAIT
ip addr add $WANIP broadcast $WANBRD dev $WANIF
ip route add default via $GATEWAY
fi
# Initialiseer de Wi-Fi verbinding
ip link set dev $LANIF up
ip addr add $LANIP/24 broadcast $LANBRD dev $LANIF
# Originele dhcpd configuratie veilig stellen
if [ ! -e /etc/sysconfig/dhcpd.ori ]; then
cp /etc/sysconfig/dhcpd /etc/sysconfig/dhcpd.ori
fi
# Originele dhcpd configuratie veilig stellen
if [ ! -e /etc/dhcpd.conf.ori ]; then
cp /etc/dhcpd.conf /etc/dhcpd.conf.ori
fi
# dhcpd configuratie aanpassen
sed -i "s|^\(DHCPD_INTERFACE=\).*$|\1\"$LANIF\"|" /etc/sysconfig/dhcpd
yast2 firewall services add zone=INT service=service:dhcp-server
echo 'option domain-name "pinda.local";' > /etc/dhcpd.conf
echo "option ntp-servers $NTPSERVER;" >> /etc/dhcpd.conf
echo 'ldap-dhcp-server-cn "pindadhcp";' >> /etc/dhcpd.conf
echo "ddns-update-style none;" >> /etc/dhcpd.conf
echo "subnet $LANSUBNET netmask 255.255.255.0 {" >> /etc/dhcpd.conf
echo " range $LANRANGE;" >> /etc/dhcpd.conf
echo " default-lease-time 14400;" >> /etc/dhcpd.conf
echo " max-lease-time 172800;" >> /etc/dhcpd.conf
echo " option domain-name-servers $LANIP, 8.8.8.8;" >> /etc/dhcpd.conf
echo " option routers $LANIP;" >> /etc/dhcpd.conf
echo "}" >> /etc/dhcpd.conf
systemctl start dhcpd.service
# Originele SuSEfirewall2 configuratie veilig stellen
if [ ! -e /etc/sysconfig/SuSEfirewall2.ori ]; then
cp /etc/sysconfig/SuSEfirewall2 /etc/sysconfig/SuSEfirewall2.ori
fi
# De firewall instellen om het Wi-Fi verkeer naar de WAN verbinding (internet) door te sturen
sed -i "s|^\(FW_ROUTE=\).*$|\1\"yes\"|" /etc/sysconfig/SuSEfirewall2
sed -i "s|^\(FW_DEV_INT=\).*$|\1\"$LANIF\"|" /etc/sysconfig/SuSEfirewall2
sed -i "s|^\(FW_MASQUERADE=\).*$|\1\"yes\"|" /etc/sysconfig/SuSEfirewall2
systemctl restart SuSEfirewall2.service
# De Access Point software instellen
cat > /etc/hostapd.conf <<:end
interface=$LANIF
driver=nl80211
channel=$CHANNEL
ssid=$ESSID
hw_mode=$MODE
auth_algs=1
wmm_enabled=1
ieee80211n=1
ht_capab=[HT40-][SHORT-GI-20][SHORT-GI-40]
wpa=2
wpa_passphrase=$KEY
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP
rsn_pairwise=CCMP
:end
systemctl start hostapd.service
echo -e "\033[1;32;40mHet WiFi Access Point $ESSID is in de lucht.\033[0;37;40m." # Groen op zwart
echo -e '\033[1;32;40mDruk Return om het Access Point af te sluiten\033[0;37;40m.'
read Keypress
# SoftAP stoppen
systemctl stop hostapd.service
systemctl stop dhcpd.service
ip addr del $LANIP/24 dev $LANIF
ip link set dev $LANIF down
if [ $NETWORKMANAGERACTIF == "running" ]; then
ip addr del $WANIP dev $WANIF
ip link set dev $WANIF down
systemctl start NetworkManager.service
echo "Networkmanager geactiveerd."
if [ $WIFIACTIF != 0 ]; then
nmcli nm wifi off
echo "WiFi uitgeschakeld."
fi
fi
cp /etc/sysconfig/SuSEfirewall2.ori /etc/sysconfig/SuSEfirewall2
systemctl restart SuSEfirewall2.service