Estou configurando um pequeno CTF (competição de hackers) e tenho uma máquina que hospeda VMs. Uma dessas VMs será o alvo.
A máquina host não pode ser acessada pela Internet, portanto, configurei uma máquina da Digital Ocean como um servidor OpenVPN e o host da VM como um cliente. O diagrama a seguir mostra a configuração:
Minha configuração OpenVPN permite o tráfego entre clientes e uma rota para a rede VM (virtnet) foi enviada. Esta parte funciona, e o host do Jump pode alcançar a máquina 192.168.160.12.
No host do Jump, adicionei as seguintes regras de firewall:
iptables -A FORWARD -d 192.168.160.12 -p tcp --dport 11000 -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 11000 -j DNAT --to-destination 192.168.160.12:11000
Na máquina VMHost eu fiz isso:
iptables -I FORWARD -o tun1 -j ACCEPT
iptables -I FORWARD -i tun1 -j ACCEPT
Acredito que isso seja o suficiente para direcionar o tráfego da Internet para a VM 192.168.160.12, mas não é.
Alcança a máquina VMHost, mas não é encaminhada para a VM. Ao fazer um netcat do host Jump ( nc 192.168.160.12 11000
), tudo funciona bem. A VM é atingida e responde, mas quando eu faço o mesmo pela internet ( nc 178.62.XXX.YYY 11000
da máquina Me) o tráfego chega ao host Jump, é encaminhado para o VMHost, chega ao VMHost na interface tun1, mas é não é encaminhado para a interface do virbr0 como quando o host do Jump era o originador.
Por que essa diferença?