
# ip link set wlan0 netns 1
RTNETLINK answers: Invalid argument
Funciona para Ethernet normal. Ele também funciona para o driver proprietário "wl" da Broadcom.
Como fazer isso para o driver usual baseado em mac80211?
Responder1
Você precisa mover o PHY:
iw phy phy0 set netns 666
Onde 666 é o pid de algum processo em execução nesse namespace de rede; para netspaces criados por iproute2
ferramentas (com ip netns
), você pode criar um processo de curta duração e obter seu pid:
iw phy phy0 set netns "$(ip netns exec mynetns sh -c '
sleep 1 >&- & echo "$!"')"
Para movê-lo de volta para o namespace raiz:
ip netns exec mynetns iw phy phy0 set netns 1
Responder2
Para wifi, obtenha primeiro o endereço físico da sua interface (caso você tenha mais de 1 placa wireless):
iw dev
O resultado será mais ou menos assim:
phy#0
Interface wlp58s0
ifindex 3
wdev 0x1
...
Então o nome éphy0
agora use isso para atribuir seu wifi ao namespace:
# iw phy phy0 set netns name <MyNamespace>
Com a ajuda de 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)
Responder3
Implementei minha própria solução alternativa:vetificar
- Crie um par de interfaces virtuais, mova uma delas (por exemplo, veth1) para outro namespace:
ip link add type veth
;ip link set veth1 netns <some_pid>
; - Ative a interface wlan0 e veth0, mas não adicione nenhum endereço a ela;
- Comece
vethify wlan0 veth0
no namespace da rede host. Ele copiará tudo capturado em wlan0 para veth0 e vice-versa; - Configure o endereço IP e o roteamento no outro namespace em veth1;
- Desative o descarregamento de soma de verificação para veth1:
ethtool --offload veth1 rx off tx off && ethtool -K veth1 gso off
.
Nota: o vethify vê todos os pacotes no namespace da rede, não apenas os wlan0 e veth0. Isso adicionará latência e causará sobrecarga adicional.