Eu tenho esta situação: um pedaço de software tem um endereço IP embutido (vamos assumir que está sendo 196.10.10.100:20000) ao qual ele liga um socket e envia tráfego TCP e UDP para 196.10.10.9:20000 (também codificado) . O problema é que, para o sistema funcionar, deve haver várias instâncias desse software em hosts diferentes separados. Não há chance de modificar o software.
A configuração original doenvolvia algum tipo de hardware de rede não compatível com RFC que estava mapeando os MACs na primeira LAN para os MACs na segunda LAN. Agora é necessário emulá-lo sem qualquer hardware de rede extra - apenas um hot por instância do cliente e um host para o servidor. Há (novo) software de servidor que espera aceitar pacotes e responder, usando NICs separadas para cada instância, endereços IP permitidos em sub-redes arbitrárias.
Eu não vejo nenhum problema com a parte do servidor, mas agora há maneira de que os hosts com os mesmos IPs possam ser conectados ao servidor. Eu suponho que não há problema em usar o software do sistema para resolvê-lo, mas não sei como emular uma interface com o IP exigido no host do cliente e redirecionar o tráfego para o servidor, para enviar tráfego do servidor para o software cliente (o que seria de esperar proveniente de não existente 196.10.10.9). Foi-me dito que isso é possível com o iptables, mas tudo o que sei sobre esse iptables é o software packet \ NAT de pacotes. Posso duvidar dessa sugestão, porque quem me disse isso sabe ainda menos do que eu. Tenho solução parcial, sem DMZ e redirecionamento de tráfego para ip adequado
ip netns add vn
ip link add v-eth0 type veth peer name v-local
ip link set v-local netns vn
ip addr add 196.10.10.1/24 dev v-eth0
ip netns exec vn ip addr add 196.10.10.100/24 dev v-local
ip link set v-eth0 up
ip netns exec vn ip link set v-local up
ip netns exec vn ip route add default via 196.10.10.1
echo 1 > /sys/net/ipv4/ip_forward
iptables -P FORWARD DROP
iptables -F FORWARD
iptables -t nat -F
iptables -t nat -A POSTROUTING -s 196.10.10.0/255.255.255.0 -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o v-eth0 -j ACCEPT
iptables -A FORWARD -o eth0 -i v-eth0 -j ACCEPT
Esta configuração permite que o processo no contêiner de namespace acesse a rede real, mas não permite o redirecionamento que eu exijo. Vamos supor que o eth0 tenha o IP 196.10.20.100 e o servidor tenha o IP 196.10.20.9. Como devo modificar o script acima para poder
1) para redirecionar pacotes de 196.10.10.100 destinados a 196.10.10.9, então eles seriam enviados para 196.10.20.9, e
2) para redirecionar pacotes, recebidos por 196.10.20.100, para serem enviados para 10.10.10.100?