Ping através do túnel GRE descartado entre 2 interfaces de um roteador - Ping não alcança sub-rede

1

Eu tenho um problema interessante que espero que alguém possa ajudar. Eu estou tentando criar um túnel GRE entre 2 roteadores (rodando Linux Ubuntu 12.04) e passar tráfego entre 2 sub-redes através deste túnel.

O que eu estou tentando alcançar pode ser simplificado pela configuração a seguir, imagine 4 computadores (como o diagrama a seguir mostrará), 2 são roteadores, 2 são PCs conectados a um gateway ...

      |----------------------|              |----------------------|
SUBA--+--ETH0          ETH1--+----------- --+--ETH0          ETH1--+--SUBB
      |----------------------|              |----------------------|
            PC1 as router                        PC2 as router

Agora, se o diagrama estiver errado, deixe-me explicar. Eu tenho 2 PCs configurados como roteadores ( ip_forwarding=1, proxy_arp=1 ). Cada PC como roteador tem 2 interfaces e cada interface tem seu próprio ip.

Lado esquerdo do diagrama (PC1 como roteador)

  • SUBA=192.165.13.25
  • ETH0 no PC1 como roteador =192.165.13.254 (GW de SUBA)
  • ETH1 no PC1 como roteador = 192.168.6.40 (endereço conforme fornecido pelo provedor de serviços) - > este é o GW padrão do PC1 como roteador.

Lado direito do diagrama (PC2 como roteador)

  • SUBB=192.160.20.25
  • ETH0 no PC2 como roteador =192.168.20.41 (endereço fornecido pelo provedor de serviços)
  • ETH1 no PC2 como roteador =192.160.20.254 (GW de SUBB)

O roteamento é bastante simples em cada extremidade e pode ser descrito por palavras.

No PC1 como roteador:

  • para acessar 192.165.13.0/24 use eth0
  • para acessar 192.168.6.0/24 use eth1
  • o GW padrão é 192.168.6.40 = > isso é eth1

No PC2 como roteador:

  • para acessar 192.160.20.0/24 use eth1
  • para acessar 192.168.20.0/24 use eth0
  • o GW padrão é 192.168.20.41 = > esta é a eth0

Nesta configuração, SEM QUALQUER REGRA ADICIONAL DE IPTABLES, todos podem fazer ping para todos. E eu estou bem. O SUBA pode fazer ping no SUBB e vice-versa também está bem.

Agora estou criando um túnel GRE entre o PC1 como o roteador eth1 e o PC2 como o roteador eth0 encapsulamento no PC1 como roteador tem túnel GRE com local = 192.168.6.40 e remoto = 192.168.20.41 e, claro, eu tenho a simetria no outro roteador com túnel no PC2 como roteador tem túnel GRE com local = 192.168.20.41 e remoto = 192.168.6.40 ...

Modifico o roteamento (adicione uma regra) no PC2 como roteador apenas para forçar o tráfego para o túnel: para acessar 192.165.13.0/24 use o túnel GRE.

Nada mais é feito.

Agora o SUBB está tentando fazer ping no SUBA e ele não funciona, não funciona tentando fazer ping no GW de SUBA (que é a segunda interface do PC1 como roteador)

Aqui está o que eu vejo usando wireshark ou tcpdump:

  1. O tráfego entra na interface do túnel no PC2 como roteador
  2. O tráfego sai da interface do túnel no PC1 como roteador
  3. O tráfego nunca chega à interface eth0 do PC1 como roteador.

Então eu pesquisei mais profundamente e adicionei várias regras nas tabelas de IP para ver o que estava acontecendo:

cada solicitação de ping é contada em:

mangle prerouting
nat prerouting

Mas o ping não é contado nem para frente (se estiver tentando encaminhar para SUBA) ou para a entrada mangle. Parece que o kernel silenciosamente descarta o pacote no roteamento e eu não tenho ideia do porquê. Na minha opinião, eu não deveria ter que modificar o iptables como eu não precisava antes das tabelas GRE serem criadas ...

Qualquer ajuda sobre o que pode estar acontecendo, como fazer com que o kernel relate o pacote ou o motivo pelo qual ele é descartado seria muito apreciado.

    
por Aymeric 06.01.2014 / 18:43

0 respostas