Essa é uma grande bagunça e, sinceramente, você seria mais bem servido por renumerar do que criando uma rede de NATs feios com endereços conflitantes. As outras soluções que você precisará para suportar isso (por exemplo, DNS split-horizon com múltiplas zonas, possivelmente com atualização automática) serão difíceis e confusas e toda pessoa subsequente que tiver que lidar com esta rede irá amaldiçoar seu nome para sempre e queimar efígies de você e sua equipe.
No entanto, parece que o problema que você está tendo é que os hosts em um lado do NAT (ver? Eu não posso nem descrever os lados do NAT corretamente, porque é confuso) não tem um caminho de volta para os anfitriões do outro lado. Você tem que adicionar uma regra NETMAP para o caminho de retorno também (pacotes recebidos de eth1 eu presumo).
Mas espere! Isso é feito na cadeia de pré-lançamento. Assim, o endereço de destino será definido antes da decisão de roteamento ser feita, o que é praticamente o mesmo que tem que funcionar ... mas o roteador tem duas rotas para a rede "conflitante". Assim, ele priorizará pelos meios usuais (prefixo de correspondência mais curto primeiro; métrica para quebrar os vínculos), fazendo com que alguns pacotes sejam refletidos de volta na rede de onde vieram, em vez de serem roteados através do NAT. Eles também serão fonte-natted. Infelizmente, o endereço de origem não é usado no roteamento, portanto você não pode usar o endereço de origem. A interface de entrada não é usada no roteamento, e uma vez que a decisão de roteamento é feita, você não pode reescrever o endereço de destino novamente.
Então, você descobre que isso não pode ser feito. Você tem duas opções. Preferencialmente, você renumeraria uma das sub-redes com o conflito de endereço de rede, porque você é um bom engenheiro de rede, e não um incompetente, e faz redes que não são desnecessariamente complicadas. A renumeração de sub-redes VPN tende a ser uma tarefa descomplicada que na pior das hipóteses exigirá o uso de sed
, mas talvez você tenha uma dessas situações estranhas em que renumerar qualquer sub-rede é uma tarefa desumanamente difícil. OK.
Se, por qualquer motivo, você não puder fazer isso, precisará de um roteador adicional para usar o seu DNS de horizonte dividido. Configure um roteador para cada sub-rede (na verdade, isso significa um roteador para os clientes VPN e um roteador para os hosts na rede que, infelizmente, usa o prefixo que você pifou para a VPN). Escolha outro intervalo de endereços (e teria que ser outro que você poderia renumerar uma das sub-redes para ...) para ser o "estrangeiro".
Agora, suponha que chamamos a rede com o lado A dos hosts VPN e a rede com os hosts não-VPN B. Suponha que no roteador A você escolha o prefixo "estrangeiro" como 192.0.2.0/24 e roteador B, é 198.51.100.0/24. Esses serão os prefixos falsos que você usa para os hosts dessa sub-rede para contatar os hosts com o prefixo conflitante na outra sub-rede (não use esses locais para fins de documentação no RFC5737).
As regras abaixo são complicadas porque você não pode usar a interface de entrada como um predicado na cadeia POSTROUTING, e a sub-rede de origem não é exclusiva, portanto, precisamos impedir a falsificação usando uma regra de filtro. Também é confuso porque o NETMAP decide se altera o endereço de origem ou de destino com base na cadeia em que está.
No roteador A e B, adicione uma regra para o tráfego de entrada no link ponto a ponto entre os roteadores que eu chamarei ptp0:
router-a # iptables -t nat -A PREROUTING -i ptp0 -d 198.51.100.0/24 -j NETMAP --to 10.0.77.0/24
router-a # iptables -t nat -A POSTROUTING -d 10.0.77.0/24 -j NETMAP --to 192.0.2.0/24
router-a # iptables -t filter -A FORWARD -i \!ptp0 -s 10.0.77.0/24 -j DROP
router-b # iptables -t nat -A PREROUTING -i ptp0 -d 192.0.2.0/24 -j NETMAP --to 10.0.77.0/24
router-b # iptables -t nat -A POSTROUTING -d 10.0.77.0/24 -j NETMAP --to 198.51.100.0/24
router-b # iptables -t filter -A FORWARD -i \!ptp0 -s 10.0.77.0/24 -j DROP
Agora, essa parte do problema foi solucionada porque você não tem mais um único roteador que tenha os dois prefixos na tabela de roteamento. Nenhuma solução que requer que você tenha o mesmo prefixo referente a duas redes diferentes com dois hosts diferentes na mesma tabela de roteamento pode funcionar; é intrinsecamente impossível devido a como o roteamento funciona.
Ah, e eu quase me esqueci - acredito que sua regra SNAT não está sendo processada porque nada está combinando, mas é importante lembrar que uma vez que uma conexão é armazenada na tabela de estado NAT, ela não é mais processada pelo SNAT regra e não é mais contado nas estatísticas, se bem me lembro.
Se você realmente não exige que as sub-redes sejam separadas, basta usar a ponte da camada 2. Isso tornará sua vida muito mais fácil.