Как перенести беспроводное соединение в другое сетевое пространство имен?

Как перенести беспроводное соединение в другое сетевое пространство имен?
# ip link set  wlan0 netns 1
RTNETLINK answers: Invalid argument

Работает для обычного ethernet. Работает также для фирменного драйвера broadcom "wl".

Как это сделать для обычного драйвера на базе mac80211?

решение1

Вам необходимо переместить PHY:

iw phy phy0 set netns 666

Где 666 — это pid некоторого процесса, запущенного в этом сетевом пространстве имен; для сетевых пространств, созданных iproute2инструментами (с помощью ip netns), вы можете создать там кратковременный процесс и получить его pid:

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

Чтобы переместить его обратно в корневое пространство имен:

ip netns exec mynetns iw phy phy0 set netns 1

решение2

Для Wi-Fi сначала узнайте физический адрес вашего интерфейса (если у вас более 1 беспроводной карты):

iw dev

Результат будет примерно таким:

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

Итак, имяphy0

Теперь используйте это, чтобы назначить свой Wi-Fi пространству имен:

# iw phy phy0 set netns name <MyNamespace>

С помощью 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)

решение3

Реализовал свой собственный обходной путь:ветифицировать

  1. Создайте пару виртуальных интерфейсов, переместите один из них (например, veth1) в другое пространство имен: ip link add type veth; ip link set veth1 netns <some_pid>;
  2. Включите интерфейс wlan0 и veth0, но не добавляйте к ним никаких адресов;
  3. Запустить vethify wlan0 veth0в пространстве имен хостовой сети. Он скопирует все захваченное на wlan0 в veth0 и обратно;
  4. Настройте IP-адрес и маршрутизацию в другом пространстве имен на veth1;
  5. Отключить выгрузку контрольной суммы для veth1: ethtool --offload veth1 rx off tx off && ethtool -K veth1 gso off.

Примечание: vethify видит все пакеты в сетевом пространстве имен, а не только wlan0 и veth0. Это добавит задержку и вызовет дополнительные накладные расходы.

Связанный контент