
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.1
ou 192.168.1.2
como 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 NIC
filtro 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.