
Unter Arch Linux möchte ich, dass eth0 (verbunden mit dem überbrückten Router) die von wlan0 empfangene Verbindung teilt. Ich habe Tutorials gelesen, kenne mich mit Befehlen aber nicht so gut aus wie andere Benutzer und verstehe es nicht ganz.
Antwort1
AKTUALISIEREN
Es ist nicht möglich, eine Brücke zwischen drahtlosen (Client- oder Stationsmodus) und kabelgebundenen Schnittstellen zu schlagen.laut diesem Thread auf linux-ath5k-devel.
NAT einrichten
Stattdessen sollte man NAT einrichten:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
Zuweisen einer IP
Anschließend müssen Sie sich selbst IP-Adressen zuweisen:
ifconfig eth0 10.0.0.1 netmask 255.255.255.0 up
Installieren Sie den DHCP-Daemon
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;
}
Starten Sie dhcpd
Starten Sie es dann /etc/init.d/dhcpd start
Und das ist es!
Lesen Sie weiter unten nur, wenn Sie an der nicht funktionierenden Überbrückungskonfiguration interessiert sind.
brctl addbr mybridge
brctl addif mybridge eth0
brctl addif mybridge wlan0
Zuerst erstellen Sie eine Bridge-Schnittstelle. Ich wähle einen beliebigen NamenmeinebrückeFü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
Antwort2
ZuWLAN-BrückeSchnittstelle können Sie iw
Werkzeug verwenden, um4addr aktivierenebenfalls:
# 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
Antwort3
WLAN-Bridge und 4addr:
Das Überbrücken von wlan0 ist mühsam. Normalerweise können Sie es nicht zu einer Bridge-Schnittstelle hinzufügen (brctl gibt „Operation not allowed“ zurück), und die Verwendung des „bridged“-Filters von VirtualBox führt zu einem großen Durcheinander von ARP- und DHCP-Konflikten. Der Grund dafür ist, dass 802.11-Frames standardmäßig nur drei Adressen enthalten: die MAC-Adressen beider drahtlosen Geräte (Laptop und AP) und des endgültigen Empfängers (wie bei Ethernet). Es wird immer davon ausgegangen, dass es nur einen möglichen Absender gibt.
802.11 kann die vierte Adresse, die MAC-Adresse des Absenders, übertragen, und diese wird im WDS-Modus von Repeatern verwendet. Diese Funktion kann auch unter Linux mit iw aktiviert werden. Durch Aktivieren dieses Modus kann wlan0 in Bridge-Schnittstellen sowie mit VirtualBox-Bridge-Netzwerken verwendet werden:
iw dev wlan0 set 4addr on
Wenn 4addr jedoch aktiviert ist, werden Sie vom AP wahrscheinlich vollständig ignoriert: Die Verbindung ist erfolgreich, aber alle Datenrahmen verschwinden im Äther. Dies könnte aus Sicherheitsgründen der Fall 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, ein WDS-Gerät hinzugefügt werden, das auf die MAC-Adresse meines Laptops beschränkt ist, und es der LAN-Brücke hinzugefügt werden. 4addr-Pakete funktionieren jetzt.
Es gibt jedoch ein weiteres Problem damit – der Router lehnt nun Drei-Adress-Pakete vom Laptop ab, was ziemlich unpraktisch sein kann (man muss 4addr jedes Mal umschalten, wenn das WLAN-Netzwerk geändert wird). Die Problemumgehung besteht darin, auf dem Laptop eine zweite drahtlose Schnittstelle hinzuzufügen, die mit demselben Gerät verbunden ist, aber eine andere MAC-Adresse hat. Machen Sie zuerst die vorherige Konfiguration rückgängig:
iw dev wlan0 set 4addr off
Fügen Sie anschließend 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 passen, ansonsten kann es jede beliebige gültige MAC-Adresse sein. Für den "normalen" Gebrauch bleibt dann die Original-MAC von wlan0 bestehen.
Es ist möglich, sowohl wlan0 als auch wds.wlan0 gleichzeitig zu verwenden – obwohl ich nur zweimal die Verbindung zum selben AP getestet habe, nicht zu verschiedenen APs. Ich vermute, sie müssten zumindest auf demselben Kanal sein.
Einige Leute haben gefragt, warum man das verwenden 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 auch NAT auf der MAC-Ebene durch. – 22.08.2014
Direkte WLAN-Brücke
Unter bestimmten Umständen könntest du auch wlan_kabel verwenden. Es verwendet Paket-Sockets, um WLAN*-Geräte direkt mit Ethernet-Geräten zu verbinden. Allerdings kannst du mit wlan_kabel immer nur eine einzige MAC gleichzeitig verbinden. Es hat nicht den Nachteil, von Access Points blockiert zu werden, da nur die Original-MAC des WLAN-Geräts verwendet wird. In deinem Fall würde das bedeuten, dass wlan0 nur von einer VM und nicht einmal vom Host verwendet werden könnte. Du erhältstwlan_kabel hierDies ist ähnlich wie dieAbonnierenLö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. Details zur Verwendungfinden Sie hier
Maskerade-Alternative
Stattdessen kann Linux-Routing mit iptables-masquerade und ip_forward verwendet werden, um eine Brücke zu erstellen. Wie erwähnt muss hierfür jedoch ip_forward aktiviert werden, und Linux verhält sich dadurch wie ein Router. Dies muss sorgfältig eingerichtet werden, da es zu Sicherheitsbedenken kommen kann.
# 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
Wichtige und verwandte
Außerdem, und das ist sehr wichtig, sollten Sie keine veralteten, nicht mehr empfohlenen Befehle verwenden wieifconfig, brctl, und so weiter. Die iproute2-Suite enthält Befehle für all dies, einschließlich der Einrichtung virtueller Schnittstellen (etwas, wofür wir früher OpenVPN verwenden mussten) und der Erstellung von Brücken. Wenn Sie nicht wissen, wie Sie eine Brücke mit IP einrichten, hier sind wir
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 Brücke namens br0, ordnen dann eth0 und tap0 der Brücke zu, der wir die IP-Adresse 10.173.10.1 zuweisen, und schalten dann alles hoch. Die drei separaten Instanzen zum Hochfahren der Schnittstellen (für tap0, eth0 und br0) sind erforderlich.
Der Trick, damit dies funktioniert, besteht in der Verwendung von proxy.arp. Dadurch kann Ihr PC (nicht Ihre VM/Ihr Linux-Container/Ihr Netzwerk-Namespace) an ihrer Stelle auf ARP-Abfragen antworten.
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 den absolut grundlegenden ARP-Verkehr, der den Betrieb des LANs erst ermöglicht. Das Problem ist also: Wenn ich IPv4-Verkehr richtig 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 inBohdi 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 überspringen und den Befehl verwenden können, den ich oben beschrieben habe, um eine tap- oder tun-Schnittstelle zu erstellen, je nachdem, was Sie möchten. Ändern Sie den Befehl einfach entsprechend. Erstellen Sie dann ein veth-Paar für Ihren LXC und erstellen Sie nun eine Brücke zwischen tap0 und veth0. Für diese Brücke, genannt br0, müssen Sie Proxy-ARP verwenden, statt für die einfache tap0-Schnittstelle, die von Bohdi Zazen beschrieben wird.
Quellen:askubuntu.com,nullroute.eu.org,firejail.wordpress.com,superuser.com
Antwort4
4addr ist, wie in anderen Antworten beschrieben, sicherlich die beste Methode, wenn sie vom Adapter/Treiber unterstützt wird, aber das tun nicht alle. NAT könnte für einige Dinge funktionieren, aber eine ordnungsgemäße Kommunikation in beide Richtungen im LAN wird problematisch (z. B. beim Anschließen eines Druckers oder beim Zugriff auf andere IoT-Geräte auf der anderen Seite des NAT). Alles, was auf Broadcast/Multicast angewiesen ist (z. B. Auto-Discovery, Bonjour), schlägt über das NAT fehl.
Die Alternative ist die Verwendung eines ARP-Proxys (parprouted), wie inhttps://wiki.debian.org/BridgeNetworkConnectionsProxyArp. Ich habe dies auf einem Raspberry Pi für einen Drucker eingerichtet und es funktioniert wunderbar (ich habe den post-up
Befehlen eine 10-sekündige Ruhepause hinzugefügt, damit es zuerst eine IP-Adresse erhält; vielleicht hat das mit der Langsamkeit meines alten RPi zu tun ...)