Creazione del punto di accesso WiFi su una singola interfaccia in Linux


14

Sto cercando di creare un hotspot WiFi o un punto di accesso sul mio laptop Linux. Sto usando Opensuse Kde 12.3.

Ho scoperto un software chiamato hostapdche ti consente di creare hotspot ma richiede due interfacce. Uno collegato a Internet e l'altro su cui si desidera creare il punto di accesso ( tutorial qui ). Il problema che ho è che non ho una connessione Ethernet. L' wlaninterfaccia viene utilizzata per connettersi a Internet.

Esiste un modo per creare l'hotspot sulla stessa interfaccia che è connessa a Internet (come fa il software connectify su Windows)? Stavo pensando di creare un'interfaccia virtuale (come quella creata airmon-ngper monitorare il wifi) e usarla come seconda interfaccia. È possibile?

AGGIORNARE

Ecco cosa sono stato in grado di fare fino ad ora:

1) Creare 2 interfacce (una come stazione e l'altra come punto di accesso)

  iw phy phy0 interface add mySta type station
  iw phy phy0 interface add myAcc type __ap

2) Dai loro un ID Mac separato

ifconfig myAcc hw ether A4:17:FE:6E:00:53
ifconfig myAcc 192.168.27.1 up

3) avviare hostapd sull'interfaccia myAcc

4) avviare dnsmasq per fornire l'indirizzo IP ai dispositivi di connessione

Tutto questo funziona. I dispositivi sono in grado di connettersi a questa rete e ottenere l'indirizzo IP. Il prossimo passo è fornire l'IP masquerading

iptables --table nat --append POSTROUTING --out-interface mySta -j MASQUERADE
iptables --append FORWARD --in-interface myAcc -j ACCEPT

Ma l'interfaccia mySta ora non riesce a connettersi a Internet. È in grado di ottenere Essid ma non può ottenere l'indirizzo IP.

Il comando dhclient mySta non mostra alcun messaggio e dopo qualche tempo dà l'errore:

ls: cannot access /var/run/netconfig//mySta/: No such file or directory

Qualcuno può capire come ottenere l'indirizzo IP?


Hai provato con "Dummy net driver support" (driver del kernel) come modulo. Non posso aiutarti più di così perché non conosco openSUSE. Ma posso vedere che ci sono errori riportati dalla versione 11 e successive quando è costruito con Yast. Perciò stai attento.
Diblo Dk,

Ovviamente posso aiutarti, se può essere fatto nello stesso modo (Kernel config, setup di rete) di Gentoo, Debian o Ubuntu.
Diblo Dk,

Qualsiasi aiuto sarà apprezzato. Non sto usando gli strumenti Yast come tali. Le configurazioni provenivano da un tutorial su Ubuntu. Il file system e le configurazioni sono quasi uguali.
adityap174,

Qual è la tua versione del kernel?
Diblo Dk,

Kernel: x86_64 Linux 3.7.10-1.16-desktop
adityap174

Risposte:


9

Per chiunque si trovi ad affrontare questo problema, il problema era con l'indirizzo mac. Ho avviato l'interfaccia del punto di accesso, gli ho dato un indirizzo mac. Quindi, dopo aver eseguito hostapd, ha aggiunto l'interfaccia della stazione, le ha assegnato un indirizzo MAC diverso e lo ha collegato alla rete e ha fornito l'indirizzo IP della stazione come gateway predefinito dei client tramite dnsmasq.

Ora tutto funziona correttamente.

Come sottolineato da Diblo Dk, potresti usare interfacce virtuali e fittizie ma hostapd non funzionava con loro. Non so perché.

Ecco i passaggi:

  1. disattivare il servizio di gestione della rete in quanto interferisce con le interfacce virtuali
  2. abbassa wlan0 usando ifconfig wlan0 giù
  3. creare l'interfaccia del punto di accesso usando il comando iw (digitare __ap), assegnargli un indirizzo MAC e IP diverso
  4. attiva hostapd su questa interfaccia di accesso
  5. utilizzare dnsmasq per assegnare i client di connessione a questa interfaccia, gli indirizzi IP e fornire il gateway predefinito come ip dell'interfaccia della stazione da creare
  6. attiva dnsmasq nell'interfaccia di accesso. Ora il client sarà in grado di connettersi al punto di accesso e ottenere indirizzi IP.
  7. creare una nuova interfaccia (tipo stazione) assegnare un indirizzo MAC separato e collegarlo alla rete assegnando essid e usando dhclient per ottenere l'indirizzo IP.
  8. se necessario, eseguire il mascheramento ip tramite il comando iptables

per dirla senza mezzi termini, WTF hostapd :)
Diblo Dk,

Puoi aggiornare la tua risposta con i passi esatti che hai fatto. Questa è sicuramente una risposta che vorrei salvare.
Diblo Dk,

aggiornato :) vuoi maggiori dettagli?
adityap174


Quale dongle / chipset stavi usando?
Alvin,

2

Installa una rete fittizia

1 Aprire la console

su -

2 Verifica se disponi di un driver fittizio

modprobe -l | grep /net/dummy.ko

(!) Se non si dispone di un driver fittizio, andare su " Crea modulo kernel ".

3 Caricare il driver fittizio

modprobe dummy

(!) Non aggiungerlo all'avvio se fallisce.

4 Test dummy0 montandolo

ifconfig dummy0 10.246.75.1 netmask 255.255.255.0 broadcast 10.246.75.255 up

ifconfig

Ti darà un risultato simile.

dummy0  Link encap:Ethernet  HWaddr 00:2D:32:3E:39:3B
        inet addr:10.246.75.1  Bcast:10.246.75.255  Mask:255.255.255.0
        ...

5 Aggiungi driver fittizio all'avvio

Modifica il file sys del kernel.

nano /etc/sysconfig/kernel

e aggiungi " fittizio " a MODULES_LOADED_ON_BOOT.

MODULES_LOADED_ON_BOOT = "..."

Ex. MODULES_LOADED_ON_BOOT = "vmcp dummy".

6 Configurare le impostazioni di rete per dummy0

Crea il file ifcfg-dummy0.

nano /etc/sysconfig/network/ifcfg-dummy0

Aggiungi al file ifcfg-dummy0:

# Configuration for dummy0
BOOTPROTO=static

# This line ensures that the interface will be brought up during boot.
STARTMODE=onboot

# dummy0 - This is the main IP address that will be used for most outbound connections.
# The address, netmask and gateway are all necessary. The metric is not necessary but
# ensures you always talk to the same gateway if you have multiple public IPs from
# different subnets.
IPADDR=10.246.75.1
NETMASK=255.255.255.0
BROADCAST=10.246.75.255
GATEWAY=10.246.75.1



Crea il modulo del kernel

1 Prima installare le cose necessarie

Apri YaST.

Passare a Software-> Software Management.

tick:

Development 

[X] Base Development
[X] Linux Kernel Development
[X] C/C++ Development

2 Torna alla console e vai al sorgente del kernel

cd /usr/src/linux

3 Importare la configurazione corrente del kernel

zcat /proc/config.gz > .config

4 Apri il kernel menuconfig

make menuconfig

5 Aggiungi supporto per driver di rete fittizio

Passare a Device Drivers->Network device support

* Network core driver support
    M Dummy net driver support

(!) Se hai un asterisco accanto a "Supporto driver core di rete" puoi saltare i passaggi 7 e 9.

6 Compilare il kernel

make -j(n+1)

Dove (n + 1) = numero di core della CPU più uno utilizzato per accelerare la compilazione. Per quattro core usate make -j5.

7 Installa il nuovo kernel

make install

8 Installare i moduli

make modules_install

9 Carica il nuovo kernel

reboot



Definizione di un VIPA (la parte relativa al caricamento del modulo e ifcfg-dummy0): http://wiki.linuxvm.org/wiki/Defining_a_VIPA
Configura IP statici: https://www.linode.com/wiki/index.php/Configure_Static_IPs
openSUSE 12.3 e installazione di nuove versioni del kernel Linux da kernel.org: http://forums.opensuse.org/blogs/jdmcdaniel3/opensuse-installing-new-linux-kernel-versions-134/
OpenSUSE 11.2 - Come compilare un kernel per i principianti : http://linuxtweaking.blogspot.dk/2010/04/opensuse-112-how-to-compile-kernel-for.html


Grazie per una spiegazione così dettagliata. Ho provato questo metodo. Sono stato in grado di creare l'interfaccia dummy0 e iniziare all'avvio. Ma come si fa a diventare un'interfaccia wireless? iwconfig dà: dummy0 nessuna estensione wireless. hostapd non funziona con questo. Dà errore: inizializzazione del driver nl80211 non riuscita
adityap174,

Sì, il problema è che hai un conflitto IP. Ma potrebbe essere fatto con il modulo Pseudo (Assegna più indirizzi IP). Dammi un po 'di tempo per cercare il tuo sistema.
Diblo Dk,

Puoi anche guardare qui linode.com/wiki/index.php/Configure_Static_IPs#OpenSUSE Potrebbe essere che puoi vedere come fare con wlan :)
Diblo Dk,

, il problema è che si verificherà un conflitto IP *
Diblo Dk,

1

Crea un'interfaccia virtuale

Crea il file ifcfg-wlan0: 0

nano /etc/sysconfig/network/ifcfg-wlan0:0

Aggiungi al file ifcfg-wlan0: 0:

DEVICE=wlan0:0

# Configuration for wlan0:0
ONBOOT=yes

# This line ensures that the interface will be brought up during boot.
BOOTPROTO=static

# wlan0:0 - This is the main IP address that will be used for most outbound connections.
# The address, netmask and gateway are all necessary. The metric is not necessary but
# ensures you always talk to the same gateway if you have multiple public IPs from
# different subnets.
IPADDR=10.246.75.1
NETMASK=255.255.255.0
BROADCAST=10.246.75.255
GATEWAY=10.246.75.1

I comandi per attivare l'interfaccia

ifup wlan0:0

Nota: anche la chiusura dell'interfaccia principale comporta la chiusura di tutti i suoi alias. Gli alias possono essere arrestati indipendentemente da altre interfacce.

Controlla se l'interfaccia funziona

ifconfig

Ti darà un risultato simile.

wlan0:0  Link encap:Ethernet  HWaddr 00:2D:32:3E:39:3B
         inet addr:10.246.75.1  Bcast:10.246.75.255  Mask:255.255.255.0
         ...

http://forums.opensuse.org/english/get-technical-help-here/network-internet/461132-os-11-4-network-manager-default-connection-can-handle-virtual-interfaces.html# post2350426


anche questo non funzionava con hostapd. Ha dato lo stesso errore: Impossibile aprire il file / sys / class / net / dummy0 / phy80211 / name: nessun file o directory con dummy0 e impossibile aprire il file / sys / class / net / wlan0: 0 / phy80211 / name: Nessun file o directory di questo tipo con l'interfaccia virtuale. Grazie per tutto il vostro aiuto. :) Il problema era con l'indirizzo mac. Ho valutato le tue risposte e sto pubblicando la soluzione per gli altri.
adityap174
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.