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
Bash
# 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.10Preparativos
Para que o OpenVPN seja executado corretamente, os módulos do kernel devem estar carregados durante o boot.
Bash
# 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
Bash
# 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);
Bash
# 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:
Bash
# 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
Bash
# 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)
Bash
# 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 updatedCom os arquivos gerados na CA, vamos copiá-los para a pasta do servidor OVPN:
Bash
# 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:
Bash
# 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
Bash
# 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:
Bash
# 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:
/var/log/openvpn/server.log
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 CompletedServidor configurado e testado.
Vamos criar a UNIT no systemd para controlar o servidor:
Bash
# 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:
Bash
# 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:
Bash
# 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