Quero uma máquina virtual na nuvem ( VM1
) para atuar como proxy TCP para um servidor ( VM2
), para que o endereço IP de VM2
não seja exposto aos clientes. Os clientes devem se conectar ao endereço IP público de VM1
na porta 9735
, e todo o tráfego deve ser encaminhado para VM2
na mesma porta. As respostas devem ir na direção oposta.
VM1
e VM2
são conectados via wireguard. Ambos têm duas interfaces: a interface wireguard ( wg0
), e uma interface de internet ( ens5
, eth0
respectivamente). O VM1
endereço IP em wg0
é 10.200.200.1
, enquanto VM2
é 10.200.200.2
. A conexão wireguard funciona bem. Eu posso com sucesso telnet 10.200.200.2:9735
de VM1
.
O problema surge quando tento fazer telnet no IP público de VM1
.
Configurei o iptables VM1
desta maneira.
# Enable IP forwarding
# https://serverfault.com/questions/240532/iptables-dnat-not-working
echo 1 > /proc/sys/net/ipv4/ip_forward
# Reset and allow everything
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -t raw -F
iptables -t raw -X
iptables -t security -F
iptables -t security -X
export WAN=ens5
export LAN=wg0
# Filter rules, default accept, log some
iptables -P INPUT ACCEPT
iptables -A INPUT -p tcp --dport 9735 -j LOG --log-level info --log-prefix "fiter_in"
iptables -P OUTPUT ACCEPT
iptables -A OUTPUT -p tcp --dport 9735 -j LOG --log-level info --log-prefix "fiter_out"
iptables -P FORWARD ACCEPT
iptables -A FORWARD -p tcp --dport 9735 -j LOG --log-level info --log-prefix "filter_forward"
iptables -t nat -A PREROUTING -p tcp -i $LAN -j LOG --log-level info --log-prefix "prerouting_fr_wg0"
iptables -t nat -A PREROUTING -p tcp -i $WAN --dport 9735 -j LOG --log-level info --log-prefix "prerouting_9735"
iptables -t nat -A PREROUTING -p tcp -i $WAN --dport 9735 -j DNAT --to-destination 10.200.200.2:9735
iptables -t nat -A POSTROUTING -o $LAN -j LOG --log-level info --log-prefix "postrouting_to_wg0"
iptables -t nat -A POSTROUTING -o $WAN -j LOG --log-level info --log-prefix "postrouting_to_ens5"
iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE
No VM1
, o encaminhamento do iptables funciona perfeitamente, consigo ver os pacotes sendo encaminhados usando tcpdump
.
root@myserver:~# tcpdump -n -A tcp -i wg0
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on wg0, link-type RAW (Raw IP), snapshot length 262144 bytes
19:53:56.838847 IP [client public ip address].16190 > 10.200.200.2.9735: Flags [S], seq 2996679219, win 64240, options [mss 1420,sackOK,TS val 1658363264 ecr 0,nop,wscale 7], length 0
E..<[email protected].......
...?>&....3.........r.........
b...........
Em VM2
, tcpdump
a saída é simplesmente nada. É como VM2
se simplesmente não recebesse nada.
Alguma sugestão sobre como posso depurar melhor esse problema?