Câblé au pont sans fil sous Linux

17

J'essaie de configurer mon Raspberry Pi comme un pont, en utilisant Debian Wheezy. J'ai un hostapd.conf: (certains détails ont changé pour des raisons de sécurité, et oui, je sais que le WEP n'est pas bon) ...

interface=wlan0
bridge=br0
driver=nl80211
auth_algs=1
macaddr_acl=0
ignore_broadcast_ssid=0
logger_syslog=-1
logger_syslog_level=0
hw_mode=g
ssid=MY_SSID
channel=11
wep_default_key=0
wep_key0=MY_KEY
wpa=0

Et cela en /etc/network/interfaces:

auto lo

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp
auto br0
iface br0 inet dhcp
bridge-ports eth0 wlan0

Tout semble aller bien, mais je ne peux pas m'associer à la connexion sans fil pontée - même si les voyants clignotants sur la clé USB suggèrent que des paquets sont échangés.

J'ai lu quelque part que toutes les cartes / périphériques ne fonctionneront pas en mode hostap - ils ne transmettront pas les paquets dans un sens: est-ce vrai? (L'info était un peu vieille) - c'est ma carte:

[    3.663245] usb 1-1.3.1: new high-speed USB device number 5 using dwc_otg
[    3.794187] usb 1-1.3.1: New USB device found, idVendor=0cf3, idProduct=9271
[    3.804321] usb 1-1.3.1: New USB device strings: Mfr=16, Product=32, SerialNumber=48
[    3.816994] usb 1-1.3.1: Product: USB2.0 WLAN
[    3.823790] usb 1-1.3.1: Manufacturer: ATHEROS
[    3.830645] usb 1-1.3.1: SerialNumber: 12345

Alors, qu'est-ce que je me suis trompé ici?

Mise à jour : J'ai donc fait d'autres investigations et je peux obtenir le pont, mais apparemment cela détruit la connexion Ethernet (filaire), ce qui est étrange. Par exemple, sur le RPi:

Démarrez le système ...

ping 192.168.62.1 

(routeur) - cela fonctionne

La tentative d'association avec un LAN sans fil ... échoue (ou plutôt "avec une connectivité limitée" sur un téléphone Android - pas bon)

brctl showmacs br0

Cela montre simplement mac de wlan0 et mac de téléphone à ce stade

brctl addif br0 eth0 wlan0

À ce stade, je peux maintenant associer le téléphone au réseau sans fil, mais ...

ping 192.168.62.1

...échoue

Et de même, je ne peux plus envoyer de ping au RasPi à partir d'une autre machine du réseau

Fonctionnement

ifconfig br0

Suggère que le pont supprime des paquets ...

Des idées?

Mise à jour supplémentaire : Le /etc/network/interfacesfichier maintenant (et pour la séquence ci-dessus) se lit comme suit:

auto lo eth0

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp
adrianmcmenamin
la source
C'est définitivement un sujet pour Super User, donc pas de soucis. Bonne chance avec la prime, je suis curieux de savoir aussi quelle est la réponse.
Percée du
Que iw dev wlan0 infomontre-t-on? Et googler sur l'ID de votre appareil montre que vous avez besoin d'un noyau récent ou de modules sans fil pour exécuter cet appareil en mode AP. Regardez ça . Quel noyau et ath9kpilote utilisez-vous?
gertvdijk
Voir aussi cette réponse .
Thomas Guyot-Sionnest

Réponses:

10

Des ponts simplifiés:

Il y a un projet sur sourceforge fait juste pour votre situation. http://sourceforge.net/projects/bridger/ Il vient même comme un paquet deb.

En ce qui concerne la «suppression» des paquets:

  1. Avez-vous vérifié si iptables est réglé sur drop par défaut? sudo iptables --list devrait dire "ACCEPTER, ACCEPTER, ACCEPTER" pour une boîte de ce type. Si tel est le problème, désactivez-le.

  2. Acheminez-vous même les paquets, mon frère? Assurez-vous que la ligne "net.ipv4.ip_forward = 1" n'est PAS commentée dans /etc/sysctl.conf (c'est par défaut), puis redémarrez votre réseau.

  3. Le mode promiscuous n'est pas pris en charge par votre dongle sans fil. (ce qui signifie qu'il ne peut pas accepter les paquets qui ne lui sont pas destinés)

Pont pur contre pont partagé:

  1. iface br0 inet dhcp indique un pont partagé , ce qui signifie que le pont lui-même obtient une adresse IP et peut être un point de terminaison pour le trafic.

  2. Un pont pur n'obtient pas d'adresse IP et transfère uniquement le trafic entre les deux interfaces

  3. Échantillon de pont partagé / etc / network / interfaces fichier de configuration (Debian / Ubuntu)

# Ce fichier décrit les interfaces réseau disponibles sur votre système
# et comment les activer. Pour plus d'informations, voir interfaces (5).

# L'interface réseau de bouclage
auto lo
iface lo inet loopback

# Pont entre eth0 et wlan0
auto br0
iface br0 inet dhcp
  pré-up ip link set eth0 down
  pré-up ip link set wlan0 down
  pré-up brctl addbr br0
  pré-up brctl addif br0 eth0 wlan0
  pré-up ip addr flush dev eth0
  pré-up ip addr flush dev wlan0
  post-down ip link set eth0 down
  post-down link link set wlan0 down
  post-down link link set br0 down
  post-down brctl delif br0 eth0 wlan0
  post-down brctl delbr br0

Redémarrez le réseau: sudo /etc/init.d/networking restartaprès avoir effectué des modifications de configuration réseau complexes, il est plus facile de simplement redémarrer plutôt que de vous assurer que tout a redémarré correctement lors du redémarrage.

Vous pensez que vous avez des problèmes de routage:

  1. Éliminez DNS en tant que cause en testant avec ping 8.8.8.8. Si cela fonctionne, vous avez probablement un problème DNS sur votre réseau.

  2. Vérifiez votre passerelle avec, sudo ip routeespérons-le, que vous voyez default via 192.168.1.1 dev br0 proto dhcp(en supposant que votre passerelle est 192.168.1.1). S'il est manquant ou incorrect, corrigez-le sudo ip route add default via 192.168.1.1. Testez à nouveau:ping 8.8.8.8

  3. Renouvelez votre IP de pont partagé avec dhclient br0et retestez avecping 8.8.8.8

  4. Vérifiez vos interfaces «esclaves» avec ifconfiget assurez-vous que eth0 et wlan0 n'ont PAS d'adresse IP. Ils font maintenant partie du pont. S'ils le font, assurez-vous de les supprimer de tous les fichiers de configuration, de les définir sur 0.0.0.0 statique ou quelque chose.

Si AUCUN de cela ne fonctionne, essayez cette application de pontage Debian, et si cela ne fonctionne pas, votre dongle sans fil ne prend pas en charge le mode promiscuous. (voir au dessus)

Si cela fonctionne à tout moment ici, redémarrez et assurez-vous qu'il fonctionne toujours.

MattPark
la source
Veuillez consulter la dernière mise à jour du fichier d'interfaces et, oui, toutes les chaînes sont définies sur ACCEPTER
adrianmcmenamin
Ces instructions fonctionnent, au moins dans le sens où j'applique dhclient br0 et spécifie que eth0 est verrouillé à 0.0.0.0, il suffit maintenant de trouver comment le rendre automatique :)
adrianmcmenamin
OK, je l'ai en place avec un peu de pokery jiggery via des scripts rc.local (essentiellement je dois redémarrer hostapd) - donc vous obtenez la prime. Mais maintenant, mon serveur Squid sur la même boîte est en panne - mais je ne vous ai pas posé de questions à ce sujet, il faudra donc que ce soit une autre question.
adrianmcmenamin
Squid question now at superuser.com/questions/522332/…
adrianmcmenamin
Quels sont les paramètres eth0et wlan0dans cet exemple? Plus précisément, comment définissez-vous le SSID et toute authentification wlan0?
Ian
6

J'ai des ponts sans fil travaillant sur Debian Linux et Openwrt, donc je connais très bien ce problème.

Vous avez manqué une commande importante: vous avez oublié de dire à votre pilote sans fil de transmettre des trames à 4 adresses (parfois incorrectement / historiquement appelées WDS), ce qui est nécessaire pour le pontage 802.11 / sans fil. Pour ce faire, utilisez la commande "iw dev wlan0 set 4addr on". Utilisez une instruction "pre-up" dans votre fichier d'interface Debian sur le pont pour l'appliquer avant de lancer le pont. Notez que le mode de trame à 4 adresses nécessite la prise en charge du pilote et certains anciens pilotes ou matériel 802.11 merdiques peuvent ne pas le prendre en charge.

Je soupçonne également fortement que vos problèmes peuvent avoir été compliqués par un bogue dans le noyau Linux qui affecte spécifiquement les interfaces pontées. J'ai moi-même rencontré ce bogue et j'ai dû compiler mon propre wpa_supplicant à partir des sources car la version de Debian est ancienne et affectée. wpa_supplicant et hostapd partagent une base de code commune, mais je ne suis pas sûr que cela affecte hostapd ainsi que wpa_supplicant.

Il y a un compromis autour du problème ici:

https://w1.fi/cgit/hostap/commit/?id=e6dd8196e5daf39e4204ef8ecd26dd50fdca6040

J'ai l'impression que c'est dans la version 2.5, et je sais que c'est dans la source 2.6 actuelle. La version actuelle de Debian est 2.4, ce qui est cassé. Veuillez harceler le projet Debian pour mettre à jour leurs paquets wpasupplicant et hostapd.

Voici un exemple de configuration pour un client de pont sans fil utilisant WPA / WPA2 avec un pont sans fil entre les interfaces wlan0 et eth0, l'hôte obtenant une adresse DHCP sur l'interface br0 (remplacez "dhcp" par "manual" pour aucune adresse IP). Pour une situation où vous voulez être l'AP, incluez les commandes interface = et bridge = dans hostapd.conf et omettez les commandes wpa- * ci-dessous.

Dans votre fichier / etc / network / interfaces:

allow-auto br0
iface br0 inet dhcp
    bridge_ports wlan0 eth0
    bridge_stp off
    bridge_waitport 5
    bridge_fd 0
    wpa-ssid mynetwork
    wpa-psk abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123
    wpa-iface wlan0
    wpa-bridge br0
    pre-up iw dev wlan0 set 4addr on
    post-down iw dev wlan0 set 4addr off

Et assurez-vous que votre wpa_supplicant est la version 2.5 ou ultérieure. Cela ne fonctionnera pas avec wpa_supplicant 2.4 et les versions actuelles du noyau.

Je dois également noter qu'il existe actuellement un bug de course dans ifup où les interfaces de pont peuvent ne pas apparaître au démarrage, mais c'est un tout autre problème.

turnip_turnip_turnip
la source
3

Vous semblez avoir besoin d'un transfert IP.

essayer cat /proc/sys/net/ipv4/ip_forward

Si c'est un 0problème:echo 1 > /proc/sys/net/ipv4/ip_forward

CSᵠ
la source
sys.net.ipv4.ip_forwardest pour le routage IPv4, NAT, etc. Bridges fonctionne une couche en dessous dans la pile réseau.
Thomas Guyot-Sionnest
0

Le pontage ne peut fonctionner que lorsqu'une interface reçoit tous les paquets, sinon ils verront les paquets qui leur sont adressés uniquement. Votre configuration actuelle peut décrire une configuration pour un routeur mais pas pour un pont.

eth0 et wlan0 ne devraient pas avoir d'adresse IP (c'est-à-dire 0.0.0.0) et si vous le souhaitez, vous pouvez toujours utiliser une adresse IP pour br0.

Voici également une documentation officielle: http://wiki.debian.org/BridgeNetworkConnections

John Wilcox
la source
1
Je sais que c'est un vieux post mais depuis que je l'ai trouvé en cherchant autre chose, j'ai pensé que je mentionnerais que cela n'a pas d'importance si une interface de pont n'a / n'a pas d'adresse IP en ce qui concerne le pontage. Sous Linux, une interface pontée relaiera également les paquets ARP (couche OSI 2). Tout commutateur mappera plusieurs périphériques connectés à l'autre côté du pont comme étant acceptés sur ce port de commutateur. Ma référence est l'expérience du déploiement de serveurs Linux en tant que routeurs, ponts, pare-feu, etc. pour des déploiements à haute disponibilité dans des centres de données de premier plan, y compris un NAP américain principal pour l'Amérique du Sud
jetole
0

configurer wlan0

vi / etc / network / interface

iface eth0 inet static
address 192.168.2.1
network 192.168.2.0
netmask 255.255.255.0
broadcast 192.168.2.255

vi /etc/sysctl.conf

net.ipv4.ip_forward=1

vi /etc/rc.local

iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o wlan0 -j MASQUERADE
netawater
la source