iptables: regras para encaminhar pacotes de entrada de um IP estático em uma interface para um IP dinâmico em outra interface

2

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.

    
por DonTseTse 25.10.2017 / 16:57

1 resposta

2

Você pode querer habilitar o mascaramento, o que fará com que todo o tráfego de saída pareça vir do Pi. Um ponto de partida seria essas regras.

sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -A FORWARD -i eth0 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Você desejará definir políticas apropriadas nas cadeias. Possivelmente com regras adicionais para pacotes DROP inesperados na interface WAN e pacotes REJECT na interface eth0.

Se você tiver IPv6 disponível, isso não requer conversão de endereço de rede, mas tem como implementação ip6tables separada. Há um pacote shorewall6 separado para configurar isso.
Pode ser mais fácil configurar usando uma ferramenta como shorewall , que deve estar disponível para o pi . O site Shorewall tem muita documentação que pode ser usada para criar suas próprias regras ou apenas a ferramenta shorewall .

    
por 26.10.2017 / 00:27