Port forward to VPN Client?

18

Eu me deparei com um pouco de quebra-cabeça e não tive muita sorte em encontrar uma solução. Agora estou (infelizmente) conectado à rede via Verizon 3G. Eles filtram todo o tráfego de entrada, então é impossível abrir portas para aceitar conexões.

Atualmente, tenho uma máquina virtual Linux no linode.com, e o pensamento passou pela minha cabeça para instalar o pptpd e tentar fazer algum iptables port forwarding. Eu tenho pptpd instalado e minha máquina doméstica se conecta felizmente. Dito isso, aqui estão algumas informações gerais:

Servidor (Debian) IP da WAN: x.x.x.x em eth0 - pptpd IP: y.y.y.1 em ppp0 - Cliente VPN IP: y.y.y.100

Para verificar se eu não estava ficando louco, tentei algumas conexões do servidor para as portas abertas no cliente, e o cliente aceitou as conexões por meio do IP da VPN.

O que eu quero realizar é isto:

Internet - > IP da WAN: Porta - > Encaminhar para o IP da VPN do cliente: Porta

Então, por exemplo, se eu tivesse a porta 6000 aberta no meu cliente, uma pessoa poderia fazer o telnet em x.x.x.x: 6000, e o servidor a captaria e a encaminharia para 192.168.3.100:6000.

Eu tentei pelo menos 20 configurações de iptables no Google e nenhuma funcionou ainda. Alguém tem alguma idéia, ou talvez até uma abordagem totalmente diferente da qual eu não esteja ciente? O objetivo aqui é ouvir através de uma conexão terrivelmente com firewall, de preferência o tráfego TCP e UDP.

    
por Vile Brigandier 15.11.2012 / 05:27

4 respostas

24

Você precisa fazer três coisas no seu servidor VPN (o Linode) para fazer isso funcionar:

  1. Você deve ativar o encaminhamento de IP:

    sysctl -w net.ipv4.ip_forward=1
    
  2. Configure o NAT de destino (DNAT) para encaminhar a porta. Você provavelmente já percebeu isso porque é um padrão de encaminhamento de porta, mas para ser completo:

    iptables -t nat -A PREROUTING -d x.x.x.x -p tcp --dport 6000 -j DNAT --to-dest y.y.y.100:6000
    
  3. Configure NAT de origem (SNAT) para que, da perspectiva do seu cliente VPN, a conexão seja proveniente do servidor VPN:

    iptables -t nat -A POSTROUTING -d y.y.y.100 -p tcp --dport 6000 -j SNAT --to-source y.y.y.1
    

O motivo pelo qual você precisa do SNAT é porque senão seu cliente VPN enviará seus pacotes de retorno diretamente para o host que iniciou a conexão (z.z.z.z) através de seu gateway padrão (ou seja, Verizon 3G), e não via VPN. Assim, o endereço IP de origem nos pacotes de retorno será o seu endereço 3G da Verizon, e não x.x.x.x. Isso causa todos os tipos de problemas, pois o z.z.z.z realmente iniciou a conexão com x.x.x.x.

Na maioria das configurações de encaminhamento de porta, o SNAT não é necessário porque o host que executa o encaminhamento de porta também é o gateway padrão para o host de destino (por exemplo, um roteador doméstico).

Observe também que, se você quiser encaminhar a porta 6000 para uma porta diferente (por exemplo, 7000), a regra SNAT deve corresponder a 7000, não a 6000.

    
por 15.11.2012 / 19:44
3

Eu também tive esse problema e tentei resolvê-lo por horas. Aqui está a minha solução:

  • Eu tinha mais de um VPNClient com o mesmo IPAddress . Então eu dei a cada um deles uma IPAddress estática

Define a directory where the client scripts should be stored , e.g. /etc/openvpn/staticclients and create the directory

mkdir /etc/openvpn/staticclients

Add this directory as option to your openvpn configfile at the server:

client-config-dir /etc/openvpn/staticclients

For each client you have to create a file. The filename must match the common name attribute that was specified at the certificate of the client. This command gets the CN from the computers certificate:

This example pushs the IPAddress 10.1.134.110/10.1.134.109 to the Client with the common name TESTCLIENT and also pushes a additional route for subnet 10.1.135.0.

cat /etc/openvpn/staticclients/TESTCLIENT

ifconfig-push 10.1.134.110 10.1.134.109
push "route 10.1.135.0 255.255.255.0 10.1.134.62"
  • link e O link não detectou corretamente as portas. Além disso, tive que iniciar meu aplicativo no cliente, que os sites puderam ver essas portas.

  • Não há necessidade adicional de SNAT de regras. Apenas estas regras eram necessárias:

sysctl -w net.ipv4.ip_forward=1

iptables -t nat -A PREROUTING -p tcp --dport 28006 -j DNAT --to 10.1.134.110
    
por 29.03.2017 / 08:55
2

A maioria dos servidores tem o encaminhamento de ip desabilitado na configuração padrão. Você precisa ativá-lo se quiser redirecionar conexões de entrada por meio de sua VPN.

Tente isto:

sysctl -w net.ipv4.ip_forward = 1

Quero dizer, além da configuração do iptables.

    
por 15.11.2012 / 08:56
0

O que você deseja alcançar é (provavelmente) muito possível com pptpd ou OpenVPN e iptables, no entanto, você pode achar tinc um melhor candidato para este caso de uso. Acabei de ler este que descreve como configurar o tinc exatamente para esse caso de uso. É uma alternativa (potencialmente mais simples) à parte pptdp ou OpenVPN. Então você precisaria exatamente as mesmas regras para o iptables.

    
por 28.08.2016 / 16:17