Le miniguide di UbaWeb

Condividere connessione internet del pc con dispositivo Android
(via WiFi atheros/ath9k)

20 dicembre 2012 - Linux 3.2.0-35-generic #55-Ubuntu SMP i686 athlon i386 GNU/Linux
Qualche giorno fa, ho comprato un cellulare con Android e ora vorrei condividere la mia connessione ad internet (mediante chiavetta 3G) del portatile, via WiFi, con il cellulare.

Come ben saprete i dispositivi Android non sono in grado di rilevare le reti wifi "ad hoc" a meno che non si sostituisca il sistema operativo originale con uno modificato.
Non volendo "riflashare" il dispositivo, si deve ricorrere ad una connessione di tipo "infrastruttura", che è correttamente supportata dai dispositivi Android.
Per farlo si deve fare in modo di trasformare la nostra scheda wifi in hotspot e qui nascono i problemi...
ho provato decine di metodi, trovati in giro per il web, ma l'unico che mi ha funzionato è quello spiegato da "mib85" (che se fosse una donna gli darei un bacio in bocca). La guida l'ho ri-trovata grazie a Nickshw, infatti avevo aperto una discussione sul problema, non sapendo più dove sbattere la testa (http://forum.ubuntu-it.org/viewtopic.php?f=49&t=545161).
La guida di "mib85" è a questo indirizzo http://forum.ubuntu-it.org/viewtopic.php?t=503784 consiglio di seguirla.
In questa pagina ripeto quanto scritto da "mib85" con qualche informazione in più riguardante, il recupero delle informazioni della scheda WiFi e i driver utilizzati.

Aggiornamento 15 maggio 2014
Creare hotspot automaticamente su Ubuntu

Ora esiste uno script che automatizza la creazione dell'hotspot su Ubuntu!
Vedere la mia miniguida che spiega i procedimenti, sia per Ubuntu 12.04-13.10 che per Ubuntu 14.04 e risoluzione dei problemi.

Recupero informazioniTorna su

  1. Su molti forum ho trovato che: "se inserendo, nel terminale, il comando 'sudo iwconfig wlan0 mode master', si ottengono messaggi di errore, allora non è possibile usare il nostro dispositivo wifi come hotspot";NON È VERO! Credo che l'errore indichi solo il mancato riconoscimento del comando di impostazione, infatti ... io ottengo...

    8-) sudo iwconfig wlan0 mode master Error for wireless request "Set Mode" (8B06) : SET failed on device wlan0 ; Invalid argument.

    Per verificare che sia realmente supportato il modo "access point", digitare nel terminale:

    iw list

    (se "iw" non è installato farlo con: sudo apt-get install iw)

    verranno stampate molte informazioni tra cui...

    ... Supported interface modes: * IBSS * managed * AP ### ok per creare hotspot ### * AP/VLAN * monitor * mesh point ...

    se è presente "AP" allora il modo Access Point è supportato 8-)

  2. Se non sono già installati istallare due programmi, che servono per assegnare automaticamente gli ip e per condividere la connessione, digitando nel terminale:

    sudo apt-get install isc-dhcp-server hostapd
  3. Individuare il modello della scheda wifi con lspci | grep network
    (per hardware usb usare lsusb al posto di lspci):

    8-) $ lspci | grep -i network 06:00.0 Network controller: Atheros Communications Inc. AR928X Wireless Network Adapter (PCI-Express) (rev 01)

    nel mio caso risulta una "Atheros AR928X"

  4. Individuare il nome dato al dispositivo di rete wifi con:sudo iwconfig

    8-) $ iwconfig lo no wireless extensions. eth0 no wireless extensions. wlan0 IEEE 802.11bgn ESSID:off/any Mode:Managed Access Point: Not-Associated Tx-Power=20 dBm Retry long limit:7 RTS thr:off Fragment thr:off Power Management:on
    nel mio caso il nome è "wlan0" (potrebbe essere anche "vlan1" o un nome diverso)
  5. Per sapere il driver usato, digitare nel terminale:
    sudo lshw -C network
    verso la fine troviamo...
    ... *-network description: Wireless interface product: AR928X Wireless Network Adapter (PCI-Express) vendor: Atheros Communications Inc. physical id: 0 bus info: pci@0000:06:00.0 logical name: wlan0 version: 01 serial: 00:17:c4:7a:1d:88 width: 64 bits clock: 33MHz capabilities: pm msi pciexpress msix bus_master cap_list ethernet physical wireless configuration: broadcast=yes driver=ath9k latency=0 multicast=yes wireless=IEEE 802.11bgn ...
    come si può vedere "driver=ath9k"
  6. Per vedere i moduli caricati digitare nel terminale: lsmod | grep ath9k
    8-) $ lsmod | grep ath9k ath9k 306398 0 mac80211 205434 1 ath9k ath 7611 1 ath9k cfg80211 126528 3 ath9k,mac80211,ath led_class 2864 2 ath9k,acer_wmi

    Hostapd funziona utilizzando il driver mac80211/nl80211
    Ora controllare se la vostra scheda wireless è supportata da hostapd: http://hostap.epitest.fi/hostapd/, se lo è si può continuare a leggere le istruzioni che seguono.
    quindi se non lo si è già fatto si possono installare: il server dhcp e "hostapad", digitando nel terminale:

    sudo apt-get install isc-dhcp-server hostapd

Configurazione Torna su

/etc/dhcp/hostapd.conf

Salvare il vecchio file che contiene le spiegazioni, con un nome diverso tipo:
sudo cp /etc/dhcp/hostapd.conf /etc/dhcp/hostapd.conf.ORIGINALE

Con un editor di testo aprire il file "/etc/dhcp/hostapd.conf"
per esempio con gedit:

sudo gedit /etc/dhcp/hostapd.conf

inserire le righe seguenti e salvare:

ddns-update-style none; default-lease-time 600; max-lease-time 7200; log-facility local7; option domain-name-servers 208.67.220.220,208.67.222.222 ; subnet 10.42.43.0 netmask 255.255.255.0 { range 10.42.43.50 10.42.43.70; option subnet-mask 255.255.255.0; option broadcast-address 10.42.43.255; option routers 10.42.43.1; }

/etc/hostapd/hostapd.conf

Ora si apre il file /etc/hostapd/hostapd.conf con:

sudo gedit /etc/hostapd/hostapd.conf
e si inseriscono le righe che seguono
interface=wlan0 driver=nl80211 ssid=hotspot channel=1 hw_mode=g auth_algs=1 wpa=3 wpa_passphrase=1234567890 wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP CCMP rsn_pairwise=CCMP

In "interface" mettiamo il valore precedentemente recuperato con iwconfig nel mio caso "wlan0"
in "ssid" mettiamo un nome che identificherà la nostra rete wifi; io ho messo "hotspot"
In pratica il mio cellulare Android elencherà, tra le reti trovate, anche "hotspot"
in "wpa_passphrase" inserire la password che servirà per poterci connettere alla rete hotspot, ho messo una serie ordinata di numeri per ricordarla meglio.

/etc/NetworkManager/dispatcher.d/02hostapd
avvio automatico della condivisione

Si crea il file /etc/NetworkManager/dispatcher.d/02hostapd con:

sudo gedit /etc/NetworkManager/dispatcher.d/02hostapd
e ci inseriamo quanto segue:
#!/bin/bash IF=$1 STATUS=$2 if [ "$IF" == "ppp0" ] then case "$2" in up) ifconfig wlan0 10.42.43.1/24 iptables -t nat -A POSTROUTING -s 10.42.43.0/24 -o ppp0 -j MASQUERADE iptables -A FORWARD -s 10.42.43.0/24 -o ppp0 -j ACCEPT iptables -A FORWARD -d 10.42.43.0/24 -m state --state ESTABLISHED,RELATED -i ppp0 -j ACCEPT echo 1 >/proc/sys/net/ipv4/conf/all/forwarding echo 'INTERFACES=wlan0' >/etc/default/dhcp dhcpd wlan0 hostapd -d /etc/hostapd/hostapd.conf HPID=`pidof hostapd` ;; down) kill $HPID ;; pre-up) ;; post-down) ;; *) ;; esac fi

Semmai sostituite "wlan0" con il nome dato al vostro dispositivo, poi salvare e modificare i permessi con:

sudo chmod +x /etc/NetworkManager/dispatcher.d/02hostapd

Questo script serve per abilitare automaticamente la condivisione della connessione appena ci si connette con ppp0.

Salvare, riavviare e connettersi ad internet; se attiviamo il WiFi, in Android si dovrebbe vedere nella lista delle reti anche la nostra "hotspot", selezionarla ed inserire la password "1234567890"... fatto!
Ora se si prova a navigare su internet con il cellulare dovrebbe funzionare.

Abilitazione connessione manuale

Se si vuol far partire la condivisione di rete manualmente, invece di inserire lo script /etc/NetworkManager/dispatcher.d/02hostapd si crea uno script con un nome a piacere per esempio:

sudo gedit $HOME/avvia_condivisione.sh
e ci inseriamo:
#!/bin/bash ifconfig wlan0 10.42.43.1/24 iptables -t nat -A POSTROUTING -s 10.42.43.0/24 -o ppp0 -j MASQUERADE iptables -A FORWARD -s 10.42.43.0/24 -o ppp0 -j ACCEPT iptables -A FORWARD -d 10.42.43.0/24 -m state --state ESTABLISHED,RELATED -i ppp0 -j ACCEPT echo 1 >/proc/sys/net/ipv4/conf/all/forwarding echo 'INTERFACES=wlan0' >/etc/default/dhcp dhcpd wlan0 hostapd -d /etc/hostapd/hostapd.conf

si salva e si rende eseguibile con:

chmod +x $HOME/avvia_condivisione.sh

Per far partire la rete aprire un terminale nella home (o dove si è salvato lo script) e digitare:

sudo ./avvia_condivisione.sh
e premere Invio

P.S.: Dimenticavo! La prima connessione ad internet deve essere effettuatua tramite Network Manager e non attraverso altri programmi indipendenti (es. Onda Connection Manager) altrimenti la rete "hotspot" non viene impostata correttamente.

Mi pare sia tutto! Buona navigazione da hotspot 8-)

Su Android

Applicazioni Impostazioni Wireless e rete Impostazioni Wi-Fi hotspot Inserire la password Salvare Connessi Dati Su Google Maps Torna su

Sito realizzato da: UbaWeb di Giovanni Ubaldi

Licenza Creative Commons Tutto il contenuto di questo sito se non diversamente dichiarato è di Giovanni Ubaldi ed è distribuito con Licenza:

Creative Commons Attribuzione - Condividi allo stesso modo 4.0 Internazionale.