AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 446795
Accepted
Ingo
Ingo
Asked: 2018-05-30 13:17:32 +0800 CST2018-05-30 13:17:32 +0800 CST 2018-05-30 13:17:32 +0800 CST

O modo promíscuo é necessário para o proxy arp?

  • 772

edit: descobri que esta é uma duplicata de Por que a resposta ARP somente quando o adaptador de rede está no modo promíscuo? .


Eu uso um Raspberry Pi 3B+ com Rasbian Stretch e o configuro com proxy arp seguindo o tutorial do Debian: Bridging Network Connections with Proxy ARP to "bridge" eth0 to 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 em eth0 que deve ser "ligado" a wlan0.

Mas não funciona. Eu tenho que habilitar o modo promíscuo em 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 evitar?

atualizações:
verificado que rp_filterestá definido como 0.
hostapdnão está instalado. wlan0está no modo cliente e gerenciado por wpa_supplicant.

raspbian raspberry-pi
  • 3 3 respostas
  • 1183 Views

3 respostas

  • Voted
  1. Rui F Ribeiro
    2018-05-31T04:39:12+08:002018-05-31T04:39:12+08:00

    Aparentemente, não é possível fazer a ponte entre quadros ethernet sem fio 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 tenham um endereço de origem que não foi autenticado com o AP.

    • 2
  2. Best Answer
    Ingo
    2018-09-11T12:41:52+08:002018-09-11T12:41:52+08:00

    Parece ser apenas um problema no wi-fi do Raspberry Pi. Também uma pergunta duplicada Por que a resposta ARP somente quando o adaptador de rede está no modo promíscuo? usa um Raspberry Pi. Em nenhum outro lugar em qualquer tutorial pode ser encontrada uma nota para habilitar o modo promíscuo para proxy arp. Eu verifiquei no meu laptop onde o proxy arp funciona sem o 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é lá temos que conviver com isso.

    • 2
  3. Tomtom
    2022-03-18T04:06:17+08:002022-03-18T04:06:17+08:00

    Ponte usando proxy ARP com modo promisc

    É possível "ponte" conexões de WiFi para LAN (por exemplo, em um Raspberry Pi Zero W com adaptador microUSB-LAN) tendo todos os dispositivos na mesma sub -rede (intervalo de IP) usando proxy ARP com modo promisc .

    • Esquema:
    [Router] <---WiFi---> [RasPi wlan0 <---bridge---> eth0] <---Cabo LAN---> [Dispositivo com fio, por exemplo, computador]

    • Dicas: As soluções fornecidas são baseadas nestas fontes excelentes
    Fonte nº 1 de Pascal Geiser
    Fonte nº 2 de Will Haley

    • Hardware/SO usado nestes exemplos:
    Raspberry Pi Zero W com adaptador microUSB para LAN
    Raspbian Stretch Lite (2019-04-08) + Atualizações




    Solução #1 - ARP-proxy 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 com o roteador já esteja configurada e conectada

    2) Instalar pacotes

    $ sudo apt-get install parprouted dhcp-helper
    

    3) Edite e adicione as seguintes linhas:

    Assuming

    • wlan0 é o ID do Raspberry embutido na placa 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) Configure DHCP Relay

    O auxiliar DHCP irá capturar as solicitações e encaminhá-las 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 o AVAHI A

    ativação do "modo refletor" permitirá que os clientes naveguem por 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) Reinicialize o RasPi

    Após a reinicialização, via eth0 / LAN, o dispositivo conectado deve obter acesso à mesma rede do roteador WiFi.
    Nota: A solução de trabalho depende se o seu roteador WiFi suporta "Solução IP Layer 3" (camada de rede)

    $ sudo reboot
    



    Solução nº 2 - ARP-proxy 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) Reinicie o RasPi

    Após a reinicialização via eth0 / LAN, o dispositivo conectado deve 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:

    • O proxy ARP requer suporte do roteador WiFi para recursos de "Camada IP 3 / Camada de rede" (acho que você pode tentar descobrir).
    • A solução preferencial 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 WiFi e do roteador WiFi. Você pode verificar o chip WiFi do seu Raspberry Pi para suporte a WDS com
    $ iw list
    

    na seção Modos de interface suportados

    Wiphy phy0
    ...
        Supported interface modes:
             * IBSS
             * managed
             * AP
             * AP/VLAN
             * WDS
             * monitor
             * mesh point
    ...
    

    Se o WDS não estiver claramente listado aqui, o WDS não é compatível com o chip WiFi (o Raspberry Pi Zero W não oferece suporte ao WDS).

    • 0

relate perguntas

  • Criou um serviço de usuário. Retorna o erro "Falha na etapa GROUP spawning: Operação não permitida"

  • Por que os scripts systemd não estão produzindo os resultados esperados na inicialização, mas corretamente depois?

  • Como alguém atualiza automaticamente o Route53 de um servidor raspberry pi em casa?

  • O /etc/init.d/hostname.sh ainda é uma opção para o alongamento do debian?

  • "pacman -Syu" 'provavelmente' quebrou meu sistema, porque a inicialização não foi montada

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve