Acontece que ... nada estava errado com minha regra inicial do iptables. Embora apenas o primeiro fosse necessário!
Eu tenho um servidor OpenVPN em execução em uma rede local (endereçável localmente em 192.168.1.12) e gostaria de encaminhar solicitações para ele de outros dispositivos na rede local, sobre apenas a porta 3000, para um dos clientes VPN. (10.8.0.6)
Meu resultado final é que os dispositivos 192.168.x.x consigam acessar um servidor da web digitando 192.168.1.12:3000 em um navegador, mas realmente se comunicando com 10.8.0.6:3000.
O encaminhamento de ip está habilitado no servidor vpn.
(estas tentativas modificadas de outras perguntas parecem não funcionar)
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 3000 -j DNAT --to-destination 10.8.0.6:3000
iptables -A FORWARD -p tcp -d 10.8.0.6 --dport 3000 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
Algo similar pode ser alcançado adicionando uma "rota estática" aos seus computadores na LAN, informando-os onde eles podem encontrar os clientes VPN.
Por exemplo, você pode adicionar uma rota a uma máquina Linux em sua LAN como esta:
(sudo) ip route add 10.8.0.0/24 via 192.168.1.12
No Windows, o mesmo pode ser alcançado assim:
route add 10.8.0.0 mask 255.255.255.0 192.168.1.12
(Se estiver usando o Windows, considere o uso da opção -p com route
para tornar a rota persistente.
Obviamente, seus clientes VPN também precisam saber sobre sua LAN, o que pode ser feito adicionando isso ao seu servidor OpenVPN.conf:
push "route 192.168.1.0 255.255.255.0"
(supondo que a máscara de rede da sua LAN seja / 24)
Agora, se você fez todos os itens acima, basta acessar o servidor da Web mencionado da seguinte forma: link
Você pode fazer o mesmo sem qualquer regra de iptables envolvida usando o tunelamento SSH. Execute o seguinte comando no seu servidor OpenVPN:
$ ssh -L 3000:10.8.0.6:3000 root@localhost &
Depois disso, se você abrir o link e ele será encaminhado para o 10.8.0.6:3000
A conexão SSH real será executada em segundo plano e você precisará executar o comando novamente após reinicializar o servidor ou, ocasionalmente, descartar a conexão.
Dê uma olhada aqui para mais exemplos de tunelamento SSH, pode ser extremamente útil em casos como esse.