Usando ebtables para descartar pacotes da ponte e rotear via Tinc VPN

Usando ebtables para descartar pacotes da ponte e rotear via Tinc VPN

Temos uma ponte configurada no Ubuntu para conectar nossa LAN ao nosso gateway que está na mesma sub-rede. Precisamos disso para poder controlar o tráfego e, no momento, não estamos em condições de alterar as sub-redes, portanto, não podemos simplesmente roteá-lo.

O gateway é controlado por nosso ISP, que fornece MPLS para várias outras sub-redes /24 dentro de 192.168.0.0/16.

A configuração atual é a seguinte:

192.168.10.1 (gw) <-> eth0 <-> br0 (192.168.10.3) <-> eth1 <-> LAN (192.168.10.0/24)

br0       Link encap:Ethernet  HWaddr ..
          inet addr:192.168.10.3  Bcast:192.168.10.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          ...

eth0      Link encap:Ethernet  HWaddr ..
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

eth1      Link encap:Ethernet  HWaddr ..
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

Isso está funcionando bem e não está causando problemas.

Também temos uma VPN Tinc para nossa infraestrutura de datacenter no mesmo servidor (192.168.10.3) que não faz parte da ponte. ou seja:

tincvpn   Link encap:Ethernet  HWaddr ..
          inet addr:192.168.10.3  Bcast:192.168.255.255  Mask:255.255.0.0
          ...

Gostaríamos de substituir o roteamento de pacotes que passam pela ponte da LAN para determinados destinos (por exemplo, 192.168.5.0/24) para fazê-los passar pelo tinc. ou seja: 192.168.10.x na LAN para 192.168.5.x deve passar pelo tinc e não pelo gateway.

Gostaríamos que isso funcionasse para todas as máquinas na LAN sem precisar configurar nada, mas encontramos uma solução alternativa por enquanto que é adicionar a seguinte rota estática a cada PC/Servidor na LAN:

route add -net 192.168.5.0/24 via 192.168.10.3 dev eth0

Para que a rota estática funcionasse também tivemos que habilitar proxy_arp para todas as interfaces em 192.168.10.3.

Tentamos a seguinte configuração mas não funcionou:

ip rule add fwmark 20 lookup 20
ip route add 192.168.0.0/16 dev tincvpn table 20
ebtables -t broute -I BROUTING -i eth1 -p ipv4 --ip-dst 192.168.5.0/24 -j REDIRECT --redirect-target DROP
iptables -t mangle -I PREROUTING -i eth1 -d 192.168.5.0/24 -j MARK --set-mark 20

Com esta configuração os pacotes chegaram à regra mangle e foram marcados, mas não foram roteados para a interface tincvpn

Nosso entendimento era que precisávamos retirar os pacotes da ponte usando ebtables e então usar roteamento baseado em políticas para fazer os pacotes passarem pelo tinc. Esse entendimento está correto?

Se alguém tiver alguma idéia de por que isso não funcionou, agradeceríamos.

Muito obrigado,

Tom

informação relacionada