Creare un access point wifi

Ritratto di account31
account31
(Junior)
Offline
Junior
Iscritto: 13/08/2013
Messaggi: 16

mcortese ha scritto:

Se capisco bene, il tuo provider richiede che la macchina che si collega sia la stessa che ha fatto il login sul firewall/server (altrimenti basterebbe fare il login da PC e poi collegarsi direttamente all'AP da qualsiasi altro dispositivo). Quindi hai bisogno che il PC faccia non solo da ripetitore, ma anche da NAT, cioè faccia credere al tuo provider che tutto il traffico sia originato da lui, anche quello che in realtà proviene o è destinato ai dispositivi "a valle".

Ora, molte schede wifi possono ricevere dei pacchetti e subito ritrasmettere gli stessi pacchetti: è la funzione ripetitore che ho menzionato nel mio intervento. Ma ricevere dei pacchetti e contemporaneamente trasmetterne altri usando la stessa antenna è fisicamente impossibile: è come voler bere e parlare insieme.

Se vuoi che il tuo PC faccia da ponte (e NAT) tra due reti wifi, devi avere due schede. Se hai trovato un programma Windows che permette di farlo con un'antenna sola, sarei curioso di capire come funziona.


Dopo un po' di ricerca finalmente ho trovato il programma che avevo usato su windows si chiama connectify.

Ritratto di mcortese
mcortese
(Moderatore)
Offline
Moderatore
Iscritto: 27/02/2009
Messaggi: 2918

Molto interessante. La documentazione di Connectify Hotspot dice che Windows 7 ha introdotto la tecnologia "Virtual Wi-Fi" che permette di creare un hotspot pur rimanendo connessi ad un'altra rete wifi:

Citazione:


Thanks to the “Virtual Wi-Fi” technology that is built into Windows 7 and Windows 8, your Windows laptop can create a Wi-Fi hotspot, even while it stays connected to another Wi-Fi network.

Questo articolo sul sito Microsoft dovrebbe spiegare meglio il concetto. Prometto di leggerlo con attenzione...

Ritratto di apofis
apofis
(Monster)
Offline
Monster
Iscritto: 19/09/2007
Messaggi: 309

Ciao mcortese,
lo abbiamo usato in ufficio e, nella realtà, non funziona....
Ti blocca qualunque altro accesso (es. eth0) ed in questo caso è risultato essere un bidone.
Molto meglio maryfi, ma li si presuppone di avere un minimo di conoscenze di rete/protocolli Wink

I@ legge Apo-genetica: chini nascia tunnu un ci mora quatratu.
II@ legge Apo-genetica: munnu e munnu un s'incontranu mai, ma cristiani e cristiani sì
III@ legge Apo-genetica: si vidi nu ghiegghiu e nu lupu, ammazza 'u ghiegghiu!

Ritratto di mcortese
mcortese
(Moderatore)
Offline
Moderatore
Iscritto: 27/02/2009
Messaggi: 2918

Allora, non tutte le schede wifi, non tutti i firmware e non tutti i driver supportano questa configurazione un po' "esoterica", ma se l'hardware è quello giusto... si può fare! Big Grin Qui di seguito descrivo il procedimento di massima; per approfondimenti o esempi invito a leggere queste altre fonti: uno e due.

Quello che Windows chiama "Virtual Wifi", cioè creare due schede virtuali a partire da una sola scheda fisica, in Linux si fa così:

# iw phy phy0 interface add new0 type station
# iw phy phy0 interface add new1 type __ap
Questo crea due interfacce di rete logiche: new0, che può essere usata come una normale scheda wifi per collegarsi a Internet, e new1, che sarà quella da usare per il nostro hotspot privato.

A questo punto occorre:

  1. collegarsi a Internet usando l'interfaccia new0;
  2. fare funzionare new1 come un AP, usando hostapd;
  3. mettere in ascolto su new1 un server DHCP e un proxy DNS;
  4. collegare le due reti in modo che il traffico su una venga instradato sull'altra, previo opportuno strato NAT.

Come fare il punto 1 dipende dal provider, dal proprio ambiente, ecc. ed esula da questa discussione. Una volta attivata la connessione occorre solo accertarsi che funzioni, ad esempio con "ping www.google.com".

Per il punto 2 occorre crearsi un file di configurazione per hostapd (tipicamente /etc/hostapd.conf) avendo cura di impostare interface=new1. Gli altri parametri (SSID, sicurezza, password...) vanno personalizzati secondo le proprie esigenze. Probabilmente (ma non è scritto in modo esplicito da nessuna parte) channel dev'essere lo stesso della rete Internet, altrimenti non capisco come l'hardware della scheda potrebbe saltare da una frequenza all'altra!

Una volta configurato hostapd, bisogna eseguirlo:

# ifconfig new1 192.168.27.1 up
# hostapd -B /etc/hostapd.conf

Nota che suppongo che la nostra rete privata abbia indirizzi 192.168.27.x, dove x=1 per il PC che fa da hotspot/AP/server/router/ecc. e gli altri numeri da 2 a 99 sono per i dispositivi che si vogliono collegare.

Il punto 3 può essere svolto da un'unica applicazione, dnsmasq, che andrà configurata in modo da:

  • ascoltare su new1;
  • rispondere all'indirizzo 192.168.27.1;
  • assegnare IP nel range 192.168.27.2-99;
  • replicare (proxy) verso tale sottorete i DNS ricevuti da Internet.
Non ho mai usato dnsmasq, quindi lascio i dettagli come compito a casa Wink In alternativa a dnsmasq si può installare solo un server DHCP e configurarlo con DNS statici.

Una volta completato il punto 3, dovrebbe essere possibile collegare un dispositivo alla nostra rete privata (ma non ancora uscire su Internet) e il dispositivo dovrebbe essere in grado di fare un "ping 192.168.27.1".

Per il punto 4 ci affidiamo al kernel, che fa tutto da solo se opportunamente attivato (/proc/sys/net/ipv4/ip_forward) e configurato:

# echo 1 >/proc/sys/net/ipv4/ip_forward
# iptables --table nat --append POSTROUTING --out-interface new0 -j MASQUERADE
# iptables --append FORWARD --in-interface new1 -j ACCEPT

A questo punto i dispositivi sulla nostra rete privata dovrebbero vedere sia il PC, sia il DNS, sia qualsiasi altro host su Internet.

Ritratto di mcortese
mcortese
(Moderatore)
Offline
Moderatore
Iscritto: 27/02/2009
Messaggi: 2918

Ho fatto qualche esperimento, ottenendo un parziale successo e poi un misterioso messaggio di errore.

Andiamo per ordine. Sul mio netbook (EeePC 901) è montata una scheda wi-fi Ralink RT2790, supportata dal modulo rt2800pci e vista come wlan0. La connessione al provider è gestita da Network Manager.

Ecco i primi passi:

# service network-manager stop
# iw dev wlan0 del
# iw phy phy0 interface add new0 type station
# service network-manager start

Questo ha di fatto eliminato la connessione da wlan0 e l'ha ristabilita su new0. Due semplici ping dimostrano che router, DNS e gateway funzionano:

$ ping -c 1 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_req=1 ttl=64 time=3.07 ms
...
$ ping -c 1 www.fastweb.it
PING www.fastweb.it (62.101.76.232) 56(84) bytes of data.
64 bytes from 62-101-76-232.ip.fastwebnet.it (62.101.76.232): icmp_req=1 ttl=121 time=34.8 ms
...
$ ifconfig new0
new0      Link encap:Ethernet  HWaddr 00:15:af:22:85:53  
          inet addr:192.168.0.53  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:708 errors:0 dropped:0 overruns:0 frame:0
          TX packets:636 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:948564 (926.3 KiB)  TX bytes:114638 (111.9 KiB)

Poi è arrivato il momento di creare l'altra interfaccia di rete e cambiarne il MAC (per evitare l'errore "Name not unique on network"):

# iw phy phy0 interface add new1 type __ap
# ifconfig new1 hw ether 00:15:af:22:85:66

Ho preso la configurazione d'esempio di hostapd e l'ho modificata secondo le mie esigenze. Ecco il risultato:

$ grep '^[^#]' hostapd.connf
interface=new1
driver=nl80211
logger_syslog=-1
logger_syslog_level=2
logger_stdout=-1
logger_stdout_level=2
ssid=virtualtest
country_code=it
hw_mode=g
macaddr_acl=0
auth_algs=3
ignore_broadcast_ssid=0
eap_server=0
wpa=2
wpa_passphrase=yes we can
wpa_pairwise=TKIP CCMP
rsn_pairwise=TKIP CCMP

Ma dandolo in pasto a hostapd, il mio entusiasmo si è subito smorzato: ogni tentativo di usare l'interfaccia new1 scatena l'errore "No buffer space available".

# hostapd -B ./hostapd.connf 
Configuration file: ./hostapd.connf
Could not set interface new1 flags: No buffer space available
nl80211 driver initialization failed.
# ifconfig new1 192.168.27.1 up
SIOCSIFFLAGS: No buffer space available
SIOCSIFFLAGS: No buffer space available

... e qui mi sono arenato per il momento.

Ritratto di mcortese
mcortese
(Moderatore)
Offline
Moderatore
Iscritto: 27/02/2009
Messaggi: 2918

Buone e cattive notizie: la cattiva è che spulciando i sorgenti è venuto fuori che la famiglia di moduli rt2x00 che gestisce la mia scheda wifi non accetta un'interfaccia station e una ap insieme. Il tipo di errore restituito in questo caso è "NOBUFS". Infatti la funzione rt2x00mac_add_interface() del file drivers/net/wireless/rt2x00/rt2x00mac.c contiene:

	switch (vif->type) {
	case NL80211_IFTYPE_AP:
		/*
		 * We don't support mixed combinations of
		 * sta and ap interfaces.
		 */
		if (rt2x00dev->intf_sta_count)
			return -ENOBUFS;

La buona notizia è che questo file è stato pesantemente modificato a partire dal kernel 3.6 (il mio è un 3.2) e nella nuova versione non c'è traccia di questa limitazione. Ora provo a installare il kernel 3.10 da wheezy-backports e vedremo...

Ritratto di MariusMatutiae
MariusMatutiae
(Junior)
Offline
Junior
Iscritto: 10/09/2013
Messaggi: 15

Sforzo nobile e generoso, sono sicuro che ti stai divertendo un sacco (io al tuo posto sarei contentissimo...). Ho però paura che una rete siffatta possa operare solo a metà velocità, perchè dovrà ascoltare per metà tempo, e trasmettere per l'altra metà del tempo.

Mi sbaglio?

Numquam latravit inepte

Ritratto di account31
account31
(Junior)
Offline
Junior
Iscritto: 13/08/2013
Messaggi: 16

MariusMatutiae ha scritto:

Sforzo nobile e generoso, sono sicuro che ti stai divertendo un sacco (io al tuo posto sarei contentissimo...). Ho però paura che una rete siffatta possa operare solo a metà velocità, perchè dovrà ascoltare per metà tempo, e trasmettere per l'altra metà del tempo.

Mi sbaglio?


Non credo, quando ho usato connectify su windows non ho notato particolari rallentamenti.

Ritratto di mcortese
mcortese
(Moderatore)
Offline
Moderatore
Iscritto: 27/02/2009
Messaggi: 2918

Sì, le due reti dovranno condividere la stessa banda e la massima velocità teorica risulterà dimezzata.

Cito direttamente da http://it.wikipedia.org/wiki/Wireless_Distribution_System#Svantaggi

Citazione:

La banda utile di trasmissione viene approssimativamente dimezzata per ogni access point attraversato abbassando così l'efficienza spettrale del sistema. Sostanzialmente perché tutte le trasmissioni usano lo stesso canale radio e devono essere ritrasmesse per raggiungere la rete cablata.

Ovviamente se il traffico che passa sulla rete non è tale da saturare nemmeno mezza banda, non si noteranno rallentamenti.

Detto questo, il mio interesse per questa tecnologia è puramente "accademico": come ho suggerito in precedenza, esistono soluzioni hardware dedicate che potrebbero svolgere lo stesso compito senza occupare un PC.

Ritratto di account31
account31
(Junior)
Offline
Junior
Iscritto: 13/08/2013
Messaggi: 16

se io voglio tenere wlan0 e le due nuove schede virtuali, mi basterebbe cambiare il mac alle due schede virutali giusto?
l'unico problema è che io so cambiare il mac usando macchanger, qualcuno mi può spiegare come faccio a cambiare per sempre il mac delle due schede virtuali?