iptables NAT assíncrono. pacotes caem depois da tabela de pré-detalhamento

2

Eu tenho um servidor Centos atuando como um NAT na minha rede. Este servidor tem uma interface externa (depois ext1) e três internas (depois int1, int2 e int3). O tráfego de saída vem dos usuários via int1 e depois do MASQUERADE via ext1. O tráfego de ingresso vem do ext1, MASQUERADE, e passa por int2 ou int3 de acordo com rotas estáticas.

                       | ext1
                       | x.x.x.x/24
             +---------|----------------------+
             |                                |
             |  Centos server  (NAT)          |
             |                                |
             +---|------|---------------|-----+
                 |      |               |
            int1 |      | int2          | int3
   10.30.1.10/24 |      | 10.30.2.10/24 | 10.30.3.10/24
                 ^      v               v
    10.30.1.1/24 |      | 10.30.2.1/24  | 10.30.3.1/24
             +---|------|---------------|-----+
             |   |      |               |     |
             |   |      v               v     |
             |   ^      -Traffic policer-     |
             |   |_____________ |             |
             |                  |             |
             +------------------|-------------+
                                | 192.168.0.1/16
                                |
                                |
                             Clients         
                             192.168.0.0/16

O problema: o tráfego de saída parece ter caído após a tabela PREROUTING. Os contadores de pacotes não estão mudando na regra MASQUERADE em POSTROUTING. Se eu mudar as rotas para os clientes fazendo com que o tráfego volte via int1 - tudo funciona perfeitamente.

A configuração atual do iptable é muito simples:

# cat /etc/sysconfig/iptables

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-I INPUT 1 -i int1 -j ACCEPT

-A FORWARD -j ACCEPT
COMMIT

*nat
-A POSTROUTING -o ext1 -j MASQUERADE
#
COMMIT

Alguém pode me apontar o que estou perdendo? Obrigado.

ATUALIZAÇÃO:

192.168.100.60 via 10.30.2.1 dev int2  proto zebra # routes to clients ...
192.168.100.61 via 10.30.3.1 dev int3  proto zebra # ... I have a lot of them
x.x.x.0/24 dev ext1  proto kernel  scope link  src x.x.x.x 
10.30.1.0/24 dev int1  proto kernel  scope link  src 10.30.1.10 
10.30.2.0/24 dev int2  proto kernel  scope link  src 10.30.2.10 
10.30.3.0/24 dev int3  proto kernel  scope link  src 10.30.3.10 
169.254.0.0/16 dev ext1  scope link  metric 1003 
169.254.0.0/16 dev int1  scope link  metric 1004 
169.254.0.0/16 dev int2  scope link  metric 1005 
169.254.0.0/16 dev int3  scope link  metric 1006 
blackhole 192.168.0.0/16 
default via x.x.x.y dev ext1  

Os clientes têm 192.168.0.1 como gateway, que está redirecionando-os para 10.30.1.1

    
por Shamanu4 29.03.2012 / 11:21

1 resposta

8

Suspeito que você esteja enfrentando um problema com o filtro de caminho inverso. Que é projetado para executar algumas verificações para garantir que os pacotes recebidos em uma determinada interface realmente pertençam a essa interface.

# from linux-doc-nnn/Documentation/networking/ip-sysctl.txt
rp_filter - INTEGER
        0 - No source validation.
        1 - Strict mode as defined in RFC3704 Strict Reverse Path
            Each incoming packet is tested against the FIB and if the interface
            is not the best reverse path the packet check will fail.
            By default failed packets are discarded.
        2 - Loose mode as defined in RFC3704 Loose Reverse Path
            Each incoming packet's source address is also tested against the FIB
            and if the source address is not reachable via any interface
            the packet check will fail.

        Current recommended practice in RFC3704 is to enable strict mode
        to prevent IP spoofing from DDos attacks. If using asymmetric routing
        or other complicated routing, then loose mode is recommended.

        conf/all/rp_filter must also be set to non-zero to do source validation
        on the interface
    
por 29.03.2012 / 18:44