como encaminhar portas através de múltiplos saltos com iptables

1

Eu tenho lutado com isso há algum tempo e apesar dos meus esforços e não consigo fazer funcionar. Desejo encaminhar portas do IP público para um host (host1) na rede corporativa. A coisa é, existem vários "saltos" entre eles. O host está por trás de um firewall que está por trás de um roteador linux definido como um cliente vpn. Todo o tráfego da rede corporativa, em seguida, passa pela VPN para um VPS na nuvem definida como o servidor vpn e depois para a internet (espero que eu esteja claro o suficiente ...) Aqui está um resumo:

NC1 < == > Internet < == > VPS (servidor VPN) < == > Roteador Linux (cliente VPN) < == > Firewall < == > Rede (host1 com ouvinte de netcast na porta 9000)

Agora, aqui estão as regras do iptables que eu configurei no VPS:

iptables -A FORWARD -i ens3 -o tun0 -p tcp --syn --dport 9000 -m conntrack --ctstate NEW -j ACCEPT

iptables -A FORWARD -i ens3 -o tun0 -d 10.8.0.7 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i tun0 -o ens3 -s 10.8.0.7 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

iptables -t nat -A PREROUTING -i ens3 -p tcp --dport 9000 -j DNAT --to-destination 10.8.0.7

iptables -t nat -A POSTROUTING -o tun0 -p tcp --dport 9000 -d 10.8.0.7 -j SNAT --to-source <Public IP>

iptables -t nat -A POSTROUTING -p tcp -o tun0 --dport 9000 -j MASQUERADE

Com essas regras consegui estabelecer uma conexão da internet para o roteador linux sem problema

Agora estou tentando encaminhar essas mesmas portas do roteador linux para o host do cliente (as regras de redirecionamento apropriadas já estão definidas no firewall):

iptables -A FORWARD -i tun0 -o enp0s8 -p tcp --syn --dport 9000 -m conntrack --ctstate NEW -j ACCEPT

iptables -A FORWARD -i tun0 -o enp0s8 -d 10.0.2.11 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i enp0s8 -o tun0 -s 10.0.2.11 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

iptables -t nat -A PREROUTING -i tun0 -p tcp --dport 9000 -j DNAT --to-destination 10.0.2.11

iptables -t nat -A POSTROUTING -o enp0s8 -p tcp --dport 9000 -d 10.0.2.11 -j SNAT --to-source 10.0.2.100

iptables -t nat -A POSTROUTING -p tcp -o enp0s8 --dport 9000 -j MASQUERADE

10.0.2.11 é o IP da WAN do firewall e 10.0.2.100 é o IP da interface enp0s8 do roteador linux conectado ao firewall. 10.8.0.7 é o tun0 IP do roteador linux.

É aqui que as coisas param de funcionar. Quando eu configuro um ouvinte de netcat no host1 e tento conectar-me da Internet (NC1), recebo um erro de tempo limite de conexão.

Aqui está uma saída do tcpdump do computador NC1 tentando se conectar ao ouvinte netcat no host1:

13:57:05.541009 IP NC1.59820 > xx.xx.xx.xx.9000: Flags [S], seq 681754542, win 29200, options [mss 1460,sackOK,TS val 2294604797 ecr 0,nop,wscale 7], length 0

tcpdump da interface tun0 do roteador linux:

15:53:18.060563 IP 10.8.0.1.59818 > 10.8.0.7.9000: Flags [S], seq 3131331659, win 29200, options [mss 1308,sackOK,TS val 2294404076 ecr 0,nop,wscale 7], length 0

tcpdump da interface enp0s8 do roteador linux:

15:53:18.060619 IP 10.0.2.100.59818 > 10.0.2.11.9000: Flags [S], seq 3131331659, win 29200, options [mss 1308,sackOK,TS val 2294404076 ecr 0,nop,wscale 7], length 0

Eu também devo mencionar que com o roteador linux conectado diretamente à internet (e, claro, substituindo as interfaces de um IPs nas regras do iptables) a conexão estabelece muito bem.

Isso provavelmente é algo estúpido, mas agora eu não vejo isso.

    
por globule_655 01.05.2018 / 16:48

1 resposta

0

OK, então finalmente funciona. Acontece que era algum tipo de bug no firewall. Depois que eu instalei uma atualização que exigia uma reinicialização, tentei de novo e não funcionou. Talvez uma regra antiga do iptables no firewall fosse o bloqueador ...

    
por 07.05.2018 / 14:52