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
=192.165.13.254
(GW de SUBA) = 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
=192.168.20.41
(endereço fornecido pelo provedor de serviços) =192.160.20.254
(GW de SUBB) O roteamento é bastante simples em cada extremidade e pode ser descrito por palavras.
No PC1 como roteador:
No PC2 como roteador:
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:
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.