-
-
Save davibe/941b6932ed1c3cd6856d39428aad1762 to your computer and use it in GitHub Desktop.
Raspberry Pi: AP + client mode
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# The script configures simultaneous AP and Managed Mode Wifi on Raspberry Pi Zero W (should also work on Raspberry Pi 3) | |
# Usage: curl https://gist.githubusercontent.com/lukicdarkoo/6b92d182d37d0a10400060d8344f86e4/raw | sh -s WifiSSID WifiPass APSSID APPass | |
# Licence: GPLv3 | |
# Author: Darko Lukic <[email protected]> | |
# Special thanks to: https://albeec13.github.io/2017/09/26/raspberry-pi-zero-w-simultaneous-ap-and-managed-mode-wifi/ | |
MAC_ADDRESS="$(cat /sys/class/net/wlan0/address)" | |
CLIENT_SSID="${1}" | |
CLIENT_PASSPHRASE="${2}" | |
AP_SSID="${3}" | |
AP_PASSPHRASE="${4}" | |
# Install dependencies | |
# sudo apt -y update | |
# sudo apt -y install dnsmasq dhcpcd hostapd | |
# Populate `/etc/udev/rules.d/70-persistent-net.rules` | |
sudo bash -c 'cat > /etc/udev/rules.d/70-persistent-net.rules' << EOF | |
SUBSYSTEM=="ieee80211", ACTION=="add|change", ATTR{macaddress}=="${MAC_ADDRESS}", KERNEL=="phy0", \ | |
RUN+="/sbin/iw phy phy0 interface add ap0 type __ap", \ | |
RUN+="/bin/ip link set ap0 address ${MAC_ADDRESS} | |
EOF | |
# Populate `/etc/dnsmasq.conf` | |
sudo bash -c 'cat > /etc/dnsmasq.conf' << EOF | |
interface=lo,ap0 | |
no-dhcp-interface=lo,wlan0 | |
bind-interfaces | |
server=8.8.8.8 | |
domain-needed | |
bogus-priv | |
dhcp-range=192.168.10.50,192.168.10.150,12h | |
EOF | |
# Populate `/etc/hostapd/hostapd.conf` | |
sudo bash -c 'cat > /etc/hostapd/hostapd.conf' << EOF | |
ctrl_interface=/var/run/hostapd | |
ctrl_interface_group=0 | |
interface=ap0 | |
driver=nl80211 | |
ssid=${AP_SSID} | |
hw_mode=g | |
channel=11 | |
wmm_enabled=0 | |
macaddr_acl=0 | |
auth_algs=1 | |
wpa=2PASSPHRASE | |
wpa_passphrase=${AP_PASSPHRASE} | |
wpa_key_mgmt=WPA-PSK | |
wpa_pairwise=TKIP CCMP | |
rsn_pairwise=CCMP | |
EOF | |
# Populate `/etc/default/hostapd` | |
sudo bash -c 'cat > /etc/default/hostapd' << EOF | |
DAEMON_CONF="/etc/hostapd/hostapd.conf" | |
EOF | |
# Populate `/etc/wpa_supplicant/wpa_supplicant.conf` | |
sudo bash -c 'cat > /etc/wpa_supplicant/wpa_supplicant.conf' << EOF | |
country=US | |
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev | |
update_config=1 | |
network={ | |
ssid="${CLIENT_SSID}" | |
psk="${CLIENT_PASSPHRASE}" | |
id_str="AP1" | |
} | |
EOF | |
# Populate `/etc/network/interfaces` | |
sudo bash -c 'cat > /etc/network/interfaces' << EOF | |
source-directory /etc/network/interfaces.d | |
auto lo | |
auto ap0 | |
auto wlan0 | |
iface lo inet loopback | |
allow-hotplug ap0 | |
iface ap0 inet static | |
address 192.168.10.1 | |
netmask 255.255.255.0 | |
hostapd /etc/hostapd/hostapd.conf | |
allow-hotplug wlan0 | |
iface wlan0 inet manual | |
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf | |
iface AP1 inet dhcp | |
EOF | |
# Populate `/bin/start_wifi.sh` | |
sudo bash -c 'cat > /bin/start_wifi.sh' << EOF | |
echo 'Starting Wifi AP and client...' | |
sleep 30 | |
sudo ifdown --force wlan0 | |
sudo ifdown --force ap0 | |
sudo ifup ap0 | |
sudo ifup wlan0 | |
sudo sysctl -w net.ipv4.ip_forward=1 | |
sudo iptables -t nat -A POSTROUTING -s 192.168.10.0/24 ! -d 192.168.10.0/24 -j MASQUERADE | |
sudo systemctl restart dnsmasq | |
EOF | |
sudo chmod +x /bin/start_wifi.sh | |
crontab -l | { cat; echo "@reboot /bin/start_wifi.sh"; } | crontab - | |
echo "Wifi configuration is finished! Please reboot your Raspberry Pi to apply changes..." |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment