Wie verschiebe ich eine drahtlose Verbindung in einen anderen Netzwerk-Namespace?

Wie verschiebe ich eine drahtlose Verbindung in einen anderen Netzwerk-Namespace?
# ip link set  wlan0 netns 1
RTNETLINK answers: Invalid argument

Funktioniert mit normalem Ethernet. Funktioniert auch mit dem proprietären Broadcom-„WL“-Treiber.

Wie geht das mit einem normalen Mac80211-basierten Treiber?

Antwort1

Sie müssen das PHY verschieben:

iw phy phy0 set netns 666

Wobei 666 die PID eines Prozesses ist, der in diesem Netzwerk-Namespace ausgeführt wird. Für von iproute2Tools (mit ip netns) erstellte Netspaces können Sie dort einen kurzlebigen Prozess erstellen und seine PID abrufen:

iw phy phy0 set netns "$(ip netns exec mynetns sh -c '
  sleep 1 >&- & echo "$!"')"

So verschieben Sie es zurück in den Stammnamespace:

ip netns exec mynetns iw phy phy0 set netns 1

Antwort2

Für WLAN ermitteln Sie zunächst die physikalische Adresse Ihrer Schnittstelle (falls Sie über mehr als eine WLAN-Karte verfügen):

iw dev

Das Ergebnis wird ungefähr so ​​aussehen:

phy#0
        Interface wlp58s0
                ifindex 3
                wdev 0x1
                ...

Der Name ist alsophy0

Verwenden Sie es nun, um Ihr WLAN dem Namespace zuzuweisen:

# iw phy phy0 set netns name <MyNamespace>

Mit Hilfe von iw:

    phy <phyname> set netns { <pid> | name <nsname> }
            Put this wireless device into a different network namespace:
                <pid>    - change network namespace by process id
                <nsname> - change network namespace by name from /var/run/netns
                           or by absolute path (man ip-netns)

Antwort3

Habe meinen eigenen Workaround implementiert:verifizieren

  1. Erstellen Sie ein Paar virtueller Schnittstellen und verschieben Sie eine davon (z. B. veth1) in einen anderen Namespace: ip link add type veth; ip link set veth1 netns <some_pid>;
  2. Aktivieren Sie die Schnittstelle wlan0 und veth0, aber fügen Sie keine Adressen hinzu.
  3. Starten Sie vethify wlan0 veth0im Namespace des Hostnetzwerks. Es kopiert alles, was auf wlan0 erfasst wurde, nach veth0 und zurück.
  4. Konfigurieren Sie IP-Adresse und Routing im anderen Namespace auf veth1;
  5. Deaktivieren Sie das Prüfsummen-Offloading für veth1 ethtool --offload veth1 rx off tx off && ethtool -K veth1 gso off:.

Hinweis: vethify sieht alle Pakete im Netzwerk-Namespace, nicht nur wlan0s und veth0s. Es führt zu Latenz und zusätzlichem Overhead.

verwandte Informationen