Saudações. Nesse tutorial vou ensinar como montar um servidor OpenVPN (OVPN) compatível com clientes diversos: Windows, Linux, MacOS, Mikrotik e afins.
Pré-requisitos (constam em outros artigos aqui do blog):
- Instalação do Linux (Debian 12);
- Internet no servidor;
- Firewall (nftables) com NAT de IPs privados;
1 – Sobre o OpenVPN
O OpenVPN é um software de provisionamento de túneis (VPN) de camada 2 (TAP) e camada 3 (TUN).
Antigamente, o OpenVPN era extremamente flexível porem operava exclusivamente em user-space. Com a implementação do OpenVPN Data Channel Offload (DCO) as VPNs agora passam a ser aceleradas no kernel, o que torna a conexão rápida, com baixa latência.
Como o modo DCO atende quase todas as implementações normais de conectividade entre CPEs e clientes, esse será o método oficial utilizado aqui.
Até a conclusão desse tutorial o Debian 13 não tinha o modulo DCO funcional. Erro “Note: Kernel support for ovpn-dco missing, disabling data channel offload“.
Instalando
# Atualizar base do sistema:
apt -y update;
apt -y upgrade;
apt -y dist-upgrade;
# Instalar OpenVPN:
apt -y install openssl;
apt -y install openvpn;
apt -y install openvpn-dco-dkms;
# Conferindo a versão:
openvpn --version;
# OpenVPN 2.6.14 x86_64-pc-linux-gnu
# [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] [DCO]
# library versions: OpenSSL 3.5.1 1 Jul 2025, LZO 2.10
Preparativos
Para que o OpenVPN seja executado corretamente, os módulos do kernel devem estar carregados durante o boot.
# Carregando modulos do kernel durante o boot
# - Modulo TUN para conexoes de camada 3
echo "tun" > /etc/modules-load.d/tun.conf;
# Carregando imediatamente:
systemctl restart systemd-modules-load.service;
O OpenVPN no Debian não cria nenhum serviço para executar o OpenVPN, é necessário criá-los.
Vou criar o mesmo servidor OVPN com transporte UDP.
O uso de VPNs sobre TCP é desaconselhado em produção por conta de problemas de dupla repetição de pacotes perdidos chamado TCP Meltdown. O pacote é repetido pelo cliente que usa a VPN e a própria VPN acaba por também repetir o pacote que não foi entregue, resultando em lapsos de tráfego e medição de banda extremamente volátil.
2 – Certificados – Autoridade Certificadora
O OpenVPN utiliza SSL/TLS com camada de segurança: autenticação e criptografia.
Para tal, requer a implementação de PKI – Public Key Infrastructure – Infraestrutura de Chave Pública.
Não é necessário, nem viável, conectar sua PKI à árvore de ROOT-CA global. A montagem é 100% privada.
Em um ambiente seguro, o usuário e servidores geram cada um sua chave privada, criam o certificado auto-assinado contendo sua chave pública (CSR) e enviam à CA para que ela gere um certificado final assinado (CRT), que será reconhecido por todos os signatários da CA.
Em um ambientes OVPN genérico, a CA e o servidor e os clientes estão sob o poder da mesma pessoa (administrador de redes). Por conta disso ignora-se o isolamento de chaves privadas entre essas entidades: CA, servidor OVPN, cliente OVPN.
Resumindo: no servidor OpenVPN iremos criar tudo.
Criar unidade certificadora privada
# Diretorio para unidade certificadora
mkdir -p /etc/ssl/ovpn-ca;
# Pasta para armazenar a CA:
mkdir -p /etc/ssl/ovpn-ca/certs;
mkdir -p /etc/ssl/ovpn-ca/crl;
mkdir -p /etc/ssl/ovpn-ca/csr;
mkdir -p /etc/ssl/ovpn-ca/newcerts;
mkdir -p /etc/ssl/ovpn-ca/private;
# Restringir o acesso da pasta de chave privada:
chmod 700 /etc/ssl/ovpn-ca/private;
# Número de série inicial automático:
[ -f /etc/openssl/ovpn-ca/serial ] || echo 1000 > /etc/ssl/ovpn-ca/serial;
[ -f /etc/openssl/ovpn-ca/crlnumber ] || echo 1000 > /etc/ssl/ovpn-ca/crlnumber;
# Índice de auditoria:
touch /etc/ssl/ovpn-ca/index.txt;
# Configuração do openssl para geração de certificados:
(
echo '[ ca ]';
echo 'default_ca = CA_default';
echo;
echo '[ CA_default ]';
echo 'dir = /etc/ssl/ovpn-ca';
echo 'certificate = $dir/certs/ca.cert.pem';
echo 'private_key = $dir/private/ca.key.pem';
echo 'database = $dir/index.txt';
echo 'serial = $dir/serial';
echo 'new_certs_dir = $dir/newcerts';
echo 'crlnumber = $dir/crlnumber';
echo 'crl = $dir/crl/ca.crl.pem';
echo 'default_days = 3650';
echo 'default_md = sha256';
echo 'policy = policy_loose';
echo 'default_crl_days = 30';
echo;
echo '[ policy_loose ]';
echo 'countryName = optional';
echo 'stateOrProvinceName = optional';
echo 'organizationName = optional';
echo 'organizationalUnitName = optional';
echo 'commonName = supplied';
echo 'emailAddress = optional';
echo;
echo '[ req ]';
echo 'distinguished_name = req_distinguished_name';
echo 'x509_extensions = v3_ca';
echo 'prompt = no';
echo;
echo '[ req_distinguished_name ]';
echo 'C = BR';
echo 'ST = Minas Gerais';
echo 'L = Belo Horizonte';
echo 'O = Intranet-Company';
echo 'OU = TI';
echo 'CN = intranet.br';
echo 'emailAddress = root@intranet.br';
echo;
echo '[ v3_ca ]';
echo 'basicConstraints = critical, CA:true';
echo 'keyUsage = critical, digitalSignature, cRLSign, keyCertSign';
echo 'subjectKeyIdentifier = hash';
echo 'authorityKeyIdentifier = keyid:always,issuer';
echo 'crlDistributionPoints = URI:http://cert.darkstar.com/darkstar-crl.pem';
echo;
) > /etc/ssl/ovpn-ca/openssl.cnf;
Criar chave privada da Autoridade Certificadora (CA);
# Pasta para armazenar CA, criar e acessar:
cd /etc/ssl/ovpn-ca;
# Gerar chave privada da CA:
CA_PRIVKEY="/etc/ssl/ovpn-ca/private/ca.key.pem";
[ -f "$CA_PRIVKEY" ] || \
openssl genpkey \
-algorithm RSA \
-out "$CA_PRIVKEY" \
-pkeyopt rsa_keygen_bits:4096;
# Exibir detalhes da chave privada:
openssl asn1parse -in $CA_PRIVKEY -inform PEM;
openssl rsa -noout -text -in $CA_PRIVKEY;
# Extrair chave pública:
CA_PUBKEY="/etc/ssl/ovpn-ca/ca.pub.pem";
openssl rsa -pubout -in $CA_PRIVKEY -out $CA_PUBKEY;
# Detalhes da chave publica:
cat $CA_PUBKEY;
openssl asn1parse -in $CA_PUBKEY -inform PEM;
openssl rsa -pubin -in $CA_PUBKEY -text -noout;
Gerar certificado auto-assinado da CA:
# Entra na pasta da CA:
cd /etc/ssl/ovpn-ca;
# Caminho da chave privada da CA:
CA_PRIVKEY="/etc/ssl/ovpn-ca/private/ca.key.pem";
# Caminho do certificado auto-assinado da CA:
CA_CERT="/etc/ssl/ovpn-ca/certs/ca.cert.pem";
# Gerar certificado auto assinado com 10 anos (3650 dias) de validade:
[ -f $CA_CERT ] || \
openssl req \
-x509 -new -nodes \
-key $CA_PRIVKEY \
-days 3650 \
-sha256 \
-set_serial 0xCAFECAFECAFE \
-extensions v3_ca \
-config /etc/ssl/ovpn-ca/openssl.cnf \
-out $CA_CERT;
# Exibir detalhes do certificado:
cat $CA_CERT;
openssl x509 -noout -text -in $CA_CERT;
3 – Certificados do servidor
O servidor OpenVPN deve possuir sua chave privada e seu certificado assinado pela CA com a função (restrição) de ser usado somente para finalidades de servir.
Gerar chave privada e CSR do servidor OVPN
# Pasta para armazenar os arquivos, criar e acessar:
mkdir -p /etc/ssl/ovpn-ca/ovpn-server;
cd /etc/ssl/ovpn-ca/ovpn-server;
# Chave privada do Servidor 1 usando RSA:
SRVA_PRIVKEY="/etc/ssl/ovpn-ca/ovpn-server/key.pem";
# - gerar chave privada:
[ -f "$SRVA_PRIVKEY" ] || \
openssl genpkey \
-algorithm RSA \
-pkeyopt rsa_keygen_bits:4096 \
-out "$SRVA_PRIVKEY";
# Gerando CSR de servidor:
SRVA_CSR="/etc/ssl/ovpn-ca/csr/server.pem";
[ -f "$SRVA_CSR" ] || \
openssl req \
-new \
-key $SRVA_PRIVKEY \
-subj \
"/CN=server.intranet.br/emailAddress=srv-a@intranet.br" \
-addext keyUsage=critical,digitalSignature \
-addext extendedKeyUsage=serverAuth \
-out $SRVA_CSR;
# Exibindo todos os detalhes do CSR:
openssl asn1parse -in $SRVA_CSR -inform PEM;
openssl req -in $SRVA_CSR -text -noout;
Assinar CSR e gerar certificado do servidor (CRT)
# CSR do servidor:
SRVA_CSR="/etc/ssl/ovpn-ca/csr/server.pem";
# Certificado final:
SRVA_CERT="/etc/ssl/ovpn-ca/certs/server.pem";
# Chave privada da CA:
CA_PRIVKEY="/etc/ssl/ovpn-ca/private/ca.key.pem";
# Emitir certificado baseado no CSR recebido,
# assinar usando chave privada da CA:
[ -f $SRVA_CERT ] || \
openssl ca \
-config /etc/ssl/ovpn-ca/openssl.cnf \
-in $SRVA_CSR \
-out $SRVA_CERT \
-days 3650 \
-batch;
# Using configuration from /etc/ssl/ovpn-ca/openssl.cnf
# Check that the request matches the signature
# Signature ok
# The Subject's Distinguished Name is as follows
# commonName :ASN.1 12:'server.intranet.br'
# emailAddress :IA5STRING:'srv-a@intranet.br'
# Certificate is to be certified until Oct 5 12:32:52 2035 GMT (3650 days)
#
# Write out database with 1 new entries
# Database updated
Com os arquivos gerados na CA, vamos copiá-los para a pasta do servidor OVPN:
# Criar pasta do servidor OpenVPN:
mkdir -p /etc/openvpn/server;
# Copiar chave privada do servidor A:
SRVA_PRIVKEY="/etc/ssl/ovpn-ca/ovpn-server/key.pem";
cp -rav "$SRVA_PRIVKEY" /etc/openvpn/server/priv.key;
# Copiar certificado assinado pela CA:
SRVA_CERT="/etc/ssl/ovpn-ca/certs/server.pem";
cp -rav "$SRVA_CERT" /etc/openvpn/server/cert.pem;
# Copiar certificado da CA:
CA_CERT="/etc/ssl/ovpn-ca/certs/ca.cert.pem";
cp -rav "$CA_CERT" /etc/openvpn/server/ca.pem;
4 – Criar servidor OpenVPN
Uma vez que o servidor já possui seus arquivos (chave privada, certificado assinado, certificado da CA) para participar do ambiente criptográfico seguro, vamos criar as configurações para criar o processo.
Pool de IPs e portas
Pool privado para clientes:
- 10.129.128.0/24 (gateway 10.129.128.1, clientes de .2 a .254);
Vou deixar a configuração de IPv6 pronta e comentada, visto que ativá-lo sem ter Internet em IPv6 no servidor causará problemas nos clientes.
- 2001:db8:cafe:a128::/64;
Vamos usar a porta padrão 1194. Se seu servidor não está utilizando a porta 443/udp para HTTPs/Quick/HTTP2/HTTP3, recomendo que essa seja a porta preferida visto que há menos problemas com firewalls e QoS, porta:
- Servidor via UDP: porta 1194/udp;
Autenticação e criptografia
O OVPN faz uso de AEAD (Authenticated Encryption with Associated Data).
A autenticação OVPN pode operar com MD5, SHA1, SHA256 e SHA512. Usar SHA2 (256 ou 512) é mais seguro.
Vou optar pelo SHA256 , alem de ser o padrão, é mais amplo.
O OVPN suporta uma lista muito grande de cifras criptografias. Em modo performance DCO somente essas cifras são suportadas:
- AES-128-GCM;
- AES-256-GCM;
- ChaCha20-Poly1305;
Compatibilidade com Mikrotik RouterOS
A Mikrotik optou por manter o OpenVPN restrito no RouterOS v6 e v7 (até 7.1.1) aos seguintes recursos:
- Somente TCP;
- Autenticação somente MD5, SHA1;
- Cifras AES CBC: AES128-CBC, AES192-CBC, AES256-CBC;
As cifras GCM são suportadas apenas a partir do Mikrotik RouterOS 7.8.
Se quiser que seu servidor OpenVPN com ultra-performance funcione compatível com Mikrotik você deverá fazer upgrade para a versão 7 mais recente (7.8+).
Se for imperativo atender Mikrotik velho, recomendo criar outro servidor OVPN (processo separado) em uma porta TCP só para atender essas sucatas.
Preparativos do ambiente para o servidor
Vou criar o script de preparação do ambiente para garantir que o processo encontrará todos os recursos necessários prontos quando for iniciado:
# Script de setup do ambiente:
(
echo '#!/bin/bash';
echo;
echo '# Diretorio de configuracoes especificas de clientes:';
echo 'mkdir -p /etc/openvpn/client;';
echo;
echo '# Criar arquivo de leases do pool:';
echo 'touch /etc/openvpn/server/pool.dat;';
echo;
echo '# Criar arquivo de status e log:';
echo 'touch /run/opvn-server.status;';
echo;
echo 'mkdir -p /var/log/openvpn;';
echo 'touch /var/log/openvpn/server.log;';
echo;
echo '# Garantir a existencia do ponteiro de interfaces TUN:';
echo 'modprobe tun 2>/dev/null;';
echo '[ -d /dev/net ] || mkdir -p /dev/net;';
echo '[ -e /dev/net/tun ] || {';
echo ' mknod /dev/net/tun c 10 200 2>/dev/null;';
echo ' chmod u+rw,g+rw,o+rw /dev/net/tun;';
echo '};';
echo 'exit 0';
echo;
) > /etc/openvpn/server/prepare.sh;
chmod +x /etc/openvpn/server/prepare.sh;
# Rodar manualmente:
/etc/openvpn/server/prepare.sh;
Criando configuração do servidor OVPN
# Criar configuracao principal (UDP)
(
echo 'port 1194';
echo 'proto udp';
echo 'dev-type tun';
echo 'dev ovpn-a';
echo;
echo 'topology subnet';
echo 'server 10.129.128.0 255.255.255.0';
echo;
echo '#server-ipv6 2001:db8:cafe:a128::/64';
echo;
echo 'push "redirect-gateway def1 bypass-dhcp"';
echo;
echo '#push "redirect-gateway def1 bypass-dhcp ipv6"';
echo '#push "dhcp-option DNS6 2001:4860:4860::8888"';
echo '#push "dhcp-option DNS6 2001:4860:4860::8844"';
echo;
echo 'ifconfig-pool-persist /etc/openvpn/server/pool.dat';
echo 'client-config-dir /etc/openvpn/client';
echo;
echo 'auth SHA256';
echo 'cipher AES-128-GCM';
echo 'data-ciphers AES-128-GCM:AES-256-GCM';
echo 'data-ciphers-fallback AES-128-GCM';
echo;
echo 'tls-server';
echo 'tls-version-min 1.2';
echo 'tls-cipher TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256';
echo '#duplicate-cn';
echo;
echo 'ca /etc/openvpn/server/ca.pem';
echo 'cert /etc/openvpn/server/cert.pem';
echo 'key /etc/openvpn/server/priv.key';
echo;
echo 'persist-key';
echo 'persist-tun';
echo 'dh none';
echo 'tls-groups X25519:secp384r1:secp256r1';
echo;
echo '#enable-dco';
echo;
echo 'sndbuf 393216';
echo 'rcvbuf 393216';
echo 'push "sndbuf 393216"';
echo 'push "rcvbuf 393216"';
echo 'fast-io';
echo 'txqueuelen 1000';
echo;
echo 'compress migrate';
echo 'push "compress migrate"';
echo 'explicit-exit-notify 1';
echo 'push "explicit-exit-notify"';
echo;
echo 'keepalive 10 120';
echo 'writepid /run/opvn-server.pid';
echo 'status /run/opvn-server.status 1';
echo 'log-append /var/log/openvpn/server.log';
echo 'mute-replay-warnings';
echo 'verb 3';
echo;
echo '#script-security 3';
echo '#client-connect /usr/share/openvpn-client-up.sh';
echo '#client-disconnect /usr/share/openvpn-client-down.sh';
echo;
) > /etc/openvpn/server/ovpn-srv.conf;
Executar para teste:
# Executar para teste:
openvpn --config /etc/openvpn/server/ovpn-srv.conf;
# CONTROL+C para abortar
# Conferir o log:
cat /var/log/openvpn/server.log;
Conferindo logs:
2025-10-07 12:03:11 OpenVPN 2.6.3 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] [DCO]
2025-10-07 12:03:11 library versions: OpenSSL 3.0.17 1 Jul 2025, LZO 2.10
2025-10-07 12:03:11 DCO version: 0.0+git20231103
2025-10-07 12:03:11 net_route_v4_best_gw query: dst 0.0.0.0
2025-10-07 12:03:11 net_route_v4_best_gw result: via 45.171.63.126 dev eth0
2025-10-07 12:03:11 net_iface_new: add ovpn-a type ovpn-dco
2025-10-07 12:03:11 DCO device ovpn-a opened
2025-10-07 12:03:11 net_iface_mtu_set: mtu 1500 for ovpn-a
2025-10-07 12:03:11 net_iface_up: set ovpn-a up
2025-10-07 12:03:11 net_addr_v4_add: 10.129.128.1/24 dev ovpn-a
2025-10-07 12:03:11 Could not determine IPv4/IPv6 protocol. Using AF_INET
2025-10-07 12:03:11 Socket Buffers: R=[31457280->786432] S=[31457280->786432]
2025-10-07 12:03:11 UDPv4 link local (bound): [AF_INET][undef]:1194
2025-10-07 12:03:11 UDPv4 link remote: [AF_UNSPEC]
2025-10-07 12:03:11 MULTI: multi_init called, r=256 v=256
2025-10-07 12:03:11 IFCONFIG POOL IPv4: base=10.129.128.2 size=253
2025-10-07 12:03:11 IFCONFIG POOL LIST
2025-10-07 12:03:11 Initialization Sequence Completed
Servidor configurado e testado.
Vamos criar a UNIT no systemd para controlar o servidor:
# Criar arquivo da UNIT no SystemD
(
echo;
echo '[Unit]';
echo 'Description=OpenVPN Server';
echo 'Documentation=man:openvpn(8)';
echo 'After=network.target';
echo 'Before=nss-lookup.target';
echo 'Wants=nss-lookup.target';
echo;
echo '[Service]';
echo 'Type=notify';
echo 'Restart=always';
echo 'ExecStartPre=-/etc/openvpn/server/prepare.sh';
echo 'ExecStart=/usr/sbin/openvpn /etc/openvpn/server/ovpn-srv.conf';
echo;
echo '[Install]';
echo 'WantedBy=multi-user.target';
echo;
) > /usr/lib/systemd/system/openvpn-server.service;
# Atualizar systemd:
systemctl daemon-reload;
# Ativar servico:
systemctl enable openvpn-server;
# Iniciar servico:
systemctl stop openvpn-server;
systemctl start openvpn-server;
# Conferir status do servico:
systemctl status openvpn-server;
5 – Gerar configuração dos clientes
Vamos criar uma base de dados em arquivos avulsos para cadastrar usuários e a partir dessa base gerar automaticamente todos os arquivos dos clientes:
Cada cliente precisa:
- Chave privada do usuário;
- Certificado do usuário assinado pela CA;
- Certificado da CA;
O software OpenVPN Client precisa:
- Arquivo de configuração .ovpn contendo os dados do cliente (acima) e os parâmetros do servidor (endereço, porta, opções de criptografia);
Gerando cadastro de clientes:
# Funcao para criar usuario
_ovpn_add_user(){
ouser="$1";
oemail="$2";
(
echo "user=$ouser";
echo "email=$oemail";
) > /etc/openvpn/client/$ouser.cnf;
}
# Criar usuarios (exemplos):
_ovpn_add_user "suporte" "suporte@intranet.br";
_ovpn_add_user "guest" "guest@intranet.br";
_ovpn_add_user "admin" "admin@intranet.br";
_ovpn_add_user "mk001" "mk001@intranet.br";
Com o script, cada arquivo .cnf no diretório /etc/openvpn/client/ é a definição de um usuário.
Agora vamos criar chaves, certificados e configuração OVPN para cada usuário:
# Funcao para criar chave privada do usuario
_ovpn_gen_privkey(){
ouser="$1";
opkey="/etc/ssl/ovpn-ca/private/user-$1-key.pem";
echo "# [$ouser] Chave privada $opkey";
[ -f "$opkey" ] && return;
openssl genpkey \
-algorithm RSA \
-pkeyopt rsa_keygen_bits:4096 \
-out "$opkey";
};
# Funcao para gerar CSR do usuario
_ovpn_gen_cert_request(){
ouser="$1";
oemail="$2";
opkey="/etc/ssl/ovpn-ca/private/user-$1-key.pem";
ocsr="/etc/ssl/ovpn-ca/csr/user-$1.pem";
echo "# [$ouser] CSR $ocsr ~ $oemail";
[ -f "$ocsr" ] && return;
openssl req \
-new \
-key $opkey \
-subj \
"/CN=$ouser/emailAddress=$oemail" \
-addext keyUsage=critical,digitalSignature,keyAgreement \
-addext extendedKeyUsage=clientAuth \
-out $ocsr;
};
# Funcao para assinar CSR do cliente com a chave da CA e gerar certificado
_ovpn_gen_ca_certificate(){
ouser="$1";
opkey="/etc/ssl/ovpn-ca/private/user-$1-key.pem";
ocsr="/etc/ssl/ovpn-ca/csr/user-$1.pem";
ocrt="/etc/ssl/ovpn-ca/certs/user-$1.pem";
echo "# [$ouser] CA Certificate $ocrt";
[ -f "$ocrt" ] && return;
openssl ca \
-config /etc/ssl/ovpn-ca/openssl.cnf \
-in $ocsr \
-out $ocrt \
-days 3650 \
-batch;
};
# Funcao para gerar arquivo OVPN do usuario:
_ovpn_gen_openvpn_client(){
ouser="$1";
osrvip="$2";
osrvport="$3";
opkey="/etc/ssl/ovpn-ca/private/user-$1-key.pem";
ocrt="/etc/ssl/ovpn-ca/certs/user-$1.pem";
ocfg="/etc/openvpn/client/$ouser.ovpn";
cacrt="/etc/ssl/ovpn-ca/certs/ca.cert.pem";
echo "# [$ouser] Generating OpenVPN Client Config: $ocfg";
(
echo "remote $osrvip $osrvport";
echo 'proto udp';
echo 'client'; echo 'nobind';
echo 'dev tun'; echo 'resolv-retry infinite';
echo 'persist-key'; echo 'persist-tun';
echo 'remote-cert-tls server';
echo 'auth SHA256'; echo 'cipher AES-128-GCM';
echo 'data-ciphers AES-128-GCM:AES-256-GCM';
echo 'tls-version-min 1.2';
echo 'tls-cipher TLS-ECDHE-RSA-WITH-AES-128-GCM-SHA256';
echo '<key>'; cat $opkey; echo '</key>';
echo '<cert>'; cat $ocrt; echo '</cert>';
echo '<ca>'; cat $cacrt; echo '</ca>';
) > $ocfg;
}
# Configuracao de acesso do cliente
# - Coloque aqui o nome de DNS do servidor ou o IP do servidor
SERVER_ADDR="$(hostname -f)";
SERVER_PORT="1194";
# Percorrer arquivos de cadastro de usuarios e provisionar chaves e config OVPN
cd /etc/openvpn/client;
for user_file in *.cnf; do
USER=$(egrep '^user=' "$user_file" | cut -f2 -d=);
EMAIL=$(egrep '^email=' "$user_file" | cut -f2 -d=);
echo "# ------ Usuario $USER, $EMAIL";
_ovpn_gen_privkey "$USER";
_ovpn_gen_cert_request "$USER" "$EMAIL";
_ovpn_gen_ca_certificate "$USER";
_ovpn_gen_openvpn_client "$USER" "$SERVER_ADDR" "$SERVER_PORT";
done;
Os arquivos dos clientes serão criados na pasta /etc/openvpn/client/ com o nome do usuário e a extensão .ovpn. Exemplo:
- /etc/openvpn/client/suporte.ovpn
O arquivo .ovpn deve ser cadastrado no software de cliente OpenVPN.
6 – Software OpenVPN Client
Para se conectar ao servidor OpenVPN, instale o software cliente, site:
Caso ocorra problemas, consulte os logs do cliente e do servidor.
Terminamos por hoje!
Patrick Brandão, patrickbrandao@gmail.com