6 votes

Comment utiliser un appareil Android comme routeur sans connexion cellulaire ?

J'ai une tablette Android qui n'a pas de carte SIM et pas de connexion cellulaire. Est-il possible de la configurer comme un point d'accès WiFi découvrable ? Je sais que lorsque vous avez une connexion cellulaire, vous pouvez configurer le tethering et avoir un identifiant et un mot de passe qui peuvent être découverts par d'autres appareils. Est-il possible de faire cela sans connexion cellulaire ?

En fait, je n'ai pas du tout besoin d'un accès à Internet. Tout ce que je cherche, c'est à mettre en place un petit réseau local WiFi entre une tablette Android et un petit appareil fonctionnant sous Debian Linux.

3voto

Irfan Latif Points 16863

Si vous avez un accès Root et que cela ne vous dérange pas de travailler en CLI, une version plus courte du script utilisé pour Comment utiliser Android en mode répéteur Wi-Fi ? peut être utilisé pour créer un réseau hotspot à condition que votre interface WiFi prenne en charge le mode AP :

#!/system/bin/sh
set -e
#set -x

# this scripts creates a hotspot network

[ "$(id -u)" = 0 ] || { echo 'Not running as root!' >&2; exit 1; }

# check required binaries are on PATH
for bin in iw ip iptables hostapd dnsmasq
do
    ! which $bin >/dev/null || continue
    echo "$bin not found." >&2
    exit 1
done

####################
# define variables #
####################
SSID=MyAP                           # set this to your desired string (avoid spaces and non-ascii characters)
PASSCODE=foobarfoobar               # set this to your desired string (8 to 63 characters)
WIFI_INTERFACE=wlan0                # set this according to your device (check with 'lshw' or 'ip link show')
AP_INTERFACE=${WIFI_INTERFACE}-AP
DIR=/data/local/tmp/$AP_INTERFACE
SUBNET=192.168.43
IP=${SUBNET}.1

##########################
# start / stop tethering #
##########################
STOP()
(
    echo 'Cleaning up...'

    # don't print error messages
    exec >/dev/null 2>&1

    # hope there are no other instances of same daemons
    pkill -15 hostapd
    pkill -15 wpa_supplicant
    pkill -15 dnsmasq
    # remove RPDB rule and iptables rule
    ip rule del lookup main
    iptables -D INPUT -i $AP_INTERFACE -p udp -m udp --dport 67 -j ACCEPT
    # delete AP interface
    iw $AP_INTERFACE del
    rm -rf $DIR
)

if [ "$1" = stop ]
then
    STOP || true
    exit
elif [ "$1" != start ]
then
    echo 'Usage:' >&2
    printf '\t%s\n' "$(basename "$0") start|stop" >&2
    exit 1
fi

################
# basic checks #
################
if ! iw phy | grep -A10 'Supported interface modes:' | grep -q '\*[ ]*AP'
then
    echo 'AP mode not supported.' >&2
    exit 1
fi

if ! iw dev $WIFI_INTERFACE link | grep -q '^Not connected'
then
    echo 'First disconnect form Wi-Fi.' >&2
    exit 1
fi

##########################
# stop running instances #
##########################
STOP || true

#####################################
# create virtual wireless interface #
#####################################
if ! iw dev $WIFI_INTERFACE interface add $AP_INTERFACE type __ap
then
    echo "Couldn't create AP interface." >&2
    exit 1
fi

#####################################
# configure newly created interface #
#####################################
echo 'Configuring network...'

# activate the interface and add IP
ip link set up dev $AP_INTERFACE
ip addr add ${IP}/24 broadcast ${SUBNET}.255 dev $AP_INTERFACE

# Android doesn't look up into main table by default
ip rule add lookup main

#######################
# access point daemon #
#######################
# create configuration file
mkdir -p "$DIR"
cat <<-EOF >$DIR/hostapd.conf
    # network name
    ssid=$SSID
    # passphrase to use for protected access
    wpa_passphrase=$PASSCODE

    # network interface to listen on
    interface=$AP_INTERFACE
    # wi-fi driver
    driver=nl80211

    # set operation mode, 'g' for 2.4GHz band
    hw_mode=g
    # WLAN frequency channel to use
    channel=1

    # key management protocol; use pre-share key
    wpa_key_mgmt=WPA-PSK
    # enforce WPA2
    wpa=2
EOF

echo 'Starting hostapd...'
hostapd -B $DIR/hostapd.conf

################################################
# run a dhcp server to assign IP's dynamically #
################################################
# create configuration file
cat <<-EOF >$DIR/dnsmasq.conf
    # we dont want DNS server, only DHCP
    port=0

    # nameservers to be sent to clients
    dhcp-option=6,1.1.1.1,1.0.0.1

    # range of IPs to make available to wlan devices and when to renew IP
    dhcp-range=$IP,${SUBNET}.254,24h
    # where to save leases
    dhcp-leasefile=$DIR/dnsmasq.leases

    # respond to requests from a different IP broadcast subnet
    dhcp-authoritative
    # don't look for any hosts file and resolv file
    no-hosts
    no-resolv
EOF

# open listening port
iptables -I INPUT -i $AP_INTERFACE -p udp -m udp --dport 67 -j ACCEPT

echo 'Starting DHCP server...'
dnsmasq -C $DIR/dnsmasq.conf </dev/null

echo Done.

Maintenant vous pouvez vous connecter au point d'accès MyAP en utilisant la clé foobarfoobar .

wpa_supplicant peut également être utilisé à la place de hostapd pour des cas simples comme le nôtre, mais celui qui est livré avec Android ne semble pas fonctionner. Vous devez compiler le binaire à partir des sources, ou essayer celui-ci . La configuration est encore plus simple :

...

#######################
# access point daemon #
#######################
# create configuration file
mkdir -p $DIR/wpa_supplicant
cat <<-EOF >$DIR/wpa_supplicant.conf
    ctrl_interface=$DIR/wpa_supplicant

    network={
        ssid="MyAP"
        psk="foobarfoobar"

        # force create AP network
        ap_scan=2

        # key management protocol; use pre-share key
        key_mgmt=WPA-PSK
        # enforce WPA2
        proto=RSA

        # set mode to AP
        mode=2

        # channel frequency
        frequency=2412
    }
EOF

echo 'Starting wpa_supplicant in AP mode...'
wpa_supplicant -B -D nl80211 -i $AP_INTERFACE -c $DIR/wpa_supplicant.conf

...
  • hostapd , wpa_supplicant y dnsmasq tous font partie de l'AOSP. hostapd est utilisé pour la connexion sans fil, wpa_supplicant pour les connexions WiFi et dnsmasq comme serveur DHCP/DNS (jusqu'à Pie).
  • dnsmasq n'est pas nécessaire si vous préférez une configuration IP statique.
  • Si votre appareil ne contient pas hostapd vous pouvez en obtenir un à partir d'un autre appareil ou compiler à partir des sources, ou encore essayer celui-ci .
  • Pour plus d'options de configuration, voir hostapd.conf , dnsmasq.conf y wpa_supplicant.conf . Voir le détail des canaux WiFi aquí .
  • Assurez-vous également que les deux hostapd (fonctionne avec UID 1010 AID_WIFI ) et dnsmasq (passe à l'UID 9999 AID_NOBODY ) sont capables d'établir des connexions sortantes à travers le pare-feu.
  • SELinux peut également causer des problèmes avec cette configuration manuelle, donc définissez permissive à des fins de test ou pour définir des règles de politique.
  • Puisque vous n'avez pas l'intention d'utiliser Internet, il n'est pas nécessaire de configurer le NAT et le transfert de paquets.

PS :

Si vous disposez d'une connexion cellulaire, la seule chose supplémentaire à faire est de partager l'internet. Pour les étapes supplémentaires, voir Comment créer un hotspot WiFi à partir du terminal ?

0 votes

@kocj utilisez l'un des deux binaires déjà disponibles sur votre appareil. S'ils ne fonctionnent pas, téléchargez le fichier ZIP, extrayez le fichier hostapd b

1voto

ludesign Points 929

Si vous n'avez pas besoin d'un accès à l'internet et que vous n'avez qu'un réseau local, pourquoi ne pas simplement utiliser l'application WiFi Direct ?

Vous devriez pouvoir y accéder via Paramètres > WiFi et configurer un réseau ad hoc entre votre tablette et le dispositif Debian.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X