Eu quero usar um PI executando o último Raspbian como ponte de rede - não sei se é exatamente o termo certo, mas o objetivo é fácil de explicar:
- uma das portas USB do PI é conectada a um modem - ele recebe um IP por DHCP para interface usb0 , a internet funciona (fora da caixa, muito legal)
- a porta Ethernet / RJ45 do PI está conectada à porta WAN de um roteador
- Eu quero que o PI forneça os dispositivos conectados ao acesso à Internet do roteador + bloqueie todas as solicitações recebidas (nada a expor aqui)
O PI não executa DHCP; seu eth0 está configurado para usar o IP estático 192.168.0.1 com o endereço de máscara 255.255.255.0 e o roteador está configurado para usar o IP 192.168.0.2, a mesma máscara de endereço e 192.168.0.1 como gateway.
Em testes, vejo que além do fato de o próprio PI estar online:
- pings do PI para o roteador são bem sucedidos (uma vez que a opção está habilitada no roteador ...)
- pings de dispositivos de LAN para o PI são bem-sucedidos
para que tudo funcione em rede, tudo parece bem, mas não há acesso à Internet a partir dos dispositivos de LAN, presumivelmente porque as regras de encaminhamento de pacotes estão ausentes / erradas. Quais são as regras que encaminham todos os pacotes que chegam em eth0 do IP 192.168.0.2 para o IP dinâmico em usb0 + a contraparte para "pacotes de resposta" em seu caminho de volta? Último em combinação com uma regra que bloqueia todas as solicitações recebidas?
Obrigado!
Atualizar
Graças à resposta do @TayThor e a este tutorial , consegui entrar no caminho certo. É importante não misturar os aspectos de roteamento e firewall. O roteamento não requer regras especiais de encaminhamento, se o mascaramento de IP estiver ativado, isso é "incluído". Os comandos para ativar o mascaramento de IP são:
$> sudo sysctl -w net.ipv4.ip_forward=1
para ativar o encaminhamento de IP no kernel e
$> sudo iptables -t nat -A POSTROUTING -o <wan_network_interface> -j MASQUERADE
com <wan_network_interface>
da interface de rede que fornece a conexão com a internet, usb0
no meu caso. Isso funcionará, desde que a política de firewall padrão para FORWARD seja ACCEPT (e nenhuma outra regra a proíba explicitamente), f.ex. se iptables -S
retornar
OUTPUT DROP
FORWARD ACCEPT
INPUT DROP
Se a política padrão do FORWARD for alterada para DROP, as regras a seguir permitem o compartilhamento da conexão com a Internet:
$> sudo iptables -A FORWARD -i <shareconn_nw_intf> -o <online_nw_intf> -j ACCEPT
$> sudo iptables -A FORWARD -i <online_nw_interface> -o <shareconn_nw_interface> -j ACCEPT
Ainda duvido o que acontece se um pacote chegar no <online_nw_interface>
em uma porta que não foi aberta pelo mascaramento de IP? Será considerado INPUT ou será aplicada a última regra FORWARD acima?
Quero dizer, estas regras FORWARD parecem configurar o firewall para aceitar decisões de encaminhamento que foram tomadas em outro lugar (masquerade), mas elas não instruem o iptables a encaminhar qualquer coisa - certo? Acho isso bastante contra-intuitivo ... mas se eu remover a regra masquerade enquanto mantenho as regras de encaminhamento, não há conexão com a internet.