Como fazer com que a internet funcione no Raspberry pi conectado a um PC através de um cabo ethernet?

1

Estou tentando a seguinte configuração:

Framboesa pi (eth0) < - > (eth0) laptop (wlan0) < - > Internet

(A framboesa tem um Raspbian). A LAN do lado esquerdo usa os endereços 192.168.0. *.

Atualmente, estou executando o seguinte script no laptop:

ifconfig eth0 up
ifconfig eth0 inet 192.168.0.1
route | grep "192\.168\.0\.0" || \
 route add -net 192.168.0.0/16 dev eth0

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -F; iptables -t nat -F
iptables -t nat -A POSTROUTING ! -d 192.168.0.0/16 -o wlan0 -j MASQUERADE

killall -9 udhcpd
udhcpd -f

esperando que o Raspbian (quase pronto para uso) no Raspberry atenda o servidor DHCP. (Na configuração final, o Raspberry estará em uma configuração sem cabeça).

No entanto, isso só funciona às vezes . Ao fazer o ping de uma das duas máquinas da outra, eu também geralmente tenho Packet filtered respostas ou nenhuma. (Além disso, parece que o laptop às vezes deixa de lado a rota que adicionei).

O que eu esqueci?

    
por Circonflexe 12.09.2017 / 19:18

1 resposta

0

O que você está tentando fazer não funciona dessa maneira. Você não pode ter intervalos de IP sobrepostos em duas interfaces de rede diferentes: como você descobriu, isso às vezes gera pacotes e, às vezes, não. E as solicitações DHCP são transmissões restritas a um único segmento da LAN, elas não serão encaminhadas.

Se o PC estivesse conectado via LAN à Internet em vez de WLAN, você poderia apenas conectar as duas interfaces ethX . Mas você não pode interligar uma interface WLAN à LAN, a menos que a WLAN esteja no modo 4-address, porque os pacotes WLAN comuns de 3 endereços não contêm informação suficiente para que você possa endereçar o PC como receptor "intermediário", e RaspPi como receptor "final".

Assim, a maneira correta de fazer isso é atribuir intervalos IP diferentes em ambas as interfaces, por exemplo, 192.168.1. * / 24 (ou qualquer que seja o seu roteador) em wlan0 e 192.168.3.1/24 (ou qualquer outro) em eth0 no laptop. Em seguida, execute um servidor DHCP no laptop que controle eth0 e forneça ao RaspPi um endereço 192.168.55. * / 24. Finalmente, habilite o encaminhamento e o mascaramento.

Eu uso o seguinte script para isso no meu PC, com um arquivo de configuração dhcpd apropriado:

#!/bin/bash

# pass eth0 through wlan0, using nat

modprobe nf_conntrack
modprobe nf_conntrack_ipv4
modprobe nf_nat
modprobe iptable_nat  

EXTIF="wlan0"
INTIF="eth0"

echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/ip_dynaddr

iptables -P INPUT ACCEPT
iptables -F INPUT
iptables -P OUTPUT ACCEPT
iptables -F OUTPUT 
iptables -P FORWARD DROP
iptables -F FORWARD 
iptables -t nat -F
iptables -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT
iptables -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE

ip link set eth0 down
ip addr flush dev eth0
ip addr add 192.168.3.1/24 dev eth0
ip link set eth0 up

/etc/init.d/isc-dhcp-server start

(Substitua a última linha por um comando systemd para iniciar o servidor DHCP se você usar o systemd).

    
por 13.09.2017 / 09:48