Differences

This shows you the differences between two versions of the page.

Link to this comparison view

instalando_e_configurando_o_openvpn_no_freebsd_9.0_pt_br [2017/09/05 12:18] (current)
Line 1: Line 1:
 +====== Instalando e Configurando o OpenVPN no FreeBSD 9.0 ======
  
 +
 +Primeiramente vamos definir alguns valores que serão utilizados no decorrer deste artigo:
 +
 +  - IP Externo da matriz: 200.200.200.1 IP Externo da filial: 200.200.200.2
 +  - Rede interna da Matriz: 192.168.10.0/​24
 +  - Rede interna da filial: 192.168.11.0/​24
 +  - Rede da vpn 10.254.0.0/​24
 +  - Interface da vpn: tun0
 +
 +Vamos obter os ports caso ainda não os tenha 
 +<sxh bash>
 +
 +portsnap fetch && portsnap extract && portsnap update
 +</​sxh>​
 +
 +====== Matriz ======
 +Agora vamos acessar o ports do openvpn e vamos instalar, deixe as opções padrões quando questionado ​
 +<sxh bash>
 +
 +cd /​usr/​ports/​security/​openvpn
 +make install clean distclean
 +</​sxh>​
 +
 +Agora vamos criar o diretório que vai conter a configuração da openvpn
 +<sxh bash>
 +
 +mkdir /​usr/​local/​etc/​openvpn
 +</​sxh>​
 +
 +Agora precisamos copiar os binários para criação de chaves ​
 +<sxh bash>
 +
 +cp -Rfa /​usr/​local/​share/​doc/​openvpn/​easy-rsa/​2.0 /​usr/​local/​etc/​openvpn/​easy-rsa
 +</​sxh>​
 +
 +Agora precisamos acertar as permissões do diretório que contém os binários ​
 +<sxh bash>
 +
 +chmod 0755 /​usr/​local/​etc/​openvpn/​easy-rsa/​*
 +</​sxh>​
 +
 +Agora vamos acertar a quantidade de bits da criptografia da chave da CA 
 +<sxh bash>
 +
 +vim /​usr/​local/​etc/​openvpn/​easy-rsa/​vars
 +[...]
 +export KEY_SIZE=2048
 +</​sxh>​
 +
 +Agora vamos acessar o diretório para a criação da ca.key e carregar as variáveis ​
 +<sxh bash>
 +
 +cd /​usr/​local/​etc/​openvpn/​easy-rsa && source vars && ./clean-all
 +</​sxh>​
 +
 +Agora vamos gerar a CA 
 +<sxh bash>
 +
 +cd /​usr/​local/​etc/​openvpn/​easy-rsa
 +./​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
 +</​sxh>​
 +
 +
 +Agora vamos gerar a chave do nosso servidor ​
 +<sxh bash>
 +
 +cd /​usr/​local/​etc/​openvpn/​easy-rsa
 +./​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 /​usr/​local/​etc/​openvpn/​easy-rsa/​openssl-0.9.8.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 Jun 23 00:26:07 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
 +</​sxh>​
 +
 +Agora precisamos gerar as chaves de Diffie-Hellman
 +<sxh bash>
 +
 +./​build-dh ​
 +Generating DH parameters, 2048 bit long safe prime, generator 2
 +This is going to take a long time
 +....................................................................
 +..........................................+.........................
 +....................................................................
 +.............+......................................................
 +....................................................................
 +..............................................................+.....
 +....................................................................
 +...............................................................++*++
 +</​sxh>​
 +
 +Agora vamos gerar a chave compartilhada para servir de TLS
 +<sxh bash>
 +
 +openvpn --genkey --secret keys/​shared.key
 +</​sxh>​
 +
 +Agora vamos criar o arquivo de configuração do servidor ​
 +<sxh apache>
 +vim /​usr/​local/​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
 +dev tun
 + 
 +# 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 ​   keys/​shared.key 0
 + 
 +# Certificado de autoridade
 +# Tem que ser o mesmo em todos os hosts
 +# que conectarem a sua vpn
 +ca  certs/​ca.crt
 + 
 +# Certificado e chave privada do servidor
 +# Cada maquina tem que ter seu certificado e chave
 +cert    certs/​server.crt
 +key keys/​server.key
 + 
 +# Parametros Diffie-Hellman
 +dh  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 ​  ​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 ​  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    nobody
 +group   ​nobody
 + 
 +# 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
 +</​sxh>​
 +
 +Agora vamos gerar a chave para a nossa filial ​
 +<sxh bash>
 +
 +cd /​usr/​local/​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 /​usr/​local/​etc/​openvpn/​easy-rsa/​openssl-0.9.8.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 Jun 23 00:37:42 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
 +</​sxh>​
 +
 +Agora vamos criar alguns diretórios para os nosso certificados ​
 +<sxh bash>
 +
 +cd /​usr/​local/​etc/​openvpn/​
 +mkdir certs ccd keys
 +</​sxh>​
 +
 +Agora vamos copiar os certificados para o diretório keys 
 +<sxh bash>
 +
 +cd /​usr/​local/​etc/​openvpn
 +cp easy-rsa/​keys/​*.crt certs/
 +</​sxh>​
 +
 +Agora vamos copiar as chaves para o diretório keys 
 +<sxh bash>
 +
 +cd /​usr/​local/​etc/​openvpn
 +cp easy-rsa/​keys/​*.key easy-rsa/​keys/​dh2048.pem keys/
 +</​sxh>​
 +
 +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. ​
 +
 +<sxh bash>
 +
 +echo "​iroute 192.168.11.0 255.255.255.0"​ > /​usr/​local/​etc/​openvpn/​ccd/​filial1
 +</​sxh>​
 +
 +Agora vamos ajustar as permissões de arquivos e diretórios ​
 +
 +<sxh bash>
 +
 +cd /​usr/​local/​etc/​openvpn
 +chown -R nobody:​nobody *
 +chmod 0440 keys/* certs/* ccd/* server.conf
 +</​sxh>​
 +
 +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. ​
 +<sxh bash>
 +
 +mkdir /​var/​log/​openvpn
 +</​sxh>​
 +
 +Agora vamos habilitar o openvpn no /​etc/​rc.conf ​
 +<sxh bash>
 +
 +vim /​etc/​rc.conf
 +[...]
 +# OpenVPN
 +openvpn_enable="​YES"​
 +openvpn_configfile="/​usr/​local/​etc/​openvpn/​server.conf"​
 +openvpn_if="​tun"​
 +#Habilita o roteamento
 +gateway_enable="​YES"​
 +</​sxh>​
 +
 +Agora vamos iniciar o serviço ​
 +<sxh bash>
 +
 +/​usr/​local/​etc/​rc.d/​openvpn start
 +</​sxh>​
 +
 +Agora vamos analisar os logs para ver se está tudo ok 
 +<sxh bash>
 +
 +tail -n 100 /​var/​log/​openvpn/​openvpn.log ​
 +Tue Jun 26 21:51:24 2012 OpenVPN 2.2.2 amd64-portbld-freebsd9.0 [SSL] [LZO2] [eurephia] built on Jun 24 2012
 +Tue Jun 26 21:51:24 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.
 +Tue Jun 26 21:51:24 2012 NOTE: OpenVPN 2.1 requires '​--script-security 2' or higher to call user-defined scripts or executables
 +Tue Jun 26 21:51:24 2012 Diffie-Hellman initialized with 2048 bit key
 +Tue Jun 26 21:51:24 2012 Control Channel Authentication:​ using '​keys/​shared.key'​ as a OpenVPN static key file
 +Tue Jun 26 21:51:24 2012 Outgoing Control Channel Authentication:​ Using 160 bit message hash '​SHA1'​ for HMAC authentication
 +Tue Jun 26 21:51:24 2012 Incoming Control Channel Authentication:​ Using 160 bit message hash '​SHA1'​ for HMAC authentication
 +Tue Jun 26 21:51:24 2012 TLS-Auth MTU parms [ L:1542 D:166 EF:66 EB:0 ET:0 EL:0 ]
 +Tue Jun 26 21:51:24 2012 Socket Buffers: R=[42080->​65536] S=[9216->​65536]
 +Tue Jun 26 21:51:24 2012 ROUTE default_gateway=192.168.1.1
 +Tue Jun 26 21:51:24 2012 TUN/TAP device /dev/tun0 opened
 +Tue Jun 26 21:51:24 2012 /​sbin/​ifconfig tun0 10.254.0.1 10.254.0.2 mtu 1500 netmask 255.255.255.255 up
 +Tue Jun 26 21:51:24 2012 /sbin/route add -net 192.168.11.0 10.254.0.2 255.255.255.0
 +add net 192.168.11.0:​ gateway 10.254.0.2
 +Tue Jun 26 21:51:24 2012 /sbin/route add -net 10.254.0.0 10.254.0.2 255.255.255.0
 +add net 10.254.0.0: gateway 10.254.0.2
 +Tue Jun 26 21:51:24 2012 Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0 AF:3/1 ]
 +Tue Jun 26 21:51:24 2012 GID set to nobody
 +Tue Jun 26 21:51:24 2012 UID set to nobody
 +Tue Jun 26 21:51:24 2012 TCPv4 link local (bound): [undef]:​1194
 +Tue Jun 26 21:51:24 2012 TCPv4 link remote: [undef]
 +Tue Jun 26 21:51:24 2012 MULTI: multi_init called, r=256 v=256
 +Tue Jun 26 21:51:24 2012 IFCONFIG POOL: base=10.254.0.4 size=62
 +Tue Jun 26 21:51:24 2012 IFCONFIG POOL LIST
 +Tue Jun 26 21:51:24 2012 Initialization Sequence Completed
 +Tue Jun 26 21:51:24 2012 IPv6 in tun mode is not supported in OpenVPN 2.2
 +</​sxh>​
 +
 +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. ​
 +
 +<sxh bash>
 +
 +cd /​usr/​local/​etc/​openvpn
 +mkdir -p filial1/​{certs,​keys}
 +cp certs/​{ca.crt,​filial1.crt} filial1/​certs/​
 +cp keys/​{filial1.key,​shared.key} filial1/​keys/​
 +</​sxh>​
 +
 +
 +Agora vamos criar o arquivo de configuração da filial /​usr/​local/​etc/​openvpn/​filial1/​filial1.conf ​
 +<sxh apache>
 +vim /​usr/​local/​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
 +dev tun
 + 
 +# 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 ​   keys/​shared.key 1
 + 
 +# Certificado de autoridade
 +# Tem que ser o mesmo em todos os hosts
 +# que conectarem a sua vpn
 +ca  certs/​ca.crt
 + 
 +# Certificado e chave privada do servidor
 +# Cada maquina tem que ter seu certificado e chave
 +cert    certs/​filial1.crt
 +key 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    nobody
 +group   ​nobody
 + 
 +# 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
 +</​sxh>​
 +
 +
 +Agora vamos empacotar a nossa configuração da filial e enviar para ela as configurações ​
 +<sxh bash>
 +
 +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
 +</​sxh>​
 +
 +Agora vamos enviar essa configuração para a nossa filial ​
 +<sxh bash>
 +
 +scp filial1.tar.gz 200.200.200.2:/​tmp
 +</​sxh>​
 +
 +====== Filial ======
 +Agora na vamos configurar a filial ​
 +
 +Vamos obter os ports caso ainda não os tenha 
 +
 +<sxh bash>
 +
 +portsnap fetch && portsnap extract && portsnap update
 +</​sxh>​
 +
 +Agora vamos acessar o ports do openvpn e vamos instalar, deixe as opções padrões quando questionado ​
 +
 +<sxh bash>
 +
 +cd /​usr/​ports/​security/​openvpn
 +make install clean distclean
 +</​sxh>​
 +
 +Agora vamos criar o diretório que vai conter a configuração da openvpn
 +<sxh bash>
 +
 +mkdir /​usr/​local/​etc/​openvpn
 +</​sxh>​
 +
 +Agora vamos desempacotar a os arquivos e certificados e mover para o local correto da openvpn. ​
 +<sxh bash>
 +
 +cd /tmp
 +tar -xzvf filial1.tar.gz
 +mv filial1/* /​usr/​local/​etc/​openvpn/​
 +rm -rf /​tmp/​filial1*
 +</​sxh>​
 +
 +Agora vamos ajustar as permissões de arquivos e diretórios ​
 +
 +<sxh bash>
 +
 +cd /​usr/​local/​etc/​openvpn
 +chown -R nobody:​nobody *
 +chmod 0440 keys/* certs/* filial1.conf ​
 +</​sxh>​
 +
 +
 +Agora vamos criar o diretório que vai armazenas os logs 
 +<sxh bash>
 +
 +mkdir /​var/​log/​openvpn
 +</​sxh>​
 +
 +Agora vamos habilitar o openvpn no /​etc/​rc.conf ​
 +
 +<sxh apache>
 +
 +vim /​etc/​rc.conf
 +[...]
 +# OpenVPN
 +openvpn_enable="​YES"​
 +openvpn_configfile="/​usr/​local/​etc/​openvpn/​filial1.conf"​
 +openvpn_if="​tun"​
 +#Habilita o roteamento
 +gateway_enable="​YES"​
 +</​sxh>​
 +
 +Agora vamos iniciar o serviço ​
 +<sxh bash>
 +
 +/​usr/​local/​etc/​rc.d/​openvpn start
 +</​sxh>​
 +
 +Agora vamos analisar os logs do nosso openvpn da filial ​
 +<sxh bash>
 +
 +tail -n 100 /​var/​log/​openvpn/​openvpn.log ​
 +Tue Jun 26 22:10:43 2012 OpenVPN 2.2.2 amd64-portbld-freebsd9.0 [SSL] [LZO2] [eurephia] built on Jun 26 2012
 +Tue Jun 26 22:10:43 2012 NOTE: OpenVPN 2.1 requires '​--script-security 2' or higher to call user-defined scripts or executables
 +Tue Jun 26 22:10:43 2012 Control Channel Authentication:​ using '​keys/​shared.key'​ as a OpenVPN static key file
 +Tue Jun 26 22:10:43 2012 Outgoing Control Channel Authentication:​ Using 160 bit message hash '​SHA1'​ for HMAC authentication
 +Tue Jun 26 22:10:43 2012 Incoming Control Channel Authentication:​ Using 160 bit message hash '​SHA1'​ for HMAC authentication
 +Tue Jun 26 22:10:43 2012 LZO compression initialized
 +Tue Jun 26 22:10:43 2012 Control Channel MTU parms [ L:1542 D:166 EF:66 EB:0 ET:0 EL:0 ]
 +Tue Jun 26 22:10:43 2012 Socket Buffers: R=[42080->​65536] S=[9216->​65536]
 +Tue Jun 26 22:10:43 2012 Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0 AF:3/1 ]
 +Tue Jun 26 22:10:43 2012 Local Options hash (VER=V4): '​53f7fc82'​
 +Tue Jun 26 22:10:43 2012 Expected Remote Options hash (VER=V4): '​b5edb94e'​
 +Tue Jun 26 22:10:43 2012 NOTE: UID/GID downgrade will be delayed because of --client, --pull, or --up-delay
 +Tue Jun 26 22:10:43 2012 TCPv4 link local: [undef]
 +Tue Jun 26 22:10:43 2012 TCPv4 link remote: 200.200.200.1:​1194
 +Tue Jun 26 22:10:43 2012 TLS: Initial packet from 200.200.200.1:​1194,​ sid=66dce345 935e830c
 +Tue Jun 26 22:10:43 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
 +Tue Jun 26 22:10:43 2012 VERIFY OK: nsCertType=SERVER
 +Tue Jun 26 22:10:43 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
 +Tue Jun 26 22:10:43 2012 Data Channel Encrypt: Cipher '​DES-EDE3-CBC'​ initialized with 192 bit key
 +Tue Jun 26 22:10:43 2012 Data Channel Encrypt: Using 160 bit message hash '​SHA1'​ for HMAC authentication
 +Tue Jun 26 22:10:43 2012 Data Channel Decrypt: Cipher '​DES-EDE3-CBC'​ initialized with 192 bit key
 +Tue Jun 26 22:10:43 2012 Data Channel Decrypt: Using 160 bit message hash '​SHA1'​ for HMAC authentication
 +Tue Jun 26 22:10:43 2012 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA,​ 2048 bit RSA
 +Tue Jun 26 22:10:43 2012 [server] Peer Connection Initiated with 200.200.200.1:​1194
 +Tue Jun 26 22:10:46 2012 SENT CONTROL [server]: '​PUSH_REQUEST'​ (status=1)
 +Tue Jun 26 22:10:46 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'​
 +Tue Jun 26 22:10:46 2012 OPTIONS IMPORT: timers and/or timeouts modified
 +Tue Jun 26 22:10:46 2012 OPTIONS IMPORT: --ifconfig/​up options modified
 +Tue Jun 26 22:10:46 2012 OPTIONS IMPORT: route options modified
 +Tue Jun 26 22:10:46 2012 OPTIONS IMPORT: route-related options modified
 +Tue Jun 26 22:10:46 2012 ROUTE default_gateway=192.168.11.2
 +Tue Jun 26 22:10:46 2012 TUN/TAP device /dev/tun0 opened
 +Tue Jun 26 22:10:46 2012 /​sbin/​ifconfig tun0 10.254.0.6 10.254.0.5 mtu 1500 netmask 255.255.255.255 up
 +Tue Jun 26 22:10:48 2012 /sbin/route add -net 192.168.10.0 10.254.0.5 255.255.255.0
 +add net 192.168.10.0:​ gateway 10.254.0.5
 +Tue Jun 26 22:10:48 2012 /sbin/route add -net 10.254.0.0 10.254.0.5 255.255.255.0
 +add net 10.254.0.0: gateway 10.254.0.5
 +Tue Jun 26 22:10:48 2012 GID set to nobody
 +Tue Jun 26 22:10:48 2012 UID set to nobody
 +Tue Jun 26 22:10:48 2012 Initialization Sequence Completed
 +</​sxh>​
 +
 +Vamos efetuar testes ​
 +
 +Da filial vamos tentar pingar o ip interno da matriz 192.168.10.1 ​
 +<sxh bash>
 +
 +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
 +</​sxh>​
 +
 +Tabela de rotas da nossa filial ​
 +
 +<sxh bash>
 +
 +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
 +</​sxh>​
 +
 +Agora na matriz vamos tentar pingar a rede interna da filial 192.168.11.1 ​
 +<sxh bash>
 +
 +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
 +</​sxh>​
 +
 +**NÃO ESQUEÇA DE LIBERAR ROTAMENTO NOS SERVIDORES SE VOCÊ PRECISAR ACESSAR OUTRA MAQUINA FORA AS DUAS PONTAS DA VPN.**
 +
 +Vamos ajustar o rc.conf para habilitar o pf e o servidor a trabalhar como gateway.
 +<sxh apache>
 +vim /​etc/​rc.conf
 +[...]
 +pf_enable="​YES"​
 +pf_rules="/​etc/​pf.conf"​
 +pflog_enable="​YES"​
 +pflog_logfile="/​var/​log/​pflog" ​ # where pflogd should store the logfile
 +pflog_flags="" ​                 # additional flags for pflogd startup
 +gateway_enable="​YES"  ​
 +</​sxh>​
 +
 +Habilitando manualmente o servidor a trabalhar como gateway.
 +<sxh bash>
 +sysctl net.inet.ip.forwarding=1
 +</​sxh>​
 +
 +**E CASO ACHE NECESSÁRIO MASCARE AS REDES**
 +
 +<sxh pf>
 +vim /​etc/​pf.conf
 +ext_if = "​tun0"​ # macro para a interface externa - use tun0 for PPPoE
 +int_if = "​em0" ​ # macro para a interface interna
 +localnet = $int_if:​network
 +# ext_if IP pode ser dinamico, por isso usamos ($ext_if)
 +nat on $ext_if from $localnet to any -> ($ext_if)
 +block all
 +pass from { lo0, $localnet } to any keep state
 +</​sxh>​
 +
 +Agora precisamos carregar as regras.
 +<sxh bash>
 +pfctl -f /​etc/​pf.conf
 +</​sxh>​
 +
 +Pronto, seu openvpn esta instalado e matriz/​filial estao 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. ​
 +<sxh bash>
 +
 +route 192.168.11.0 255.255.255.0 -> filial1
 +route 192.168.12.0 255.255.255.0 -> filial2
 +</​sxh>​
 +
 +E precisamos tambem criar mais uma entrada no diretório ccd com a rota para a nova filial ​
 +<sxh bash>
 +
 +echo "​iroute 192.168.12.0 255.255.255.0"​ > /​etc/​openvpn/​ccd/​filial2
 +</​sxh>​
 +
 +Caso precise passar mais rotas para as filiais faça como abaixo. ​
 +<sxh bash>
 +
 +push "route 192.168.10.0 255.255.255.0"​
 +push "route 192.168.9.0 255.255.255.0"​
 +</​sxh>​
 +
 +====== Referências ======
 +
 +  - http://​openvpn.net/​index.php/​open-source/​documentation/​howto.html
 +  - http://​openvpn.net/​index.php/​open-source/​documentation/​examples.html
 +  - http://​openvpn.net/​index.php/​open-source/​documentation/​manuals.html
 +  - https://​community.openvpn.net/​openvpn/​wiki/​Openvpn23ManPage