
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 eth0
e 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.