Creación de punto de acceso WiFi en una única interfaz en Linux

14

Estoy tratando de crear un punto de acceso WiFi o un punto de acceso en mi computadora portátil Linux. Estoy usando Opensuse Kde 12.3.

Descubrí un software llamado hostapdque te permite crear puntos de acceso, pero requiere dos interfaces. Uno conectado a Internet y el otro en el que desea crear el punto de acceso ( tutorial aquí ). El problema que tengo es que no tengo conexión Ethernet. La wlaninterfaz se está utilizando para conectarse a internet.

¿Hay alguna forma de crear el punto de acceso en la misma interfaz que está conectada a Internet (como lo hace el software connectify en Windows)? Estaba pensando en crear una interfaz virtual (como la que se airmon-ngcrea para monitorear wifi) y usarla como la segunda interfaz. es posible?

ACTUALIZAR

Esto es lo que he podido hacer hasta ahora:

1) Cree 2 interfaces (una como estación y la otra como punto de acceso)

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

2) Darles una ID de Mac separada

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

3) inicie hostapd en la interfaz myAcc

4) inicie dnsmasq para proporcionar una dirección IP a los dispositivos de conexión

Todo esto funciona. Los dispositivos pueden conectarse a esta red y obtener la dirección IP. El siguiente paso es proporcionar enmascaramiento de ip

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

Pero la interfaz mySta ahora no puede conectarse a Internet. Puede obtener el Essid pero no puede obtener la dirección IP.

El comando dhclient mySta no muestra ningún mensaje y después de un tiempo da el error:

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

¿Alguien puede descubrir cómo obtener la dirección IP?

adityap174
fuente
¿Has probado con "Dummy net driver support" (controlador del núcleo) como módulo? No puedo ayudarte más que eso porque no conozco openSUSE. Pero puedo ver que hay errores reportados a partir de la versión 11 y superior cuando se construye con Yast. Así que ten cuidado.
Diblo Dk
Por supuesto, puedo ayudarlo, si se puede hacer de la misma manera (configuración del núcleo, configuración de la red) que en Gentoo, Debian o Ubuntu.
Diblo Dk
Cualquier ayuda será apreciada. No estoy usando las herramientas de Yast como tal. Las configuraciones fueron de un tutorial en Ubuntu. El sistema de archivos y las configuraciones son casi iguales.
adityap174
¿Cuál es tu versión de kernel?
Diblo Dk
Kernel: x86_64 Linux 3.7.10-1.16-escritorio
adityap174

Respuestas:

9

Para cualquier otra persona que enfrente este problema, el problema fue con la dirección mac. Inicié la interfaz del punto de acceso, le di una dirección mac. Luego, después de ejecutar hostapd, agregó la interfaz de la estación, le dio una dirección MAC diferente y la conectó a la red y le dio la dirección IP de la estación como la puerta de enlace predeterminada de los clientes a través de dnsmasq.

Ahora todo funciona correctamente.

Como señaló Diblo Dk, podría usar interfaces virtuales y ficticias, pero hostapd no estaba trabajando con ellas. No se porque.

Aquí están los pasos:

  1. apague el servicio del administrador de red ya que interfiere con las interfaces virtuales
  2. rechace wlan0 usando ifconfig wlan0 hacia abajo
  3. cree una interfaz de punto de acceso utilizando el comando iw (escriba __ap), asígnele una dirección IP y mac diferente
  4. encienda hostapd en esta interfaz de acceso
  5. use dnsmasq para asignar los clientes que se conectan en esta interfaz, las direcciones IP y proporcione la puerta de enlace predeterminada como la ip de la interfaz de la estación que se creará
  6. encienda dnsmasq en la interfaz de acceso. Ahora el cliente podrá conectarse al punto de acceso y obtener direcciones IP.
  7. cree una nueva interfaz (estación de tipo), asígnele una dirección MAC separada y conéctela a la red asignando essid y usando dhclient para obtener la dirección IP.
  8. si es necesario, realice el enmascaramiento de ip mediante el comando iptables
adityap174
fuente
para decirlo sin rodeos, WTF hostapd :)
Diblo Dk
¿Puede actualizar su respuesta con los pasos exactos que realizó? Esta es definitivamente una respuesta que me gustaría guardar.
Diblo Dk
actualizado :) ¿quieres más detalles?
adityap174
Manera genial de solucionar el problema :)
Diblo Dk
¿Qué dongle / chipset estabas usando?
Alvin
2

Configurar una red ficticia

1 Abra la consola

su -

2 Vea si tiene un conductor falso

modprobe -l | grep /net/dummy.ko

(!) Si no tiene un controlador ficticio, vaya a " Crear módulo de kernel ".

Conductor ficticio de 3 cargas

modprobe dummy

(!) No lo agregue al inicio si falla.

4 Prueba dummy0 poniéndolo

ifconfig dummy0 10.246.75.1 netmask 255.255.255.0 broadcast 10.246.75.255 up

ifconfig

Te dará una salida similar.

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 Agregar controlador ficticio al inicio

Edite el archivo kernel sys.

nano /etc/sysconfig/kernel

y agregue " dummy " a MODULES_LOADED_ON_BOOT.

MODULES_LOADED_ON_BOOT = "..."

Ex. MODULES_LOADED_ON_BOOT = "vmcp dummy".

6 Configure los ajustes de red para dummy0

Cree el archivo ifcfg-dummy0.

nano /etc/sysconfig/network/ifcfg-dummy0

Añadir al archivo 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



Crear módulo de kernel

1 Primero instalando las cosas necesarias

Abre YaST.

Navega hasta Software-> Software Management.

Garrapata:

Development 

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

2 Volver a la consola y navegar a la fuente del núcleo

cd /usr/src/linux

3 Importar la configuración actual del kernel

zcat /proc/config.gz > .config

4 Abrir kernel menuconfig

make menuconfig

5 Agregar soporte de controlador de red ficticia

Navega a Device Drivers->Network device support

* Network core driver support
    M Dummy net driver support

(!) Si tiene un asterisco junto a "Soporte de controlador de núcleo de red", puede omitir los pasos 7 y 9.

6 Compila el núcleo

make -j(n+1)

Donde (n + 1) = número de núcleos de CPU más uno utilizado para acelerar la compilación. Para cuatro núcleos use make -j5.

7 Instale el nuevo kernel

make install

8 Instalar módulos

make modules_install

9 Cargue el nuevo kernel

reboot



Definición de un VIPA (La parte sobre la carga del módulo y ifcfg-dummy0): http://wiki.linuxvm.org/wiki/Defining_a_VIPA
Configure IP estáticas: https://www.linode.com/wiki/index.php/Configure_Static_IPs
openSUSE 12.3 e Instalación de nuevas versiones de kernel de Linux desde kernel.org: http://forums.opensuse.org/blogs/jdmcdaniel3/opensuse-installing-new-linux-kernel-versions-134/
OpenSUSE 11.2 - Cómo compilar un kernel para principiantes : http://linuxtweaking.blogspot.dk/2010/04/opensuse-112-how-to-compile-kernel-for.html

Diblo Dk
fuente
Gracias por una explicación tan detallada. Probé este método. Pude crear la interfaz dummy0 y comenzar en el arranque. Pero, ¿cómo se hace una interfaz inalámbrica? iwconfig proporciona: dummy0 sin extensiones inalámbricas. hostapd no funciona con esto. Da error: error de inicialización del controlador
nl80211
Sí, el problema es que tienes un conflicto de IP. Pero podría hacerse con el pseudo módulo (Asignar múltiples direcciones IP). Dame algo de tiempo para buscarlo en tu sistema.
Diblo Dk
También puedes mirar aquí linode.com/wiki/index.php/Configure_Static_IPs#OpenSUSE Podría ser que puedas ver cómo hacer con wlan :)
Diblo Dk
, el problema es que obtendrá un conflicto de IP *
Diblo Dk
1

Crear interfaz virtual

Crear archivo ifcfg-wlan0: 0

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

Añadir al archivo 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

Los comandos para activar la interfaz

ifup wlan0:0

Nota: Al cerrar la interfaz principal también se cierran todos sus alias. Los alias se pueden apagar independientemente de otras interfaces.

Comprueba si la interfaz funciona

ifconfig

Te dará una salida similar.

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

Diblo Dk
fuente
incluso esto no funcionaba con hostapd. Dio el mismo error: No se pudo abrir el archivo / sys / class / net / dummy0 / phy80211 / name: No existe dicho archivo o directorio con dummy0 y no se pudo abrir el archivo / sys / class / net / wlan0: 0 / phy80211 / name: No existe tal archivo o directorio con la interfaz virtual. Gracias por toda tu ayuda. :) El problema fue con la dirección mac. He votado sus respuestas y estoy publicando la solución para otros.
adityap174