Problemas de roteamento assimétrico no LINUX

Problemas de roteamento assimétrico no LINUX

Problemas de roteamento assimétrico estão me deixando louco!

Estou tentando construir um servidor multi-homed com 3 NICs. Cada NIC está conectada a 3 sub-redes diferentes:

eth0: LAN conectada, 10.99.72.38; função: Gerenciamento de tráfego
eth1: LAN conectada, 10.99.70.150; função: Tráfego de usuário
eth2: WAN conectado, 10.99.74.85; função: Tráfego de usuários

Estou usando uma imagem do Amazon Linux (Linux 3.14.20-20.44.amzn1.x86_64 x86_64), mas posso mudar para o CentOS se isso realmente fizer diferença.

A funcionalidade que estou tentando implementar:

eth0: Gerenciamento de tráfego

  • endereço: 10.99.72.38
  • Quero que esta seja uma interface 'isolada', aceitando e respondendo apenas aos endereços em 10.0.0.0/8
  • Pense nisso como uma NIC 'ssh somente da LAN local'.
  • SÓ pode responder através da eth0
  • Todos os outros destinos estão bloqueados, ou seja, nenhum outro destino pode ser alcançado através desta interface
  • NÃO usaremos eth1 ou eth2 para tráfego de resposta para tráfego que chega em eth0.

eth1: Tráfego de usuário de/para LAN

  • Endereço: 10.99.70.150
  • aceita qualquer tráfego de usuário da LAN para qualquer destino
  • roteia pacotes através da eth1 para tráfego destinado a 10.xxx
  • roteia pacotes através da eth2 para qualquer outro destino (rota padrão)
  • NÃO roteará pacotes recebidos através da eth0

eth2: Tráfego de usuário de/para WAN

  • endereço: 10.99.74.85
  • aceita qualquer tráfego de usuário da eth1 e enviará pacotes pela eth2 para qualquer destino que não esteja em 10.xxx
  • aceita pacotes de resposta na eth2 e roteia através da eth1 para qualquer tráfego destinado a 10.xxx
  • NÃO roteará pacotes recebidos através da eth0

Eu criei uma tabela iproute2 em rt_tables chamada 'mgmt' e adicionei regras de roteamento baseadas em políticas com alta prioridade para tentar isolar essa interface, mas não importa o que eu tente, a tabela de roteamento principal ainda parece ser chamada, pois eth0 é a rota padrão . Os problemas incluem:

  • Os pacotes recebidos da eth1 são roteados pela eth0 (não quero isso!)
  • Os pacotes recebidos da eth2 destinados a 10.xxx são roteados através da eth0 (não quero isso!)
  • Quando excluo a rota eth0 padrão do main, perco completamente a funcionalidade da eth0, mesmo com uma rota na tabela mgmt, mas a eth1 responde corretamente.

Começando do início, a tabela de rotas não modificada (route -n):

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface  
0.0.0.0         10.99.72.1      0.0.0.0         UG    0      0        0 eth0  
0.0.0.0         10.99.70.1      0.0.0.0         UG    10001  0        0 eth1  
0.0.0.0         10.99.74.1      0.0.0.0         UG    10002  0        0 eth2  
10.99.70.0      0.0.0.0         255.255.255.0   U     0      0        0 eth1  
10.99.72.0      0.0.0.0         255.255.255.0   U     0      0        0 eth0  
10.99.74.0      0.0.0.0         255.255.255.0   U     0      0        0 eth2  

As regras de IP não modificadas são:

0:      from all lookup local  
32766:  from all lookup main  
32767:  from all lookup default  

Qualquer assistência para formular corretamente as regras, tabelas e rotas de roteamento específicas e me mostrar como seriam as tabelas e regras de roteamento finais seria muito apreciada!

Responder1

Você deve se livrar da configuração de gateway padrão para eth0e eth1. Como isso é feito depende da sua distribuição.

Você provavelmente não precisa de roteamento de políticas. Acho que o que você deseja é melhor alcançado com Netfilter / iptables.

iptables -I INPUT 1 -i eth0 ! -s 10.99.72.0/24 -j DROP
iptables -I FORWARD 1 -i eth0 -j DROP
iptables -I FORWARD 2 -o eth0 -j DROP

iptables -I INPUT 2 -i eth1 ! -s 10.0.0.0/8 -j DROP
iptables -I FORWARD 3 -i eth1 -j ACCEPT

iptables -I INPUT 3 -i eth2 -m conntrack --ctstate NEW -j DROP
iptables -I FORWARD 4 -i eth2 -j ACCEPT

Provavelmente isso pode ser feito sem o Netfilter, mas com roteamento de política.

informação relacionada