Guia OpenVPN Lan-to-Lan

kasmafan

Power Member
Boas

Não sei se já existe algo do género por aqui mas eu não encontrei.
Como tive de fazer o documento para a empresa partilho aqui convosco.
Nota isto é um ponto de partida, cada um saberá as necessidades das vossas redes, por exemplo no guia não estão contempladas regras de iptables e o mesmo assume que o a máquina de vpn será o gateway nas respectivas redes, senão o for já sabem nos vossos routers terão de criar rotas para o tráfego destinado á vpn ir parar à máquina que estabelece a vpn.

OpenVPN
Lan-to-Lan


Requisitos:
  • 2 Máquinas com ubuntu server. Estas máquinas deverão ter no mínimo 2 interfaces de rede cada uma.
  • Openvpn
Cenário:
  • Servidor VPN SITE A
    • interface wan 172.16.0.1
    • interface lan 192.168.1.254 (gateway das máquinas dessa rede)
  • Cliente VPN SITE B
    • interface wan 172.17.0.1
    • interface lan 192.168.2.254 (gateway das máquinas dessa rede)
Apóster instalado o SO nas respetivas máquinas:
  • sudo apt-get update
  • sudo apt-get install openvpn
  • sudo mkdir /etc/openvpn/easy-rsa/
  • sudo cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa
  • sudo vi /etc/openvpn/easy-rsa/vars
    Alterem o que está entre aspas para o que quiserem.
exportKEY_COUNTRY="PT"
exportKEY_PROVINCE="LX"
exportKEY_CITY="Lisbon"
exportKEY_ORG="MyCompany"
exportKEY_EMAIL="[email protected]"

Geraros certificados para o server:
  • sudo su
  • mkdir /etc/openvpn/easy-rsa/keys
  • mkdir /etc/openvpn/ccd
  • cd /etc/openvpn/easy-rsa/
  • source ./vars
  • ./clean-all
  • ./build-dh
  • ./pkitool --initca
  • ./pkitool --server server
  • cd keys
  • cp server.crt server.key ca.crt dh1024.pem /etc/openvpn
  • exit
Criaro ficheiro de configuração para o servidor:
  • cd /etc/openvpn
  • vi server.conf

local172.16.0.1
port 1194
proto udp
dev tun0
caca.crt
cert server.crt
key server.key
dhdh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persistipp.txt
push "route 192.168.1.0255.255.255.0"
client-config-dir /etc/openvpn/ccd
route192.168.2.0 255.255.255.0
client-to-client
keepalive 10120
user nobody
groupnogroup
persist-key
persist-tun
status/var/log/openvpn-status.log
log-append /var/log/openvpn.log
verb 3



Geraros certificados para a máquina cliente:
  • cd /etc/openvpn/easy-rsa
  • sudo su
  • source ./vars
  • ./pkitool hostname-da-maquina-cliente
  • vi /etc/openvpn/ccd/hostname-da-maquina-cliente
    iroute 192.168.2.0 255.255.255.0
  • exit
Copiarpara a máquina cliente os certificados (em /etc/openvpn):
  • ca.crt
  • hostname-da-maquina-cliente.crt
  • hostname-da-maquina-cliente.key
Criaro ficheiro de configuração da máquina cliente:

  • vi /etc/openvpn/client.conf
    client
    dev tun
    proto udp
    remote 172.16.0.1 1194
    nobind
    user nobody
    group nogroup
    persist-key
    persist-tun
    ca ca.crt
    cert hostname-da-maquina-cliente.crt
    key hostname-da-maquina-cliente.key
    verb 3
    keepalive 10 60
Ativaro routing entre interfaces em ambas as máquinas
  • vi /etc/rc.local
echo “1” >/proc/sys/net/ipv4/ip_forward


REBOOTàs máquinas



Qualquer comentário/sugestão/crítica será bem vindo
Obrigado
 
Última edição:
Não tenho muita experiência com openvpn, mas do que usei, pareceu-se bastante bom.

Numa ligação lan-to-lan é site to site, certo? Nas duas máquinas é criado um serviço do openvpn que arranca com as máquinas?
 
Sim as máquinas assim que arrancam, ligam o openvpn e estabelecem a ligação e mantêm-na up sempre que haja conectividade.
Sim é site to site
 
Boas.

Aproveitei este tutorial para configurar o openvpn no meu raspberry pi.
Consigo estabelecer ligação com o servidor mas não consigo aceder à Internet nem a nenhum endereço local.

Alguma ideia do que poderei ter configurado mal?
Obrigado. :)
 
Boas.

Aproveitei este tutorial para configurar o openvpn no meu raspberry pi.
Consigo estabelecer ligação com o servidor mas não consigo aceder à Internet nem a nenhum endereço local.

Alguma ideia do que poderei ter configurado mal?
Obrigado. :)

Se te consegues ligar ao servidor não fizeste nada mal, a questão é que não está a haver encaminhamento do tráfego.

Tens de configurar o ficheiro das IPTables para fazerem o reencaminhamento e depois abrir a porta no router.

Eu devo ter seguido esse tutorial e mais uns quantos e embora estivesse tudo bem configurado o problema estava sempre no encaminhamento.

O meu IP para o openvpn é o 10.8.0.1, e usei esta regra ->

*nat

-A POSTROUTING -o eth0 -s 10.8.0.0/24 -j MASQUERADE
 
Boas.

Aproveitei este tutorial para configurar o openvpn no meu raspberry pi.
Consigo estabelecer ligação com o servidor mas não consigo aceder à Internet nem a nenhum endereço local.

Alguma ideia do que poderei ter configurado mal?
Obrigado. :)

Talvez te falte isto (correr no terminal cada linha):

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
iptables -A FORWARD -i tun0 -s 10.8.0.0/24 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o tun0 -m state -–state ESTABLISHED,RELATED -j ACCEPT

PS: Tendo em conta que a gama de IPs da VPN seja 10.8.0.0/24, a interface principal eth0 e o tun, o tun0.

Se for isto deve funcionar logo à primeira.
 
Talvez te falte isto (correr no terminal cada linha):

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
iptables -A FORWARD -i tun0 -s 10.8.0.0/24 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o tun0 -m state -–state ESTABLISHED,RELATED -j ACCEPT

PS: Tendo em conta que a gama de IPs da VPN seja 10.8.0.0/24, a interface principal eth0 e o tun, o tun0.

Se for isto deve funcionar logo à primeira.

Resolveu! Obrigado. :)
 
Queria agora configurar o cliente para apenas usar a vpn para endereços locais e usar a minha ligação à internet para todos os outros endereços.
Estive a pesquisar, e tenho de definir as "route"s no ficheiro de configuração do cliente, mas não consegui chegar a nenhuma conclusão. Consegues dar-me umas dicas que me ajudem a configurar isto desta forma? :)
 
Hmmm sendo assim tiras a linha do server push "redirect-gateway def1" e metes:

push "route 192.168.1.0 255.255.255.0" (tal como indicado no tutorial do post)

O problema é que se tiveres a rede onde está com endereços 192.168.1.X a rede de destino tem de ter diferente, ex: 192.168.2.X e no push mudas o 192.168.1.X para 192.168.2.X
 
Mas nesse caso todos os clientes que se liguem têm essa limitação certo?
Eu queria que cada cliente pudesse escolher a configuração desejada.
 
A única maneira é mudar nas configurações do client. Mas nunca experimentei.
Mas queres que quisesse escolher como assim? Que a VPN em vez de server só para endereços locais também fizesse routing a todo o trafego?

Ficas com 2 versões de configuração de client: Uma apenas para ligações locais e outra para todo o trafego. Depois na GUI escolhes qual usar.
 
Boas pessoal
Venho desenterrar este tópico pois tenho umas dúvidas
Tenho uma vps com vpn e uma box Android amiko A5 como cliente/Server com vpn instalada
A minha questão é se possível que só o IP da vpn, 192.168.2xx.xxx, passe pela vpn e todo o outro tráfego, 192.168.1.x, passe fora da vpn.
 
Boas pessoal
Venho desenterrar este tópico pois tenho umas dúvidas
Tenho uma vps com vpn e uma box Android amiko A5 como cliente/Server com vpn instalada
A minha questão é se possível que só o IP da vpn, 192.168.2xx.xxx, passe pela vpn e todo o outro tráfego, 192.168.1.x, passe fora da vpn.

Sim é, basta não pores a instrução redirect gateway.
 
Sim é, basta não pores a instrução redirect gateway.
No file cliente não tenho essa instrução

Código:
setenv UV_ID 75fcac158871436e820ba825c8b87xx
setenv UV_NAME snowy-fields-6622
client
dev tun
dev-type tun
remote 2a03:b0c0:1:d0::xxxx:xxx143xx udp6
remote 178.62.x7.xxx143xx udp
remote-random
nobind
persist-tun
cipher AES-128-CBC
auth SHA1
verb 2
mute 3
push-peer-info
ping 10
ping-restart 60
hand-window 70
server-poll-timeout 4
reneg-sec 2592000
sndbuf 393216
rcvbuf 393216
max-routes 1000
remote-cert-tls server
comp-lzo no
key-direction 1
<ca>
-----BEGIN CERTIFICATE-----


Acho que acidentalmente consegui...
No pritunl, nos servers removi esta route 0.0.0.0/0
Assim todo o tráfego que não é dirigido aos ip´s da vpn passa fora da vpn
 
Última edição:
Interessante forma.

No passado quando estive a residir fora do Pais tinha algo "parecido" em que tinha um router que se ligava na WAN à minha VPN em portugal, assim em casa a minha rede era a de PT.
 
Essa opção está no ficheiro de configuração do servidor e não do cliente.


No file cliente não tenho essa instrução

Código:
setenv UV_ID 75fcac158871436e820ba825c8b87xx
setenv UV_NAME snowy-fields-6622
client
dev tun
dev-type tun
remote 2a03:b0c0:1:d0::xxxx:xxx143xx udp6
remote 178.62.x7.xxx143xx udp
remote-random
nobind
persist-tun
cipher AES-128-CBC
auth SHA1
verb 2
mute 3
push-peer-info
ping 10
ping-restart 60
hand-window 70
server-poll-timeout 4
reneg-sec 2592000
sndbuf 393216
rcvbuf 393216
max-routes 1000
remote-cert-tls server
comp-lzo no
key-direction 1
<ca>
-----BEGIN CERTIFICATE-----


Acho que acidentalmente consegui...
No pritunl, nos servers removi esta route 0.0.0.0/0
Assim todo o tráfego que não é dirigido aos ip´s da vpn passa fora da vpn
 
Essa opção está no ficheiro de configuração do servidor e não do cliente.
Eu uso o pritunl e já consegui, mas não tenho essa opção na configuração do Server.
Mas bastou remover a rota 0.0.0.0/0 e adicionar outra com a gama dos IP's da vpn, pois tenho 2 servers a trabalhar em conjunto
 
Back
Topo