
editar:Eu descobri que esta é uma duplicata dePor que a resposta ARP apenas quando o adaptador de rede está no modo promíscuo?.
Eu uso um Raspberry Pi 3B+ com Rasbian Stretch e configuro-o com proxy arp seguindo o tutorial do Debian:Conectando conexões de rede com proxy ARPpara "conectar" eth0 a wlan0. De acordo com isso, é fácil configurar o proxy arp com:
rpi3 ~# echo 1 > /proc/sys/net/ipv4/conf/all/proxy_arp
rpi3 ~# echo 1 > /proc/sys/net/ipv4/ip_forward
rpi3 ~# ip route add 192.168.10.60/32 dev eth0
192.168.10.60
é o cliente na eth0 que deve ser "ligado" ao wlan0.
Mas não funciona. Eu tenho que ativar o modo promíscuo no wlan0 para fazê-lo funcionar, mas não consegui encontrar nenhuma dica para fazer isso.
rpi3 ~# ip link set wlan0 promisc on
O modo promíscuo é necessário para Stretch
? Se não, como posso evitá-lo?
atualizações:
Verificado se rp_filter
está definido como 0.
hostapd
não está instalado. wlan0
está no modo cliente e é gerenciado por wpa_supplicant
.
Responder1
Aparentemente, não é possível fazer a ponte entre quadros Ethernet entre wireless no modo cliente e Ethernet. por exemplo, não vai funcionar.
Além disso, tome cuidado ao injetar quadros de outras fontes em uma infraestrutura de AP como cliente.
a maioria dos pontos de acesso (APs) rejeitará quadros que possuem um endereço de origem que não foi autenticado com o AP.
Responder2
Parece ser apenas um problema no wifi do Raspberry Pi. Também uma pergunta duplicadaPor que a resposta ARP apenas quando o adaptador de rede está no modo promíscuo?usa um Raspberry Pi. Em nenhum outro tutorial pode ser encontrada uma nota para ativar o modo promíscuo para proxy arp. Eu verifiquei no meu laptop onde o proxy arp funciona sem modo promíscuo.
Acho que esse problema só pode ser corrigido pela RASPBERRY PI FOUNDATION e/ou seu fabricante de driver de código fechado. Até então teremos que conviver com isso.
Responder3
Bridge usando proxy ARP com modo promisc
É possível "conectar" conexões de WiFi para LAN (por exemplo, em um Raspberry Pi Zero W com adaptador microUSB-LAN) tendo todos os dispositivos nomesma sub-rede(intervalo de IP) usandoProxy ARPcommodo promisc.
•Esquema:
[Roteador] <---WiFi---> [RasPi wlan0 <---bridge---> eth0] <---Cabo LAN---> [Dispositivo com fio, por exemplo, computador]
•Dicas:As soluções fornecidas são baseadas nessas excelentes fontes
Fonte #1por Pascal Geiser
Fonte #2por Will Haley
•Hardware/SO usado nestes exemplos:
Raspberry Pi Zero W com adaptador microUSB para LAN
Raspbian Stretch Lite (08/04/2019) + Atualizações
Solução nº 1 - proxy ARP via INTERFACES (configuração manual)
Nota: Isso depende se o seu roteador WiFi suporta "solução IP Layer 3" (camada de rede)
1)Supondo que a conexão WiFi do Raspberry Pi ao roteador já esteja configurada e conectada
2)Instalar pacotes
$ sudo apt-get install parprouted dhcp-helper
3)Edite e adicione as seguintes linhas:
Assumindo
- wlan0é o ID do Raspberry integrado no cartão WiFi
- eth0é o ID da placa Ethernet com fio (adaptador microUSB-LAN)
$ sudo nano /etc/network/interfaces
# Clone the dhcp-allocated IP to eth0 so dhcp-helper will relay for the correct subnet
auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
pre-up /sbin/ip link set wlan0 promisc on
post-down /sbin/ip link set wlan0 promisc off
post-up /usr/sbin/parprouted eth0 wlan0
post-down /usr/bin/killall /usr/sbin/parprouted
post-up /etc/init.d/dhcp-helper restart
pre-up /sbin/ifup eth0
post-up /sbin/ip addr add $(/sbin/ip -4 -br addr show wlan0 | /bin/grep -Po "\\d+\\.\\d+\\.\\d+\\.\\d+")/32 dev eth0
pre-down /sbin/ip addr del $(/sbin/ip -4 -br addr show wlan0 | /bin/grep -Po "\\d+\\.\\d+\\.\\d+\\.\\d+")/32 dev eth0
post-down /sbin/ifdown eth0
# Set ethernet interface to "manual" mode
auto eth0
allow-hotplug eth0
iface eth0 inet manual
4)Habilite o encaminhamento de pacotes:
$ sudo nano /etc/sysctl.conf
# Find and uncomment this line to enable packet forwarding for IPv4
#net.ipv4.ip_forward=1
# to -->
net.ipv4.ip_forward=1
5)Configurar o DHCP Relay
O auxiliar DHCP capturará as solicitações e as encaminhará para o servidor DHCP "real":
$ sudo nano /etc/default/dhcp-helper
# Change eth0 by the name of your wireless interface (e.g. wlan0)
#DHCPHELPER_OPTS="-b eth0"
# to -->
DHCPHELPER_OPTS="-b wlan0"
6)Configurar AVAHI
A ativação do "modo refletor" permitirá que os clientes naveguem em todos os serviços conectados à ponte:
$ sudo nano /etc/avahi/avahi-daemon.conf
# Find and change the following line
#enable-reflector=no
# to -->
enable-reflector=yes
7)Reinicializar o RasPi
Após a reinicialização, via eth0 / LAN o dispositivo conectado deve ter acesso à mesma rede do roteador WiFi.
Nota: A solução funcional depende se o seu roteador WiFi suporta "solução IP Layer 3" (camada de rede)
$ sudo reboot
Solução nº 2 - proxy ARP via SERVICES (solução de script automatizada)
Nota: Isso depende se o seu roteador WiFi suporta "solução IP Layer 3" (camada de rede)
1)Crie um script bash com este conteúdo:
$ sudo nano bridge.sh
#!/usr/bin/env bash
set -e
[ $EUID -ne 0 ] && echo "run as root" >&2 && exit 1
##########################################################
# You should not need to update anything below this line #
##########################################################
# Credits to Will Haley
# Mainly based on source: https://willhaley.com/blog/raspberry-pi-wifi-ethernet-bridge/#option-1---same-subnet
# Edited on line #52 by Tomtom: path to systemd for parprouted.service
# parprouted - Proxy ARP IP bridging daemon
# dhcp-helper - DHCP/BOOTP relay agent
apt update && apt install -y parprouted dhcp-helper
systemctl stop dhcp-helper
systemctl enable dhcp-helper
# Enable ipv4 forwarding.
sed -i'' s/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/ /etc/sysctl.conf
# Service configuration for standard WiFi connection. Connectivity will
# be lost if the username and password are incorrect.
systemctl restart wpa_supplicant.service
# Enable IP forwarding for wlan0 if it's not already enabled.
grep '^option ip-forwarding 1$' /etc/dhcpcd.conf || printf "option ip-forwarding 1\n" >> /etc/dhcpcd.conf
# Disable dhcpcd control of eth0.
grep '^denyinterfaces eth0$' /etc/dhcpcd.conf || printf "denyinterfaces eth0\n" >> /etc/dhcpcd.conf
# Configure dhcp-helper.
cat > /etc/default/dhcp-helper <<EOF
DHCPHELPER_OPTS="-b wlan0"
EOF
# Enable avahi reflector if it's not already enabled.
sed -i'' 's/#enable-reflector=no/enable-reflector=yes/' /etc/avahi/avahi-daemon.conf
grep '^enable-reflector=yes$' /etc/avahi/avahi-daemon.conf || {
printf "something went wrong...\n\n"
printf "Manually set 'enable-reflector=yes in /etc/avahi/avahi-daemon.conf'\n"
}
# I have to admit, I do not understand ARP and IP forwarding enough to explain
# exactly what is happening here. I am building off the work of others. In short
# this is a service to forward traffic from WiFi to Ethernet.
#cat <<'EOF' >/usr/lib/systemd/system/parprouted.service
cat <<'EOF' >/etc/systemd/system/parprouted.service
[Unit]
Description=proxy arp routing service
Documentation=https://raspberrypi.stackexchange.com/q/88954/79866
Requires=sys-subsystem-net-devices-wlan0.device dhcpcd.service
After=sys-subsystem-net-devices-wlan0.device dhcpcd.service
[Service]
Type=forking
# Restart until wlan0 gained carrier
Restart=on-failure
RestartSec=5
TimeoutStartSec=30
# clone the dhcp-allocated IP to eth0 so dhcp-helper will relay for the correct subnet
ExecStartPre=/bin/bash -c '/sbin/ip addr add $(/sbin/ip -4 -br addr show wlan0 | /bin/grep -Po "\\d+\\.\\d+\\.\\d+\\.\\d+")/32 dev eth0'
ExecStartPre=/sbin/ip link set dev eth0 up
ExecStartPre=/sbin/ip link set wlan0 promisc on
ExecStart=-/usr/sbin/parprouted eth0 wlan0
ExecStopPost=/sbin/ip link set wlan0 promisc off
ExecStopPost=/sbin/ip link set dev eth0 down
ExecStopPost=/bin/bash -c '/sbin/ip addr del $(/sbin/ip -4 -br addr show wlan0 | /bin/grep -Po "\\d+\\.\\d+\\.\\d+\\.\\d+")/32 dev eth0'
[Install]
WantedBy=wpa_supplicant.service
EOF
systemctl daemon-reload
systemctl enable parprouted
systemctl start parprouted dhcp-helper
2)Execute o script bash (verifique se há erros na saída):
$ sudo bash bridge.sh
3)Reinicializar o RasPi
Após a reinicialização via eth0 / LAN, o dispositivo conectado deverá obter acesso à mesma rede do roteador WiFi. Nota: Isso depende se o seu roteador WiFi suporta "solução IP Layer 3"
$ sudo reboot
Notas gerais:
- Proxy ARPrequer suportepelo roteador WiFi para recursos de "IP Camada 3 / Camada de rede" (acho que você pode tentar descobrir).
- A solução preferida via WDS (o tópico não foi tratado aqui) para fornecer uma solução de ponte na mesma sub-rede requer suporte WDS do chip WiFieo roteador Wi-Fi. Você pode verificar o chip WiFi do seu Raspberry Pi para suporte WDS com
$ iw list
na seçãoModos de interface suportados
Wiphy phy0
...
Supported interface modes:
* IBSS
* managed
* AP
* AP/VLAN
* WDS
* monitor
* mesh point
...
SeWDSénão listado distintamenteaqui, então WDS énão suportadopelo chip WiFi (Raspberry Pi Zero W não suporta WDS).