OpenVPN AS aceita conexões encaminhadas pelo NAT

1

Estamos executando servidores OpenVPN AS que podem ser acessados e funcionam em um IP público. Mas alguns de nossos clientes não têm permissão para acessar nosso servidor VPN diretamente (por causa de algum administrador de firewall desagradável - não pergunte ...). Para contornar esse problema, criamos uma configuração que criará um gateway em um ambiente virtual que fará um NAT simples para encaminhar todas as conexões de entrada para o nosso servidor VPN.

O NAT está funcionando corretamente (o tcpdump no servidor mostra os mesmos pacotes que estavam saindo do nosso gateway). Nossos atuais routers iptables são (INPUT, FORWARD e OUTPUT são configurados para ACCEPT por padrão):

iptables -t nat -A PREROUTING -p udp --dport 1194 -j DNAT --to-destination $vpn_srv
iptables -t nat -A POSTROUTING -j MASQUERADE

Eu sei que pode haver alguma necessidade adicional de configuração, mas, desde que o servidor VPN não esteja respondendo aos pacotes que ele certamente recebe, não há necessidade de aprimorarmos as regras.

Sempre que um pacote chega ao servidor VPN, o servidor produz a seguinte saída de log:

2012-12-31 13:03:29+0000 [-] OVPN 1 OUT: 'Mon Dec 31 13:03:29 2012 TLS Error: incoming packet authentication failed from 123.123.123.123:35077'
2012-12-31 13:03:31+0000 [-] OVPN 1 OUT: 'Mon Dec 31 13:03:31 2012 Authenticate/Decrypt packet error: packet HMAC authentication failed'

Então, suponho que precisamos dizer ao servidor VPN para aceitar e responder aos pacotes encaminhados deste host. Como fazemos isso?

Observação: todos os servidores (servidor VPN e NAT Gateway) são públicos.

Editar:
Sem ideias? Eu sei que é possível executar um servidor OpenVPN atrás de um firewall (NAT simples como em qualquer rede doméstica). Como minha configuração é diferente daquela?

Edit (10.01.2013):
Nós tentaríamos qualquer solução que nos permitisse encaminhar o tráfego vpn de um "gateway" para o nosso servidor vpn. De preferência, usando uma criptografia, porque parece que o firewall procura por pacotes específicos de vpn que serão despejados.

    
por wullxz 02.01.2013 / 17:46

2 respostas

1

Se você tem um cliente com um firewall em toda a rede que bloqueia o tráfego do OpenVPN por meio de DPI e / ou algum tipo de análise de padrão, não sei se pode fazer muito a respeito, a não ser usando o OpenVPN. Não tenho certeza se entendo como usar um gateway extra e o NAT (presumo que sua rede não-cliente?) Deve ajudar um pouco.

O que você pode fazer é tentar usar a funcionalidade OpenSSH SOCKS ou tun (4). (Desde que, por alguma estranha razão, apenas o OpenVPN seja bloqueado, mas não o ssh.)

A funcionalidade SOCKS é suportada por todas as principais implementações do ssh (geralmente chamada de "Dynamic Port Forwarding") e permite que o cliente se conecte e autentique por meio do SSH com a opção -D1080 e, em seguida, especifique localhost:1080 como Proxy SOCKS5 dentro do navegador da web. Muito simples de configurar (não são necessárias alterações no lado do servidor se o usuário já tiver acesso ssh) e geralmente funciona muito bem (eu uso isso o tempo todo em redes públicas).

Como alternativa, se você estiver usando um sistema UNIX, também poderá configurar tun(4) através do OpenSSH. Esse é um recurso relativamente mais recente, e requer configuração extra em comparação com o proxy SOCKS que já está praticamente ativado por padrão, mas também é uma boa opção, dependendo do que você está procurando.

    
por 14.01.2013 / 19:54
0

Existem duas outras portas para encaminhar, elas são 443 e 943, como declarado em FAQ do OpenVPN :

Which ports do I need to open in my firewall for Access Server?
Short answer: TCP 443, TCP 943, UDP 1194

E, se isso não funcionar e todos os IPs forem públicos, você poderá tentar remover o MASQUERADE e deixar que a conexão seja feita a partir do P-t-P, passando pelo seu gateway.

Se nada disso ajudar, talvez seja necessário fornecer mais algumas informações, como trechos do tcpdump, sobre os logs de depuração.

    
por 12.01.2013 / 06:26