136 lines
3.6 KiB
Bash
136 lines
3.6 KiB
Bash
#!/bin/bash
|
|
|
|
# Configuration =======================================================================================================
|
|
WLAN0_IFACE="wlan0"
|
|
DHCP_IP="10.10.10.1"
|
|
DHCP_START="10.10.10.100"
|
|
DHCP_END="10.10.10.250"
|
|
|
|
SSID="$HOSTNAME"
|
|
PASSWORD="guesswhatitis"
|
|
# End of Configuration ================================================================================================
|
|
|
|
is_connected() {
|
|
[ -n "$(iwgetid -r 2>/dev/null)" ]
|
|
}
|
|
|
|
is_ap_on() {
|
|
[ "$(systemctl is-active hostapd 2>/dev/null)" == "active" ]
|
|
}
|
|
|
|
enable_ap() {
|
|
if is_ap_on; then return; fi
|
|
echo "[$(date '+%H:%M:%S')] Enabling AP: $SSID"
|
|
# Bring down wlan0 and reset it
|
|
ip link set $WLAN0_IFACE down 2>/dev/null || true
|
|
sleep 1
|
|
ip link set $WLAN0_IFACE up 2>/dev/null || true
|
|
sleep 1
|
|
# Assign static IP for AP
|
|
ip addr flush dev $WLAN0_IFACE 2>/dev/null || true
|
|
ip addr add "$DHCP_IP/24" dev $WLAN0_IFACE
|
|
# Configure hostapd
|
|
cat > /etc/hostapd/hostapd.conf <<EOF
|
|
interface=$WLAN0_IFACE
|
|
ssid=$SSID
|
|
hw_mode=g
|
|
channel=6
|
|
wpa=2
|
|
wpa_passphrase=$PASSWORD
|
|
wpa_key_mgmt=WPA-PSK
|
|
wpa_pairwise=CCMP
|
|
EOF
|
|
systemctl unmask hostapd 2>/dev/null || true
|
|
systemctl start hostapd
|
|
# Configure dnsmasq for DHCP
|
|
cat > /etc/dnsmasq.conf <<EOF
|
|
interface=$WLAN0_IFACE
|
|
dhcp-range=$DHCP_START,$DHCP_END,255.255.255.0,24h
|
|
EOF
|
|
systemctl restart dnsmasq
|
|
}
|
|
|
|
disable_ap() {
|
|
if ! is_ap_on; then return; fi
|
|
echo "[$(date '+%H:%M:%S')] Disabling AP"
|
|
systemctl stop hostapd 2>/dev/null || true
|
|
systemctl restart dnsmasq 2>/dev/null || true
|
|
ip addr del "$DHCP_IP/24" dev $WLAN0_IFACE 2>/dev/null || true
|
|
}
|
|
|
|
# Main loop
|
|
echo "AP Failover Service started"
|
|
while true; do
|
|
is_connected && disable_ap || enable_ap
|
|
sleep 30
|
|
done
|
|
root@radio:/# ls
|
|
access-point.sh boot etc lib media opt root sbin sys usr
|
|
bin dev home lost+found mnt proc run srv tmp var
|
|
root@radio:/# cat access-point.sh
|
|
#!/bin/bash
|
|
|
|
# Configuration =======================================================================================================
|
|
WLAN0_IFACE="wlan0"
|
|
DHCP_IP="10.10.10.1"
|
|
DHCP_START="10.10.10.100"
|
|
DHCP_END="10.10.10.250"
|
|
|
|
SSID="$HOSTNAME"
|
|
PASSWORD="guesswhatitis"
|
|
# End of Configuration ================================================================================================
|
|
|
|
is_connected() {
|
|
[ -n "$(iwgetid -r 2>/dev/null)" ]
|
|
}
|
|
|
|
is_ap_on() {
|
|
[ "$(systemctl is-active hostapd 2>/dev/null)" == "active" ]
|
|
}
|
|
|
|
enable_ap() {
|
|
if is_ap_on; then return; fi
|
|
echo "[$(date '+%H:%M:%S')] Enabling AP: $SSID"
|
|
# Bring down wlan0 and reset it
|
|
ip link set $WLAN0_IFACE down 2>/dev/null || true
|
|
sleep 1
|
|
ip link set $WLAN0_IFACE up 2>/dev/null || true
|
|
sleep 1
|
|
# Assign static IP for AP
|
|
ip addr flush dev $WLAN0_IFACE 2>/dev/null || true
|
|
ip addr add "$DHCP_IP/24" dev $WLAN0_IFACE
|
|
# Configure hostapd
|
|
cat > /etc/hostapd/hostapd.conf <<EOF
|
|
interface=$WLAN0_IFACE
|
|
ssid=$SSID
|
|
hw_mode=g
|
|
channel=6
|
|
wpa=2
|
|
wpa_passphrase=$PASSWORD
|
|
wpa_key_mgmt=WPA-PSK
|
|
wpa_pairwise=CCMP
|
|
EOF
|
|
systemctl unmask hostapd 2>/dev/null || true
|
|
systemctl start hostapd
|
|
# Configure dnsmasq for DHCP
|
|
cat > /etc/dnsmasq.conf <<EOF
|
|
interface=$WLAN0_IFACE
|
|
dhcp-range=$DHCP_START,$DHCP_END,255.255.255.0,24h
|
|
EOF
|
|
systemctl restart dnsmasq
|
|
}
|
|
|
|
disable_ap() {
|
|
if ! is_ap_on; then return; fi
|
|
echo "[$(date '+%H:%M:%S')] Disabling AP"
|
|
systemctl stop hostapd 2>/dev/null || true
|
|
systemctl restart dnsmasq 2>/dev/null || true
|
|
ip addr del "$DHCP_IP/24" dev $WLAN0_IFACE 2>/dev/null || true
|
|
}
|
|
|
|
# Main loop
|
|
echo "AP Failover Service started"
|
|
while true; do
|
|
is_connected && disable_ap || enable_ap
|
|
sleep 30
|
|
done |