Eu tenho um host que envia pacotes para máquinas virtuais em 192.168.0.1/24 com 192.168.0.11 ou 192.168.0.12 como o IP de destino. Estou tentando configurar a máquina virtual como um NAT. Ele roteia os pacotes, alterando o IP de destino, dependendo do IP de destino original, por isso não pude usar apenas o SNAT, pois o IP original estava sendo comutado em PREROUTING. O que eu tenho tentado usar é o sinalizador --set-mark para sinalizar os pacotes com 11 ou 12 para que as regras POSTROUTING saibam qual regra SNAT usar. Aqui estão minhas regras:
iptables -t mangle -A PREROUTING --destination 192.168.0.11 -j MARK --set-mark 11
iptables -t nat -A PREROUTING -m mark --mark 11 -i eth0 -j DNAT --to 20.0.21.11
iptables -t nat -A POSTROUTING -m mark --mark 11 -o eth1 -j SNAT --to-source 20.0.1.1
e
iptables -t mangle -A PREROUTING --destination 192.168.0.12 -j MARK --set-mark 12
iptables -t nat -A PREROUTING -m mark --mark 12 -i eth0 -j DNAT --to 20.0.21.11
iptables -t nat -A POSTROUTING -m mark --mark 12 -o eth1 -j SNAT --to-source 20.0.1.2
Minhas primeiras duas regras estão sendo incrementadas se eu assistir iptables -t mangle / nat -nvL, mas a regra POSTROUTING nunca é correspondida. Alguma idéia de por que isso seria?
Eu só pensei nisso enquanto escrevia isso. A primeira rede é / 24 sub-rede e eu tenho então segunda rede atualmente configurada como uma sub-rede / 8. Isso afetaria isso de alguma forma?
EDITAR
Para tornar as coisas um pouco mais claras.
Este primeiro passo é o host envia 192.168.0.11/24 ou 192.168.0.12/24 de 192.168.0.1/24 para a máquina virtual da mesma forma.
Destination IPs
HOST ================
=============== +--* 192.168.0.11 *--+ ======
* 192.168.0.1 *--- ================ ---* VM *
=============== +--* 192.168.0.12 *--+ ======
================
Eu, então, quero que a máquina virtual encaminhe esses pacotes com o IP de destino alterado para 20.0.21.11/8. Em seguida, altere o IP de origem para 20.0.21.1/8 ou 20.0.21.2/8, dependendo de quais foram os IPs de destino originais. Assim.
Source IPs w/ 20.0.21.11 as Destination IP
==============
====== +--* 20.0.21.1 *--+ ============
* VM *--- ============== ---* Test rig *
====== +--* 20.0.21.2 *--+ ============
==============
Além disso, fique claro que este é um NAT em uma rede privada. Não há conexão com a internet aqui. Apenas Host <--> VM <--> Test rig
EDIT 2
Mais um desenho para deixar um pouco mais claro.
Destination IPs Source IPs
HOST ============== =============== Test rig
============= +--*192.168.0.11*-+ | 20.0.21.1 *--+ ==============
*192.168.0.1*--- ============== +--* VM | +--* 20.0.21.11 *
============= +--*192.168.0.12*-+ | 20.0.21.2 *--+ ==============
============== ===============