Instalando e Configurando o OpenVPN no OpenBSD 5.2

Primeiramente vamos definir alguns valores que serão utilizados no decorrer deste artigo:

  1. IP Externo da matriz: 200.200.200.1 IP Externo da filial: 200.200.200.2
  2. Rede interna da Matriz: 192.168.10.0/24
  3. Rede interna da filial: 192.168.11.0/24
  4. Rede da vpn 10.254.0.0/24
  5. Interface da vpn: tun0

Vamos setar o endereço do nosso repositório

export PKG_PATH=ftp://openbsd.locaweb.com.br/pub/OpenBSD/5.2/packages/`machine -a`/

Matriz

Vamos mandar instalar o OpenVPN

pkg_add -Iv openvpn

Agora vamos criar o diretório que vai conter a configuração da openvpn

mkdir -p /etc/openvpn

Agora precisamos copiar os binários para criação de chaves

cp -rf /usr/local/share/examples/openvpn/easy-rsa/2.0 /etc/openvpn/easy-rsa

Agora precisamos acertar as permissões do diretório que contém os binários

chmod 0755 /etc/openvpn/easy-rsa/*

Agora vamos acertar a quantidade de bits da criptografia da chave da CA

vim /etc/openvpn/easy-rsa/vars
[...]
#A variavel abaixo por padrão usa apóstrofos ao invés de aspas com isso gera erros, com isso vamos deixar como abaixo e mudando o nome do arquivo do openssl
export KEY_CONFIG="$EASY_RSA/openssl-1.0.0.cnf"
[...]
export KEY_SIZE=2048
[...]

Agora vamos acessar o diretório para a criação da ca.key e carregar as variáveis

cd /etc/openvpn/easy-rsa && source vars && ./clean-all

Agora vamos gerar a CA

./build-ca 
Generating a 2048 bit RSA private key
.........................+++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [US]:BR
State or Province Name (full name) [CA]:PR
Locality Name (eg, city) [SanFrancisco]:Curitiba
Organization Name (eg, company) [Fort-Funston]:Douglas
Organizational Unit Name (eg, section) [changeme]:TI
Common Name (eg, your name or your server's hostname) [changeme]:server
Name [changeme]:server
Email Address [mail@host.domain]:douglas.q.santos@gmail.com

Agora vamos gerar a chave do nosso servidor

./build-key-server server
Generating a 2048 bit RSA private key
..................................+++
........................................+++
writing new private key to 'server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [US]:BR
State or Province Name (full name) [CA]:PR
Locality Name (eg, city) [SanFrancisco]:Curitiba
Organization Name (eg, company) [Fort-Funston]:Douglas
Organizational Unit Name (eg, section) [changeme]:TI
Common Name (eg, your name or your server's hostname) [server]:
Name [changeme]:server
Email Address [mail@host.domain]:douglas.q.santos@gmail.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:Douglas
Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'BR'
stateOrProvinceName   :PRINTABLE:'PR'
localityName          :PRINTABLE:'Curitiba'
organizationName      :PRINTABLE:'Douglas'
organizationalUnitName:PRINTABLE:'TI'
commonName            :PRINTABLE:'server'
name                  :PRINTABLE:'server'
emailAddress          :IA5STRING:'douglas.q.santos@gmail.com'
Certificate is to be certified until Nov 15 21:03:19 2022 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

Agora precisamos gerar as chaves de Diffie-Hellman

./build-dh 
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
....................................................................
..........................................+.........................
....................................................................
.............+......................................................
....................................................................
..............................................................+.....
....................................................................
...............................................................++*++

Agora vamos gerar a chave compartilhada para servir de TLS

openvpn --genkey --secret keys/shared.key

Agora vamos criar o arquivo de configuração do servidor

vim /etc/openvpn/server.conf 
# porta usada para os clientes conectarem no servidor
port    1194
 
# protocolo usado na conexao
proto   tcp

#Melhorar aplicações remotas
mssfix 1400

# device usado pelo openvpn aqui no OpenBSD precisamos especificar o número dela
dev tun0
 
# Habilita conexoes tls
# Ajuda a bloquear ataques DoS e flooding na porta usada pelo openvpn
tls-server
 
# arquivo de chave compartilhada usado pelo tls-server
# O mesmo adiciona uma camada a mais de seguranca, habilitando controle de conexoes tls
tls-auth    /etc/openvpn/keys/shared.key 0
 
# Certificado de autoridade
# Tem que ser o mesmo em todos os hosts
# que conectarem a sua vpn
ca  /etc/openvpn/certs/ca.crt
 
# Certificado e chave privada do servidor
# Cada maquina tem que ter seu certificado e chave
cert    /etc/openvpn/certs/server.crt
key     /etc/openvpn/keys/server.key
 
# Parametros Diffie-Hellman
dh  /etc/openvpn/keys/dh2048.pem
 
# Rede usada pelo tunel openvpn
server  10.254.0.0 255.255.255.0
 
# define o arquivo onde sera guardados os ips que os clientes
# obtiverem na conexao, assim os mesmos sempre irao pegar os
# mesmos ips
ifconfig-pool-persist   /etc/openvpn/ipp.txt
 
# define o diretorio onde irao ficar as configuracoes individuais para cada
# cliente, assim você podera habilitar as duas redes se comunicarem.
client-config-dir   /etc/openvpn/ccd
 
# Define a rota para a rede da matriz poder enxergar a rede da filial
route 192.168.11.0 255.255.255.0
 
# Define a rota para a rede da filial poder enxergar a rede da matriz
push "route-delay 2 600"
push "route 192.168.10.0 255.255.255.0"

# Redireciona todo o trafego pela vpn utilizando a vpn como default gw do cliente
#push "redirect-gateway def1"

# Podemos definir quais servidor dns e qual servidor wins o cliente vai ter que utilizar
#push "dhcp-option DNS 192.168.10.248"
#push "dhcp-option DNS 192.168.10.249"
#push "dhcp-option WINS 192.168.10.248"
 
# Aceita os clientes se comunicarem entre si sem a necessidade de um outro tunnel
client-to-client
 
# Habilita ping de 10 em 10 segundos para dizer ao lado da filial que a matriz
# esta no ar, usado para manter a conexao ativa
ping-timer-rem
keepalive 10 120
 
# Tipo de criptografia usada
cipher  DES-EDE3-CBC
 
# habilita compressão no link VPN
comp-lzo
 
# Numero maximo de clientes (filiais)
max-clients 10
 
# usuário e grupo sob o qual o openvpn ira rodar
user    _openvpn
group   _openvpn

#especificando que o openvpn vai trabalhar como um daemon
 
# Permite um restart sem fechar a conexão e re-ler as chaves
persist-key
persist-tun
 
# Log de status das conexoes
status  /var/log/openvpn/status.log
 
# define um arquivo de log, pois o default é o /var/log/syslog
log /var/log/openvpn/openvpn.log
log-append  /var/log/openvpn/openvpn.log
 
# Nivel de log
# 0 silencioso, exceto para erros fatais
# 4 razoavel para uso geral
# 5 e 6 podem ajudar a debugar problemas de conexoes
# 9 maximo debug, muito util para tentar descobrir erros caso a vpn nao suba
verb    3
 
# desabilita mensagens repetitivas, ou seja, erros ou conexoes em sequencia
# acima de 20, ele dropa.
mute    20

Agora vamos gerar a chave para a nossa filial

cd /etc/openvpn/easy-rsa
./build-key filial1
Generating a 2048 bit RSA private key
.....................................+++
......................................................................................+++
writing new private key to 'filial1.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [US]:BR
State or Province Name (full name) [CA]:PR
Locality Name (eg, city) [SanFrancisco]:Curitiba
Organization Name (eg, company) [Fort-Funston]:Douglas
Organizational Unit Name (eg, section) [changeme]:TI
Common Name (eg, your name or your server's hostname) [filial1]:
Name [changeme]:filial1
Email Address [mail@host.domain]:douglas.q.santos@gmail.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:Douglas
Using configuration from /etc/openvpn/easy-rsa/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'BR'
stateOrProvinceName   :PRINTABLE:'PR'
localityName          :PRINTABLE:'Curitiba'
organizationName      :PRINTABLE:'Douglas'
organizationalUnitName:PRINTABLE:'TI'
commonName            :PRINTABLE:'filial1'
name                  :PRINTABLE:'filial1'
emailAddress          :IA5STRING:'douglas.q.santos@gmail.com'
Certificate is to be certified until Nov 15 21:07:00 2022 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

Agora vamos criar alguns diretórios para os nosso certificados

cd /etc/openvpn/
mkdir certs ccd keys

Agora vamos copiar os certificados para o diretório keys

cd /etc/openvpn
cp easy-rsa/keys/*.crt certs/

Agora vamos copiar as chaves para o diretório keys

cd /etc/openvpn
cp easy-rsa/keys/*.key easy-rsa/keys/dh2048.pem keys/

Agora vamos criar o arquivo de rotas

O arquivo /etc/openvpn/ccd/filial1 é responsável por definir rotas individuais para os clientes, ou seja, sem ele, o servidor não vai saber que as maquinas de ambos os lados querem se comunicar e com isso a comunicação fica restrita apenas aos servidores.

echo "iroute 192.168.11.0 255.255.255.0" > /etc/openvpn/ccd/filial1

Agora vamos ajustar as permissões de arquivos e diretórios

cd /etc/openvpn
chown -R _openvpn:_openvpn *
chmod 0440 keys/* certs/* ccd/* server.conf
chmod 0400 keys/shared.key keys/server.key

Criando o diretório de log

Precisamos criar o diretório de log, pois nossa configuração salva estas informações em arquivos específicos.

mkdir /var/log/openvpn

Agora vamos criar o arquivo de controle da interface tun0

vim /etc/hostname.tun0
up
!/usr/local/sbin/openvpn --daemon --config /etc/openvpn/server.conf

Agora precisamos acertar a sua permissão

chmod 440 /etc/hostname.tun0

Agora vamos habilitar o roteamento desse servidor

sysctl net.inet.ip.forwarding=1

Agora vamos deixar isso na inicialização do sistema

echo "net.inet.ip.forwarding=1" >> /etc/sysctl.conf

Podemos subir o Openvpn da seguinte forma, caso trave é por causa que o usuário _openvpn não tem permissão para efetuar as alterações na tabela de roteamento com isso o daemon trava, com isso a melhor forma de resolver é reiniciando o servidor.

openvpn --config /etc/openvpn/server.conf

Agora vamos analisar os logs para ver se está tudo ok

tail -n 100 /var/log/openvpn/openvpn.log 
Sat Nov 17 19:14:45 2012 OpenVPN 2.2.2 x86_64-unknown-openbsd5.2 [SSL] [LZO2] [eurephia] built on Jul 31 2012
Sat Nov 17 19:14:45 2012 NOTE: your local LAN uses the extremely common subnet address 192.168.0.x or 192.168.1.x.  Be aware that this might create routing conflicts if you connect to the VPN server from public locations such as internet cafes that use the same subnet.
Sat Nov 17 19:14:45 2012 NOTE: OpenVPN 2.1 requires '--script-security 2' or higher to call user-defined scripts or executables
Sat Nov 17 19:14:45 2012 Diffie-Hellman initialized with 2048 bit key
Sat Nov 17 19:14:45 2012 Control Channel Authentication: using '/etc/openvpn/keys/shared.key' as a OpenVPN static key file
Sat Nov 17 19:14:45 2012 Outgoing Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
Sat Nov 17 19:14:45 2012 Incoming Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
Sat Nov 17 19:14:45 2012 TLS-Auth MTU parms [ L:1544 D:168 EF:68 EB:0 ET:0 EL:0 ]
Sat Nov 17 19:14:45 2012 Socket Buffers: R=[16384->65536] S=[16384->65536]
Sat Nov 17 19:14:45 2012 ROUTE default_gateway=192.168.1.1
Sat Nov 17 19:14:45 2012 /sbin/ifconfig tun0 destroy
Sat Nov 17 19:14:45 2012 /sbin/ifconfig tun0 create
Sat Nov 17 19:14:45 2012 NOTE: Tried to delete pre-existing tun/tap instance -- No Problem if failure
Sat Nov 17 19:14:45 2012 /sbin/ifconfig tun0 10.254.0.1 10.254.0.2 mtu 1500 netmask 255.255.255.255 up
Sat Nov 17 19:14:45 2012 TUN/TAP device /dev/tun0 opened
Sat Nov 17 19:14:45 2012 /sbin/route add -net 192.168.11.0 10.254.0.2 -netmask 255.255.255.0
add net 192.168.11.0: gateway 10.254.0.2
Sat Nov 17 19:14:45 2012 /sbin/route add -net 10.254.0.0 10.254.0.2 -netmask 255.255.255.0
add net 10.254.0.0: gateway 10.254.0.2
Sat Nov 17 19:14:45 2012 Data Channel MTU parms [ L:1544 D:1400 EF:44 EB:135 ET:0 EL:0 AF:3/1 ]
Sat Nov 17 19:14:45 2012 GID set to _openvpn
Sat Nov 17 19:14:45 2012 UID set to _openvpn
Sat Nov 17 19:14:45 2012 Listening for incoming TCP connection on [undef]:1194
Sat Nov 17 19:14:45 2012 TCPv4_SERVER link local (bound): [undef]:1194
Sat Nov 17 19:14:45 2012 TCPv4_SERVER link remote: [undef]
Sat Nov 17 19:14:45 2012 MULTI: multi_init called, r=256 v=256
Sat Nov 17 19:14:45 2012 IFCONFIG POOL: base=10.254.0.4 size=62
Sat Nov 17 19:14:45 2012 IFCONFIG POOL LIST
Sat Nov 17 19:14:45 2012 MULTI: TCP INIT maxclients=10 maxevents=14
Sat Nov 17 19:14:45 2012 Initialization Sequence Completed

O Lado servidor já está ok.

Agora vamos configurar o lado da filial1, ainda no servidor, pois vamos mover as configurações para a filial via scp ou rsync.

cd /etc/openvpn
mkdir -p filial1/{certs,keys}
cp certs/{ca.crt,filial1.crt} filial1/certs/
cp keys/{filial1.key,shared.key} filial1/keys/

Agora vamos criar o arquivo de configuração da filial /etc/openvpn/filial1/filial1.conf

vim /etc/openvpn/filial1/filial1.conf
# Especifica que este certificado eh de um cliente
client
 
# Define o ip do servidor para o cliente conectar
remote  200.200.200.1
 
# porta usada para os clientes conectarem no servidor
port    1194
 
# protocolo usado na conexao
proto   tcp

#Melhorar aplicações remotas
mssfix 1400
 
# device usado pelo openvpn, Aqui no Openbsd precisamos especificar o número da interface
dev tun0
 
# Diz que o certificado foi assinado pelo servidor
ns-cert-type    server
 
# Habilita conexoes tls
# Ajuda a bloquear ataques DoS e flooding na porta usada pelo openvpn
tls-client
 
# arquivo de chave compartilhada usado pelo tls-server
# O mesmo adiciona uma camada a mais de seguranca, habilitando controle de conexoes tls
tls-auth    /etc/openvpn/keys/shared.key 1
 
# Certificado de autoridade
# Tem que ser o mesmo em todos os hosts
# que conectarem a sua vpn
ca  /etc/openvpn/certs/ca.crt
 
# Certificado e chave privada do servidor
# Cada maquina tem que ter seu certificado e chave
cert    /etc/openvpn/certs/filial1.crt
key     /etc/openvpn/keys/filial1.key
 
# Habilita ping de 10 em 10 segundos para dizer ao lado da filial que a matriz
# esta no ar, usado para manter a conexao ativa
ping-timer-rem
keepalive 10 120
 
# Tipo de criptografia usada
cipher  DES-EDE3-CBC
 
# habilita compressão no link VPN
comp-lzo
 
# Ativa a opcao de se conectar, caso o cliente nao esteja na internet, ou
# o mesmo tenha perdido a conexao.
resolv-retry    infinite
 
# Nao especifica uma porta local para o cliente ouvir.
nobind
 
# usuário e grupo sob o qual o openvpn ira rodar
user    _openvpn
group   _openvpn

#Inicializa o openvpn como daemon
daemon openvpn
 
# Permite um restart sem fechar a conexão e re-ler as chaves
persist-key
persist-tun
 
# Log de status das conexoes
status  /var/log/openvpn/openvpn-status.log
 
# define um arquivo de log, pois o default é o /var/log/syslog
log /var/log/openvpn/openvpn.log
log-append  /var/log/openvpn/openvpn.log
 
# Nivel de log
# 0 silencioso, exceto para erros fatais
# 4 razoavel para uso geral
# 5 e 6 podem ajudar a debugar problemas de conexoes
# 9 maximo debug, muito util para tentar descobrir erros caso a vpn nao suba
verb    3
 
# desabilita mensagens repetitivas, ou seja, erros ou conexoes em sequencia
# acima de 20, ele dropa.
mute    20

Agora vamos empacotar a nossa configuração da filial e enviar para ela as configurações

tar -czvf filial1.tar.gz filial1/
a filial1
a filial1/certs
a filial1/keys
a filial1/filial1.conf
a filial1/keys/shared.key
a filial1/keys/filial1.key
a filial1/certs/filial1.crt
a filial1/certs/ca.crt

Agora vamos enviar essa configuração para a nossa filial

scp filial1.tar.gz 200.200.200.2:/tmp

Filial

Agora na vamos configurar a filial

Vamos setar o endereço do nosso repositório

export PKG_PATH=ftp://openbsd.locaweb.com.br/pub/OpenBSD/5.2/packages/`machine -a`/

Vamos mandar instalar o OpenVPN

pkg_add -Iv openvpn

Agora vamos criar o diretório que vai conter a configuração da openvpn

mkdir /etc/openvpn

Agora vamos desempacotar a os arquivos e certificados e mover para o local correto da openvpn.

cd /tmp
tar -xzvf filial1.tar.gz
mv filial1/* /etc/openvpn/
rm -rf /tmp/filial1*

Agora vamos ajustar as permissões de arquivos e diretórios

cd /etc/openvpn
chown -R _openvpn:_openvpn *
chmod 0440 keys/* certs/* filial1.conf 
chmod 0400 keys/filial1.key keys/shared.key

Agora vamos criar o diretório que vai armazenas os logs

mkdir /var/log/openvpn

Agora vamos criar o arquivo de controle da interface tun0

vim /etc/hostname.tun0
up
!/usr/local/sbin/openvpn --daemon --config /etc/openvpn/filial1.conf

Agora precisamos acertar a sua permissão

chmod 440 /etc/hostname.tun0

Agora vamos habilitar o roteamento desse servidor

sysctl net.inet.ip.forwarding=1

Agora vamos deixar isso na inicialização do sistema

echo "net.inet.ip.forwarding=1" >> /etc/sysctl.conf

Podemos subir o Openvpn da seguinte forma, caso trave é por causa que o usuário _openvpn não tem permissão para efetuar as alterações na tabela de roteamento com isso o daemon trava, com isso a melhor forma de resolver é reiniciando o servidor.

openvpn --config /etc/openvpn/filial1.conf

Agora vamos analisar os logs do nosso openvpn da filial

tail -n 100 /var/log/openvpn/openvpn.log 
Sat Nov 17 19:20:26 2012 OpenVPN 2.2.2 x86_64-unknown-openbsd5.2 [SSL] [LZO2] [eurephia] built on Jul 31 2012
Sat Nov 17 19:20:26 2012 NOTE: OpenVPN 2.1 requires '--script-security 2' or higher to call user-defined scripts or executables
Sat Nov 17 19:20:26 2012 Control Channel Authentication: using '/etc/openvpn/keys/shared.key' as a OpenVPN static key file
Sat Nov 17 19:20:26 2012 Outgoing Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
Sat Nov 17 19:20:26 2012 Incoming Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
Sat Nov 17 19:20:26 2012 LZO compression initialized
Sat Nov 17 19:20:26 2012 Control Channel MTU parms [ L:1544 D:168 EF:68 EB:0 ET:0 EL:0 ]
Sat Nov 17 19:20:26 2012 Socket Buffers: R=[16384->65536] S=[16384->65536]
Sat Nov 17 19:20:26 2012 Data Channel MTU parms [ L:1544 D:1400 EF:44 EB:135 ET:0 EL:0 AF:3/1 ]
Sat Nov 17 19:20:26 2012 Local Options hash (VER=V4): '2dcdad92'
Sat Nov 17 19:20:26 2012 Expected Remote Options hash (VER=V4): '7c7a0a5e'
Sat Nov 17 19:20:26 2012 NOTE: UID/GID downgrade will be delayed because of --client, --pull, or --up-delay
Sat Nov 17 19:20:26 2012 Attempting to establish TCP connection with 200.200.200.1:1194 [nonblock]
Sat Nov 17 19:20:26 2012 TCP: connect to 200.200.200.1:1194 failed, will try again in 5 seconds: No route to host
Sat Nov 17 19:20:32 2012 TCP connection established with 200.200.200.1:1194
Sat Nov 17 19:20:32 2012 TCPv4_CLIENT link local: [undef]
Sat Nov 17 19:20:32 2012 TCPv4_CLIENT link remote: 200.200.200.1:1194
Sat Nov 17 19:20:32 2012 TLS: Initial packet from 200.200.200.1:1194, sid=2e5811e4 d302b719
Sat Nov 17 19:20:33 2012 VERIFY OK: depth=1, /C=BR/ST=PR/L=Curitiba/O=Douglas/OU=TI/CN=server/name=server/emailAddress=douglas.q.santos@gmail.com
Sat Nov 17 19:20:33 2012 VERIFY OK: nsCertType=SERVER
Sat Nov 17 19:20:33 2012 VERIFY OK: depth=0, /C=BR/ST=PR/L=Curitiba/O=Douglas/OU=TI/CN=server/name=server/emailAddress=douglas.q.santos@gmail.com
Sat Nov 17 19:20:33 2012 Data Channel Encrypt: Cipher 'DES-EDE3-CBC' initialized with 192 bit key
Sat Nov 17 19:20:33 2012 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Sat Nov 17 19:20:33 2012 Data Channel Decrypt: Cipher 'DES-EDE3-CBC' initialized with 192 bit key
Sat Nov 17 19:20:33 2012 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication
Sat Nov 17 19:20:33 2012 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 2048 bit RSA
Sat Nov 17 19:20:33 2012 [server] Peer Connection Initiated with 200.200.200.1:1194
Sat Nov 17 19:20:36 2012 SENT CONTROL [server]: 'PUSH_REQUEST' (status=1)
Sat Nov 17 19:20:36 2012 PUSH: Received control message: 'PUSH_REPLY,route-delay 2 600,route 192.168.10.0 255.255.255.0,route 10.254.0.0 255.255.255.0,topology net30,ping 10,ping-restart 120,ifconfig 10.254.0.6 10.254.0.5'
Sat Nov 17 19:20:36 2012 OPTIONS IMPORT: timers and/or timeouts modified
Sat Nov 17 19:20:36 2012 OPTIONS IMPORT: --ifconfig/up options modified
Sat Nov 17 19:20:36 2012 OPTIONS IMPORT: route options modified
Sat Nov 17 19:20:36 2012 OPTIONS IMPORT: route-related options modified
Sat Nov 17 19:20:36 2012 ROUTE default_gateway=192.168.1.1
Sat Nov 17 19:20:36 2012 /sbin/ifconfig tun0 destroy
Sat Nov 17 19:20:36 2012 /sbin/ifconfig tun0 create
Sat Nov 17 19:20:36 2012 NOTE: Tried to delete pre-existing tun/tap instance -- No Problem if failure
Sat Nov 17 19:20:36 2012 /sbin/ifconfig tun0 10.254.0.6 10.254.0.5 mtu 1500 netmask 255.255.255.255 up
Sat Nov 17 19:20:36 2012 TUN/TAP device /dev/tun0 opened
Sat Nov 17 19:20:38 2012 /sbin/route add -net 192.168.10.0 10.254.0.5 -netmask 255.255.255.0
add net 192.168.10.0: gateway 10.254.0.5
Sat Nov 17 19:20:38 2012 /sbin/route add -net 10.254.0.0 10.254.0.5 -netmask 255.255.255.0
add net 10.254.0.0: gateway 10.254.0.5
Sat Nov 17 19:20:38 2012 GID set to _openvpn
Sat Nov 17 19:20:38 2012 UID set to _openvpn
Sat Nov 17 19:20:38 2012 Initialization Sequence Completed

Vamos efetuar testes

Da filial vamos tentar pingar o ip interno da matriz 192.168.10.1

ping  -c 3 192.168.10.1
PING 192.168.10.1 (192.168.10.1): 56 data bytes
64 bytes from 192.168.10.1: icmp_seq=0 ttl=64 time=1.141 ms
64 bytes from 192.168.10.1: icmp_seq=1 ttl=64 time=1.179 ms
64 bytes from 192.168.10.1: icmp_seq=2 ttl=64 time=1.267 ms

--- 192.168.10.1 ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 1.141/1.196/1.267/0.053 ms

Tabela de rotas da nossa filial

netstat -rn
Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
default            192.168.11.2       UGS         0      599    em0
10.254.0.0/24      10.254.0.5         UGS         0        0   tun0
10.254.0.5         link#6             UH          0        0   tun0
10.254.0.6         link#6             UHS         0        0    lo0
127.0.0.1          link#5             UH          0     1713    lo0
192.168.10.0/24    10.254.0.5         UGS         0        5   tun0
192.168.11.0/24    link#1             U           0     1835    em0
192.168.11.1       link#1             UHS         0        0    lo0
200.200.200.0/24   link#3             U           0      146    em1
200.200.200.2      link#3             UHS         0        0    lo0

Agora na matriz vamos tentar pingar a rede interna da filial 192.168.11.1

ping -c 3 192.168.11.1
PING 192.168.11.1 (192.168.11.1): 56 data bytes
64 bytes from 192.168.11.1: icmp_seq=0 ttl=64 time=1.906 ms
64 bytes from 192.168.11.1: icmp_seq=1 ttl=64 time=1.206 ms
64 bytes from 192.168.11.1: icmp_seq=2 ttl=64 time=1.516 ms

--- 192.168.11.1 ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 1.206/1.543/1.906/0.286 ms

Pronto, seu openvpn esta instalado e matriz/filial estão se comunicando. Não esqueça de liberar no fw da matriz a porta 1194 tcp de sua interface externa e tudo na interface da vpn que é tun0.

Caso necessite configurar mais uma filial, basta seguir os passos da criação das configurações para a filial, alterando é claro o nome de filial1 para filial2 e mais os passos abaixo.

Também não esqueça de inserir mais uma entrada como abaixo no arquivo server.conf.

route 192.168.11.0 255.255.255.0 -> filial1
route 192.168.12.0 255.255.255.0 -> filial2

E precisamos tambem criar mais uma entrada no diretório ccd com a rota para a nova filial

echo "iroute 192.168.12.0 255.255.255.0" > /etc/openvpn/ccd/filial2

Caso precise passar mais rotas para as filiais faça como abaixo.

push "route 192.168.10.0 255.255.255.0"
push "route 192.168.9.0 255.255.255.0"

Referências