Rotear todo o tráfego através do OpenVPN

39

Sim, essa pergunta foi feita centenas de vezes, e eu procurei em todos os lugares, sem sucesso.

O título diz realmente tudo.

Eu tenho um servidor OpenVPN (no ubuntu) e posso me conectar a ele através do meu cliente (Windows 8) ...

O problema começa quando tento direcionar TODO o tráfego através da VPN.

Eu adicionei os pushsinalizadores no server.conf:

push "redirect-gateway def1"
push "dhcp-option DNS 8.8.8.8"

Quando eu me conecto a partir do cliente, o cliente gera:

Wed May 07 21:38:40 2014 SENT CONTROL [StretchVPN-CA]: 'PUSH_REQUEST' (status=1)
Wed May 07 21:38:41 2014 PUSH: Received control message: 'PUSH_REPLY,redirect-gateway def1,dhcp-option DNS 8.8.8.8,route-gateway <Remote Router IP>,ping 10,ping-restart 120,ifconfig 192.168.0.201 255.255.255.0'
Wed May 07 21:38:41 2014 OPTIONS IMPORT: timers and/or timeouts modified
Wed May 07 21:38:41 2014 OPTIONS IMPORT: --ifconfig/up options modified
Wed May 07 21:38:41 2014 OPTIONS IMPORT: route options modified
Wed May 07 21:38:41 2014 OPTIONS IMPORT: route-related options modified
Wed May 07 21:38:41 2014 OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modified
Wed May 07 21:38:41 2014 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
Wed May 07 21:38:41 2014 open_tun, tt->ipv6=0
Wed May 07 21:38:41 2014 TAP-WIN32 device [Local Area Connection 4] opened: \\.\Global\{1F145805-92FC-454E-8FD9-0A6017DD4AD1}.tap
Wed May 07 21:38:41 2014 TAP-Windows Driver Version 9.9
Wed May 07 21:38:41 2014 Notified TAP-Windows driver to set a DHCP IP/netmask of 192.168.0.201/255.255.255.0 on interface {1F145805-92FC-454E-8FD9-0A6017DD4AD1} [DHCP-serv: 192.168.0.0, lease-time: 31536000]
Wed May 07 21:38:41 2014 Successful ARP Flush on interface [35] {1F145805-92FC-454E-8FD9-0A6017DD4AD1}
Wed May 07 21:38:46 2014 TEST ROUTES: 1/1 succeeded len=0 ret=1 a=0 u/d=up
Wed May 07 21:38:46 2014 C:\WINDOWS\system32\route.exe ADD <Remote Router IP> MASK 255.255.255.255 172.20.10.1
Wed May 07 21:38:46 2014 ROUTE: CreateIpForwardEntry succeeded with dwForwardMetric1=25 and dwForwardType=4
Wed May 07 21:38:46 2014 Route addition via IPAPI succeeded [adaptive]
Wed May 07 21:38:46 2014 C:\WINDOWS\system32\route.exe ADD 0.0.0.0 MASK 128.0.0.0 192.168.0.3
Wed May 07 21:38:46 2014 ROUTE: CreateIpForwardEntry succeeded with dwForwardMetric1=30 and dwForwardType=4
Wed May 07 21:38:46 2014 Route addition via IPAPI succeeded [adaptive]
Wed May 07 21:38:46 2014 C:\WINDOWS\system32\route.exe ADD 128.0.0.0 MASK 128.0.0.0 192.168.0.3
Wed May 07 21:38:46 2014 ROUTE: CreateIpForwardEntry succeeded with dwForwardMetric1=30 and dwForwardType=4
Wed May 07 21:38:46 2014 Route addition via IPAPI succeeded [adaptive]
Wed May 07 21:38:46 2014 Initialization Sequence Completed

Eu tentei usar os sinalizadores no lado do cliente ao abrir a conexão:

openvpn --config "C:\Program Files\OpenVPN\config\client.ovpn" --redirect-gateway def1 --route-method exe

Mas ainda assim, quando vou para o whatsmyip.org, ainda diz o IP dos meus clientes.

Alguém já teve esse problema e conseguiu resolvê-lo?

Muito Obrigado

Just Lucky Really
fonte
Você tentou push "route 0.0.0.0 0.0.0.0"ou similar para empurrar rotas? Não esqueça a rota de volta na VPN!
lub
Sim, isso é feito automaticamente quando o push "redirect-gateway def1" é usado ... Adiciona máscara 0.0.0.0 127.0.0.0 e 127.0.0.0 mascara 127.0.0.0 (ultrapassando a rota padrão sem excluir a rota já existente)
Apenas Lucky Realmente
Estou preocupado se você estiver executando o cliente como "Executar como administrador" no Windows! Esse problema pode ocorrer se você executar o cliente OVPN do Windows sem executar o administrador.
Kousha

Respostas:

35

Eu testei isso usando um servidor OpenVPN e a configuração da opção redirecionar-gateway def1 na configuração do cliente e do servidor funciona bem. Quando acesso o whatismyip.org , vejo o IP do meu servidor OpenVPN. Abaixo está a configuração do cliente que eu uso:

client
dev tun
proto udp
# THE IP OF THE REMOTE OPENVPN SERVER:
remote ip_address port
resolv-retry infinite
nobind
persist-key
persist-tun
# THE CSR FILE:
pkcs12 certificate.p12
ns-cert-type server
cipher AES-256-CBC
comp-lzo
redirect-gateway def1
verb 3

Também testei com a opção de redirecionar-gateway def1 anexando ao comando openvpn e obtive o mesmo resultado. A configuração do servidor é:

port 1194
proto udp
dev tun

dh /etc/openvpn/easy-rsa/keys/dh1024.pem
ca /etc/openvpn/easy-rsa/keys/ca.crt
# ENSURE THE DOMAIN NAME/FILENAME IS CORRECT:
cert /etc/openvpn/easy-rsa/keys/cert.crt
key /etc/openvpn/easy-rsa/keys/cert.key

server 10.5.3.0  255.255.255.0
# YOUR LOCAL SERVER IP HERE:
client-config-dir ccd
route 10.5.3.0 255.255.255.0
ifconfig-pool-persist ipp.txt
cipher AES-256-CBC
comp-lzo
persist-key
persist-tun

status log/openvpn-status.log 5
status-version 2
log-append log/openvpn.log
verb 3  # verbose mode
management localhost port /etc/openvpn/management-password

# ROUTE THE CLIENT'S INTERNET ACCESS THROUGH THIS SERVER:
push "redirect-gateway def1"
push "remote-gateway vpn_server_ip"
push "dhcp-option DNS 8.8.8.8"
keepalive 10 60
cioby23
fonte
Tentei isso hoje ... Ainda sem sorte. Percebo que você está usando um adaptador TUN em vez de um adaptador TAP ... Eu vou dar um que vá vez e relatório de volta: D
apenas afortunado Realmente
11
Ok, o uso de um adaptador TUN parece estar funcionando ... Embora eu esteja ficando um pouco perturbado com as rotas que preciso atribuir ... estou usando 192.168.1.0/24 para a rede VPN e 192.168.0.0/ 24 é a LAN do meu servidor. Então, na minha configuração do servidor, eu adicionei route 192.168.1.0 255.255.255.0e push "route 192.168.0.0 255.255.255.0"mas meu cliente não está recebendo o acesso a quaisquer outras sub-redes para além dela é 192.168.1.0/24 net ... Eu vou fuçar um pouco mais
apenas afortunado Realmente
20

Talvez você tenha esquecido de modificar seu NAT? Execute esses 3 comandos como root

Comandos:

iptables -I FORWARD -i tun0 -o eth0 \
         -s 10.8.0.0/24 -m conntrack --ctstate NEW -j ACCEPT

iptables -I FORWARD -m conntrack --ctstate RELATED,ESTABLISHED \
         -j ACCEPT

iptables -t nat -I POSTROUTING -o eth0 \
          -s 10.8.0.0/24 -j MASQUERADE

Rubrica:

  • tun0: sua placa de rede VPN virtual
  • eth0: sua placa de rede normal
  • 10.8.0.0: seu bloco de ip de rede VPN
chickahoona
fonte
11
Esta etapa de modificação do NAT é muito crucial. Eu simplesmente não conseguia fazer isso funcionar sem executar acima de 3 comandos.
Nitesh Kumar Anand
6
observe que esses comandos precisam ser executados no servidor openvpn, não no cliente.
Kem Mason
11
Eu descobri que apenas modificar a nattabela também estava funcionando no meu servidor.
Ginhing
11
Precisamos manter as regras do iptables caso o servidor openVPN seja reiniciado?
DWils
@ DWils Sim, você precisa colocá-los em algum script de inicialização. Verifique estas perguntas e respostas: askubuntu.com/questions/270693/…
Arne
1

Depois de procurar a resposta, parece que resolvi isso, talvez parcialmente, mas pelo menos de maneira muito simples:

Eu uso o pacote Xubuntu 14.04 e OpenVPN da fonte principal. Em Configurações> Sistema> Rede , substituí o endereço DNS pré-instalado 127.0.1.1pelo Google 8.8.8.8e agora posso ver todo o tráfego passando pelo servidor VPN.

Na tabela do Wireshark, uma string como o DNS está ausente: todos os dados passam como TCP através do canal criptografado. Vejo o tráfego DHCP e DNS quando olho para tun0(interno do notebook). Quando exploro o wlan0tráfego (externo entre o notebook e o roteador WiFi), recebo apenas pacotes TCP cinza.

Acho que está acontecendo porque a consulta DNS não é necessária na decodificação de caracteres para números e entra no fluxo comum como um pacote de dados usual.

Ficarei feliz em saber suas considerações, não será surpresa se eu estiver completamente errado

xrobot
fonte
Esqueci: esse método tem uma vantagem indiscutível - funciona mesmo que um servidor VPN não suporte o redirecionamento de DNS.
xrobot
A propósito, poderíamos fazer um truque: se, de tempos em tempos, enviarmos consultas DNS falsas e visíveis e inocentes, indiretamente, isso poderá ser uma confirmação de nossa lealdade ao Big Brother.
xrobot
1

Adicione a seguinte diretiva ao arquivo de configuração do servidor:

push "redirect-gateway def1"

Se a sua configuração de VPN for feita em uma rede sem fio, em que todos os clientes e o servidor estejam na mesma sub-rede sem fio, adicione o sinalizador local:

push "redirect-gateway local def1"

Enviar a opção de gateway de redirecionamento para clientes fará com que todo o tráfego de rede IP originado nas máquinas clientes passe pelo servidor OpenVPN. O servidor precisará ser configurado para lidar com esse tráfego de alguma forma, como por meio do NAT na Internet ou roteamento através do proxy HTTP do site do servidor.

No Linux, você pode usar um comando como este para NAT o tráfego do cliente VPN para a Internet:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Este comando pressupõe que a sub-rede VPN seja 10.8.0.0/24 (retirada da diretiva do servidor na configuração do servidor OpenVPN) e que a interface Ethernet local seja eth0.

Quando o gateway de redirecionamento é usado, os clientes OpenVPN encaminham as consultas DNS pela VPN e o servidor VPN precisa lidar com elas. Isso pode ser feito pressionando um endereço de servidor DNS para conectar clientes, que substituirão as configurações normais do servidor DNS durante o tempo em que a VPN estiver ativa. Por exemplo:

push "dhcp-option DNS 10.8.0.1"

configurará clientes Windows (ou clientes não Windows com algum script extra no lado do cliente) para usar 10.8.0.1 como servidor DNS. Qualquer endereço acessível a partir de clientes pode ser usado como o endereço do servidor DNS.

Pol Hallen
fonte
0

Se o seu cliente OpenVPN estiver no Windows 10 (ou similar), há outro problema a ser observado, a ordem de ligação das NICs. As configurações existentes do servidor DNS no adaptador LAN ou Wifi podem ter prioridade sobre as configurações do servidor DNS para a interface de encapsulamento, portanto, mesmo que tudo esteja configurado corretamente do ponto de vista do OpenVPN, o Windows continua a usar o servidor DNS original.

Você pode corrigir isso como descrito nesta postagem no fórum da Microsoft.

https://social.technet.microsoft.com/Forums/windowsserver/en-US/1cc5b647-6e51-482b-8998-ac5c3900938c/how-to-force-vpn-clients-to-use-the-dnsserver-from- seu-vpn-adaptador-não-dnsserver-de-seu? forum = winserverNIS

JudgedByDredd
fonte
não uma resposta para a pergunta
pim
0

Eu enfrentei o mesmo problema e descobri ao usar o script de instalação PiVPN para Open VPN, a configuração do servidor contém a linha:

push "redirecionar-gateway def1 bypass-dhcp"

já. No cliente IOS, tudo é roteado através do túnel automaticamente (é o que o log diz).

No cliente Tunnelblick, você precisa adicionar esta linha no client.ovpn a linha:

redirecionar-gateway def1 bypass-dhcp

e deve funcionar perfeitamente. Pelo menos no meu Mac.

Pedro
fonte