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.
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.
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 .
Deve-se configurar o NAT:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
Então você deve atribuir endereços IP a si mesmo:
ifconfig eth0 10.0.0.1 netmask 255.255.255.0 up
Instale um servidor dhcp e adicione o seguinte texto ao seu arquivo de configuração (em /etc/dhcpd.conf ou algo semelhante)
subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.100 10.0.0.120;
option routers 10.0.0.1;
option domain-name-servers the-ip-address-you-have-in-etc-resolv.conf;
}
Em seguida, inicie-o /etc/init.d/dhcpd start
E é isso!
brctl addbr mybridge
brctl addif mybridge eth0
brctl addif mybridge wlan0
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):
dhclient -d mybridge
Para conectar a interface wifi , você pode usar a iw
ferramenta 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:
# brctl show
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
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 ...)
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.
# bridge setup
brctl addbr br0
ifconfig br0 10.10.20.1/24 up
# enable ipv4 forwarding
echo "1" > /proc/sys/net/ipv4/ip_forward
# netfilter cleanup
iptables --flush
iptables -t nat -F
iptables -X
iptables -Z
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
# netfilter network address translation
iptables -t nat -A POSTROUTING -o wlan0 -s 10.10.20.0/24 -j MASQUERADE
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
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.
Fontes: askubuntu.com , nullroute.eu.org , firejail.wordpress.com , superuser.com
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
e ExecDownPre
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 ative avahi-daemon.service
se ainda não estiver.[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]
WantedBy=wpa_supplicant@wlan0.service
[Unit]
Description=DHCRelay Service
After=network-online.target parprouted_bridge.service
Type=simple
[Service]
ExecStart=/usr/bin/bash -c '/usr/bin/dhcrelay -d -4 -iu wlan0 -id eth0 $(/usr/bin/journalctl -b -u systemd-networkd.service | /usr/bin/grep -Po "via\s+\K\\d+\\.\\d+\\.\\d+\\.\\d+")'
[Install]
WantedBy=multi-user.target
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 .