Files

61 lines
1.7 KiB
Bash
Executable File

#!/bin/sh
# Reliable local-only hotspot using Android SoftAP
# 1. Turn Android Hotspot ON first
# 2. Run this script
IFACE="wlan1"
AP_IP="192.168.43.1"
NET="192.168.43.0/24"
DHCP_RANGE="192.168.43.10,192.168.43.50,12h"
[ "$(id -u)" -ne 0 ] && { echo "Need root"; exit 1; }
if ! ip link show "$IFACE" >/dev/null 2>&1; then
echo "Turn the Android Hotspot ON first, then run this script."
exit 1
fi
echo "[*] Taking control of Android SoftAP on $IFACE..."
# Only kill DHCP, leave Android's hostapd running
killall dnsmasq 2>/dev/null
sleep 1
# Disable reverse path filter
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/$IFACE/rp_filter 2>/dev/null
# Add our gateway IP (keep whatever Android already has)
ip addr add $AP_IP/24 broadcast 192.168.43.255 dev $IFACE 2>/dev/null
ip link set $IFACE up
ip route add $NET dev $IFACE src $AP_IP 2>/dev/null
# Allow traffic
iptables -C INPUT -i $IFACE -j ACCEPT 2>/dev/null || iptables -I INPUT -i $IFACE -j ACCEPT
iptables -C OUTPUT -o $IFACE -j ACCEPT 2>/dev/null || iptables -I OUTPUT -o $IFACE -j ACCEPT
iptables -C FORWARD -i $IFACE -j ACCEPT 2>/dev/null || iptables -I FORWARD -i $IFACE -j ACCEPT
iptables -C FORWARD -o $IFACE -j ACCEPT 2>/dev/null || iptables -I FORWARD -o $IFACE -j ACCEPT
# Start our DHCP
dnsmasq \
--interface=$IFACE \
--bind-interfaces \
--dhcp-range=$DHCP_RANGE \
--dhcp-option=3,$AP_IP \
--dhcp-option=6,$AP_IP \
--port=0 \
--no-resolv \
--pid-file=/tmp/dnsmasq-$IFACE.pid &
sleep 2
echo
echo "=== Local-only Hotspot Ready ==="
echo "SSID & Password = whatever you set in Android Hotspot settings"
echo "Gateway = $AP_IP"
echo
ip -4 addr show $IFACE
echo
echo "Connect your PC and ping 192.168.43.1"