OpenVPN na rede local

0

Instalei o OpenVPN em um PI Raspberry (servidor: 192.168.0.2) e no meu laptop Ubuntu (cliente: 192.168.0.3). Ambas as máquinas estão conectadas à mesma rede sem fio e têm seus endereços atribuídos pelo DHCP do roteador sem fio em 192.168.0.1. No entanto, quando a VPN é iniciada, não consigo acessar a Internet a partir do cliente.

Quando inicio o OpenVPN no servidor (com as seguintes opções), ele parece iniciar corretamente.

port 1194
proto udp
dev tun
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key
dh /etc/openvpn/keys/dh2048.pem
cipher AES-256-CBC
auth SHA512
topology subnet
server 10.8.0.0 255.255.255.0
push "dhcp-option DNS 8.8.8.8"
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3

Quando inicio o OpenVPN no cliente (com as seguintes opções), ele também parece começar corretamente.

ca keys/ca.crt
cert keys/client-no-pass.crt
key keys/client-no-pass.key
remote 192.168.0.2 1194
comp-lzo
client
dev tun
redirect-gateway local
remote-cert-tls server
cipher AES-256-CBC
auth SHA512
proto udp
resolv-retry infinite
nobind
persist-key
persist-tun
verb 3
mute 20

No cliente, posso ver que minha tabela de roteamento IP foi manipulada para usar o endereço IP da VPN do servidor como a rota padrão e que todo o tráfego para a rede VPN será originado com o endereço IP do tun0 10.8.0.4.

me@client:~$ ip route
default via 10.8.0.1 dev tun0 
10.8.0.0/24 dev tun0  proto kernel  scope link  src 10.8.0.4 
169.254.0.0/16 dev wlp4s0  scope link  metric 1000 
192.168.0.0/24 dev wlp4s0  proto kernel  scope link  src 192.168.0.3 metric 600

Quando a VPN é desconectada, posso executar o ping 8.8.8.8 (um servidor DNS). Quando a VPN está conectada, não posso.

Depois de pesquisar no Google, tentei adicionar isso no servidor, mas não ajuda:

sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o wlan0 -j SNAT --to-source 192.168.0.2

O que estou fazendo de errado? Como posso consertar isso? Meu cenário de VPN de WLAN local simplesmente não é suportado? Eu tentei executar o Wireshark para capturar o tráfego tun0 do cliente, mas não consegui resolver o problema.

EDITAR: Informação adicional :

  1. O endereço IP do servidor foi "reservado" (por endereço MAC) para que o roteador sempre atribua o mesmo endereço 192.168.0.2

  2. O servidor é configurado (por meio da edição de /etc/sysctl.conf ) para encaminhar pacotes IPV4, e isso foi testado executando cat /proc/sys/net/ipv4/ip_forward (retorna 1)

  3. A tabela de roteamento do servidor mostra isso:

me@server:~$ ip route
default via 192.168.0.1 dev wlan0  metric 303
10.8.0.0/24 dev tun0  proto kernel  scope link  src 10.8.0.1
192.168.0.0/24 dev wlan0  proto kernel  scope link  src 192.168.0.2  metric 303
  1. O firewall do servidor é assim:
me@server:~ $ sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.8.0.0/24 -i tun0 -o wlan0 -m conntrack --ctstate NEW -j ACCEPT

me@server:~ $ sudo iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A POSTROUTING -s 10.8.0.0/24 -o wlan0 -j MASQUERADE
    
por Jono 21.07.2017 / 17:30

1 resposta

1

Você precisa confirmar se o roteamento e a Network Address Translation (NAT) estão funcionando corretamente no seu servidor VPN. Tente usar tcpdump para inspecionar o tráfego de rede na interface VPN do servidor e na porta Ethernet para verificar se os pacotes estão fluindo e quais são seus endereços está. Para responder ao seu comentário sobre se isso pode ser feito com esse design, certamente é possível, e é uma ótima maneira de aprender sobre todos os conceitos envolvidos.

Aqui está um bom guia sobre o NAT com o Linux , e muitos outros estão disponíveis também. Uma coisa importante a verificar é se o seu sistema está configurado corretamente para o roteamento - por padrão, ele pode estar desativado. Se

cat /proc/sys/net/ipv4/ip_forward

retorna um zero, depois é desativado e nenhuma regra de firewall o salvará. Você pode executar echo 1 > /proc/sys/net/ipv4/ip_forward para ativá-lo, mas veja o guia inteiro para obter todas as etapas necessárias, bem como instruções para tornar essa alteração permanente (ela será perdida toda vez que você reiniciar de outra forma).

Além disso, se você estiver usando DHCP para o servidor VPN, provavelmente desejará usar MASQUERADE em vez de SNAT, pois o endereço IP pode mudar e a regra de firewall estará incorreta.

Observe que, se você não quiser usar o NAT, precisará permitir que o seu roteador local (aquele conectado ao seu ISP) saiba que sua sub-rede da VPN (10.8.0.0/24) está atrás do endereço IP do servidor VPN. (192.168.0.2). No momento, não tem idéia de como encontrar o 10.8.0.4, então simplesmente descartará os pacotes de resposta.

Novamente, se o endereço do servidor for atribuído por DHCP, isso poderá mudar e você precisará atualizar a entrada de roteamento, e talvez nem consiga adicionar essa rota se estiver usando o roteador do seu ISP e eles não permitirem você administrar o dispositivo deles.

    
por 25.07.2017 / 13:06