Criando ponto de acesso WiFi em uma única interface no Linux


14

Estou tentando criar um ponto de acesso WiFi ou um ponto de acesso no meu laptop Linux. Estou usando o Opensuse Kde 12.3.

Eu descobri um software chamado hostapdque permite criar hotspot, mas requer duas interfaces. Um conectado à Internet e o outro no qual você deseja criar o ponto de acesso ( tutorial aqui ). O problema que tenho é que não tenho conexão Ethernet. A wlaninterface está sendo usada para conectar-se à Internet.

Existe alguma maneira de criar o ponto de acesso na mesma interface que está conectada à Internet (como o software connectify faz no Windows)? Eu estava pensando em criar uma interface virtual (como a que airmon-ngcria para monitorar o wifi) e usá-la como segunda interface. Isso é possível?

ATUALIZAR

Aqui está o que eu tenho sido capaz de fazer até agora:

1) Crie 2 interfaces (uma como estação e a outra como ponto de acesso)

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

2) Dê a eles Mac ID separado

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

3) inicie o hostapd na interface myAcc

4) inicie o dnsmasq para fornecer o endereço IP aos dispositivos de conexão

Tudo isso funciona. Os dispositivos podem se conectar a esta rede e obter o endereço IP. O próximo passo é fornecer o mascaramento de IP

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

Mas a interface do mySta agora não consegue se conectar à Internet. É capaz de obter o Essid, mas não pode obter o endereço IP.

O comando dhclient mySta não mostra nenhuma mensagem e, após algum tempo, dá o erro:

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

Alguém pode descobrir como obter o endereço IP?


Você já tentou usar o "suporte de driver de rede Dummy" (driver do Kernel) como módulo. Não posso ajudá-lo mais do que isso, porque não conheço o openSUSE. Mas posso ver que há erros relatados a partir da versão 11 e superior quando ela é criada com o Yast. Por isso tem cuidado.
Diblo Dk

É claro que posso ajudá-lo, se isso puder ser feito da mesma maneira (configuração do Kernel, configuração de rede) que no Gentoo, Debian ou Ubuntu.
Diblo Dk

Qualquer ajuda será apreciada. Não estou usando as ferramentas do Yast como tal. As configurações foram de um tutorial no Ubuntu. O sistema de arquivos e as configurações são quase as mesmas.
precisa saber é o seguinte

Qual é a sua versão do kernel?
Diblo Dk

Kernel: x86_64 Linux 3.7.10-1.16-desktop
adityap174

Respostas:


9

Para qualquer outra pessoa que enfrenta esse problema, o problema está no endereço mac. Comecei a interface do ponto de acesso, dei um endereço mac. Depois de executar o hostapd, adicionou a interface da estação, deu um endereço MAC diferente e conectou-o à rede e deu o endereço IP da estação como o gateway padrão dos clientes através do dnsmasq.

Agora tudo está funcionando corretamente.

Como apontado por Diblo Dk, você pode usar interfaces virtuais e fictícias, mas o hostapd não estava trabalhando com elas. Não sei porque.

Aqui estão os passos:

  1. desative o serviço de gerenciador de rede, pois interfere nas interfaces virtuais
  2. desligue a wlan0 usando o ifconfig wlan0 para baixo
  3. crie uma interface de ponto de acesso usando o comando iw (digite __ap), atribua a ele um endereço MAC e IP diferente
  4. ative o hostapd nessa interface de acesso
  5. use dnsmasq para atribuir os clientes conectados a essa interface, endereços IP e forneça o gateway padrão como o IP da interface da estação a ser criada
  6. ative o dnsmasq na interface de acesso. Agora o cliente poderá se conectar ao ponto de acesso e obter endereços IP.
  7. crie uma nova interface (digite estação) atribua a ele um endereço MAC separado e conecte-o à rede atribuindo essid e usando dhclient para obter o endereço IP.
  8. se necessário, execute o mascaramento de IP através do comando iptables

para ser franco, WTF hostapd :)
Diblo Dk

Você pode atualizar sua resposta com as etapas exatas que você fez. Essa é definitivamente uma resposta que eu gostaria de salvar.
Diblo Dk

atualizado :) quer mais detalhes?
precisa saber é o seguinte

Arrefecer maneira de contornar o problema :)
Diblo Dk

Qual dongle / chipset você estava usando?
Alvin

2

Configurar uma rede fictícia

1 Abra o console

su -

2 Veja se você tem um driver fictício

modprobe -l | grep /net/dummy.ko

(!) Se você não possui um driver fictício, vá para " Criar módulo do kernel ".

3 Carregar driver fictício

modprobe dummy

(!) Não o adicione na inicialização, se falhar.

4 Teste o dummy0 colocando-o

ifconfig dummy0 10.246.75.1 netmask 255.255.255.0 broadcast 10.246.75.255 up

ifconfig

Isso lhe dará uma saída semelhante.

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 Adicione um driver fictício à inicialização

Edite o arquivo sys do kernel.

nano /etc/sysconfig/kernel

e adicione " fictício " a MODULES_LOADED_ON_BOOT.

MODULES_LOADED_ON_BOOT = "..."

Ex. MODULES_LOADED_ON_BOOT = "manequim vmcp".

6 Defina as configurações de rede para dummy0

Crie o arquivo ifcfg-dummy0.

nano /etc/sysconfig/network/ifcfg-dummy0

Adicione ao arquivo 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



Criar módulo do kernel

1 Primeiro instalando as coisas necessárias

Abra o YaST.

Navegue para Software-> Software Management.

Carraça:

Development 

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

2 Volte ao console e navegue até a fonte do kernel

cd /usr/src/linux

3 Importe a configuração atual do kernel

zcat /proc/config.gz > .config

4 Menuconfig do kernel aberto

make menuconfig

5 Adicionar suporte ao driver de rede Dummy

Navegue para Device Drivers->Network device support

* Network core driver support
    M Dummy net driver support

(!) Se você tiver um asterisco próximo a "Suporte ao driver principal da rede", poderá pular as etapas 7 e 9.

6 Compile o kernel

make -j(n+1)

Onde (n + 1) = número de núcleos da CPU mais um usado para acelerar a compilação. Para quatro núcleos, use make -j5.

7 Instale o novo kernel

make install

8 Instalar módulos

make modules_install

9 Carregue o novo kernel

reboot



Definindo um VIPA (a parte sobre carregamento de módulo e ifcfg-dummy0): http://wiki.linuxvm.org/wiki/Defining_a_VIPA
Configure IPs estáticos: https://www.linode.com/wiki/index.php/Configure_Static_IPs
openSUSE 12.3 e Instalando novas versões do kernel do Linux a partir do kernel.org: http://forums.opensuse.org/blogs/jdmcdaniel3/opensuse-installing-new-linux-kernel-versions-134/
OpenSUSE 11.2 - Como compilar um kernel para iniciantes : http://linuxtweaking.blogspot.dk/2010/04/opensuse-112-how-to-compile-kernel-for.html


Obrigado por uma explicação tão detalhada. Eu tentei esse método. Eu era capaz de criar uma interface dummy0 e iniciar na inicialização. Mas como você a torna uma interface sem fio? O iwconfig fornece: dummy0 sem extensões sem fio. O hostapd não funciona com isso. Dá erro: a inicialização do driver nl80211 falhou
adityap174

Sim, o problema é que você tem um conflito de IP. Mas isso pode ser feito com o módulo Pseudo (atribuir vários endereços IP). Dê-me algum tempo para procurar no seu sistema.
Diblo Dk 6/07/2013

Você também pode olhar aqui linode.com/wiki/index.php/Configure_Static_IPs#OpenSUSE Pode ser que você pode ver como fazer com wlan :)
Diblo Dk

, O problema é que você vai ter um conflito de IP *
Diblo Dk

1

Criar interface virtual

Criar arquivo ifcfg-wlan0: 0

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

Adicione ao arquivo 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

Os comandos para ativar a interface

ifup wlan0:0

Nota: Desligar a interface principal também encerra todos os seus aliases também. Os aliases podem ser desligados independentemente de outras interfaces.

Verifique se a interface funciona

ifconfig

Isso lhe dará uma saída semelhante.

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


mesmo isso não estava funcionando com o hostapd. Ele deu o mesmo erro: Não foi possível abrir o arquivo / sys / class / net / dummy0 / phy80211 / name: Não existe esse arquivo ou diretório com dummy0 e não foi possível abrir o arquivo / sys / class / net / wlan0: 0 / phy80211 / name: Esse arquivo ou diretório não existe com a interface virtual. Obrigado por toda sua ajuda. :) O problema estava no endereço mac. Voto suas respostas e estou postando a solução para outras pessoas.
precisa saber é o seguinte
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.