No Arch Linux, eu gostaria que o eth0 (conectado ao roteador em ponte) compartilhasse a conexão recebida do wlan0, li os tutoriais, mas não sou experiente em comandos como outros usuários e não entendo completamente.
por favor, não coloque '[resolvido]' na pergunta ou no título; aceitar uma resposta é a maneira correta de mostrar que um problema foi resolvido. Ele altera a maneira como a pergunta é exibida na listagem principal e coloca a marca de seleção verde na resposta que você marcou como correta.
Zypher 25/09/10
11
Eu apreciaria se ninguém mexesse com esta página. Se você tiver algum problema, entre em contato comigo. Obrigado.
dbdii407
13
serverfault.com/faq Especificamente o cabeçalho "Outras pessoas podem editar minhas coisas"
Zypher 25/09/10
@Zypher O URL ao qual você vincula não existe mais. O parágrafo relevante foi movido para outro lugar?
Na verdade, você não precisa de um endereço IP para a interface de ponte para que a ponte funcione.
Massimo
7
Não é possível adicionar wlan0 para mybridge ponte: Operação não suportada
dbdii407
11
@ Massimo: sim, isso é verdade. O IP válido é necessário para acessar a rede a partir do "dispositivo de ponte".
Cstamas
10
NAT é algo completamente diferente de ponte. A ponte é a camada dois, o NAT é a camada três e é específico para IPv4. Não entendo por que essa é uma resposta aceita.
WhyNotHugo
3
O @Hugo IP NAT é a camada 3, mas o MAC NAT é a camada 2. Para a ponte WiFi, você pode usar 4addr, WDS, MAC NAT ou pode fazer algo na camada 3 (como IP NAT).
David Schwartz
27
Para conectar a interface wifi , você pode usar a iwferramenta para ativar o 4addr da mesma forma:
# iw dev <wifiInterface> set 4addr on
ou seja:
# brctl addif <bridgename> <wifiInterface>
can't add <wifiInterface> to bridge <bridgename>: Operation not supported
# iw dev <wifiInterface> set 4addr on
# brctl addif <bridgename> <wifiInterface>
Agora deve funcionar. Você pode mostrar pontes usando:
Para que serve essa configuração e por que você sugere especificamente usá-la nesse cenário?
hakre
Esta é uma solução para o erro "Operação não permitida" ao tentar adicionar a interface wlan0 à interface da ponte. Depois disso, você deve especificar a interface da ponte em / etc / network / interfaces para ser exibida após a inicialização.
Str82DHeaD
11
@hakre O 4addrmodo faz com que o WiFi se comporte o suficiente como Ethernet com fio para que a ponte funcione. Sem ele, a ponte não funcionará sem o NAT.
David Schwartz
11
4addrexige que ambos os lados de um suporte ligação sem fios que (presumindo que você está tentando implementar um extensor de Wi-Fi)
nhed
5
Depende de quão mau o AP é para você:
1) Talvez você queira apenas ver pacotes vindo de você, com o endereço da camada de link conhecido (e, portanto, não com pacotes em ponte) 2) Pode ser ainda mais inteligente e saber qual endereço IP deve pertencer a qual endereço da camada de link (causa conhece o DHCP e o inspeciona)
Se 1 + 2 são verdadeiros, você realmente precisa de algo como IP NAT, DHCP, ..
Mas se apenas 1) for o caso, você pode falsificar o endereço da camada de link e mapeá-lo no sentido correto na outra direção, conforme descrito aqui:
Isso é realmente confuso. E isso requer configuração extra toda vez que você adiciona um novo computador.
Michael Hampton
4
O 4addr, conforme descrito em outras respostas, é certamente a melhor maneira quando suportado pelo adaptador / driver, mas nem todos. O NAT pode funcionar para algumas coisas, mas obter uma comunicação adequada nos dois sentidos na LAN se tornará problemático (por exemplo, conectar uma impressora ou acessar outros dispositivos de IoT no outro lado do NAT). Qualquer coisa que dependa de broadcast / multicast (por exemplo, descoberta automática, bonjour) falhará no NAT.
A alternativa é usar um ARP Proxy (parprouted), conforme descrito em https://wiki.debian.org/BridgeNetworkConnectionsProxyArp . Configurei isso em um Raspberry Pi para uma impressora e funciona como um encanto (adicionei um sono de 10 segundos nos post-upcomandos para permitir que ele obtenha um endereço IP primeiro, isso pode ter a ver com a lentidão do meu antigo RPi ...)
esse link para a solução proxy-arp plus dhcp-helper é a solução mais compatível e limpa até agora que eu já vi.
minghua
3
Bridge wlan e 4addr:
Construir uma ponte sobre wlan0 é uma dor. Você normalmente não pode adicioná-lo a uma interface de ponte (brctl retorna "Operação não permitida") e o uso do filtro "bridged" do VirtualBox resulta em uma grande confusão de conflitos de ARP e DHCP. A causa disso é que os quadros 802.11 contêm apenas três endereços por padrão: os endereços MAC dos dispositivos sem fio (laptop e AP) e do destinatário final (como na Ethernet). Supõe-se sempre que existe apenas um originador possível.
O 802.11 pode levar o quarto endereço MAC do originador, e isso é usado no modo WDS pelos repetidores. Esse recurso também pode ser ativado no Linux, usando o iw, e a ativação desse modo permitirá que o wlan0 seja usado em interfaces de ponte, assim como na rede em ponte do VirtualBox:
iw dev wlan0 set 4addr on
No entanto, com o 4addr ativado, é provável que você seja completamente ignorado pelo AP: a associação é bem-sucedida, mas todos os quadros de dados desaparecem no éter. Isso pode ser por motivos de segurança (porque é muito difícil falsificar o endereço MAC de origem. Sim.) No meu roteador (executando o OpenRG), é necessário ativar o modo "WDS" para a interface do AP sem fio, adicione um dispositivo WDS restrito ao meu endereço MAC do laptop e adicione-o à ponte da LAN. Pacotes 4addr agora funcionam.
No entanto, há outro problema: o roteador agora rejeita pacotes de três endereços do laptop, o que pode ser bastante inconveniente (é necessário alternar 4addr toda vez que a rede WLAN é alterada). A solução alternativa é adicionar, no laptop, uma segunda interface sem fio vinculada ao mesmo dispositivo, mas com um endereço MAC diferente. Primeiro desfaça a configuração anterior:
iw dev wlan0 set 4addr off
Em seguida, adicione uma segunda interface - o nome foi escolhido arbitrariamente - com um endereço MAC diferente:
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
Aqui deve corresponder ao endereço do dispositivo WDS configurado no roteador; além disso, pode ser qualquer endereço MAC válido. O MAC original do wlan0 permanece para uso "normal".
É possível usar o wlan0 e o wds.wlan0 ao mesmo tempo - embora eu só tenha testado associar ao mesmo ponto de acesso duas vezes, não a pontos de acesso diferentes. Suponho que eles precisem estar no mesmo canal.
Algumas pessoas perguntaram por que usar isso quando o VirtualBox pode conectar o WiFi "muito bem". A resposta é que o VirtualBox não envia os endereços MAC das máquinas virtuais; em vez disso, ele executa NAT na camada MAC também. - 2014-08-22
Ponte wlan direta
Sob certas circunstâncias, você também pode usar o wlan_kabel. Ele usa soquetes de pacotes para conectar diretamente dispositivos wlan * com dispositivos ethernet. No entanto, você só pode conectar um único MAC de cada vez com wlan_kabel. Ele não tem a desvantagem de ser barrado pelos pontos de acesso, porque apenas o MAC original do dispositivo wlan é usado. No seu caso, isso significaria que o wlan0 só poderia ser usado por uma VM e nem pelo host. Você pode obter wlan_kabel aqui . Isso é semelhante à solução macvlans .
Bridging com ipvlan
O IP Vlan não tem a limitação de uma ponte que poderia ser usado para colmatar uma detalhes da rede sobre como usá-lo pode ser encontrada aqui
Alternativa de máscaras
O roteamento Linux pode ser usado com o iptables-masquerade e o ip_forward para obter uma ponte, mas como mencionado, isso requer habilitar o ip_forward e fará com que o linux aja como um roteador.
Além disso, e muito importante, você não deve usar comandos obsoletos e obsoletos, como ifconfig, brctl etc. A suíte iproute2 contém comandos para tudo isso, incluindo a configuração de interfaces virtuais (algo para o qual tivemos que usar o openvpn) e a criação de pontes. Se você não sabe configurar uma bridge com ip, aqui vamos nós
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
Com esse conjunto de comandos, criamos uma interface virtual chamada tap0, depois uma ponte chamada br0, depois escravizamos eth0 e tap0 na ponte, à qual atribuímos um endereço IP 10.173.10.1 e, em seguida, apresentamos tudo. As três instâncias separadas de ativação das interfaces (para tap0, eth0 e br0) são necessárias.
O truque para fazer isso funcionar é usar o proxy.arp, que permite ao seu PC (e não ao seu espaço de nomes de rede / contêiner VM / Linux) responder às consultas ARP em seu lugar.
Em outras palavras, usando o encaminhamento IPv4 entre sua interface de hardware e sua interface virtual, você acha que pode conectar sua VM / LXC / NNS à sua LAN como se fosse uma interface física, mas isso não é verdade: você está esquecendo absolutamente tráfego ARP fundamental, que é o que realmente permite à LAN operar. Portanto, o problema é: se eu encaminhar corretamente o tráfego IPv4, como também posso encaminhar o tráfego ARP, para que minha VM / LXC / NNS funcione? O truque é usar o proxy-arp.
A resposta completa está no Blog de Bohdi Zazen , com o título revelador: Bridge wireless cards. Ele usa um pacote obsoleto, uml-utilities, para criar uma interface virtual por meio do comando tunctl: este é o único comando para o qual ele usa uml-utilities, para que você possa negligenciar com segurança o download do pacote e usar o comando I escrevi acima para criar uma interface de toque ou tun, como você preferir, apenas modifique o comando de acordo. crie um par veth para o seu LXC e agora crie uma ponte entre tap0 e veth0. Essa ponte, chamada br0, é para isso que você deve usar o proxy-arp, em vez da interface simples tap0 descrita por Bohdi Zazen.
Implemente rede sem fio com systemd-networkd . No arquivo .network, defina IPForward=yes. Usei o WPA Supplicant para gerenciar a interface de rede sem fio.
Ative a retransmissão de mDNS definindo enable-reflector=yesdentro /etc/avahi/avahi-daemon.conf; inicie e ative avahi-daemon.servicese ainda não estiver.
Instale o parprouted do AUR e crie um arquivo de serviço adaptando o da resposta Raspbian . Não achei necessário definir a interface como promíscua. Naturalmente, esse serviço precisará ser iniciado e ativado.
[Unit]
Description=proxy arp routing service
Documentation=/raspberrypi//q/88954/79866
[Service]
Type=forking
# Restart until wlan0 gained carrier
Restart=on-failure
RestartSec=5
TimeoutStartSec=30
ExecStartPre=/lib/systemd/systemd-networkd-wait-online --interface=wlan0 --timeout=6 --quiet
ExecStartPre=/usr/bin/echo 'systemd-networkd-wait-online: wlan0 is online'
# clone the dhcp-allocated IP to eth0 so dhcrelay will relay for the correct subnet
ExecStartPre=/usr/bin/bash -c '/usr/bin/ip addr add $(/usr/bin/ip -4 -br addr show wlan0 | /usr/bin/grep -Po "\\d+\\.\\d+\\.\\d+\\.\\d+")/32 dev eth0'
ExecStartPre=/usr/bin/ip link set dev eth0 up
# v minus sign
ExecStart=-/usr/bin/parprouted eth0 wlan0
ExecStopPost=/usr/bin/ip link set dev eth0 down
ExecStopPost=/usr/bin/bash -c '/usr/bin/ip addr del $(/usr/bin/ip -4 -br addr show eth0 | /usr/bin/grep -Po "\\d+\\.\\d+\\.\\d+\\.\\d+")/32 dev eth0'
[Install]
[email protected]
Para oferecer suporte ao DHCP para o dispositivo conectado à porta Ethernet, crie um serviço dhcrelay (do pacote DHCP). Encontrar o endereço do servidor DHCP grep'ing através de logs parece deselegante, mas funciona. Inicie e ative.
Essa abordagem funcionou para mim em um Raspberry Pi Modelo B + com ArchLinuxArm que ostenta um adaptador USB WiFi com o chipset RT5370. Como o Pi fornecerá Wi-Fi a uma impressora com apenas Ethernet, eu gostaria que fosse robusto para um manuseio grosseiro, então meu próximo passo será configurar o cartão SD como somente leitura .
Respostas:
ATUALIZAR
Não é possível fazer a ponte entre as interfaces sem fio (modo de estação cliente) e com fio de acordo com esta discussão no linux-ath5k-devel .
NAT de configuração
Deve-se configurar o NAT:
Atribuindo um IP
Então você deve atribuir endereços IP a si mesmo:
Instale o daemon dhcp
Instale um servidor dhcp e adicione o seguinte texto ao seu arquivo de configuração (em /etc/dhcpd.conf ou algo semelhante)
Iniciar dhcpd
Em seguida, inicie-o /etc/init.d/dhcpd start
E é isso!
Leia apenas abaixo se você estiver interessado na configuração de ponte que não funciona
Primeiro você cria uma interface de ponte. Eu escolho um nome arbitrário mybridge e depois adiciono interfaces a ele.
Você deve solicitar um novo endereço IP (Isso é necessário apenas se você deseja obter um IP válido para o próprio dispositivo de ponte):
fonte
Para conectar a interface wifi , você pode usar a
iw
ferramenta para ativar o 4addr da mesma forma:ou seja:
Agora deve funcionar. Você pode mostrar pontes usando:
fonte
4addr
modo faz com que o WiFi se comporte o suficiente como Ethernet com fio para que a ponte funcione. Sem ele, a ponte não funcionará sem o NAT.4addr
exige que ambos os lados de um suporte ligação sem fios que (presumindo que você está tentando implementar um extensor de Wi-Fi)Depende de quão mau o AP é para você:
1) Talvez você queira apenas ver pacotes vindo de você, com o endereço da camada de link conhecido (e, portanto, não com pacotes em ponte) 2) Pode ser ainda mais inteligente e saber qual endereço IP deve pertencer a qual endereço da camada de link (causa conhece o DHCP e o inspeciona)
Se 1 + 2 são verdadeiros, você realmente precisa de algo como IP NAT, DHCP, ..
Mas se apenas 1) for o caso, você pode falsificar o endereço da camada de link e mapeá-lo no sentido correto na outra direção, conforme descrito aqui:
https://wiki.debian.org/BridgeNetworkConnections#Bridging_with_a_wireless_NIC
fonte
O 4addr, conforme descrito em outras respostas, é certamente a melhor maneira quando suportado pelo adaptador / driver, mas nem todos. O NAT pode funcionar para algumas coisas, mas obter uma comunicação adequada nos dois sentidos na LAN se tornará problemático (por exemplo, conectar uma impressora ou acessar outros dispositivos de IoT no outro lado do NAT). Qualquer coisa que dependa de broadcast / multicast (por exemplo, descoberta automática, bonjour) falhará no NAT.
A alternativa é usar um ARP Proxy (parprouted), conforme descrito em https://wiki.debian.org/BridgeNetworkConnectionsProxyArp . Configurei isso em um Raspberry Pi para uma impressora e funciona como um encanto (adicionei um sono de 10 segundos nos
post-up
comandos para permitir que ele obtenha um endereço IP primeiro, isso pode ter a ver com a lentidão do meu antigo RPi ...)fonte
Bridge wlan e 4addr:
Construir uma ponte sobre wlan0 é uma dor. Você normalmente não pode adicioná-lo a uma interface de ponte (brctl retorna "Operação não permitida") e o uso do filtro "bridged" do VirtualBox resulta em uma grande confusão de conflitos de ARP e DHCP. A causa disso é que os quadros 802.11 contêm apenas três endereços por padrão: os endereços MAC dos dispositivos sem fio (laptop e AP) e do destinatário final (como na Ethernet). Supõe-se sempre que existe apenas um originador possível.
O 802.11 pode levar o quarto endereço MAC do originador, e isso é usado no modo WDS pelos repetidores. Esse recurso também pode ser ativado no Linux, usando o iw, e a ativação desse modo permitirá que o wlan0 seja usado em interfaces de ponte, assim como na rede em ponte do VirtualBox:
No entanto, com o 4addr ativado, é provável que você seja completamente ignorado pelo AP: a associação é bem-sucedida, mas todos os quadros de dados desaparecem no éter. Isso pode ser por motivos de segurança (porque é muito difícil falsificar o endereço MAC de origem. Sim.) No meu roteador (executando o OpenRG), é necessário ativar o modo "WDS" para a interface do AP sem fio, adicione um dispositivo WDS restrito ao meu endereço MAC do laptop e adicione-o à ponte da LAN. Pacotes 4addr agora funcionam.
No entanto, há outro problema: o roteador agora rejeita pacotes de três endereços do laptop, o que pode ser bastante inconveniente (é necessário alternar 4addr toda vez que a rede WLAN é alterada). A solução alternativa é adicionar, no laptop, uma segunda interface sem fio vinculada ao mesmo dispositivo, mas com um endereço MAC diferente. Primeiro desfaça a configuração anterior:
Em seguida, adicione uma segunda interface - o nome foi escolhido arbitrariamente - com um endereço MAC diferente:
Aqui deve corresponder ao endereço do dispositivo WDS configurado no roteador; além disso, pode ser qualquer endereço MAC válido. O MAC original do wlan0 permanece para uso "normal".
É possível usar o wlan0 e o wds.wlan0 ao mesmo tempo - embora eu só tenha testado associar ao mesmo ponto de acesso duas vezes, não a pontos de acesso diferentes. Suponho que eles precisem estar no mesmo canal.
Algumas pessoas perguntaram por que usar isso quando o VirtualBox pode conectar o WiFi "muito bem". A resposta é que o VirtualBox não envia os endereços MAC das máquinas virtuais; em vez disso, ele executa NAT na camada MAC também. - 2014-08-22
Ponte wlan direta
Sob certas circunstâncias, você também pode usar o wlan_kabel. Ele usa soquetes de pacotes para conectar diretamente dispositivos wlan * com dispositivos ethernet. No entanto, você só pode conectar um único MAC de cada vez com wlan_kabel. Ele não tem a desvantagem de ser barrado pelos pontos de acesso, porque apenas o MAC original do dispositivo wlan é usado. No seu caso, isso significaria que o wlan0 só poderia ser usado por uma VM e nem pelo host. Você pode obter wlan_kabel aqui . Isso é semelhante à solução macvlans .
Bridging com ipvlan
O IP Vlan não tem a limitação de uma ponte que poderia ser usado para colmatar uma detalhes da rede sobre como usá-lo pode ser encontrada aqui
Alternativa de máscaras
O roteamento Linux pode ser usado com o iptables-masquerade e o ip_forward para obter uma ponte, mas como mencionado, isso requer habilitar o ip_forward e fará com que o linux aja como um roteador.
A interface br0 terá acesso à rede wlan0
Importante e relacionado
Além disso, e muito importante, você não deve usar comandos obsoletos e obsoletos, como ifconfig, brctl etc. A suíte iproute2 contém comandos para tudo isso, incluindo a configuração de interfaces virtuais (algo para o qual tivemos que usar o openvpn) e a criação de pontes. Se você não sabe configurar uma bridge com ip, aqui vamos nós
Com esse conjunto de comandos, criamos uma interface virtual chamada tap0, depois uma ponte chamada br0, depois escravizamos eth0 e tap0 na ponte, à qual atribuímos um endereço IP 10.173.10.1 e, em seguida, apresentamos tudo. As três instâncias separadas de ativação das interfaces (para tap0, eth0 e br0) são necessárias.
O truque para fazer isso funcionar é usar o proxy.arp, que permite ao seu PC (e não ao seu espaço de nomes de rede / contêiner VM / Linux) responder às consultas ARP em seu lugar.
Em outras palavras, usando o encaminhamento IPv4 entre sua interface de hardware e sua interface virtual, você acha que pode conectar sua VM / LXC / NNS à sua LAN como se fosse uma interface física, mas isso não é verdade: você está esquecendo absolutamente tráfego ARP fundamental, que é o que realmente permite à LAN operar. Portanto, o problema é: se eu encaminhar corretamente o tráfego IPv4, como também posso encaminhar o tráfego ARP, para que minha VM / LXC / NNS funcione? O truque é usar o proxy-arp.
A resposta completa está no Blog de Bohdi Zazen , com o título revelador: Bridge wireless cards. Ele usa um pacote obsoleto, uml-utilities, para criar uma interface virtual por meio do comando tunctl: este é o único comando para o qual ele usa uml-utilities, para que você possa negligenciar com segurança o download do pacote e usar o comando I escrevi acima para criar uma interface de toque ou tun, como você preferir, apenas modifique o comando de acordo. crie um par veth para o seu LXC e agora crie uma ponte entre tap0 e veth0. Essa ponte, chamada br0, é para isso que você deve usar o proxy-arp, em vez da interface simples tap0 descrita por Bohdi Zazen.
Fontes: askubuntu.com , nullroute.eu.org , firejail.wordpress.com , superuser.com
fonte
Gostei da abordagem Proxy Arp , mas a pergunta original especificou o Arch Linux. Aqui está uma versão do Arch Linux de uma implementação Raspbian . Eu tentei muito adaptar a abordagem original do Debian Wiki mencionada aqui para netctl usando
ExecUpPost
eExecDownPre
sem sucesso. Tudo funcionou na linha de comando, mas não dentro do perfil.Os passos:
IPForward=yes
. Usei o WPA Supplicant para gerenciar a interface de rede sem fio.enable-reflector=yes
dentro/etc/avahi/avahi-daemon.conf
; inicie e ativeavahi-daemon.service
se ainda não estiver.Essa abordagem funcionou para mim em um Raspberry Pi Modelo B + com ArchLinuxArm que ostenta um adaptador USB WiFi com o chipset RT5370. Como o Pi fornecerá Wi-Fi a uma impressora com apenas Ethernet, eu gostaria que fosse robusto para um manuseio grosseiro, então meu próximo passo será configurar o cartão SD como somente leitura .
fonte