iptables: regras diferentes para diferentes IPs de gateway atuais

iptables: regras diferentes para diferentes IPs de gateway atuais

Suponha que eu tenha a Máquina A como gateway. A máquina A possui uma interface com 2 IPs.

A configuração do netplan para a Máquina A é assim:

  renderer: networkd
  ethernets:
    eth0:
      dhcp4: no
      addresses:
        - 192.168.1.1/24
        - 192.168.1.2/24

Agora eu quero que as regras REDIRECT do iptables se comportem de maneira diferente dependendo se a Máquina B definiu seu gateway como 192.168.1.1 ou como 192.168.1.2

Este é o comando iptables que estou tentando executar na Máquina A:

iptables --table nat --append PREROUTING --some-parameter 192.168.1.1 --protocol tcp  --jump REDIRECT --to-ports 9991
iptables --table nat --append PREROUTING --some-parameter 192.168.1.2 --protocol tcp  --jump REDIRECT --to-ports 9992

Você poderia dizer qual é o nome correto para o --some-parameter item acima?

Responder1

Não há como fazer isso com 192.168.1.1 e 192.168.1.2 na mesma interface de rede do gateway, resolvendo assim o mesmo endereço MAC. Não é um recurso não implementado emtabelas de ipque poderia ser implementado, é um recurso que não pode ser implementado devido ao modo como a rede IP funciona.

Um cliente usando 192.168.1.1 ou 192.168.1.2 como gateway nunca enviará um único pacote IPv4 com 192.168.1.1 ou 192.168.1.2 ao emitir pacotes para a Internet. Ele vai:

  • consulte sua tabela de roteamento para um determinado destino
  • descobrir que existe uma porta de entrada para este destino
  • UsarARPou uma entrada em cache para resolver o endereço L2 (endereço Ethernet MAC) necessário para acessar o gateway.

A última etapa terá apenas um destino Ethernet: o endereço MAC exclusivo da NIC do gateway: o mesmo para um cliente com gateway 192.168.1.1 ou outro cliente com gateway 192.168.1.2.

Assim, cada cliente enviará agora um pacote para o gateway com seu endereço de origem IPv4, o destino IPv4 pretendido em um quadro Ethernet tendo o mesmo endereço MAC Ethernet de destino em ambos os casos. 192.168.1.1/192.168.1.2 está fora do circuito.

O gateway agora vê dois pacotes para rotear. Em nenhum caso esses pacotes indicam mais se estavam usando 192.168.1.1ou 192.168.1.2como gateway: a informação não aparece na rede e não pode ser conhecida em nenhum lugar pelo gateway. Se o sistema não tiver informações para distinguir os casos, entãotabelas de iptambém não pode ter essas informações inexistentes.


Sugestão de solução alternativa:

Pode-se usar umMACVLANinterface para ter uma segunda NIC com seu próprio endereço MAC separado e atribuir 192.168.1.2/24 a ela, o que fará com que pacotes de clientes usando 192.168.1.2 como gateway cheguem nesta NIC. Este caso é fácil de distinguir comtabelas de ip: um -i NICfiltro diferente.

Mas isso cria o problema de roteamento de ter múltiplas NICs na mesma LAN e requer:

  • regras avançadas de roteamento de políticas para resolver este caso adequadamente

    portanto, as respostas não são enviadas pela NIC errada, possivelmente afetando o comportamento de roteamento ou as regras de firewall.

    • e além disso, qualquer serviço UDP consultado em 192.168.1.2 (se 192.168.1.1 for o padrão), deve saber responder com o endereço de origem correto 192.168.1.2 (em vez do padrão 192.168.1.1): deve ser multi-homed consciente. O TCP não requer cuidados especiais.
  • ou então um namespace de rede adicional para separar a interface adicionada. Mas com uma regra REDIRECT, isso significa que o serviço na porta 9992 deve ser executado no namespace de rede adicional. E esse namespace de rede provavelmente ainda precisa se comunicar com a Internet usando o namespace de rede inicial: também mais configurações para planejar em vários locais.

informação relacionada