Инструменты пользователя

Инструменты сайта


openvpn

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
openvpn [2020/03/27 07:09]
darkfire [Шаг 2: Установка OpenVPN Ubuntu]
openvpn [2020/04/01 03:45] (текущий)
darkfire [ШАГ 11: (Опционально) Директория ccd клиенты OpenVPN]
Строка 71: Строка 71:
 **Задача:​** **Задача:​**
   - Настроить сервер [[openvpn#​chto_takoe_openvpn|OpenVPN]] Ubuntu 18.04.4 LTS в облаке. Выбор Linux сервера для OpenVPN: Облачная технология от  [[digitalocean.com|DigitalOcean]],​ Цена виртуального сервера 5 долларов в месяц. Колокейшн (дата-центр) выбран Амстердам,​ прекрасная связь с Украиной в этом центре.   - Настроить сервер [[openvpn#​chto_takoe_openvpn|OpenVPN]] Ubuntu 18.04.4 LTS в облаке. Выбор Linux сервера для OpenVPN: Облачная технология от  [[digitalocean.com|DigitalOcean]],​ Цена виртуального сервера 5 долларов в месяц. Колокейшн (дата-центр) выбран Амстердам,​ прекрасная связь с Украиной в этом центре.
-  - Создать простую инструкцию для подчиненного сисадмина по управлению сертификатами/​ключами:​ создание,​ удаление и отзыв сертификатов клиентов OpenVPN+  - Создать ​[[openvpn#​instrukcija_po_upravleniju_sertifikatami_kljuchami_klientov_openvpn|простую инструкцию]] для подчиненного сисадмина по управлению сертификатами/​ключами:​ создание,​ удаление и отзыв сертификатов клиентов OpenVPN
 Предоставить доступ удаленным сотрудникам к локальным сетям для работы с бухгалтерским программным обеспечением и для просмотра видеокамер наблюдения. Предоставить доступ удаленным сотрудникам к локальным сетям для работы с бухгалтерским программным обеспечением и для просмотра видеокамер наблюдения.
 **Подключаемые удаленные офисы:​** **Подключаемые удаленные офисы:​**
Строка 81: Строка 81:
   - Мобильные клиенты на Android   - Мобильные клиенты на Android
   - Удаленные клиенты Windows 10   - Удаленные клиенты Windows 10
 +===== Инструкция по управлению сертификатами/​ключами клиентов OPenVPN =====
 +Создание нового сертификата пользователя,​ под правами обычного пользователя (не root).
  
 +  * Шаг 1: создание сертификата пользователя
 +<file bash>
 +cd ~/​openvpn-ca
 +source vars
 +./build-key zabbix
 +</​file>​
 +
 +  * Шаг 2: создания ovpn файла для программы клиента. Этот файл должен быть передан пользователю,​ для настройки его клиента
 +
 +<file bash>
 +cd ~/​client-configs
 +./​make_config.sh zabbix
 +</​file>​
 +  * Шаг 3: При необходимости создаем ccd файл, с дополнительными настройками. Например вы хотите клиенту разрешить доступ к локальным сетям за другим клиентом OpenVPN:
 +<file bash>
 +cp /​etc/​openvpn/​ccd/​base.client /​etc/​openvpn/​ccd/​zabbix
 +</​file>​Шаблон base.client содержит комментированные строки такого содержания
 +<file bash base.client>​
 +$ cat base.client
 +
 +#​ifconfig-push 10.8.0.21 10.8.0.22
 +#push "route 192.168.35.0 255.255.255.0"​
 +#push "route 192.168.22.0 255.255.255.0"​
 +#push "route 10.90.91.0 255.255.255.0"​
 +#iroute 192.168.35.0 255.255.255.0
 +#iroute 192.168.22.0 255.255.255.0
 +#iroute 10.90.91.0 255.255.255.0
 +# all trafic to VPN
 +#push "​redirect-gateway def1 bypass-dhcp"​
 +#push "​dhcp-option DNS 208.67.222.222"​
 +#push "​dhcp-option DNS 208.67.220.220"​
 +</​file>​
 ====== ШАГ 1: Настройка сетевой конфигурации Linux для OpenVPN: iptables/​UFW,​ ядро Linux ====== ====== ШАГ 1: Настройка сетевой конфигурации Linux для OpenVPN: iptables/​UFW,​ ядро Linux ======
 Настройка сетевой конфигурации Linux - сервера для безопасной работы сервера OpenVPN: iptables/​UFW,​ ядро Linux. Настройка сетевой конфигурации Linux - сервера для безопасной работы сервера OpenVPN: iptables/​UFW,​ ядро Linux.
 +
 +
 +Делаем первичную настройку [[https://​www.digitalocean.com/​community/​tutorials/​initial-server-setup-with-ubuntu-18-04|безопасности Ubuntu 18.04]]. Iptables при помощи [[ufw|ufw]] разрешаем только SSH.
 ===== Общие рекомендации по настройки безопасного сервера OpenVPN ===== ===== Общие рекомендации по настройки безопасного сервера OpenVPN =====
  
Строка 103: Строка 140:
  
  
-===== Правила ​iptables/​UFW ​=====+===== Настройка фаервола для сервера OpenVPN ===== 
 + 
 +В общем случае для корректной работы сервера OpenVPN вы должны открыть входящий порт для клиентов и включить [[NAT]] Маскарадинг (Masquerading) преобразование,​ если вы весь трафик клиента,​ хотите маршрутизировать через VPN. 
 + 
 +В моей практике,​ чаще встречается конфигурация,​ когда клиентам нужно дать доступ только к локальным сетям, а весь основной трафик идет через обычного провайдер. В этом случае NAT настраивать не надо. 
 +==== Настройка iptables для OpenVPN ​====
  
 **Firewall iptables:** **Firewall iptables:**
Строка 111: Строка 153:
 or or
 iptables -A INPUT -i tun+ -j ACCEPT iptables -A INPUT -i tun+ -j ACCEPT
 +# для динамического IP
 +iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
 </​file>​ </​file>​
 +  * [[iptables#​iptables_nat|Настройка iptables и NAT]]
  
 +==== Настройка UFW (iptables) для OpenVPN ====
 +
 +Если вы используете надстройку над iptables [[UFW|UFW]],​ выполните нижеприведенные действия.
 +
 +Найдите публичный интерфейс сети (public network interface). Для этого наберите команду:​
 +<file bash>
 +ip route | grep default
 +</​file>​Публичный интерфейс должен следовать за словом "​dev"​.
 +Зная название интерфейса откроем файл /​etc/​ufw/​before.rules и добавим туда соответствующие настройки:​
 +<file bash>
 +sudo nano /​etc/​ufw/​before.rules
 +</​file>​
 +Это файл содержит настройки UFW, которое применяются перед применением правил UFW. Добавьте в начало файла выделенные красным строки. Это настроит правила,​ применяемые по умолчанию,​ к цепочке POSTROUTING в таблице nat.
 +<note warning>​Не забудьте заменить eth0 в строке -A POSTROUTING на имя интерфейса,​ найденное нами ранее.</​note>​
 +
 +<file bash>
 +#
 +# rules.before
 +#
 +# Rules that should be run before the ufw command line added rules. Custom
 +# rules should be added to one of these chains:
 +#   ​ufw-before-input
 +#   ​ufw-before-output
 +#   ​ufw-before-forward
 +#
 +
 +# START OPENVPN RULES
 +# NAT table rules
 +*nat
 +:​POSTROUTING ACCEPT [0:0] 
 +# Allow traffic from OpenVPN client to eth0
 +-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
 +COMMIT
 +# END OPENVPN RULES
 +
 +# Don't delete these required lines, otherwise there will be errors
 +*filter
 +. . .
 +</​file>​
 +
 +Теперь мы должны сообщить UFW, что ему по умолчанию необходимо разрешать перенаправленные пакеты. Для этого откройте файл /​etc/​default/​ufw. Найдите в файле директиву DEFAULT_FORWARD_POLICY. Мы изменим значение с DROP на ACCEPT:
 +<file bash>
 +DEFAULT_FORWARD_POLICY="​ACCEPT"​
 +</​file>​
 +
 +Далее настроим сам файрвол для разрешения трафика в OpenVPN.
 +
 +Если вы не меняли порт и протокол в файле /​etc/​openvpn/​server.conf,​ вам необходимо разрешить трафик UDP для порта 1194. Если вы изменили эти настройки,​ введите указанные вами значения.
 +<file bash>
 +sudo ufw allow 1194/udp
 +</​file>​
 +Теперь деактивируем и активируем UFW для применения внесённых изменений:​
 +<file bash>
 +sudo ufw disable
 +sudo ufw enable
 +</​file>​
 ====== Шаг 2: Установка OpenVPN Ubuntu ====== ====== Шаг 2: Установка OpenVPN Ubuntu ======
  
Строка 134: Строка 235:
 cd /​etc/​openvpn/​easy-rsa cd /​etc/​openvpn/​easy-rsa
 </​file>​ </​file>​
-**Второй вариант копирования файлов easy-rsa**+Но я буду использовать ​**второй вариант копирования файлов easy-rsa**
 Для начала скопируем шаблонную директорию easy-rsa в нашу домашнюю директорию с помощью команды make-cadir: Для начала скопируем шаблонную директорию easy-rsa в нашу домашнюю директорию с помощью команды make-cadir:
  
Строка 140: Строка 241:
 make-cadir ~/​openvpn-ca make-cadir ~/​openvpn-ca
 </​file>​ </​file>​
-Далее зайдём в эту ​директорию для начала настройки центра сертификации:​+ 
 + 
 +====== Шаг 4: Настройка переменных EasyRSA и построение CA ====== 
 +Откройте на компьютере CA каталог EasyRSA, для этого перейдем в директорию ​openvpn-ca ​для начала настройки центра сертификации:​
  
 <file bash> <file bash>
 cd ~/​openvpn-ca cd ~/​openvpn-ca
 </​file>​ </​file>​
-====== ШАГ 10: Клиенты OpenVPN для разных ОС ======+ 
 +В этом каталоге есть файл с именем vars, создайте его копию. 
 + 
 +<file bash> 
 +cp vars vars.original 
 +</​file>​ 
 + 
 +Для настройки переменных нашего центра сертификации нам необходимо отредактировать файл vars. Откройте этот файл в вашем текстовом редакторе:​ 
 + 
 +<file bash> 
 +nano vars 
 +</​file>​ 
 +Внутри файла вы найдёте переменные,​ которые можно отредактировать,​ и которые задают параметры сертификатов при их создании. Нам нужно изменить всего несколько переменных. 
 + 
 +Чтобы в дальнейшем,​ при создании сертификатов,​ не появлялась ошибка про отсутствие файла openssl.cnf,​ вы можете пойти двумя путями. Первый просто переименовать нужный файл.<​file bash> 
 +cp openssl-1.0.0.cnf openssl.cnf 
 +</​file>​И ​ второй путь, отредактировать в файле vars параметр export KEY_CONFIG:<​file>​ 
 +# This variable should point to 
 +# the openssl.cnf file included 
 +# with easy-rsa. 
 +#export KEY_CONFIG=`$EASY_RSA/​whichopensslcnf $EASY_RSA` 
 +export KEY_CONFIG=$EASY_RSA/​openssl-1.0.0.cnf 
 + 
 +</​file>​ 
 + 
 + 
 +Перейдите ближе к концу файла и найдите настройки полей, используемые по умолчанию при создании сертификатов. Они должны выглядеть примерно так: 
 + 
 +<file bash> 
 +~/​openvpn-ca/​vars 
 +. . . 
 + 
 +export KEY_COUNTRY="​US"​ 
 +export KEY_PROVINCE="​CA"​ 
 +export KEY_CITY="​SanFrancisco"​ 
 +export KEY_ORG="​Fort-Funston"​ 
 +export KEY_EMAIL="​me@myhost.mydomain"​ 
 +export KEY_OU="​MyOrganizationalUnit"​ 
 + 
 +. . . 
 +</​file>​ 
 +Замените значения,​ на что-нибудь другое,​ не оставляйте их не заполненными:​ 
 + 
 +<file bash> 
 +~/​openvpn-ca/​vars 
 +. . . 
 + 
 +export KEY_COUNTRY="​UA"​ 
 +export KEY_PROVINCE="​NY"​ 
 +export KEY_CITY="​Kharkiv"​ 
 +export KEY_ORG="​Mirax"​ 
 +export KEY_EMAIL="​darkfire@example.com"​ 
 +export KEY_OU="​MyPersonal"​ 
 + 
 +. . . 
 +</​file>​ 
 + 
 +Отредактируйте значение KEY_NAME чуть ниже, которое заполняет поле субъекта сертификатов. Проще всего задать ему имя server, потому что в документации примеры конфигов сервера OpenVPN используют это имя: 
 + 
 +<file bash> 
 +~/​openvpn-ca/​vars 
 +export KEY_NAME="​server"​ 
 +</​file>​ 
 + 
 +Сохраните и закройте файл. 
 + 
 +====== Шаг 5: Создание центра сертификации ====== 
 + 
 +Теперь мы можем использовать заданные нами переменные и утилиты easy-rsa для создания центра сертификации. 
 + 
 +Убедитесь,​ что вы находитесь в директории центра сертификации и используйте команду source к файлу vars: 
 + 
 +<​file>​ 
 +cd ~/​openvpn-ca 
 +source vars 
 +</​file>​ 
 +Вы должны увидеть следующий вывод:​ 
 + 
 +Вывод 
 +<​file>​ 
 +NOTE: If you run ./​clean-all,​ I will be doing a rm -rf on /​home/​sammy/​openvpn-ca/​keys 
 +</​file>​Возможно вам нужно будет переименовать файл: 
 +<file bash> 
 +cp openssl-1.0.0.cnf openssl.cnf 
 +</​file>​ 
 +Убедимся,​ что мы работаем в “чистой среде” выполнив следующую команду:​ 
 + 
 +<​file>​ 
 +./​clean-all 
 +</​file>​ 
 +Теперь мы можем создать наш корневой центр сертификации командой:​ 
 + 
 +<​file>​ 
 +./​build-ca 
 +</​file>​ 
 +Эта команда запустит процесс создания ключа и сертификата корневого центра сертификации. Поскольку мы задали все переменные в файле vars, все необходимые значения будут введены автоматически. Нажимайте ENTER для подтверждения выбора:​ 
 + 
 +В результате будет создан центр сертификации и два важных файла, ca.crt и ca.key, представляющие открытую и закрытую части сертификата SSL. <note tip>​Подробнее о ключах и сертификатах читать здесь: [[openvpn#​kakie_ssl_sertifikaty_kljuchi_ispolzuet_openvpn_gde_kljuchi_openvpn_dolzhny_razmeschatsja|Какие SSL сертификаты,​ ключи использует OpenVPN? ​Где ключи OpenVPN должны размещаться?​]]</​note>​ 
 + 
 +Теперь у нас есть центр сертификации,​ который мы сможем использовать для создания всех остальных необходимых нам файлов. 
 + 
 +Теперь ваш центр сертификации установлен и готов подписывать запросы сертификатов. 
 + 
 +====== Шаг 6: Создание сертификата сервера,​ ключа и файлов шифрования ====== 
 +Далее создадим сертификат,​ пару ключей и некоторые дополнительные файлы, используемые для осуществления шифрования,​ для нашего сервера. 
 + 
 +Начнём с создания сертификата OpenVPN и ключей для сервера. Это можно сделать следующей командой:​ 
 + 
 +Внимание:​ Если ранее вы выбрали имя, отличное от server, вам придётся немного изменить некоторые инструкции. Например,​ при копировании созданных файлов в директорию /​etc/​openvpn вам придётся заменить имена на заданные вами. Вам также придётся изменить файл /​etc/​openvpn/​server.conf для того, чтобы он указывал на корректные .crt и .key файлы. 
 + 
 +<​file>​ 
 +./​build-key-server server 
 +</​file>​ 
 +Вывод опять будет содержать значения по умолчанию,​ переданные этой команде (server), а также значения из файла vars. 
 + 
 +Согласитесь со всеми значениями по умолчанию,​ нажимая ENTER. Не задавайте challenge password. В конце процесса два раза введите y для подписи и подтверждения создания сертификата:​ 
 + 
 +Вывод 
 +<​file>​ 
 +. . . 
 + 
 +Certificate is to be certified until May  1 17:51:16 2026 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 
 +</​file>​ 
 +Далее создадим оставшиеся файлы. Мы можем сгенерировать сильные ключи протокола Диффи-Хеллмана,​ используемые при обмене ключами,​ командой:​ 
 + 
 +<​file>​ 
 +./​build-dh 
 +</​file>​ 
 +Для завершения этой команды может потребоваться несколько минут. 
 + 
 +Далее мы можем сгенерировать подпись HMAC для усиления способности сервера проверять целостность TSL: 
 + 
 +<​file>​ 
 +openvpn --genkey --secret keys/​ta.key 
 +</​file>​ 
 + 
 +====== Шаг 7: Создание сертификата и пары ключей для клиента ====== 
 + 
 +Далее мы можем сгенерировать сертификат и пару ключей для клиента. Вообще это можно сделать и на клиентской машине и затем подписать полученный ключ центром сертификации сервера,​ но в этой статье для простоты мы сгенерируем подписанный ключ на сервере. 
 + 
 +В этой статье мы создадим ключ и сертификат только для одного клиента. Если у вас несколько клиентов,​ вы можете повторять этот процесс сколько угодно раз. Просто каждый раз передавайте уникальное значение скрипту. 
 + 
 +Поскольку мы можем вернуться к этому шагу позже, мы повторим команду source для файла vars. Мы будем использовать параметр client1 для создания первого сертификата и ключа. 
 + 
 +Для создания файлов без пароля для облегчения автоматических соединений используйте команду build-key:​ 
 + 
 +<​file>​ 
 +cd ~/​openvpn-ca 
 +source vars 
 +./build-key client1 
 +</​file>​ 
 +Для создания файлов,​ защищённых паролем,​ используйте команду build-key-pass:​ 
 + 
 +<​file>​ 
 +cd ~/​openvpn-ca 
 +source vars 
 +./​build-key-pass client1 
 +</​file>​ 
 +В ходе процесса создания файлов все значения по умолчанию будут введены,​ вы можете нажимать ENTER. **Не задавайте challenge password** и введите y на запросы о подписи и подтверждении создания сертификата. 
 + 
 +====== Шаг 8: Настройка конфигурационного файла сервера OpenVPN ===== 
 + 
 +Далее настроим конфигурационный файл сервера OpenVPN с использованием созданных ранее файлов. 
 + 
 +Копирование файлов в директорию OpenVPN. Нам необходимо скопировать нужные нам файлы в директорию /​etc/​openvpn. 
 + 
 +Сначала скопируем созданные нами файлы. Они находятся в директории ~/​openvpn-ca/​keys,​ в которой они и были созданы. Нам необходимо скопировать сертификат и ключ центра сертификации,​ сертификат и ключ сервера,​ подпись HMAC и файл Diffie-Hellman:​ 
 + 
 +<file bash> 
 +cd ~/​openvpn-ca/​keys 
 +sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /​etc/​openvpn 
 +</​file>​ 
 +Далее нам необходимо скопировать и распаковать файл-пример конфигурации OpenVPN в конфигурационную директорию,​ мы будем использовать этот файл в качестве базы для наших настроек:​ 
 + 
 +<file bash> 
 +gunzip -c /​usr/​share/​doc/​openvpn/​examples/​sample-config-files/​server.conf.gz | sudo tee /​etc/​openvpn/​server.conf 
 +</​file>​ 
 + 
 +Изменения вносимые в скопированный конфигурационный файл /​etc/​openvpn/​server.conf. Приведенные ниже директивы,​ нужно или добавить или раскомментировать,​ а директиву cipher заменить.<​file>​ 
 +tls-auth ta.key 0 
 +key-direction 
 +cipher AES-128-CBC 
 +auth SHA256 
 +user nobody 
 +group nogroup 
 +</​file>​ 
 + 
 +**Рабочий конфигурационный файл OpenVPN сервера:​** 
 +<file bash server.conf>​ 
 +;local a.b.c.d 
 +local xxx.xxx.xxx.xxx 
 +port 1194 
 +proto udp 
 +dev tun 
 +ca ca.crt 
 +cert server.crt 
 +key server.key ​ # This file should be kept secret 
 +dh dh2048.pem 
 +server ​10.8.0.0 255.255.255.0 
 +ifconfig-pool-persist /​var/​log/​openvpn/​ipp.txt 
 +;​server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100 
 +;​server-bridge 
 +push "route 192.168.35.0 255.255.255.0"​ 
 +client-config-dir ccd 
 +route 192.168.35.0 255.255.255.0 
 +route 192.168.22.0 255.255.255.0 
 +route 10.90.91.0 255.255.255.0 
 +# маршрут передается всем клиентам 
 +push "route 192.168.35.0 255.255.255.0"​ 
 +;push "​redirect-gateway def1 bypass-dhcp"​ 
 +;push "​dhcp-option DNS 208.67.222.222"​ 
 +;push "​dhcp-option DNS 208.67.220.220"​ 
 +client-to-client 
 +;​duplicate-cn 
 +keepalive 10 120 
 +tls-auth ta.key 0 # This file is secret 
 +key-direction 0 
 +cipher AES-128-CBC 
 +auth SHA256 
 +;compress lz4-v2 
 +;push "​compress lz4-v2"​ 
 +;comp-lzo 
 +max-clients 100 
 +user nobody 
 +group nogroup 
 +persist-key 
 +persist-tun 
 +status /​var/​log/​openvpn/​openvpn-status.log 
 +log         /​var/​log/​openvpn/​openvpn.log 
 +;​log-append ​ /​var/​log/​openvpn/​openvpn.log 
 +verb 3 
 +;mute 20 
 +explicit-exit-notify 1 
 +</​file>​ 
 + 
 +====== Шаг 9: Включение и запуск сервиса OpenVPN ====== 
 +Включим сервис OpenVPN с помощью systemd. 
 + 
 +При запуске сервера OpenVPN необходимо указать имя нашего файла конфигурации в качестве переменной после имени файла systemd. Файл конфигурации для нашего сервера называется /​etc/​openvpn/​server.conf,​ поэтому мы добавим @server в конец имени файла при его вызове:​ 
 + 
 +<file bash> 
 +sudo systemctl start openvpn@server 
 +</​file>​ 
 +Убедимся,​ что сервис успешно запущен командой:​ 
 +<file bash> 
 +sudo systemctl status openvpn@server 
 +</​file>​ 
 +Если всё в порядке,​ настроем сервис на автоматическое включение при загрузке сервера:​ 
 +<file bash> 
 +sudo systemctl enable openvpn@server 
 +</​file>​ 
 +====== Шаг 10: Создание инфраструктуры для конфигурационных файлов клиентов ====== 
 +Создание структуры директорий для конфигурационных файлов клиентов. В домашней директории создайте структуру директорий для хранения файлов:​ 
 + 
 +<file bash> 
 +mkdir -p ~/​client-configs/​files 
 +</​file>​ 
 +Поскольку наши файлы конфигурации будут содержать клиентские ключи, мы должны настроить права доступа для созданных директорий:​ 
 + 
 +<file bash> 
 +chmod 700 ~/​client-configs/​files 
 +</​file>​ 
 + 
 +**Создание базовой конфигурации:​** 
 +Далее скопируем конфигурацию-пример в нашу директорию для использования в качестве нашей базовой конфигурации:​ 
 + 
 +<file bash> 
 +cp /​usr/​share/​doc/​openvpn/​examples/​sample-config-files/​client.conf ~/​client-configs/​base.conf 
 +</​file>​ 
 +Откройте этот файл в вашем текстовом редакторе:​ 
 + 
 +<file bash> 
 +nano ~/​client-configs/​base.conf 
 +</​file>​ 
 +Работающий base.conf. Я привел его одинаковым настройкам с сервером,​ изменил параметры cipher, auth, key-direction. Основное отличие клиентского файла от серверного в директиве client и задании местонахождения сервера OpenVPN, при помощи директивы remote. 
 + 
 +Если ваш клиент работает на Linux и использует файл /​etc/​openvpn/​update-resolv-conf нужно раскомментировать три нижние строчки. <​file>​ 
 +# script-security 2 
 +# up /​etc/​openvpn/​update-resolv-conf 
 +# down /​etc/​openvpn/​update-resolv-conf 
 +</​file>​ 
 + 
 +<file bash base.conf>​ 
 +client 
 +dev tun 
 +proto udp 
 +;remote xxx.xxx.xxx.xxx 1194 
 +remote vpn8.example.net 1194 
 +resolv-retry infinite 
 +nobind 
 +#user nobody 
 +#group nogroup 
 +persist-key 
 +persist-tun 
 +#ca ca.crt 
 +#cert client.crt 
 +#key client.key 
 +remote-cert-tls server 
 +tls-auth ta.key 1 
 +#cipher AES-256-CBC 
 +cipher AES-128-CBC 
 +auth SHA256 
 +#comp-lzo 
 +verb 3 
 +;mute 20 
 +key-direction 1 
 +# script-security 2 
 +# up /​etc/​openvpn/​update-resolv-conf 
 +# down /​etc/​openvpn/​update-resolv-conf 
 +</​file>​ 
 +====== ШАГ 11: Создание скрипта генерации файлов конфигурации клиента ====== 
 + 
 +Теперь создадим простой скрипт для генерации файлов конфигурации с релевантными сертификатами,​ ключами и файлами шифрования. Он будет помещать сгенерированные файла конфигурации в директорию ~/​client-configs/​files. 
 + 
 +Создайте и откройте файл make_config.sh внутри директории ~/​client-configs:​ 
 + 
 +<​file>​ 
 +nano ~/​client-configs/​make_config.sh 
 +</​file>​ 
 +Вставьте следующие текст в этот файл: 
 + 
 +<file bash make_config.sh>​ 
 +~/​client-configs/​make_config.sh 
 +#​!/​bin/​bash 
 + 
 +# First argument: Client identifier 
 + 
 +KEY_DIR=~/​openvpn-ca/​keys 
 +OUTPUT_DIR=~/​client-configs/​files 
 +BASE_CONFIG=~/​client-configs/​base.conf 
 + 
 +cat ${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 
 +</​file>​ 
 +Сохраните и закройте файл. 
 + 
 +Сделайте его исполняемым файлом командой:​ 
 + 
 +<​file>​ 
 +chmod 700 ~/​client-configs/​make_config.sh 
 +</​file>​ 
 + 
 +====== ШАГ 12: Генерация конфигурационных файлов клиентов ====== 
 + 
 +Теперь легко и понятно можно генерировать файлы конфигурации клиентов. 
 + 
 +Если вы следовали всем шагам этой статьи,​ вы создали сертификат client1.crt и ключ клиента client1.key командой ./build-key client1 на [[openvpn#​shag_7sozdanie_sertifikata_i_pary_kljuchej_dlja_klienta|шаге 7]]. Вы можете сгенерировать конфигурацию для этих файлов перейдя в директорию ~/​client-configs и используя только что созданный нами скрипт:​ 
 + 
 +<file bash> 
 +cd ~/​client-configs 
 +./​make_config.sh client1 
 +</​file>​ 
 +Если всё прошло успешно,​ мы должны получить файл client1.ovpn в директории ~/​client-configs/​files:​ 
 + 
 +<file bash> 
 +ls ~/​client-configs/​files 
 + 
 +client1.ovpn 
 +</​file>​ 
 + 
 +Теперь вы должны скопировать или переместить полученный файл конфигурации на клиентское устройство:​ на компьютер или смартфон.  
 +====== ШАГ 13: Клиенты OpenVPN для разных ОС ======
  
   * [[Клиент OpenVPN для Windows]]   * [[Клиент OpenVPN для Windows]]
Строка 174: Строка 654:
 nobind nobind
 </​file>​ </​file>​
 +====== ШАГ 14: (Опционально) Директория ccd клиенты OpenVPN ======
  
 +В директории ccd хранятся индивидуальные настройки для каждого клиента. Имя файла должно соответствовать имени сгенерированного клиентского сертификата. Файлы конфигурации клиентов являются текстовыми файлами и содержат команды,​ выполняемые сервером при подключении клиентов. Обычно файл клиента содержать команды:​
 +  - добавляет клиенту маршрут к локальной подсети центрального офиса(push "route 192.168.1.0 255.255.255.0"​)
 +  - определяет адрес локальной подсети,​ находящейся за клиентом (например iroute 192.168.2.0 255.255.255.0)
 +  - привязка к статическому IP (ifconfig-push 192.168.14.21 192.168.14.22),​ где ifconfig-push <​IP-адрес клиента>​ <​IP-адрес сервера>​. Выбранные пары IP-адресов,​ во-первых,​ должны быть уникальными,​ во-вторых,​ должны входить в состав последовательных подсетей,​ ограниченных маской /30 (255.255.255.252),​ и, в-третьих,​ должны находиться в пределах пула IP-адресов,​ выделенного для виртуальной частной сети (определяется параметром server файла конфигурации сервера OpenVPN). ​
 +<​file>​
 +# mkdir /​etc/​openvpn/​ccd
 +# nano ccd/farm1c
 +push "route 192.168.1.0 255.255.255.0"​
 +#push "route 192.168.35.0 255.255.255.0"​
 +# static IP
 +ifconfig-push 192.168.14.21 192.168.14.22
 +#iroute 192.168.2.0 255.255.255.0
 +</​file>​
 ====== FAQ OpenVPN ====== ====== FAQ OpenVPN ======
 Frequently Asked Questions OpenVPN. Часто задаваемые вопросы по настройке сервера и клиентов OpenVPN Frequently Asked Questions OpenVPN. Часто задаваемые вопросы по настройке сервера и клиентов OpenVPN
Строка 243: Строка 737:
  
 ===== Какие SSL сертификаты,​ ключи использует OpenVPN? Где ключи OpenVPN должны размещаться?​ ===== ===== Какие SSL сертификаты,​ ключи использует OpenVPN? Где ключи OpenVPN должны размещаться?​ =====
 +
 +  * ca.crt — файл открытой части сертификата CA, который используется сервером и клиентом OpenVPN, чтобы информировать друг друга о том, что они входят в единую сеть доверия и что между ними отсутствует потенциальный злоумышленник в качестве посредника. В связи с этим, копия файла ca.crt потребуется для вашего сервера и для всех ваших клиентов.
 +  * ca.key — закрытый ключ CA, используемый для подписания ключей и сертификатов серверов и клиентов. Если злоумышленник получит доступ к CA и файлу ca.key, он сможет подписывать запросы сертификатов и получать доступ к вашей VPN, что нарушит ее безопасность. Поэтому файл ca.key должен храниться только на компьютере CA, и для дополнительной безопасности компьютер CA следует выключать,​ когда он не используется для подписывания запросов сертификатов.
  
 |**Файл** |**Машина** |**Назначение** |**Доступ**| |**Файл** |**Машина** |**Назначение** |**Доступ**|
Строка 259: Строка 756:
 В этом разделе приведены как ссылки на мои руководства по настройке OpenVPN, так и на руководства других авторов,​ которым я доверяю. В этом разделе приведены как ссылки на мои руководства по настройке OpenVPN, так и на руководства других авторов,​ которым я доверяю.
  
 +  * Руководство [[openvpn#​shag_0postanovka_zadachi_struktura_setej_pod_upravleniem_openvpn|OpenVPN на Ubuntu 18.04]] актуально на 2020 год
   * Руководство [[Настройка сервера OpenVPN на OpenVZ]] - эта связка устарела,​ купите современный сервер.   * Руководство [[Настройка сервера OpenVPN на OpenVZ]] - эта связка устарела,​ купите современный сервер.
   * Руководство [[OpenVPN Debian Wheezy]] проверялось в 2018 году.   * Руководство [[OpenVPN Debian Wheezy]] проверялось в 2018 году.
Строка 277: Строка 775:
  
 <note warning>​Убедитесь,​ что вы включили [[iptables#​nat|пересылку для IP (ip-forwarding)]] (параметр ядра net.ipv4.ip_forward должен быть равен 1) и TUN/TAP на машине OpenVPN-сервера.</​note>​ <note warning>​Убедитесь,​ что вы включили [[iptables#​nat|пересылку для IP (ip-forwarding)]] (параметр ядра net.ipv4.ip_forward должен быть равен 1) и TUN/TAP на машине OpenVPN-сервера.</​note>​
 +
 +===== Как настроить VPN соединение для всего своего трафика?​ =====
 +Проталкивание изменений DNS для перенаправления всего трафика через VPN.
 +
 +Сделанные нами настройки создают VPN соединение между двумя машинами,​ но они не заставляют эти машины использовать VPN соединение. Если вы хотите использовать VPN соединение для всего своего трафика,​ вам необходимо протолкнуть (push) настройки DNS на клиентские машины.
 +
 +Для этого вам необходимо раскомментировать несколько директив. Найдите секцию redirect-gateway и удалите “;” из начала строки для расскоментирования redirect-gateway:​
 +
 +/​etc/​openvpn/​server.conf
 +<​file>​
 +push "​redirect-gateway def1 bypass-dhcp"​
 +</​file>​
 +Чуть ниже находится секция dhcp-option. Удалите “;” для обеих строк:
 +
 +/​etc/​openvpn/​server.conf
 +<​file>​
 +push "​dhcp-option DNS 208.67.222.222"​
 +push "​dhcp-option DNS 208.67.220.220"​
 +</​file>​
 +Это позволит клиентам сконфигурировать свои настройки DNS для использования VPN соединения в качестве основного.
 +
 +===== Как настроить автозапуск клиента openvpn windows 10? =====
 +Для автоматическое подключение ovpn, нужно изменить ярлык на рабочем столе:
 +<​file>​
 +openvpn-gui.exe --connect myprofile.ovpn
 +</​file>​
 +Для автоматического запуска такого файла поместите его а автозагрузку,​ в директории для всех пользователей,​ %ProgramData%\Microsoft\Windows\Start Menu\Programs\Startup;​ или для конкретного ползователя,​ %APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup.)
 +
openvpn.1585307340.txt.gz · Последние изменения: 2020/03/27 07:09 — darkfire