Eu encontrei a resposta. Eu adicionei NAT a cada nic:
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
Depois que fiz isso, tudo começou a funcionar corretamente. Obrigado a todos!
Atualizado na parte inferior
Estou usando o Centos como roteador e acabei de substituir o sistema de roteamento no trabalho. Eu tenho dois roteadores para enviar dados. Na maioria das vezes, está funcionando. Em um roteador eu tenho 2 intervalos de rede que estão no mesmo nic (eth1). Temos um servidor em um intervalo, e qualquer um no outro não pode SSH para ele. Mas, pode ser pingado.
Aqui está um layout rápido:
Link da Internet:
eth0 - 192.168.144.50 (link between routers)
eth1 - 10.10.10.254 - 255.255.254.0 (10.10.10.x and 10.10.11.x ranges)
eth2 - internet
Roteador 2:
eth0 - 192.168.144.24 (link between routers)
eth1 - 98.0.0.1 & 10.98.0.1 ranges (yes, I know 98.0.0.0 is not for private use, this is a legacy setup that we haven't been able to remove yet)
Aqui está a impressão do ip route :
98.0.0.0/24 dev eth1 proto kernel scope link src 98.0.0.1
192.168.144.0/24 dev eth0 proto kernel scope link src 192.168.144.24
10.98.0.0/24 dev eth1 proto kernel scope link src 10.98.0.1
default via 192.168.144.50 dev eth0
O servidor está no 98.0.0.6. Eu tenho um laptop rodando em 10.98.0.165. Eu recebo uma resposta do comando: ping 98.0.0.6. Mas, quando eu tento ssh, eu não recebo nada. Ao fazer alguns comandos tcpdump em meus roteadores, estou vendo que os pacotes para o comando ssh estão indo do laptop para o roteador da internet (192.168.144.50) e de volta para o roteador correto.
Minha lista de iptables está vazia. Você pode ver minha saída de rota ip acima. Alguma ideia? Eu estive encarando isso o dia todo. A maneira que eu entendo, é que o roteador deve enviar o pacote de volta através de eth1 para 98.0.0.6 para pegar. Obrigado.
Edit: Arranhou a parte de salto. Percebi que estava vendo o tráfego ssh da minha sessão ssh no roteador e o atribuí ao meu pedido ssh.
Atualizar Eu separei minha configuração. Agora 98.0.0.x está em eth1 e 10.98.0.x está em eth2. O que estou vendo não faz muito sentido.
Quando faço ping no servidor 98.0.0.6 do meu laptop 10.98.0.165, recebo uma resposta. A rota que está tomando é estranha. Ele passa pela rota padrão para 192.168.144.50 (roteador de internet) e volta para 98.0.0.6. (o tcpdump na eth0 do roteador da internet achou isso)
Um petisco. Quando eu comecei o projeto, eu estava tentando fazer o roteamento de políticas para fazer funcionar 2 provedores de internet. Existe algo relacionado que poderia estar fazendo isso?
Aqui está meu layout atualizado para o segundo roteador
eth0 - 192.168.144.24 (router link)
eth1 - 98.0.0.1 / 24
eth2 - 10.98.0.1 /24
e ip route show
98.0.0.0/24 dev eth1 proto kernel scope link src 98.0.0.1
192.168.144.0/24 dev eth0 proto kernel scope link src 192.168.144.24
10.98.0.0/24 dev eth2 proto kernel scope link src 10.98.0.1
default via 192.168.144.50 dev eth0
Eu encontrei a resposta. Eu adicionei NAT a cada nic:
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
Depois que fiz isso, tudo começou a funcionar corretamente. Obrigado a todos!
Como você está dizendo que está recebendo respostas de ping do servidor, pode ser possível que as regras do iptables sejam aplicadas em seu servidor, para que o servidor deixe cair a conexão ssh.
Se você estiver autorizado a ver a regra de iptables do servidor, verifique-a. Haveria uma regra para soltar a conexão ssh.
Tags networking routing linux centos