Création d'un point d'accès WiFi sur une seule interface sous Linux

14

J'essaie de créer un hotspot WiFi ou un point d'accès sur mon ordinateur portable Linux. J'utilise Opensuse Kde 12.3.

J'ai découvert un logiciel appelé hostapdqui vous permet de créer un hotspot mais qui nécessite deux interfaces. L'un connecté à Internet et l'autre sur lequel vous souhaitez créer le point d'accès ( tutoriel ici ). Le problème que j'ai, c'est que je n'ai pas de connexion Ethernet. L' wlaninterface est utilisée pour se connecter à Internet.

Existe-t-il un moyen de créer le hotspot sur la même interface que celle connectée à Internet (comme le logiciel connectify le fait sous Windows)? Je pensais créer une interface virtuelle (comme celle airmon-ngcréée pour surveiller le wifi) et l'utiliser comme deuxième interface. Est-ce possible?

MISE À JOUR

Voici ce que j'ai pu faire jusqu'à présent:

1) Créez 2 interfaces (une comme station et l'autre comme point d'accès)

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

2) Donnez-leur un identifiant Mac séparé

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

3) Démarrez hostapd sur l'interface myAcc

4) Démarrez dnsmasq pour fournir une adresse IP aux périphériques de connexion

Tout cela fonctionne. Les appareils peuvent se connecter à ce réseau et obtenir une adresse IP. La prochaine étape consiste à fournir un masquage IP

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

Mais l'interface mySta ne parvient plus à se connecter à Internet. Il est capable d'obtenir l'Essid mais il ne peut pas obtenir l'adresse IP.

La commande dhclient mySta n'affiche aucun message et après un certain temps donne l'erreur:

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

Quelqu'un peut-il trouver comment obtenir l'adresse IP?

adityap174
la source
Avez-vous essayé avec "Dummy net driver support" (pilote du noyau) comme module. Je ne peux pas vous aider plus que ça car je ne connais pas openSUSE. Mais je peux voir qu'il y a des erreurs signalées à partir de la version 11 et supérieure lorsqu'elle est construite avec Yast. Donc sois prudent.
Diblo Dk
Je peux bien sûr vous aider, si cela peut être fait de la même manière (configuration du noyau, configuration réseau) que dans Gentoo, Debian ou Ubuntu.
Diblo Dk
Toute aide serait appréciée. Je n'utilise pas les outils Yast en tant que tels. Les configurations provenaient d'un tutoriel sur Ubuntu. Le système de fichiers et les configurations sont presque les mêmes.
adityap174
Quelle est votre version du noyau?
Diblo Dk
Noyau: x86_64 Linux 3.7.10-1.16-desktop
adityap174

Réponses:

9

Pour toute autre personne confrontée à ce problème, le problème était lié à l'adresse mac. J'ai commencé l'interface du point d'accès, je lui ai donné une adresse mac. Ensuite, après avoir exécuté hostapd, ajouté l'interface de station, lui a donné une adresse mac différente et l'a connectée au réseau et a donné l'adresse IP de la station comme passerelle par défaut des clients via dnsmasq.

Maintenant, tout fonctionne correctement.

Comme l'a souligné Diblo Dk, vous pouvez utiliser des interfaces virtuelles et factices mais hostapd ne fonctionnait pas avec elles. Je ne sais pas pourquoi.

Voici les étapes:

  1. désactiver le service de gestionnaire de réseau car il interfère avec les interfaces virtuelles
  2. baissez wlan0 en utilisant ifconfig wlan0 down
  3. créer une interface de point d'accès à l'aide de la commande iw (tapez __ap), attribuez-lui une adresse mac et ip différente
  4. activer hostapd sur cette interface d'accès
  5. utilisez dnsmasq pour attribuer les clients se connectant à cette interface, les adresses IP et donner la passerelle par défaut comme IP de l'interface de station à créer
  6. activez dnsmasq sur l'interface d'accès. Maintenant, le client pourra se connecter au point d'accès et obtenir des adresses IP.
  7. créer une nouvelle interface (type station) lui affecter une adresse mac distincte et la connecter au réseau en affectant essid et en utilisant dhclient pour obtenir l'adresse ip.
  8. si nécessaire, effectuez un masquage ip via la commande iptables
adityap174
la source
pour le dire franchement, WTF hostapd :)
Diblo Dk
Pouvez-vous mettre à jour votre réponse avec les étapes exactes que vous avez faites. C'est certainement une réponse que j'aimerais enregistrer.
Diblo Dk
mis à jour :) voulez plus de détails?
adityap174
Un moyen cool de contourner le problème :)
Diblo Dk
Quel dongle / chipset utilisiez-vous?
Alvin
2

Configurer un réseau factice

1 Ouvrez la console

su -

2 Vérifiez si vous avez un pilote factice

modprobe -l | grep /net/dummy.ko

(!) Si vous n'avez pas de pilote factice, allez dans " Créer un module noyau ".

3 Charger le pilote factice

modprobe dummy

(!) Ne l'ajoutez pas au démarrage en cas d'échec.

4 Testez le mannequin0 en le mettant en place

ifconfig dummy0 10.246.75.1 netmask 255.255.255.0 broadcast 10.246.75.255 up

ifconfig

Il vous donnera une sortie similaire.

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 Ajouter un pilote factice au démarrage

Modifier le fichier sys du noyau.

nano /etc/sysconfig/kernel

et ajoutez " factice " à MODULES_LOADED_ON_BOOT.

MODULES_LOADED_ON_BOOT = "..."

Ex. MODULES_LOADED_ON_BOOT = "mannequin vmcp".

6 Configurez les paramètres réseau pour dummy0

Créez le fichier ifcfg-dummy0.

nano /etc/sysconfig/network/ifcfg-dummy0

Ajoutez au fichier 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



Créer un module de noyau

1 Installer d'abord les choses nécessaires

Ouvrez YaST.

Accédez à Software-> Software Management.

Cocher:

Development 

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

2 Retournez à la console et accédez à la source du noyau

cd /usr/src/linux

3 Importez la configuration actuelle du noyau

zcat /proc/config.gz > .config

4 Menuconfig à noyau ouvert

make menuconfig

5 Ajouter la prise en charge du pilote Dummy net

Accédez à Device Drivers->Network device support

* Network core driver support
    M Dummy net driver support

(!) Si vous avez un astérisque à côté de "Prise en charge des pilotes du réseau", vous pouvez ignorer les étapes 7 et 9.

6 Compilez le noyau

make -j(n+1)

Où (n + 1) = nombre de cœurs CPU plus un utilisé pour accélérer la compilation. Pour quatre cœurs, utilisez make -j5.

7 Installez le nouveau noyau

make install

8 Installer des modules

make modules_install

9 Chargez le nouveau noyau

reboot



Définition d'un VIPA (la partie sur le chargement du module et ifcfg-dummy0): http://wiki.linuxvm.org/wiki/Defining_a_VIPA
Configurer les adresses IP statiques: https://www.linode.com/wiki/index.php/Configure_Static_IPs
openSUSE 12.3 et installation de nouvelles versions du noyau Linux à partir de kernel.org: http://forums.opensuse.org/blogs/jdmcdaniel3/opensuse-installing-new-linux-kernel-versions-134/
OpenSUSE 11.2 - Comment compiler un noyau pour les débutants : http://linuxtweaking.blogspot.dk/2010/04/opensuse-112-how-to-compile-kernel-for.html

Diblo Dk
la source
Merci pour une explication si détaillée. J'ai essayé cette méthode. J'ai pu créer une interface dummy0 et démarrer au démarrage. Mais comment en faire une interface sans fil? iwconfig donne: dummy0 aucune extension sans fil. hostapd ne fonctionne pas avec cela. Cela donne une erreur: l'initialisation du pilote nl80211 a échoué
adityap174
Oui, le problème est que vous avez un conflit IP. Mais cela pourrait être fait avec le module Pseudo (attribuer plusieurs adresses IP). Donnez-moi un peu de temps pour rechercher votre système.
Diblo Dk
Vous pouvez également regarder ici linode.com/wiki/index.php/Configure_Static_IPs#OpenSUSE Il se pourrait que vous puissiez voir comment faire avec wlan :)
Diblo Dk
, le problème est que vous obtiendrez un conflit IP *
Diblo Dk
1

Créer une interface virtuelle

Créer un fichier ifcfg-wlan0: 0

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

Ajouter au fichier 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

Les commandes pour activer l'interface

ifup wlan0:0

Remarque: la fermeture de l'interface principale entraîne également la fermeture de tous ses alias. Les alias peuvent être arrêtés indépendamment des autres interfaces.

Vérifiez si l'interface fonctionne

ifconfig

Il vous donnera une sortie similaire.

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# poste2350426

Diblo Dk
la source
même cela ne fonctionnait pas avec hostapd. Il a donné la même erreur: Impossible d'ouvrir le fichier / sys / class / net / dummy0 / phy80211 / name: Aucun fichier ou répertoire avec dummy0 et Impossible d'ouvrir le fichier / sys / class / net / wlan0: 0 / phy80211 / name: Aucun fichier ou répertoire de ce type avec l'interface virtuelle. Merci pour votre aide. :) Le problème était avec l'adresse mac. J'ai voté pour vos réponses et je poste la solution pour les autres.
adityap174