Files
mrs/access-point.sh
T
2026-08-31 19:43:28 -04:00

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