
Eu tenho um PC doméstico com conexão Ethernet com fio (conectado ao roteador) e uma placa wifi. O wifi está configurado como um ponto de acesso (hostapd) e as interfaces de rede são interligadas:
auto enp0s10
iface enp0s10 inet manual
auto wlan0
allow-hotplug wlan0
iface wlan0 inet manual
auto br0
iface br0 inet dhcp
bridge_ports wlan0 enp0s10
netmask 255.255.255.0
Existem algumas iptables
regras que afetam o tráfego selecionado que passa pelowlan0somente interface, usando o --physdev-in
seletor. Esta configuração funciona conforme o esperado.
O que estou tentando fazer agora é ter um mecanismo para forçar processos selecionados no dispositivo aenviar tráfego apenas através wlan0.
Seguindo uma pistaaquiTentei:
> sudo ip netns add myNamespace
> sudo ip link set wlan0 netns myNamespace
RTNETLINK answers: Invalid argument
O que - até onde eu sei - significa:
- que não posso nomear a interface física porque ela está em ponte
- Não consigo usar um
netns
namespace para atingir meu objetivo
EDIT: seguindo a sugestão abaixo degravidadecombinado com o lead mencionado acima, tentei:
> sudo ip netns show
> sudo ip netns add myNamespace
> sudo ip netns show
myNamespace
> sudo iw phy phy0 set name myNamespace
> sudo ip netns exec myNamespace ip link show
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
Nesta fase, devo esperar verphy0ouwlan0listado? O iw phy phy0 set name myNamespace
comando não retorna nenhuma mensagem de erro, mas nenhuma interface parece ter sido adicionada aomeuNamespace. Previsivelmente, a tentativa de abrir a interface falha:
> sudo ip netns exec myNamespace ifconfig wlan0 192.168.0.10/24 up
SIOCSIFADDR: No such device
wlan0: ERROR while getting interface flags: No such device
wlan0: ERROR while getting interface flags: No such device
SIOCSIFNETMASK: No such device
> sudo ip netns exec myNamespace ifconfig phy0 192.168.0.10/24 up
SIOCSIFADDR: No such device
phy0: ERROR while getting interface flags: No such device
phy0: ERROR while getting interface flags: No such device
SIOCSIFNETMASK: No such device<br/>
Novamente, suspeito que isso seja complicado pela configuração da ponte.
O Plano B é criar um usuário/grupo especificamente para esta tarefa (vamos chamá-loswlantraffic) e use iptables
para redirecionar o tráfego desse usuário parawlan0se/quando isso vai acontecerenp0s10.
É aqui que fico preso. A regra seria algo como:
iptables -t nat -A PREROUTING -m owner --gid-owner wlantraffic -m physdev ! --physdev-in wlan0 -j ???
ou seja, "tráfego do grupowlantrafficquenão tementrou na ponte porwlan0deveria ser redirecionado parawlan0"
Os pacotes serão tráfego de Internet padrão.
Minhas perguntas são:
- Isso é uma regra
PREROUTING
ou umaFORWARD
regra? - Se eu combinasse
DROP
pacotes - dentro do contexto de uma ponte - os pacotes "cairiam" para a próxima interface? - Como posso especificar owlan0interface como alvo?
Responder1
Não consigo usar um namespace ntns para atingir meu objetivo
A ponte pode ser o seu problema; no entanto:
As interfaces WLAN são um pouco estranhas quando se trata de namespaces de rede. Cada adaptador possui duas camadas – phy (representando o hardware físico) e netdev (representando a interface de rede).
(A razão é que é possível ter vários netdevs no mesmo phy, por exemplo, cliente + AP, ou um adaptador Wi-Fi de banda dupla pode ter wlan0 e wlan1 operando simultaneamente em redes diferentes. Se estiver curioso, veja iw phy
quais combinações são suportadas para o seu adaptador.)
O Linux atualmente tem uma limitação que ointeiroo dispositivo phy deve ser movido para um namespace; os netdevs individuais não podem ser movidos. Para fazer isso, use iw
:
iw phy phy0 set netns myNamespace
Esta é uma regra PREROUTING ou FORWARD?
Geralmente tudo depende de qual ação (o -j
parâmetro) é usada. Alguns só fazem sentido em FORWARD, outros apenas em PREROUTING; alguns só funcionam em -t nat
, outros apenas em -t mangle
.
Se eu descartasse pacotes correspondentes - dentro do contexto de uma ponte - os pacotes "cairiam" para a próxima interface?
As regras do iptables são para IP e são processadas antes que o pacote chegue à camada de ponte. Se o pacote for descartado na camada IP, ele desaparecerá.