A situação em que estou é onde temos três interfaces separadas em uma máquina específica. Cada rede conectada permite que os servidores (por roteamento / firewall baseado em rede) ofereçam apenas serviços específicos. Obviamente, os clientes podem se conectar a partir de uma ampla variedade de sub-redes e eu estou confiando em firewalls de rede para controles de acesso.
A interface de gerenciamento permite o tráfego ssh, mas para que os clientes possam se conectar, a rota padrão deve ser definida para o gateway na rede de gerenciamento. Isso resolve o SSH, mas interrompe os serviços HTTP que são permitidos apenas na interface de produção. A terceira interface é uma interface de backup, mas todo o tráfego para essa está na mesma sub-rede.
A tabela de roteamento se parece com algo assim:
[root@xxxcpr2 ~]# ip route
10.19.1.0/24 dev eth0 proto kernel scope link src 10.19.1.10
10.18.29.0/24 dev eth1 proto kernel scope link src 10.18.29.25
192.168.5.0/24 dev eth2 proto kernel scope link src 192.168.5.35
default via 10.18.29.1 dev eth1
Acima, eth0 é a interface de gerenciamento, eth1 é a interface de produção e eth2 é a interface de backup.
Essencialmente, a condição que estou tentando acessar é onde o gateway padrão para todo e qualquer tráfego da porta 22 é roteado para fora da interface de gerenciamento, mas todo o tráfego fora de uma sub-rede conectada diretamente deve ser roteado pela interface de produção. Essencialmente, tenho 90% de onde quero estar, apenas quero adicionar uma exceção para o tráfego SSH.
Eu encontrei isso mas eu não foi capaz de fazê-lo funcionar. Talvez seja a minha falta de compreensão ou alguma diferença entre o RHEL e o Ubuntu. Como o gateway padrão da tabela main
já estava definido para sair da interface de produção, o que fiz foi:
# echo 1 > /proc/sys/net/ipv4/ip_forward
# ip route add table 22 default via 10.19.1.1
# iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 22
# ip rule add fwmark 22 table 22
# iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 10.18.29.25
# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 10.19.1.10
A meu modo de pensar (talvez alguém possa apontar como isso está errado) marcar o pacote e criar uma regra para usar a tabela 22 deve funcionar (não sei por que a postagem original mencionou SNAT
mas tentei copiá-la como o melhor que pude para a conclusão), mas as conexões ainda estão esgotadas, a menos que eu altere a rota padrão da tabela main
.
Basicamente, neste momento, preciso de alguém para apontar o que não estou entendendo ou que estou negligenciando.