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).