iptables mascarada não está funcionando corretamente

0

Estou tentando usar um Raspberry Pi para agir de maneira semelhante a uma ponte de rede usando iptables with MASQUERADE . Embora eu saiba que há muitas razões técnicas de que isso não é uma ponte, tudo o que preciso fazer é obter o tráfego da Web da porta com fio eth0 para a rede sem fio à qual o Pi está conectado por meio de wlan0 . No entanto, parece não estar funcionando; mesmo que haja acesso à Internet no Pi, o DNS falha no computador que desejo conectar à rede através do Pi.

Seguindo as instruções aqui , usei os seguintes comandos:

echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

Eu queria que isso funcionasse e fosse executado assim que wlan0 estivesse habilitado, então eu adicionei a /etc/network/interfaces em uma cláusula post-up . Notei que o Pi não conseguiu obter corretamente o gateway do DHCP na rede, então eu tinha que definir isso manualmente na mesma declaração. Aqui está o conteúdo completo de /etc/network/interfaces :

auto lo
iface lo inet loopback

iface eth0 inet manual

allow-hotplug wlan0
iface wlan0 inet manual
        wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
        post-up route add default gw 10.110.0.11; echo "1" > /proc/sys/net/ipv4/ip_forward ; iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

O Pi está configurado para ter um IP estático em /etc/dhcpcd.conf usando o seguinte:

interface eth0
static ip_address=192.168.0.5/24
static routers=192.168.0.5
static domanin_name_servers=8.8.8.8 8.8.4.4

Em seguida, no computador em que desejo receber a conexão, configuro para ter seu próprio IP na mesma sub-rede (escolhi 192.168.0.2 ), tenho a mesma máscara de sub-rede ( 255.255.255.0 ) e defino o gateway para 192.168.0.5 . Enquanto eu posso ver o Pi do computador (eu posso pingar e ssh para ele), ele não parece estar recebendo a conexão de internet através dele; Não consigo visitar nenhum site, a pesquisa de DNS falha. Como posso resolver isso?

Obrigado pela sua ajuda!

    
por Billy Kalfus 12.01.2018 / 03:59

1 resposta

1

Como você mesmo disse, usar o NAT (via masquerade do iptables) não transforma o RaspPi em uma ponte. E há uma razão técnica (modo de 3 endereços na rede WLAN), porque você não pode apenas interligar WLAN e LAN, independentemente do tipo de hardware.

O que o NAT faz é fingir que o tráfego vindo da LAN por trás do RaspPi realmente se origina do próprio RaspPi, então a WLAN só vê cada um dos hosts (o RaspPi). O que a WLAN não faz é de alguma forma encaminhar as transmissões da camada 2 da WLAN para a LAN. Mas isso é necessário para o DHCP.

E nenhuma quantidade de mexer com iptables fará isso por você.

Portanto, a opção mais simples é executar um servidor DHCP no RaspPi. Isso é o que eu faço e realmente funciona bem.

Se, por algum motivo, você tiver para usar as informações DHCP fornecidas pelo servidor DHCP na WLAN, porque isso oferece às suas máquinas informações personalizadas super especiais que só podem ser descobertas dessa maneira (improvável) , fica mais complicado. O limite ainda é que todo o assembly deve aparecer como um único host na WLAN, mas você pode usar WLAN_Kabel para fingir que este host é um dispositivo único na LAN do RaspPi. Isso funciona ignorando a pilha de rede Linux (e iptables) e reescrevendo os quadros da camada 2 diretamente, encaminhando-os entre LAN e WLAN. Ele também tornará seu RaspPi inacessível na WLAN.

Se isso não for suficiente, e você tiver para ter vários dispositivos, a única maneira é ativar o modo de quatro endereços na sua WLAN. Isso precisa ser suportado por todos os dispositivos WLAN, e vem com suas próprias dores de cabeça, então este é realmente o último recurso.

    
por 12.01.2018 / 10:49