GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Überbrückung von wlan0 zu eth0

Lösung 1:

Um WLAN zu überbrücken Schnittstelle können Sie iw verwenden Tool zum Aktivieren von 4addr ebenso:

# iw dev <wifiInterface> set 4addr on

dh:

# brctl addif <bridgename> <wifiInterface>
can't add <wifiInterface> to bridge <bridgename>: Operation not supported

# iw dev <wifiInterface> set 4addr on
# brctl addif <bridgename> <wifiInterface>

Jetzt sollte es funktionieren. Sie können Brücken anzeigen mit:

# brctl show

Lösung 2:

AKTUALISIEREN

Laut diesem Thread auf linux-ath5k-devel ist es nicht möglich, zwischen drahtlosen (Client- bzw. Stationsmodus) und kabelgebundenen Schnittstellen zu überbrücken.

NAT einrichten

Man sollte stattdessen NAT einrichten:

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

IP zuweisen

Dann müssen Sie sich selbst IP-Adressen zuweisen:

ifconfig eth0 10.0.0.1 netmask 255.255.255.0 up

Dhcp-Daemon installieren

Installieren Sie einen DHCP-Server und fügen Sie den folgenden Text zu seiner Konfigurationsdatei hinzu (in /etc/dhcpd.conf oder etwas Ähnlichem)

subnet 10.0.0.0 netmask 255.255.255.0 {
    range 10.0.0.100 10.0.0.120;
    option routers 10.0.0.1;
    option domain-name-servers the-ip-address-you-have-in-etc-resolv.conf;
}

dhcpd starten

Dann starten Sie es /etc/init.d/dhcpd start

Und das war's!

Lesen Sie unten nur, wenn Sie sich für das nicht funktionierende Bridging-Setup interessieren

brctl addbr mybridge
brctl addif mybridge eth0
brctl addif mybridge wlan0

Zuerst erstellen Sie eine Bridge-Schnittstelle Ich wähle einen beliebigen Namen mybridge fügen Sie dann Schnittstellen hinzu.

Sie sollten eine neue IP-Adresse anfordern (Dies ist nur erforderlich, wenn Sie eine gültige IP für das Bridging-Gerät selbst erhalten möchten):

dhclient -d mybridge

Lösung 3:

WLAN und 4adr überbrücken:

Das Überbrücken von wlan0 ist ein Schmerz. Sie können es normalerweise nicht zu einer Bridge-Schnittstelle hinzufügen (brctl gibt "Operation Not Allowed" zurück), und die Verwendung des VirtualBox "Bridged"-Filters führt zu einem großen Durcheinander von ARP- und DHCP-Konflikten. Die Ursache dafür ist, dass 802.11-Frames standardmäßig nur drei Adressen enthalten:die MAC-Adressen beider drahtloser Geräte (Laptop und AP) und des endgültigen Empfängers (wie im Ethernet). Es wird immer davon ausgegangen, dass es nur einen möglichen Urheber gibt.

802.11 kann die vierte MAC-Adresse des Absenders übertragen, und diese wird im WDS-Modus von Repeatern verwendet. Diese Funktion kann auch unter Linux mit iw aktiviert werden, und die Aktivierung dieses Modus ermöglicht die Verwendung von wlan0 in Bridge-Schnittstellen sowie mit VirtualBox Bridged Networking:

iw dev wlan0 set 4addr on

Wenn 4addr aktiviert ist, werden Sie jedoch wahrscheinlich vom AP vollständig ignoriert:Die Zuordnung ist erfolgreich, aber alle Datenrahmen verschwinden im Äther. Dies könnte aus Sicherheitsgründen sein (weil es verdammt schwer ist, die Quell-MAC-Adresse zu fälschen. Ja.) In meinem Router (mit OpenRG) muss der "WDS" -Modus für die drahtlose AP-Schnittstelle aktiviert und ein auf meine beschränktes WDS-Gerät hinzugefügt werden die MAC-Adresse des Laptops und fügen Sie sie der LAN-Bridge hinzu. 4addr-Pakete funktionieren jetzt.

Dabei gibt es allerdings ein weiteres Problem – der Router verwirft jetzt Pakete mit drei Adressen vom Laptop, was ziemlich umständlich sein kann (bei jedem Wechsel des WLAN-Netzwerks muss 4addr umgeschaltet werden). Die Problemumgehung besteht darin, auf dem Laptop eine zweite drahtlose Schnittstelle hinzuzufügen, die mit demselben Gerät verbunden ist, jedoch eine andere MAC-Adresse hat. Machen Sie zuerst die vorherige Konfiguration rückgängig:

iw dev wlan0 set 4addr off

Fügen Sie dann eine zweite Schnittstelle – der Name wurde willkürlich gewählt – mit einer anderen MAC-Adresse hinzu:

iw dev wlan0 interface add wds.wlan0 type managed 4addr on
ip link set dev wds.wlan0 addr <addr>
ip link set dev wds.wlan0 up

Hier muss die im Router konfigurierte WDS-Geräteadresse übereinstimmen; Ansonsten kann es sich um eine beliebige gültige MAC-Adresse handeln. Die ursprüngliche MAC von wlan0 bleibt dann für die "normale" Nutzung erhalten.

Es ist möglich, sowohl wlan0 als auch wds.wlan0 gleichzeitig zu verwenden – obwohl ich die Zuordnung zum selben AP nur zweimal getestet habe, nicht zu verschiedenen APs. Ich schätze, sie müssten zumindest auf demselben Kanal sein.

Einige Leute haben gefragt, warum dies verwendet werden soll, wenn VirtualBox WLAN "einfach gut" überbrücken kann. Die Antwort ist, dass VirtualBox die MAC-Adressen der virtuellen Maschinen nicht sendet; vielmehr führt es NAT auch auf der MAC-Schicht durch. – 2014-08-22

Direkte WLAN-Brücke

Unter Umständen könnte man auch wlan_kabel verwenden. Es verwendet Paket-Sockets, um wlan*-Geräte direkt mit Ethernet-Geräten zu überbrücken. Allerdings kann man mit wlan_kabel immer nur einen einzigen MAC überbrücken. Es hat nicht den Nachteil, dass es von Access Points gesperrt wird, da nur die Original-MAC des WLAN-Geräts verwendet wird. In Ihrem Fall würde dies bedeuten, dass wlan0 nur von einer VM und nicht einmal vom Host verwendet werden könnte. wlan_kabel bekommst du hier. Dies ähnelt der macvlans-Lösung.

Überbrückung mit ipvlan

IP Vlan hat nicht die Einschränkung einer Brücke, es könnte verwendet werden, um ein Netzwerk zu überbrücken. Einzelheiten zur Verwendung finden Sie hier

Maskerade-Alternative

Linux-Routing kann stattdessen mit iptables-masquerade und ip_forward verwendet werden, um eine Bridge zu erreichen, aber wie bereits erwähnt, erfordert dies die Aktivierung von ip_forward und bewirkt, dass Linux sich wie ein Router verhält. Dies muss sorgfältig eingerichtet werden, da dies zu Sicherheitsbedenken führen könnte.

# bridge setup
brctl addbr br0
ifconfig br0 10.10.20.1/24 up
 
# enable ipv4 forwarding
echo "1" > /proc/sys/net/ipv4/ip_forward
 
# netfilter cleanup
iptables --flush
iptables -t nat -F
iptables -X
iptables -Z
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
 
# netfilter network address translation
iptables -t nat -A POSTROUTING -o wlan0 -s 10.10.20.0/24  -j MASQUERADE

Die Schnittstelle br0 hat dann Zugriff auf das wlan0-Netzwerk

Wichtig und verwandt

Außerdem, und sehr wichtig, sollten Sie keine veralteten, veralteten Befehle wie ifconfig, brctl verwenden , usw. Die iproute2-Suite enthält Befehle für all dies, einschließlich der Einrichtung virtueller Schnittstellen (etwas, für das wir früher openvpn verwenden mussten) und der Erstellung von Bridges. Wenn Sie nicht wissen, wie Sie eine Bridge mit IP einrichten, gehen wir hier vor

  ip tuntap add tap0 mode tap user root 
  ip link set tap0 up
  ip link add br0 type bridge
  ip link set tap0 master br0
  ip link set eth0 master br0
  ip addr add 10.173.10.1/24  dev br0
  ip link set br0 up

Mit diesem Befehlssatz erstellen wir eine virtuelle Schnittstelle namens tap0, dann eine Bridge namens br0, versklaven dann eth0 und tap0 an die Bridge, der wir eine IP-Adresse von 10.173.10.1 zuweisen, und bringen dann alles hoch. Die drei separaten Instanzen zum Aufrufen der Schnittstellen (für tap0, eth0 und br0) sind erforderlich.

Der Trick, damit dies funktioniert, besteht darin, proxy.arp zu verwenden, wodurch Ihr PC (nicht Ihr VM/Linux-Container/Netzwerk-Namespace) ARP-Anfragen an ihrer Stelle beantworten kann.

Mit anderen Worten, durch die Verwendung von IPv4-Weiterleitung zwischen Ihrer Hardwareschnittstelle und Ihrer virtuellen Schnittstelle glauben Sie, dass Sie Ihre VM/LXC/NNS mit Ihrem LAN verbinden können, als wäre es eine physische Schnittstelle, aber das stimmt nicht:Sie vergessen das absolut grundlegender ARP-Verkehr, der den LAN-Betrieb wirklich ermöglicht. Das Problem ist also:Wenn ich IPv4-Verkehr korrekt weiterleite, wie kann ich dann auch ARP-Verkehr weiterleiten, damit meine VM/LXC/NNS funktionieren? Der Trick besteht darin, Proxy-arp zu verwenden.

Die vollständige Antwort darauf finden Sie in Bohdi Zazens Blog mit dem aufschlussreichen Titel:Bridge Wireless Cards. Er verwendet ein veraltetes Paket, uml-utilities, um eine virtuelle Schnittstelle mit dem Befehl tunctl zu erstellen:Dies ist der einzige Befehl, für den er uml-utilities verwendet, sodass Sie das Herunterladen des Pakets getrost vernachlässigen und den Befehl I verwenden können oben geschrieben haben, um eine Tap- oder Tun-Schnittstelle zu erstellen, je nachdem, was Sie möchten, ändern Sie einfach den Befehl entsprechend. Erstellen Sie dann ein Veth-Paar für Ihren LXC und erstellen Sie nun eine Brücke zwischen tap0 und veth0. Diese Bridge namens br0 ist das, wofür Sie statt der einfachen tap0-Schnittstelle, die von Bohdi Zazen beschrieben wird, Proxy-arp verwenden müssen.

Quellen:askubuntu.com, nullroute.eu.org, firejail.wordpress.com, superuser.com

Lösung 4:

Hängt davon ab, wie gemein der AP zu dir ist:

1) Es möchte möglicherweise nur Pakete sehen, die von Ihnen kommen, mit Ihrer bekannten Link-Layer-Adresse (und daher nicht von überbrückten Paketen) 2) Es könnte sogar noch intelligenter sein und wissen, welche IP-Adresse zu welcher Link-Layer-Adresse gehören sollte (Ursache es kennt DHCP und prüft es)

Wenn 1+2 beide wahr sind, brauchen Sie tatsächlich so etwas wie IP NAT, DHCP, ..

Aber wenn nur 1) der Fall ist, können Sie die Link-Layer-Adresse fälschen und sie wie hier beschrieben in die andere Richtung auf die richtige umwandeln:

https://wiki.debian.org/BridgeNetworkConnections#Bridging_with_a_wireless_NIC

Lösung 5:

4addr, wie in anderen Antworten beschrieben, ist sicherlich der beste Weg, wenn es vom Adapter/Treiber unterstützt wird, aber nicht alle. NAT funktioniert möglicherweise für einige Dinge, aber eine ordnungsgemäße Kommunikation in beide Richtungen im LAN wird problematisch (z. B. Anschließen eines Druckers oder Zugriff auf andere IoT-Geräte auf der anderen Seite des NAT). Alles, was auf Broadcast/Multicast angewiesen ist (z. B. Auto-Discovery, Bonjour), wird durch das NAT fehlschlagen.

Die Alternative ist die Verwendung eines ARP-Proxys (parprouted), wie in https://wiki.debian.org/BridgeNetworkConnectionsProxyArp beschrieben. Ich habe dies auf einem Raspberry Pi für einen Drucker eingerichtet und es funktioniert wie ein Zauber (ich habe einen 10-Sekunden-Schlaf in der post-up hinzugefügt Befehle, damit es zuerst eine IP-Adresse bekommt, könnte es mit der Langsamkeit meines alten RPi zu tun haben...)


Linux
  1. Konfigurieren Sie das Netzwerk in Debian / Ubuntu / LinuxMint

  2. Linux – Datenverkehr auf verschiedenen Schnittstellen basierend auf dem Zielport ausgeben?

  3. Linux – Gerät Eth0 scheint nicht vorhanden zu sein, was die Initialisierung verzögert?

  4. Wie mache ich die IP-Adresse statisch (eth0)?

  5. Deaktivieren des ARP-Protokolls in der Linux-Box

eth0 NIC Link ist Down-Fehler unter Linux

eth0 startet nicht beim Booten nach dem Klonen von Virtualbox

Konfigurieren Sie einen DNS-Server per NIC-Schnittstelle (eth0 / eth1)?

Prüfen Sie, ob die Schnittstelle eth0 aktiv ist (konfiguriert)

Warum heißt meine Ethernet-Schnittstelle enp0s10 statt eth0?

Wie bekomme ich die ethtool Wake-On-Lan-Einstellung zum Festhalten?