- Требования для настройки:
- Настройка сервера центра сертификации Ubuntu
- Установка EasyRSA на сервер центра сертификации
- Создание сервера центра сертификациис помощью EasyRSA
- Установка и настройка сервера Openvpn
- Создание PKI на сервере OpenVPN Ubuntu
- Создайте запрос сертификата сервера и сгенерируйте закрытый ключ
- Создание сертификата клиента и пары ключей
- Настройка VPN-сервиса
- Настройка vpn-файлов для клиентов
- Подключение клиента к OpenVPN-соединению
- Заключение
OpenVPN — это многофункциональная VPN с открытым исходным кодом Secure Socket Layer (SSL). VPN позволяет безопасно подключать ненадежные сети, такие как сеть WI-Fi в отелях, аэропортах или торговых центрах. Также VPN позволяет обеспечить безопасное подключение к корпоративной сети для доступа к ресурсам. Туннели защищены с помощью учетных данных и сертификатов SSL/TLS.
В этой статье я покажу как настроить сервер VPN с помощью OpenVPN на Ubuntu 20.04.
Требования для настройки:
Мы будем использовать два сервера Ubuntu работающих на версии 20.04:
- Сервер Центра Сертификации (ЦС), который будет проверять запрос и подписывать сертификаты клиентов.
- Сервер OpenVPN, на котором мы установим VPN.
Настройка сервера центра сертификации Ubuntu
Рекомендую сохранить автономный сервер в качестве центра сертификации (certificate authority). Делается это из соображений безопасности. Давайте перейдем к настройке сервера центра сертификации.
Сначала убедитесь, что система обновлена. Выполните следующую команду:
$ sudo apt update
Вам нужно будет создать некорневого пользователя для конфигураций сервера центра сертификации.
$ sudo adduser malain
Теперь дайте пользователю привилегии sudo:
$ sudo usermod -aG sudo malain
Далее выйдите из системы, а затем снова войдите в систему.
Установка EasyRSA на сервер центра сертификации
Easy-rsa — это утилита CLI для создания и управления центром сертификации PKI. Easy-RSA будет использоваться сервером ЦС для генерации закрытого ключа и открытого корневого сертификата. Которые будут использоваться для подписи запросов от клиентов и серверов, а так же будет полагаться на наш сервер центра сертификации.
Чтобы установить easy-rsa, загрузите инструмент управления PKI с github. Это можно сделать с помощью wget команды:
$ wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.8/EasyRSA-3.0.8.tgz
Затем распакуйте файл tgz:
$ tar xvf EasyRSA-3.0.8.tgz
Чтобы ограничить доступ только для пользователя, используйте:
$ chmod 700 EasyRSA-3.0.8
Теперь переместите EasyRSA в каталог opt
$ sudo mv EasyRSA-3.0.8 /opt/
Для этой конфигурации мы будем использовать версию EasyRSA 3.0.8.
Создание сервера центра сертификации с помощью EasyRSA
Первое что требуется сделать это создать файл с именем vars
для хранения информации об организации. Для этого мы можем использовать пример файла, доступного в каталоге EasyRSA-3.0.8.
Чтобы перечислить файлы в каталоге EasyRSA, используйте команду:
$ cd EasyRSA-3.0.8/ && ls -l
В терминале вы увидите следующий ответ:
-rw-rw-r-- 1 malain malain 1305 Sep 9 2020 COPYING.md
-rw-rw-r-- 1 malain malain 5056 Sep 9 2020 ChangeLog
-rw-rw-r-- 1 malain malain 2049 Sep 9 2020 README.md
-rw-rw-r-- 1 malain malain 3335 Sep 9 2020 README.quickstart.md
drwxrwxr-x 2 malain malain 4096 Sep 9 2020 doc
-rwxrwxr-x 1 malain malain 76946 Sep 9 2020 easyrsa
-rw-rw-r-- 1 malain malain 18093 Sep 9 2020 gpl-2.0.txt
-rw-rw-r-- 1 malain malain 1036 Sep 9 2020 mktemp.txt
-rw-rw-r-- 1 malain malain 4616 Sep 9 2020 openssl-easyrsa.cnf
-rw-rw-r-- 1 malain malain 8925 Sep 9 2020 vars.example
drwxrwxr-x 2 malain malain 4096 Mar 28 14:14 x509-types
Сделайте копию файла vars.example как vars:
$ cp vars.example vars
Теперь откройте файл vars и добавьте информацию об организации в конец файла:
$ vim vars
set_var EASYRSA_REQ_COUNTRY "CM"
set_var EASYRSA_REQ_PROVINCE "Littoral"
set_var EASYRSA_REQ_CITY "Douala"
set_var EASYRSA_REQ_ORG "OPEN-SHARE"
set_var EASYRSA_REQ_EMAIL "admin@open-share.com"
set_var EASYRSA_REQ_OU "Com"
set_var EASYRSA_ALGO "ec"
set_var EASYRSA_DIGEST "sha512"
Теперь инициализируйте PKI на сервере центра сертификации. После инициализации сервер создаст папку pki.
$ ./easyrsa init-pki
Теперь мы можем создать корневую пару открытых и закрытых ключей для нашего ЦС. Во время этого процесса вас попросят ввести кодовую фразу для пары ключей. А так же она потребуется, когда вам нужно будет подписать или отозвать сертификат. Но в нашем случае мы будем использовать команду так, чтобы нам кодовая фраза не предлагалась. Вам также будет предложено указать Общее имя (CN), но мы оставим его по умолчанию, нажав клавишу Enter.
$ ./easyrsa build-ca nopass
Note: using Easy-RSA configuration from: /opt/EasyRSA-3.0.8/vars
Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020
read EC key
writing EC 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.
——
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/opt/EasyRSA-3.0.8/pki/ca.crt
Это создаст корневой сертификат с именем ca.crt в каталоге pki и приватным ключом ca.key в каталоге pki/private.
$ ls -l pki/
total 52
-rw------- 1 malain malain 749 Mar 28 14:30 ca.crt
drwx------ 2 malain malain 4096 Mar 28 14:29 certs_by_serial
drwx------ 2 malain malain 4096 Mar 28 14:29 ecparams
-rw------- 1 malain malain 0 Mar 28 14:29 index.txt
-rw------- 1 malain malain 0 Mar 28 14:29 index.txt.attr
drwx------ 2 malain malain 4096 Mar 28 14:29 issued
-rw------- 1 malain malain 4616 Mar 28 14:24 openssl-easyrsa.cnf
drwx------ 2 malain malain 4096 Mar 28 14:30 private
drwx------ 5 malain malain 4096 Mar 28 14:29 renewed
drwx------ 2 malain malain 4096 Mar 28 14:24 reqs
drwx------ 5 malain malain 4096 Mar 28 14:29 revoked
-rw------- 1 malain malain 4575 Mar 28 14:24 safessl-easyrsa.cnf
-rw------- 1 malain malain 3 Mar 28 14:29 serial
$ ls -l pki/private/
total 4
-rw------- 1 malain malain 288 Mar 28 14:29 ca.key
Вот и все наш сервер центра сертификации готов!
Установка и настройка сервера Openvpn
Давайте перейдем ко второму серверу, чтобы установить и настроить openvpn. Вам также потребуется создать некорневого пользователя на этом сервере и предоставить ему соответствующие sudo
привилегии.
Чтобы установить openvpn на ubuntu, выполните следующие команды:
$ sudo apt update
$ sudo apt install openvpn
На сервере openvpn утилита easyrsa будет использоваться для генерации запроса сертификата, который будет проверен и подписан сервером центра сертификации (ЦА). Выполните те же действия, что и в предыдущем разделе, чтобы установить Easyrsa.
$ wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.8/EasyRSA-3.0.8.tgz
Теперь распакуйте загруженный файл tgz:
$ tar xvf EasyRSA-3.0.8.tgz
Ограничьте доступ только пользователю:
$ chmod 700 EasyRSA-3.0.8
Переместите EasyRSA-3.0.8 в opt
каталог:
$ sudo mv EasyRSA-3.0.8 /opt/
Создание PKI на сервере OpenVPN Ubuntu
Теперь нам нужно создать PKI, который поможет запрашивать и управлять сертификатами TLS для клиентов и других серверов, которые будут подключаться к нашей VPN сети.
Эта команда позволяет создать файл vars мы описывали это выше:
$ cp vars.example vars
Теперь отредактируйте файл vars с помощью утилиты VIM, добавив следующие строки в конце файла:
$ vim vars
set_var EASYRSA_ALGO "ec"
set_var EASYRSA_DIGEST "sha512"
Чтобы создать папку PKI на сервере openvpn, запустите файл easyrsa
сценария:
$ ./easyrsa init-pki
Вы увидите следующий ответ в терминале:
Note: using Easy-RSA configuration from: /opt/EasyRSA-3.0.8/vars init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /opt/EasyRSA-3.0.8/pki
Создайте запрос сертификата сервера и сгенерируйте закрытый ключ
Теперь мы сгенерируем закрытый ключ и запросим сертификат на сервере OpenVPN. Далее мы передадим файл запроса сертификата на сервер центра сертификации (ЦА). который будет подписан, чтобы создать необходимый сертификат
Находясь в той же папке, мы можем сгенерировать запрос nopass .
Следующая команда создает файл закрытого ключа с именем openvpn-server.key и файл запроса сертификата с именем openvpn-server.req.
$ ./easyrsa gen-req openvpn-server nopass
Вывод в терминале:
Note: using Easy-RSA configuration from: /opt/EasyRSA-3.0.8/vars
Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020
Generating an EC private key
writing new private key to '/opt/EasyRSA-3.0.8/pki/easy-rsa-4737.CGhQHN/tmp.UGQ9wi'
-----
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.
-----
Common Name (eg: your user, host, or server name) [openvpn-server]:
Keypair and certificate request completed. Your files are:
req: /opt/EasyRSA-3.0.8/pki/reqs/openvpn-server.req
key: /opt/EasyRSA-3.0.8/pki/private/openvpn-server.key
Теперь скопируйте файл ключа сервера с именем openvpn-server.key в каталог с именем /etc/openvpn/server.
$ sudo cp /opt/EasyRSA-3.0.8/pki/private/openvpn-server.key /etc/openvpn/server
Затем скопируйте файл запроса сертификата на сервер ЦА (центра сертификации):
$ scp /opt/EasyRSA-3.0.8/pki/reqs/openvpn-server.req malain@192.168.216.108:/tmp
На сервере ЦА перейдите в каталог easyrsa,
$ cd /opt/EasyRSA-3.0.8/
Чтобы импортировать запрос, выполните следующую команду:
$ ./easyrsa import-req /tmp/openvpn-server.req openvpn-server
Ответ в терминале:
Note: using Easy-RSA configuration from: /opt/EasyRSA-3.0.8/vars
Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020
The request has been successfully imported with a short name of: openvpn-server
You may now use this name to perform signing operations on this request.
А теперь подпишите запрос. Поскольку мы подписываем запрос сервера, мы должны использовать директиву server
перед общим именем нашего сервера openvpn. Если бы это был запрос клиента, мы должны были бы использовать директиву client
вместо server
.
Подписать запрос:
$ ./easyrsa sign-req server openvpn-server
Ответ в терминале:
Note: using Easy-RSA configuration from: /opt/EasyRSA-3.0.8/vars
Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020
You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.
Request subject, to be signed as a server certificate for 825 days:
subject=
commonName = openvpn-server
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Using configuration from /opt/EasyRSA-3.0.8/pki/easy-rsa-4100.IbygpP/tmp.hJY2T5
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'openvpn-server'
Certificate is to be certified until Jul 1 19:50:36 2023 GMT (825 days)
Write out database with 1 new entries
Data Base Updated
Certificate created at: /opt/EasyRSA-3.0.8/pki/issued/openvpn-server.crt
Теперь запрос сертификата сервера OpenVPN подписан сервером ЦА, нам нужно передать подписанный запрос и открытый сертификат на сервер OpenVPN.
$ scp pki/{ca.crt,issued/openvpn-server.crt} franck@192.168.224.3:/tmp
$ sudo cp /tmp/{ca.crt,openvpn-server.crt} /etc/openvpn/server
Теперь мы сгенерируем предварительный общий ключ tls-crypt. Это гарантирует что наш OpenVPN-сервер способен справляться с не аутентифицированным трафиком, сканированием портов и некоторыми атаками, которые могут использовать много ресурсов сервера.
$ ./easyrsa gen-dh
Ответ в терминале:
Note: using Easy-RSA configuration from: /opt/EasyRSA-3.0.8/vars Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020 Generating DH parameters, 2048 bit long safe prime, generator 2 This is going to take a long time ....................................+.......................... ............................................................... ............................................................... ...........................................+.......+.......+... .....+.......................................................... ...............................++*++*++*++*
DH parameters of size 2048 created at /opt/EasyRSA-3.0.8/pki/dh.pem
Далее вводим команду
$ openvpn --genkey --secret ta.key
Теперь скопируйте ключ и pem файлы в каталог /etc/openvpn/server:
$ sudo cp ta.key pki/dh.pem /etc/openvpn/server
Создание сертификата клиента и пары ключей
Нам нужно будет создать каталог для хранения сертификатов и ключей клиентов. Обязательно предоставьте разрешение пользователю, не являющемуся пользователем root.
$ sudo mkdir -p /opt/client-configs/keys
$ sudo chown franck:franck -R /opt/client-configs
$ sudo chmod 700 -R /opt/client-configs
Сгенерируйте запрос на сертификат клиента:
$ cd /opt/EasyRSA-3.0.8
$ ./easyrsa gen-req my-pc nopass
Ответ в терминале:
Note: using Easy-RSA configuration from: /opt/EasyRSA-3.0.8/vars Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020 Generating an EC private key writing new private key to ‘/opt/EasyRSA-3.0.8/pki/easy-rsa-6961.m7fBMu/tmp.dkqaZI’ —— 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. —— Common Name (eg: your user, host, or server name) [my-pc]: Keypair and certificate request completed. Your files are: req: /opt/EasyRSA-3.0.8/pki/reqs/my-pc.req key: /opt/EasyRSA-3.0.8/pki/private/my-pc.key
Теперь скопируйте клиентский ключ в каталог client-configs:
$ cp pki/private/my-pc.key /opt/client-configs/keys/
Скопируйте файл запроса сертификата клиента на сервер центра сертификации:
$ scp pki/reqs/my-pc.req malain@192.168.216.108:/tmp
На сервере центра сертификации импортируйте CSR:
$ cd /opt/EasyRSA-3.0.8
$ ./easyrsa import-req /tmp/my-pc.req my-pc
Note: using Easy-RSA configuration from: /opt/EasyRSA-3.0.8/vars
Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020
The request has been successfully imported with a short name of: my-pc
You may now use this name to perform signing operations on this request.
Теперь мы должны подписать запрос для клиента, набрав:
$ ./easyrsa sign-req client my-pc
Ответ в терминале:
Note: using Easy-RSA configuration from: /opt/EasyRSA-3.0.8/vars
Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020
You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.Request subject, to be signed as a client certificate for 825 days:
subject=
commonName = my-pcType the word ‘yes’ to continue, or any other input to abort.
Confirm request details: yes
Using configuration from /opt/EasyRSA-3.0.8/pki/easy-rsa-5511.IwDcbS/tmp.doUbCv
Check that the request matches the signature
Signature ok
The Subject’s Distinguished Name is as follows
commonName :ASN.1 12:’my-pc’
Certificate is to be certified until Jul 1 21:33:52 2023 GMT (825 days)Write out database with 1 new entries
Data Base UpdatedCertificate created at: /opt/EasyRSA-3.0.8/pki/issued/my-pc.crt
Скопируйте сертификат клиента на сервер openvpn:
$ scp pki/issued/my-pc.crt franck@192.168.224.3:/tmp
Теперь на сервере openvpn нам нужно скопировать все клиентские файлы в каталог клиента, который мы создали ранее.
$ sudo cp /tmp/my-pc.crt /opt/client-configs/keys/
$ sudo cp /etc/openvpn/server/ca.crt /opt/client-configs/keys/
$ cp /opt/EasyRSA-3.0.8/ta.key /opt/client-configs/keys/
Убедитесь в том, что пользователь не является root и имеет разрешения на файлы.
$ sudo chown franck:franck /opt/client-configs/keys/*
Настройка VPN-сервиса
Для настройки VPN сервиса мы должны сделать копию шаблонов
$ sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/server/
Затем распакуйте файл
$
sudo gzip -d /etc/openvpn/server/server.conf.gz
Далее войдите в папку
$ cd /etc/openvpn/server
Некоторые линии будут заменены, чтобы соответствовать нашей конфигурации::
- Криптографические шифры будут установлены на
AES-256-CBC
- Алгоритм дайджеста сообщений HMAC будет
sha256
- Поскольку мы также используем параметр Diffie-Hellman, мы установим его равным
dh.pem
- После запуска openvpn мы будем использовать пользователя nobody и группу nogroup без привилегий.
- Мы будем проталкивать изменения dns, чтобы перенаправить весь трафик через vpn со значениями
push redirect-gateway def1 bypass-dhcp
,push dhcp-option DNS 208.67.222.222
,push dhcp-option DNS 208.67.220.220
- Так же мы сохраним порт по умолчанию
1194
- Далее мы будем использовать
udp
протокол - Мы должны указать ключ
openvpn-server.key
и сертификатopenvpn-server.crt
которые будут использоваться в качестве учетных данных
Таким образом, файл должен выглядеть следующим образом:
$ sudo vim /etc/openvpn/server/server.conf
tls-crypt ta.key
cipher AES-256-CBC
auth SHA256
dh dh.pem
user nobody
group nogroup
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
port 1194
proto udp
explicit-exit-notify 1
cert openvpn-server.crt
key openvpn-server.key
Вы должны активировать переадресацию ip-адресов, отредактировав значение net.ipv4.ip_forward в файле /etc/sysctl.conf.
$ sudo vim /etc/sysctl.conf
net.ipv4.ip_forward=1
Чтобы изменения, внесенные в файл /etc/sysctl.conf, вступили в силу, выполните команду:
$ sudo sysctl -p
net.ipv4.ip_forward = 1
Теперь вам нужно разрешить OpenVPN в вашем брандмауэре. Для этого включите маскарад. Для этого вам необходимо определить имя вашего общедоступного сетевого интерфейса:
$ ip route | grep default
default via X.X.X.X dev eth0 proto static
В нашем случае это eth0. Теперь мы должны добавить правила маскарадов в конфигурацию брандмауэра, поэтому добавим строку ниже в верхней части файлов правил:
$ sudo vim /etc/ufw/before.rules
# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to the public server interface eth0
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES
Теперь давайте отредактируем ufw, чтобы разрешить пересылку пакетов по умолчанию.
$ sudo vim /etc/default/ufw
DEFAULT_FORWARD_POLICY="ACCEPT"
Откройте порт openvpn на брандмауэре:
$ sudo ufw allow '1194/udp'
Чтобы перезапустить службу ufw, введите:
$ sudo ufw disable && sudo ufw enable
Чтобы включить запуск службы openvpn при запуске системы, введите:
$ sudo systemctl enable openvpn-server@server
Чтобы запустить openvpn, введите:
$ sudo systemctl start openvpn-server@server
Вы можете проверить статус openvpn с помощью:
$ sudo systemctl status openvpn-server@server
Ответ терминала:
● openvpn-server@server.service - OpenVPN service for server
Loaded: loaded (/lib/systemd/system/openvpn-server@.service; disabled; vendor preset: enabled)
Active: active (running) since Sun 2021-03-28 23:30:57 UTC; 8s ago
Docs: man:openvpn(8)
https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
https://community.openvpn.net/openvpn/wiki/HOWTO
Main PID: 78132 (openvpn)
Status: "Initialization Sequence Completed"
Tasks: 1 (limit: 1073)
Memory: 1.0M
CGroup: /system.slice/system-openvpnx2dserver.slice/openvpn-server@server.service
└─78132 /usr/sbin/openvpn --status /run/openvpn-server/status-server.log --status-version 2 --suppress-timestamps --config server.conf
Mar 28 23:30:57 localhost systemd[1]: Starting OpenVPN service for server...
Mar 28 23:30:57 localhost systemd[1]: Started OpenVPN service for server.
Чтобы проверить туннельный интерфейс, введите:
$ ip addr show tun0
Ответ терминала:
3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 100
link/none
inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
valid_lft forever preferred_lft forever
inet6 fe80::c3d9:85d1:e2a9:6b2c/64 scope link stable-privacy
valid_lft forever preferred_lft forever
Настройка vpn-файлов для клиентов
$ sudo mkdir -p /opt/client-configs/files
Теперь мы должны скопировать пример конфигурационного файла
$ sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /opt/client-configs/base.conf
Дайте разрешение не корневому пользователю
$ sudo chown franck:franck -R /opt/client-configs/
Отредактируйте файл base.conf
$ vim /opt/client-configs/base.conf
remote your_server_ip 1194proto udp
# Downgrade privileges after initialization (non-Windows only)
user nobody
group nogroup
#ca ca.crt
#cert client.crt
#key client.key
#tls-auth ta.key 1
cipher AES-256-CBC
auth SHA256
key-direction 1
# For the clients using resolvconf for DNS resolution, uncomment the lines below on the client computer; script-security 2
; up /etc/openvpn/update-resolv-conf
; down /etc/openvpn/update-resolv-conf
# Instead for the clients using systemd-resolved for DNS resolution, uncomment the lines below on the client computer; script-security 2
; up /etc/openvpn/update-systemd-resolved
; down /etc/openvpn/update-systemd-resolved
; down-pre
; dhcp-option DOMAIN-ROUTE .
Теперь мы создадим скрипт для генерации сертификатов и зашифрованных файлов на клиенте. Скрипт также сделает копию файла base.conf и соберет все ключи и сертификаты, созданные для клиентов. Для каждого клиента нам потребуется сгенерировать сертификат и ключ перед запуском скрипта
$ vim /opt/client-configs/make_config.sh
#!/bin/bash# First argument: Client identifier
KEY_DIR=/opt/client-configs/keys
OUTPUT_DIR=/opt/client-configs/files
BASE_CONFIG=/opt/client-configs/base.confcat ${BASE_CONFIG}
<(echo -e ‘<ca>’)
${KEY_DIR}/ca.crt
<(echo -e ‘</ca>n<cert>’)
${KEY_DIR}/${1}.crt
<(echo -e ‘</cert>n<key>’)
${KEY_DIR}/${1}.key
<(echo -e ‘</key>n<tls-auth>’)
${KEY_DIR}/ta.key
<(echo -e ‘</tls-auth>’)
> ${OUTPUT_DIR}/${1}.ovpn
Убедитесь, что сценарий может быть запущен пользователем, не являющимся пользователем root.
$ chmod 700 /opt/client-configs/make_config.sh
Теперь вы можете сгенерировать файл подключения клиента на основе конфигурации ключа клиента и сертификата (my-pc.crt и my-pc.key)
$ cd /opt/client-configs
Теперь запустите скрипт за которым следует общее имя используемое для клиента. Он создаст клиентский vpn-файл для использования.
$ ./make_config.sh my-pc
Вы можете проверить результат:
$ ls -l files/
total 12
-rw-rw-r-- 1 franck franck 8598 Mar 30 11:12 my-pc.ovpn
Подключение клиента к OpenVPN-соединению
Установите openvpn клиент. Он будет использоваться для установки vpn-соединения с сервером
$ sudo apt update && sudo apt install openvpn -y
Теперь скопируйте клиентский файл OpenVPN, который находится на сервере. Копировать надо на клиентский компьютер. После этого на клиентском компьютере выполните следующую команду:
$ rsync -av franck@X.X.X.X:/opt/client-configs/files/my-pc.ovpn .
Перед редактированием конфигурационного файла клиента OpenVPN мы должны проверить, используем ли мы resolvconf или systemd-resolved для разрешения DNS
$ cat /etc/resolv.conf
OUTPUT:
# This file is managed by man:systemd-resolved(8). Do not edit.
. . .nameserver 127.0.0.53
options edns0
С этим значением nameserver 127.0.0.53
он показывает, что вы используете systemd-resolved. Далее установите пакет, который поможет systemd-resolved использовать VPN для разрешения DNS при подключении.
$ sudo apt install openvpn-systemd-resolved
Теперь мы можем отредактировать файл vpn-клиента, раскомментировав строки, необходимые для systemd-resolved
$ vim my-pc.ovpn
script-security 2
up /etc/openvpn/update-systemd-resolved
down /etc/openvpn/update-systemd-resolved
down-pre
dhcp-option DOMAIN-ROUTE .
Для системы, использующей update-resolv-conf раскомментируйте строки
script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf
Теперь попробуем подключиться к VPN с помощью команды openvpn:
$ sudo openvpn --config my-pc.ovpn
Вы можете проверить информацию ip для туннельного интерфейса
$ ip a
Эта команда покажет IP-адрес туннеля, и мы можем пингануть сервер OpenVPN. С помощью пинга вы поймете подключились вы на сервер или нет.
Заключение
При использовании OpenVPN легко настроить VPN-соединение. Это хорошее решение, если вы хотите настроить VPN на своем облачном сервере без использования какого-либо специализированного ПО.
Добрый день. Спасибо за очень актуальную статью.
1) Если не затруднит, не можете ли дать совет по использованию вместо отдельного сервера ЦА встроенные средства EasyRSA-3.0.8 с помощью билд СА для генерации ключей и сертификатов сервера и клиентов, как это сделано в статье «How to Set Up an PoenVPN Server on Ubuntu 14.04» от 28.01.2015 на портале DigitalOcean ссылка: https://www.digitalocean.com/community/tutorials/how-to-set-up-an-openvpn-server-on-ubuntu-14-04. Это позволило бы оплачивать один экземпляр виртуального сервера у поставщика VPS вместо двух.
2) Правильно ли я понял, что вместо команд apt-get update, apt-get upgrade, и apt-get install easy-rsa ( у меня Ubuntu 16.04) для EasyRSA лучше использовать явную закачку с Github именно релиза 3.0.8?
3) Вообще, следует ли мне перейти на Ubuntu 20.04, если мой VPS используется только для поддержки VPN только на моём домашнем ПК?
Очень был бы вам благодарен за советы, спасибо.
С уважением, Николай
Плохая инструкция, непоследовательно с повторениями того, что было….
Оказался не прав… Приношу свои извинения.
Молодей автор.
🙂 Главное чтоб все у вас получилось.