Roteando todo o tráfego de eth0 para wlan0

0

Eu tenho um ponto de acesso wi-fi que eu estou conectando através do meu Raspberry Pi em wlan0. Eu tenho uma configuração de servidor DHCP no meu Raspberry Pi para distribuir endereços no eth0. Eu tenho uma configuração de roteador antiga anexada à eth0, que está transmitindo seu próprio ponto de acesso e fazendo outras coisas.

Parece mais ou menos assim:

[main wifi AP] <-wlan0-> [raspberry pi] <- pi's eth0 -> (router/client)

O servidor DHCP está distribuindo endereços muito bem, mas estou tendo problemas para direcionar o tráfego de eth0 para wlan0 (não tenho certeza se isso faz algum sentido). Eu também posso ssh no pi sem problema também.

Estou usando algumas regras para o iptables tentar fazer isso, mas parece que não está funcionando. Não consigo me conectar a nenhum endereço fora da rede local. Por exemplo, não consigo me conectar ao servidor DNS que o AP principal transmitiu por meio do DHCP para o meu Raspberry Pi, independentemente de usar o roteador entre o Pi & laptop.

Aqui está o despejo de iptables-save :

# Generated by iptables-save v1.4.21 on Wed Feb 24 01:11:24 2016
*nat
:PREROUTING ACCEPT [1:32]
:INPUT ACCEPT [1:32]
:OUTPUT ACCEPT [7:432]
:POSTROUTING ACCEPT [5:336]
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
# Completed on Wed Feb 24 01:11:24 2016
# Generated by iptables-save v1.4.21 on Wed Feb 24 01:11:24 2016
*filter
:INPUT ACCEPT [3:140]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [5:308]
-A FORWARD -i wlan0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -o wlan0 -j ACCEPT
COMMIT
# Completed on Wed Feb 24 01:11:24 2016

Alguém tem alguma idéia de por que não pode se conectar fora da rede local?

    
por Kevin Evans 24.02.2016 / 03:10

2 respostas

3

Introdução

Vou tomar algumas suposições, pois não há informações suficientes para criar um exemplo completo e funcional, mas as mudanças devem ser triviais.

Suposições

  1. A rede anexada à wlan0 do RaspberryPi é 192.168.1.0/24.
  2. A rede conectada à eth0 do RaspberryPi é 192.168.2.0/24.
  3. O dispositivo wlan0 da RaspberryPi atribuiu os endereços IP 192.168.1.1 e eth0 192.168.2.1.

Procedimento

  1. Remova todas as coisas do iptables no RaspberryPi.
  2. Permitir o encaminhamento de IPv4 no RaspberryPi:

      # Execute as "root"
    echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf
    sysctl -p
    
  3. Instrua os dispositivos conectados à rede wlan0 do RaspberryPi para usá-lo como gateway para a rede com fio. Isso permitiria que os pacotes fossem atravessados de 192.168.1.0/24 a 192.168.2.0/24, mas as respostas a esses pacotes não poderão voltar (resolvidas no próximo ponto).

    • Se você tiver uma máquina Linux na rede sem fio, poderá adicionar uma rota efêmera que pode ajudá-lo a testar a configuração, mas não sobreviverá a uma reinicialização e outros eventos (dependendo da distribuição do Linux, talvez seja necessário editar arquivos diferentes para estabelecer persistentemente essa configuração). Lembre-se que você tem que esperar até o próximo ponto para conseguir um teste bem sucedido. Simplesmente execute:

      ip route replace 192.168.2.0/24 via 192.168.1.1
      
  4. Instrua os dispositivos conectados à rede eth0 do RaspberryPi para usá-lo como gateway para a rede sem fio.

    • Se você tiver uma máquina Linux na rede com fio, poderá adicionar uma rota efêmera que pode ajudá-lo a testar a configuração, mas não sobreviverá a uma reinicialização e outros eventos (dependendo da distribuição do Linux, você pode editar arquivos diferentes para persistentemente estabelecer essa configuração). Execute:

      ip route replace 192.168.1.0/24 via 192.168.2.1
      
    • Se você quiser transformar o RaspberryPi no gateway padrão da rede com fio, o comando acima deve ser alterado para:

      ip route replace default via 192.168.2.1
      
    • Além disso, você pode tornar essa nova configuração de gateway padrão automática. Se você estiver usando o ISC DHCP Server no RaspberryPi para atender à rede com fio, você pode adicionar a seguinte linha no início do arquivo de configuração "dhcp3.conf" e depois reiniciar o servidor para tornar a configuração do gateway padrão servida pelo DHCP:

      option routers 192.168.2.1
      
por 24.02.2016 / 17:43
0

Eu fiz quase exatamente o que você descreve com o meu Rasberry Pi. Eu conectei diretamente a porta ethernet do meu laptop com um cabo crossover. Eu acho que isso é importante. Não tenho certeza do que há de errado com sua configuração, mas suspeito que há algumas coisas. Eu corro este script no meu laptop:

#!/bin/bash
/usr/bin/ip link set dev enp9s0 up
/usr/bin/ip addr add 172.16.1.1/24 dev enp9s0
sleep 10

modprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE
iptables -A FORWARD -o enp9s0 -i wlp0s26f7u3 -s 172.16.1.0/24 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

dhcpd -cf /etc/dhcpd.enp9s0.conf enp9s0

enp9s0 é o nome da porta ethernet, wlp0s26f7u3 é o nome de uma placa sem fio USB no laptop.

O arquivo /etc/dhcpd.enp9s0.conf se parece com isto:

option domain-name "wlan";
option domain-name-servers 10.0.0.3;
option routers 172.16.1.1;
option ntp-servers 10.0.0.3;
default-lease-time 14440;
ddns-update-style none;
deny bootp;
shared-network intranet {
        subnet 172.16.1.0 netmask 255.255.255.0 {
                option subnet-mask 255.255.255.0;
                pool { range 172.16.1.50 172.16.1.200; }
        }
}

Então eu liguei o Raspberry Pi. Depois de alguns segundos, posso usar arp -a para ver seu endereço de hardware e endereço IP (172.16.1.50, provavelmente) e, em seguida, ssh .

    
por 24.02.2016 / 04:44