New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and
privacy statement. We’ll occasionally send you account related emails.
Already on GitHub?
Sign in
to your account
Closed
glafir opened this issue
Apr 8, 2016
· 7 comments
Closed
Unknown cert type ‘ca’ or ‘server’ or ‘client’
#93
glafir opened this issue
Apr 8, 2016
· 7 comments
Comments
My system
FreeBSD gw.1ok 10.2-RELEASE FreeBSD 10.2-RELEASE #0 r286666: Wed Aug 12 19:31:38 UTC 2015 root@releng1.nyi.freebsd.org:/usr/obj/usr/src/sys/GENERIC i386
My openVPN version
openvpn --version
OpenVPN 2.3.10 i386-portbld-freebsd10.1 [SSL (OpenSSL)] [LZO] [MH] [IPv6] built on Apr 3 2016
library versions: OpenSSL 1.0.1p-freebsd 9 Jul 2015, LZO 2.09
Originally developed by James Yonan
Copyright (C) 2002-2010 OpenVPN Technologies, Inc. <sales@openvpn.net>
Compile time defines: enable_crypto=yes enable_crypto_ofb_cfb=yes enable_debug=yes enable_def_auth=yes enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown enable_fast_install=needless enable_fragment=yes enable_http_proxy=yes enable_iproute2=no enable_libtool_lock=yes enable_lzo=yes enable_lzo_stub=no enable_management=yes enable_multi=yes enable_multihome=yes enable_pam_dlopen=no enable_pedantic=no enable_pf=yes enable_pkcs11=no enable_plugin_auth_pam=yes enable_plugin_down_root=yes enable_plugins=yes enable_port_share=yes enable_selinux=no enable_server=yes enable_shared=yes enable_shared_with_static_runtimes=no enable_small=no enable_socks=yes enable_ssl=yes enable_static=yes enable_strict=no enable_strict_options=no enable_systemd=no enable_win32_dll=yes enable_x509_alt_username=no with_crypto_library=openssl with_gnu_ld=yes with_mem_check=no with_plugindir='$(libdir)/openvpn/plugins' with_sysroot=no
I generate Ca-key and Ca-cert
./easyrsa.real sign-req ca CA
Note: using Easy-RSA configuration from: ./vars
Easy-RSA error:
**Unknown cert type 'ca'**
or
./easyrsa.real sign-req 'server' vpn.1-ok.com
Note: using Easy-RSA configuration from: ./vars
Easy-RSA error:
Unknown cert type 'server'
How can fix it?
I’m seeing the same on Ubuntu 14.04:
$ ./easyrsa build-server-full VPN nopass
Generating a 2048 bit RSA private key
.....................+++
..+++
writing new private key to '/home/vagrant/CA/pki/private/VPN.key.f4i5UyAahh'
-----
Easy-RSA error:
Unknown cert type 'server'
I fixed my own problem. The x509-types directory needed to be located in the same directory as the ‘easyrsa’ script. I had created a new directory and simply symlinked the easyrsa script and the openssl-1.0.cnf file. After having symlinked x509-types everything worked.
TomOtero1984 and pavelmetalarm reacted with hooray emoji
vadviktor, walkerlala, jeremyvisser, mnme, ppc52776, TomOtero1984, pavelmetalarm, and urpylka reacted with heart emoji
Yes! Thanks! I already understanded this!
Hi,
i’m facing the same issue on the following stack:
- CentOS Linux release 7.7.1908 (Core)
- OpenVPN 2.4.7 x86_64-redhat-linux-gnu
- Easy-RSA 3.0.6
Hi tried a solution that mentions this issue but i have always same error:
Note: using Easy-RSA configuration from: ./vars
Easy-RSA error:
Unknown cert type 'server'
I had this problem as well on Centos 7.7 with easyrsa-3.0.6 and found out that the issue is incorrect setting of the variable EASYRSA_EXT_DIR which is set in «vars» file. After correcting it to point to correct location of x509-types folder everything works as expected.
I use easyrsa-3.0.7 and OpenVPN-2.5.0-I601-amd64.msi and
easyrsa sign-req client rechner.domäne.de dosnt’t work.
I get the message: Unknown cert type ‘client’
The x509-types-folder is in place and a file client is there.
easyrsa-3.0.8, which is delivered with OpenVPN-2.5.0-I601-amd64.msi has other problems.
The solution with the sym-link is not suitable for Windows.
https://forum.openwrt.org/t/problem-in-openvpn-basic-instructions-and-workaround/39530
@motorollo I had the same problem on windows, copying the /x509-types
folder into the pki
folder made it work for me
Содержание
- Unknown cert type ‘ca’ or ‘server’ or ‘client’ about easy-rsa HOT 7 CLOSED
- Comments (7)
- Related Issues (20)
- Recommend Projects
- React
- Vue.js
- Typescript
- TensorFlow
- Django
- Laravel
- Recommend Topics
- javascript
- server
- Machine learning
- Visualization
- Recommend Org
- Microsoft
- OpenVPN Support Forum
- Unknown cert type ‘server’
- Unknown cert type ‘server’
- Re: Unknown cert type ‘server’
- Re: Unknown cert type ‘server’
- Re: Unknown cert type ‘server’
- Пятитысячное хауту по OpenVPN
- Сервер
- Конфиг сервера
- Центр авторизации и ключи
- Клиент
- Ключи
- Конфиг
- Отзыв сертификатов
- Минимальная настройка Iptables для доступа OpenVPN клиентов к локальной сети
- Настройка OpenVPN для выхода в интернет
- Минимальная настройка Iptables для выхода OpenVPN клиентов в интернет
- Некоторые замечания
- Список валидных и отозванных сертификатов
- Если клиент на Windows
- Похожие записи
- Комментарии к посту “ Пятитысячное хауту по OpenVPN ”
Unknown cert type ‘ca’ or ‘server’ or ‘client’ about easy-rsa HOT 7 CLOSED
I fixed my own problem. The x509-types directory needed to be located in the same directory as the ‘easyrsa’ script. I had created a new directory and simply symlinked the easyrsa script and the openssl-1.0.cnf file. After having symlinked x509-types everything worked.
noah-seltzer commented on January 15, 2023 6
@motorollo I had the same problem on windows, copying the /x509-types folder into the pki folder made it work for me
mmrvelj commented on January 15, 2023 4
I had this problem as well on Centos 7.7 with easyrsa-3.0.6 and found out that the issue is incorrect setting of the variable EASYRSA_EXT_DIR which is set in «vars» file. After correcting it to point to correct location of x509-types folder everything works as expected.
RobertLarsen commented on January 15, 2023
I’m seeing the same on Ubuntu 14.04:
glafir commented on January 15, 2023
Yes! Thanks! I already understanded this!
RdL87 commented on January 15, 2023
Hi,
i’m facing the same issue on the following stack:
- CentOS Linux release 7.7.1908 (Core)
- OpenVPN 2.4.7 x86_64-redhat-linux-gnu
- Easy-RSA 3.0.6
Hi tried a solution that mentions this issue but i have always same error:
motorollo commented on January 15, 2023
I use easyrsa-3.0.7 and OpenVPN-2.5.0-I601-amd64.msi and
easyrsa sign-req client rechner.domäne.de dosnt’t work.
I get the message: Unknown cert type ‘client’
The x509-types-folder is in place and a file client is there.
easyrsa-3.0.8, which is delivered with OpenVPN-2.5.0-I601-amd64.msi has other problems.
- Function `read_db()`does not recognise expired certificates HOT 1
- status reports do not work when CN is not equal to FILENAME
- Windows: `build-ca` requires `req -passin` option HOT 1
- Command `build-ca` does not work with OpenSSL 3.0.7 HOT 2
- `renew()`: Unexpected `shift`
- `renew()`: Input request [CSR] is a hard requirement
- show-expire might fail when LC_TIME is not en_US (or C) HOT 5
- Should old `openssl-easyrsa.cnf` be a FATAL error ? HOT 2
- Create `$EASYRSA_REQ_CN_PREFIX`
- Make old `openssl-easyrsa.cnf` a FATAL error
- Allow external `vars` and PKI `vars` to co-exist
- Consider making `init-pki` default be `soft` HOT 1
- Global option `—use-algo` does not work
- `cleanup()` processes exit codes out of order
- `build-full-*`: Always enable creating inline files
- EASYRSA_NO_PASS conflict with —passin and —passout HOT 4
- Global options`—passin/—passout` conflict with command option `nopass` HOT 1
- Documentation: `doc/EasyRSA-Passphrase-Automation.md` HOT 3
- Ten year [Tin] anniversary for MIRBSD KSH
- Point command without options to help
Recommend Projects
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
TensorFlow
An Open Source Machine Learning Framework for Everyone
Django
The Web framework for perfectionists with deadlines.
Laravel
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
Recommend Topics
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
server
A server is a program made to process requests and deliver data to clients.
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Visualization
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
Recommend Org
We are working to build community through open source technology. NB: members must have two-factor auth.
Microsoft
Open source projects and samples from Microsoft.
Источник
OpenVPN Support Forum
Community Support Forum
Unknown cert type ‘server’
Unknown cert type ‘server’
Post by borman/m » Fri Mar 29, 2019 8:35 pm
I’m having difficulty figuring out how to have easyrsa create a signed certificate
I’ve run the following commands
easyrsa.real init-pki
easyrsa.real build-ca nopass
easyrsa.real build-server-full openvpn-server nopass
But this is the error when I try to run it.
_____________________________________________________
Using SSL: openssl OpenSSL 1.0.2r-freebsd 26 Feb 2019
Unknown cert type ‘server’
______________________________________________________
openvpn 2.4.7
freebsd 11.2 Stable
The x509-types directory in to be located in the same directory as the ‘easyrsa’ script.
Any ideas of what I could be doing wrong?
Re: Unknown cert type ‘server’
Post by TinCanTech » Sat Mar 30, 2019 3:29 pm
Re: Unknown cert type ‘server’
Post by Pippin » Sat Mar 30, 2019 5:03 pm
Re: Unknown cert type ‘server’
Post by TinCanTech » Sun Mar 31, 2019 4:57 am
muchas gracias
I think people should not use Free— bla, if they don’t understand how it works
Or people could, at least, try to read the excellent docs these projects offer.
Источник
Пятитысячное хауту по OpenVPN
Данная хаутушка является выдержкой многих статей с минимальным описанием шагов и без воды. Подразумевается, что центр сертификации и OpenVPN сервер находятся на одном хосте. К тому же, надоело каждый раз гуглить по данной теме, т.к. подавляющее большинство руководств являются устаревшими, то уходит много времени на поднятие сервиса.
Сервер
Конфиг сервера
Поставить OpenVPN и создать одноименного пользователя, под которым будет работать демон:
Создать конфиг сервера openvpn со следующим содержимым:
Создать каталоги для логов и хранения IP адресов клиентов:
Центр авторизации и ключи
Перейти в домашний каталог, скачать и распаковать easyrsa 3 версии:
Перейти в каталог easyrsa3 и объявить для него переменные:
Инициализировать PKI (Public Key Infrastructure — Инфраструктура открытых ключей):
Создать корневой сертификат. Обязательно ввести сложный пароль и Common Name сервера, например my vpn server :
Создать ключи Диффи-Хелмана:
Создать запрос на сертификат для сервера OVPN. Обращаю внимание, что сертификат будет незапаролен (параметр nopass ), иначе при каждом старте OpenVPN будет запрашивать этот пароль:
Создать сам сертификат сервера OVPN:
Скопировать полученные ключи в рабочий каталог openvpn:
Создать «HMAC firewall» для защиты от DoS аттак и флуда UDP порта:
Клиент
Ключи
Создание запроса запароленного ключа для клиента (потребуется вводить при каждом подключении) с именем User:
Если авторизация будет внешней (например ADшная), то пароль не потребуется. Создание запроса без парольного ключа для клиента:
Создание ключа пользователя (по дефолту из vars сроком на 10 лет):
Или с ограничением действия сертификата в 90 дней (после истечения срока можно только перевыпустить):
Клиенту передать эти файлы:
Конфиг
Для удобства все пять клиентских файлов можно объединить в один
Отзыв сертификатов
Генерация файла отозванных ключей:
Сделать символическую ссылку в каталог с ключами (конечно, файл можно и скопировать, но придется делать каждый раз при отзыве сертификата):
В /etc/openvpn/server.conf добавить строку
Отзыв сертификата пользователя User:
Каждый раз при отзыве сертификата необходимо обновлять crl.pem , чтобы внести в него изменения:
Примечание: одноименный файл ключа не может быть создан пока не отозван старый. При попытке создать сертификат с уже имеющимся именем выдаст ошибку:
Минимальная настройка Iptables для доступа OpenVPN клиентов к локальной сети
Настройка OpenVPN для выхода в интернет
Наткнулся на тред, поржал и решил дополнить заметку. Если OpenVPN нужен для выхода в интернет — надо сделать, чтобы OpenVPN был шлюзом по умолчанию (default gateway) и подправить правила iptables.
Собственно, конфиг для сервера:
Конфиг для клиента не будет отличаться от приведенного выше.
Минимальная настройка Iptables для выхода OpenVPN клиентов в интернет
Некоторые замечания
Для исключения возможности mitm атаки, ошибка которого так выглядит в логах клиента:
Служит параметр remote-cert-tls server , который уже присутствует в конфиге клиента.
Список валидных и отозванных сертификатов
Список валидных и отозванных сертификатов можно посмотреть в файле
/easy-rsa-master/easyrsa3/pki/index.txt. Начало строки оисания каждого сертификата начинается с букв V или R , что значит Valid и Revoked, например:
Как видно, первый и пятый сертификаты валидны, 2-4 отозваны.
Если клиент на Windows
Поставить OpenVPN GUI, скачав отсюда. Скопировать клиентские ключи в C:Program FilesOpenVPNconfig . Скопировать конфиг клиента и вставить в файл client.ovpn , положить туда же. Всего в этом каталоге должно получиться пять файлов — User.crt, User.key, ca.crt, ta.key, client.ovpn .
Обязательно запустить OpenVPN GUI от имени администратора, иначе в сиситеме не поднимутся маршруты, и произвести подключение двойным кликом по иконке в трее (такая область около часов, обычно в правом нижнем углу).
Похожие записи
Комментарии к посту “ Пятитысячное хауту по OpenVPN ”
Что делать, если
./easyrsa.real sign-req server vpn.1-ok.com
Note: using Easy-RSA configuration from: ./vars
Easy-RSA error:
Unknown cert type ‘server’
Скорее всего нарушена структура каталогов. В исходнике написано:
т.е. $EASYRSA_EXT_DIR = easy-rsa-master/easyrsa3/x509-types . Предположу, что нет этого каталога или его содержимого.
Скачайте easy-rsa3 по новой и все взлетит.
Версия у вас какая? У меня на версии 3.0.6 не заработало. а на 3.0.4 всё норм. Попробуйте 3.0.3 или 3.0.4(точно рабочая)
Привет! Спасибо!
застряла на пункте конфиг клиента, т.е. на стороне клиента в папке etc/openvpn создала файл client.conf с предлагаемым содержанием ( поменяла только xxx.xxx.xxx.xxx на ip сервера), ключи и сертификаты сгенерированные сервером выложила в папку /etc/openvpn/easy-rsa/keys.
Дальше как?
Если это Linux без GUI, то /etc/init.d/openvpn restart
Если с GUI, то настроить соединение через Network Manager
Если винда, то скачать клиента и подсунуть ему файлы.
Спасибо! Клиент на raspberry (raspbian wheezy)
на команду: openvpn /etc/openvpn/client.conf выдает следующее:
Thu Apr 21 13:19:10 2016 OpenVPN 2.2.1 arm-linux-gnueabihf [SSL] [LZO2] [EPOLL] [PKCS11] [eurephia] [MH] [PF_INET6] [IPv6 payload 20110424-2 (2.2RC2)] built on Dec 1 2014
Thu Apr 21 13:19:10 2016 NOTE: OpenVPN 2.1 requires ‘—script-security 2’ or higher to call user-defined scripts or executables
Thu Apr 21 13:19:10 2016 Cannot load certificate file User.crt: error:02001002:system library:fopen:No such file or directory: error:20074002:BIO routines:FILE_CTRL:system lib: error:140AD002:SSL routines:SSL_CTX_use_certificate_file:system lib
Thu Apr 21 13:19:10 2016 Exiting
переделать все сначала? что не так?
Ясно же говорит — нет файла User.crt Cannot load certificate file User.crt . No such file or directory . Предположу, что
1. Надо запускать от рута, т.е. в случае Raspberry использовать sudo
2. Перед запуском сделать cd /path/to/keys или использовать абсолютные пути в конфиге
У меня не пинговались клиенты с сервера, после этого правила:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT —to-source x.x.x.x
Заработало только когда сделал так:
iptables -t nat -D POSTROUTING -s 10.8.0.0/24 -j SNAT —to-source x.x.x.x
iptables -t nat -A POSTROUTING -o eth0 -j SNAT —to-source x.x.x.x
Вы путаете таблицы nat и filter. Таблица nat не должна фильтровать пакеты. Своим же правилом Вы только разрешили хождение пакетов через NAT с eth0 интерфейса.
Доброго времени суток, хотелоcь бы делать редирект только на локальную сеть к базе данных openvpn при этом . остальной трафик должен идти не через openvpn, а прямо в сеть в сеть.
Со стороны клиента использую :
client
port 1179
proto udp
dev tun
cipher AES-256-CBC
ca ca.crt
cert user1.crt
key user1.key
remote **.**.**.**
#no-bind
comp-lzo
remote-cert-tls server
persist-key
persist-tun
tls-auth ta.key 1
verb 5
#route 172.30.0.0 255.255.0.0
—redirect-gateway def1
#route-no-pull
Со стороны сервера:
ca ca.crt
cert aurora.crt
key aurora.key
dh dh2048.pem
tls-auth ta.key 0
cipher AES-256-CBC
server 172.30.3.0 255.255.255.0
#for windows clients
#topology subnet
keepalive 10 120
comp-lzo
persist-key
persist-tun
#push «redirect-gateway»
client-config-dir ccd
verb 5
user nobody
group nogroup
client-to-client
status aurora-status.log
log /var/log/aurora.log
sndbuf 0
rcvbuf 0
route 172.30.3.0 255.255.255.0
push «dhcp-option DNS 8.8.8.8»
Не понял формулировку задачи, опишите пожалуйста подробнее.
1. Что хотите слелать
2. Что сделали
3. Что идет не так, как Вы ожидали
Задача была обеспечить шифрование данных с помощью openVPN. При этом необходимо что бы обычный трафик шел обычным образом, а обращения (на пример к базе данных) к ресурсу исключительно через openVPN, при этом понятно , что БД находится в одной локальной сети с прокси сервером .
В статье именно об этом и написано. Хотите конкретики — следуйте шаблону из предыдущего моего коммента.
на ubuntu 16.04.4 openvpn не стартовал
сначала в /etc/default/openvpn раскомментировать строку AUTOSTART=»all»
Если после этого при запуске
sudo systemctl start openvpn@[ИМЯ ФАЙЛА КОНФИГА].service
появляется ошибка
«daemon() failed or unsupported: Resource temporarily unavailable (errno=11)»
Делаем следующее
sudo systemctl edit openvpn@ [tab]
В редакторе вставляем строки
[Service]
LimitNPROC=infinity
Это создаст файл
/etc/systemd/system/openvpn@.service.d/override.conf
Затем запускаем
sudo systemctl daemon-reload
sudo systemctl start openvpn@[ИМЯ ФАЙЛА КОНФИГА].service
p.s.: как тут форматировать текст?
Стандартная HTML разметка. Для кода испольльзуйте теги code или pre
PS:
Я оставил этот момент на пользователя, поскольку считал его знакомым с systemd. Спасибо за дополнение!
Большое спасибо за статью!
Сделал ключи клиентов. Пинги от клиента до сервера идут.Возникло несколько вопросов.
1. Подскажите, пожалуйста, как подключить mikrotik в качестве ovpn клиента? Импортирую в mikrotik user.crt, user.key, ca.crt. В меню PPP добавляю данные OVPN Client: адрес сервера, порт, клиентский сертификат и тип шифрования (AES-256). Но маршрутизатор отказывается устанавливать соединение с сервером.
2. Как предоставить удаленным клиентам, подключенным к ovpn серверу, доступ к локальным ресурсам mikrotika?
Спасибо за отзыв )
1. Не могу ни чего сказать, смотрите логи на микротике. Как правило, достаточно бывает поиграть настройками шифрования, если все остальное не вызывает сомнений.
2. Надо сделать роутинг — на этих клиентах добавить маршрут в подсеть миркотика через OVPN сервер. Что-то типа ip route add 192.168.20.0/24 dev tun0 , где 192.168.20.0/24 — локальная подсеть за микротиком, tun0 — OVPN интерфейс на клиенте, которому нужен доступ в подсеть за микротиком.
PS. Чтобы клиенты имели возможность видеть друг друга, необходимо с конфиг сервера добавить опцию client-to-client , без нее не заработает.
2. push «route 10.10.10.0 255.255.255.0 10.0.0.2 1» — отправит маршрут клиенту (микроитку) и он сможет видеть маршруты вашей сети
route 192.168.3.0 255.255.255.0 172.16.254.3 в openvpn.conf скажет серверу openvpn что у одного из клиентов есть такие адреса, дальше через ccd, в директории создать файл с именем равным имени пользователя клиента или common name сертификата, в котором прописать iroute 192.168.3.0 255.255.255.0. На свои адреса только поменять.
admin, wf, спасибо за помощь!
Первый вопрос решил. Микротик не дружит с протоколом UDP, а так же не поддерживает сжатие и TLS-аутентификацию.
Не могу победить второй вопрос. Сеть 192.168.1.* (микротик 1.1). Сеть удаленного клиента 192.168.2.* (маршрутизатор 1.1).
В server.conf прописал следующее:
client-config-dir /etc/openvpn/ccd
ifconfig-pool-persist /etc/openvpn/ccd/ipp.txt
server 10.15.0.0 255.255.255.0
route-gateway 10.15.0.1
route 10.15.0.1 255.255.255.0
topology subnet
client-to-client
В сcd User1 прописал доступ к одному ip: push «route 192.168.1.3 255.255.255.255».
У клиента добавил следующий маршрут: route add 10.15.0.6 mask 255.255.255.255 10.15.0.6.
Ping от клиента к удаленному устройству (1.3) не проходи.
Источник
Быстрое поднятие OpenVPN сервера на Debian, Ubuntu
Данная хаутушка является выдержкой многих статей с минимальным описанием шагов и без воды. Подразумевается, что центр сертификации и OpenVPN сервер находятся на одном хосте. К тому же, надоело каждый раз гуглить по данной теме, т.к. подавляющее большинство руководств являются устаревшими, то уходит много времени на поднятие сервиса.
Сервер
Конфиг сервера
Поставить OpenVPN и создать одноименного пользователя, под которым будет работать демон:
apt install openvpn adduser --system --no-create-home --disabled-login --group openvpn
Создать конфиг сервера openvpn со следующим содержимым:
mcedit /etc/openvpn/server.conf port 1194 proto udp dev tun #user openvpn #group openvpn dh /etc/openvpn/keys/dh.pem ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/vpn-server.crt key /etc/openvpn/keys/vpn-server.key tls-auth /etc/openvpn/keys/ta.key 0 #crl-verify /etc/openvpn/keys/crl.pem script-security 2 cipher AES-256-CBC tls-server comp-lzo mute 10 persist-key persist-tun max-clients 50 keepalive 10 900 client-config-dir /etc/openvpn/ccd ifconfig-pool-persist /etc/openvpn/ccd/ipp.txt server 10.15.0.0 255.255.255.0 ### Эти параметры требуют пояснений. # Пушить (передавать клиенту) свой DNS север push "dhcp-option DNS 192.168.0.1" # Пушить название домена push "dhcp-option DOMAIN mydomain.com" # Пушить маршрут локальной подсети. Для того, чтобы у клиентов был доступ до нее push "route 192.168.0.0 255.255.254.0" ### status /var/log/openvpn/openvpn-status.log 1 status-version 3 log-append /var/log/openvpn/openvpn-server.log verb 5
Создать каталоги для логов и хранения IP адресов клиентов:
mkdir /var/log/openvpn/ mkdir /etc/openvpn/ccd
Центр авторизации и ключи
Перейти в домашний каталог, скачать и распаковать easyrsa 3 версии:
cd wget https://github.com/OpenVPN/easy-rsa/archive/master.zip unzip master.zip
Перейти в каталог easyrsa3 и объявить для него переменные:
cd ~/easy-rsa-master/easyrsa3 cp ~/easy-rsa-master/easyrsa3/vars.example ~/easy-rsa-master/easyrsa3/vars
Инициализировать PKI
(Public Key Infrastructure — Инфраструктура открытых ключей):
./easyrsa init-pki
Создать корневой сертификат. Обязательно ввести сложный пароль и Common Name
сервера, например my vpn server
:
./easyrsa build-ca
Создать ключи Диффи-Хелмана:
./easyrsa gen-dh
Создать запрос на сертификат для сервера OVPN. Обращаю внимание, что сертификат будет незапаролен (параметр nopass
), иначе при каждом старте OpenVPN будет запрашивать этот пароль:
./easyrsa gen-req vpn-server nopass
Создать сам сертификат сервера OVPN:
./easyrsa sign-req server vpn-server
Скопировать полученные ключи в рабочий каталог openvpn:
mkdir -p /etc/openvpn/keys cp ~/easy-rsa-master/easyrsa3/pki/ca.crt /etc/openvpn/keys cp ~/easy-rsa-master/easyrsa3/pki/issued/vpn-server.crt /etc/openvpn/keys cp ~/easy-rsa-master/easyrsa3/pki/private/vpn-server.key /etc/openvpn/keys cp ~/easy-rsa-master/easyrsa3/pki/dh.pem /etc/openvpn/keys
Создать «HMAC firewall» для защиты от DoS аттак и флуда UDP порта:
cd /etc/openvpn/keys/ openvpn --genkey --secret ta.key
Запустить openvpn
:
/etc/init.d/openvpn start
Клиент
Ключи
Создание запроса запароленного ключа для клиента (потребуется вводить при каждом подключении) с именем User:
cd ~/easy-rsa-master/easyrsa3 ./easyrsa gen-req User
Если авторизация будет внешней (например ADшная), то пароль не потребуется. Создание запроса без парольного ключа для клиента:
./easyrsa gen-req User nopass
Создание ключа пользователя (по дефолту из vars сроком на 10 лет):
./easyrsa sign-req client User
Или с ограничением действия сертификата в 90 дней (после истечения срока можно только перевыпустить):
./easyrsa sign-req client User -days 90
Клиенту передать эти файлы:
~/easy-rsa-master/easyrsa3/pki/issued/User.crt ~/easy-rsa-master/easyrsa3/pki/private/User.key ~/easy-rsa-master/easyrsa3/pki/ca.crt /etc/openvpn/keys/ta.key
Конфиг
client dev tun proto udp remote xxx.xxx.xxx.xxx 1194 cipher AES-256-CBC tls-client ca "ca.crt" tls-auth "ta.key" 1 cert "User.crt" key "User.key" remote-cert-tls server comp-lzo tun-mtu 1500 mssfix 1450 verb 3 nobind resolv-retry infinite
Для удобства все пять клиентских файлов можно объединить в один
Отзыв сертификатов
Генерация файла отозванных ключей:
cd ~/easy-rsa-master/easyrsa3 ./easyrsa gen-crl
Сделать символическую ссылку в каталог с ключами (конечно, файл можно и скопировать, но придется делать каждый раз при отзыве сертификата):
ln -s ~/easy-rsa-master/easyrsa3/pki/crl.pem /etc/openvpn/keys
В /etc/openvpn/server.conf
добавить строку
crl-verify /etc/openvpn/keys/crl.pem
Отзыв сертификата пользователя User:
./easyrsa revoke User
Каждый раз при отзыве сертификата необходимо обновлять crl.pem
, чтобы внести в него изменения:
./easyrsa gen-crl
Примечание: одноименный файл ключа не может быть создан пока не отозван старый. При попытке создать сертификат с уже имеющимся именем выдаст ошибку:
failed to update database Easy-RSA error: signing failed (openssl output above may have more detail)
Минимальная настройка Iptables для доступа OpenVPN клиентов к локальной сети
# Включить форвард в ядре echo "1" > /proc/sys/net/ipv4/ip_forward # Разрешить входящие соединения на порт OVPN iptables -A INPUT -p UDP --dport 1194 -j ACCEPT # Разрешить форвард между подсетью OVPN и локальной # При чем, ставить их в начале цепочки, если правил много iptables -A FORWARD -s 10.15.0.0/24 -d 192.168.0.0/24 -j ACCEPT iptables -A FORWARD -d 10.15.0.0/24 -s 192.168.0.0/24 -j ACCEPT
Настройка OpenVPN для выхода в интернет
Наткнулся на тред, поржал и решил дополнить заметку. Если OpenVPN нужен для выхода в интернет — надо сделать, чтобы OpenVPN был шлюзом по умолчанию (default gateway) и подправить правила iptables.
Собственно, конфиг для сервера:
port 1194 proto udp dev tun dh /etc/openvpn/keys/dh.pem ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/vpn-server.crt key /etc/openvpn/keys/vpn-server.key tls-auth /etc/openvpn/keys/ta.key 0 crl-verify /etc/openvpn/keys/crl.pem script-security 2 cipher AES-256-CBC tls-server comp-lzo mute 10 persist-key persist-tun max-clients 50 keepalive 10 900 client-config-dir /etc/openvpn/ccd ifconfig-pool-persist /etc/openvpn/ccd/ipp.txt server 10.15.0.0 255.255.255.0 push "redirect-gateway def1" status /var/log/openvpn/openvpn-status.log 1 status-version 3 log-append /var/log/openvpn/openvpn-server.log verb 5
Конфиг для клиента не будет отличаться от приведенного выше.
Минимальная настройка Iptables для выхода OpenVPN клиентов в интернет
Правила iptables:
# Включить форвард в ядре echo "1" > /proc/sys/net/ipv4/ip_forward # Разрешить входящие соединения на порт OVPN iptables -A INPUT -p UDP --dport 1194 -j ACCEPT # Разрешить ходить транзитным пакетам для подсети OpenVPN iptables -A FORWARD -s 10.15.0.0/24 -j ACCEPT iptables -A FORWARD -d 10.15.0.0/24 -j ACCEPT # x.x.x.x - внешний IP сервера, если он статический iptables -t nat -A POSTROUTING -s 10.15.0.0/24 -j SNAT --to-source x.x.x.x # Если внешний IP сервера динамический, то вместо предыдущего правила использовать это # iptables -t nat -A POSTROUTING -s 10.15.0.0/24 -j MASQUERADE
Некоторые замечания
Для исключения возможности mitm атаки, ошибка которого так выглядит в логах клиента:
WARNING: No server certificate verification method has been enabled. See http://openvpn.net/howto.html#mitm for more info.
Служит параметр remote-cert-tls server
, который уже присутствует в конфиге клиента.
Список валидных и отозванных сертификатов
Список валидных и отозванных сертификатов можно посмотреть в файле ~/easy-rsa-master/easyrsa3/pki/index.txt. Начало строки оисания каждого сертификата начинается с букв V
или R
, что значит Valid и Revoked, например:
V 241019110411Z 01 unknown /CN=vpn-server R 241019110842Z 141202085241Z 02 unknown /CN=User1 R 241020105823Z 141201103442Z 03 unknown /CN=test R 150301095139Z 141202085814Z 04 unknown /CN=User2 V 141203091049Z 05 unknown /CN=User3
Как видно, первый и пятый сертификаты валидны, 2-4 отозваны.
Если клиент на Windows
Поставить OpenVPN GUI, скачав отсюда. Скопировать клиентские ключи в C:Program FilesOpenVPNconfig
. Скопировать конфиг клиента и вставить в файл client.ovpn
, положить туда же. Всего в этом каталоге должно получиться пять файлов — User.crt, User.key, ca.crt, ta.key, client.ovpn
.
Обязательно запустить OpenVPN GUI от имени администратора, иначе в сиситеме не поднимутся маршруты, и произвести подключение двойным кликом по иконке в трее (такая область около часов, обычно в правом нижнем углу).
Ссылки по теме:
Описание параметров конфигурационных файлов.
Как сделать центр сертификации по феншую.
Отзыв сертификата Easy-RSA без .crt файла
Как прикрутить доменную авторизацию через AD к openvpn
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
OpenVPN — популярная технология для создания защищенных частных сетей (VPN), использующих аутентификацию и шифрование на основе протокола SSL/TLS. Для упрощения процедуры создания необходимых ключей и сертификатов традиционно используется утилита Easy-RSA, которая позволяет легко управлять локальным центром сертификации (CA) инфраструктуры открытых ключей (PKI). Сегодня мы поговорим о работе с новой версией утилиты Easy-RSA 3, которая серьезно отличается по синтаксису от используемой ранее Easy-RSA 2 и входит в состав новых дистрибутивов Debian и Ubuntu.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
На первый взгляд может показаться, что разработчики Easy-RSA серьезно все поменяли, но это не так, если вы понимаете, как устроена инфраструктура открытых ключей, то вам будет ясно, что работа утилиты изменилась только по форме, но не по сути. Она стала более целостной и простой в использовании, но в тоже время приобрела ряд новых функции, свойственных более «взрослым» продуктам. В настоящий момент Easy-RSA 3 входит в состав Debian 10, а также Ubuntu 18.10 и новее.
Установка Easy-RSA и создание центра сертификации
Для установки Easy-RSA 3 выполним:
apt install easy-rsa
После чего убедимся, что установлена именно третья версия утилиты:
dpkg -l easy-rsa
Обычно затем директорию с easy-rsa копируют в конфигурационную папку OpenVPN, но на наш взгляд CA лучше располагать отдельно, поэтому мы скопируем директорию просто в /etc, однако это ни не что не влияет, и вы можете поступить по своему разумению.
cp -r /usr/share/easy-rsa /etc
Затем изменим рабочую директорию на скопированную нами папку:
cd /etc/easy-rsa
Если вас устраивают параметры по умолчанию, то следующий шаг можно пропустить и сразу перейти к созданию инфраструктуры PKI. Однако мы советуем потратить немного времени на тонкую настройку вашего CA.
Прежде всего скопируем шаблон файла настроек:
cp vars.example vars
и откроем файл vars на редактирование. Строки вида #set_var содержат значения по умолчанию, для их именения строку нужно раскомментировать и указать собственное значение. Начнем с опции EASYRSA_DN, она предусматривает два режима: упрощенный cn_only, при котором сертификат содержит только CN (имя того, кому выдан сертификат) и традиционный org, при котором заполняются все реквизиты организации. Для OpenVPN можно использовать любой режим. Мы установим традиционный:
set_var EASYRSA_DN "org"
После чего раскомментируйте и заполните блок ниже своими данными (в примере указаны наши):
set.var EASYRSA_REQ_COUNTRY "RU"
set.var EASYRSA_REQ_PROVINCE "31"
set.var EASYRSA_REQ_CITY "BELGOROD"
set.var EASYRSA_REQ_ORG "Interface LLC"
set_var EASYRSA_REQ_EMAIL "admin@example.org"
set.var EASYRSA_REQ_OU "IT"
Заметьте, что если вы оставили cn_only, то редактировать вышеуказанные опции не имеет смысла.
Параметр EASYRSA_KEY_SIZE указывает размер ключа, на сегодняшний день безопасным считается размер начиная с 2048, если вы ставите на первое место безопасность, то можете увеличить его до 3072 или 4096. Если криптографическая стойкость не играет роли, например, туннель будет использован для доступа в интернет и предполагается использование слабых устройств, то можно уменьшить размер ключа до 1024.
Опции EASYRSA_CA_EXPIRE и EASYRSA_CERT_EXPIRE задают срок действия корневого сертификата CA и сертификатов пользователей (сервера и клиентов), их значения установлены в днях как 3650 (10 лет) и 1080 (5 лет), опция EASYRSA_CERT_RENEW задает количество дней до истечения сертификата, когда становится доступным его продление, по умолчанию это 30 дней. При необходимости вы можете изменить эти значения.
Сохраним внесенные изменения. Теперь инициализируем наш CA и выпустим корневую пару ключей. Обратите внимание, что данные действия следует выполнять единожды, повторное выполнение указанных команд уничтожит существующий CA и потребует повторного создания всех ключей и сертификатов.
./easyrsa init-pki
Данная команда инициализирует новую структуру центра сертификации с очисткой всех данных. После чего создадим файл для генерации случайных данных:
touch pki/.rnd
и активируем наш CA:
./easyrsa build-ca
При создании закрытого ключа центра сертификации вам будет предложено ввести пароль, не следует пренебрегать этой возможностью, так как закрытый ключ — основа вашей инфраструктуры открытых ключей и его компрометация приведет к компрометации всех выпущенных ключей и сертификатов. Также не забудьте указать собственное наименование центра сертификации в опции Common Name.
После выполнения этих команд будет выполнено создание структуры директорий CA, публичный сертификат центра сертификации ca.crt вы сможете найти в директории pki, а закрытый ключ ca.key в pki/private. Закрытый ключ является секретным и не при каких обстоятельствах не должен покидать свое расположение и тем более не должен передаваться по открытым каналам связи, доступ третьих лиц к закрытому ключу также следует ограничить.
Также не забудем сформировать файл параметров Диффи-Хеллмана dh.pem, он также будет расположен в директории pki:
./easyrsa gen-dh
На этом создание центра сертификации (CA) можно считать законченным.
Создание ключа и сертификата для сервера
В Easy-RSA 3 все «по-взрослому», сначала нам нужно создать запрос на сертификат:
./easyrsa gen-req ovpn-server nopass
где ovpn-server — имя вашего сервера, nopass означает, что закрытый ключ следует создать без пароля. При выполнении данной команды будет создан запрос на сертификат и сгенерирован закрытый ключ сервера ovpn-server.key, который будет располагаться в pki/private. Закрытый ключ является секретным и не должен передаваться по открытым каналам связи и доступ к нему также должен быть ограничен.
Для выпуска сертификата выполните:
./easyrsa sign-req server ovpn-server
Опция server обозначает выпуск сертификата для сервера. Для подтверждения выпуска вам нужно будет явно выразить свое согласие указав yes в ответ на соответствующий запрос, любый иные действия приведут к отмене действия. Затем потребуется ввести пароль закрытого ключа центра сертификации.
Выпущенные сертификаты будут располагаться в pki/issued.
Теперь скопируем необходимые сертификаты и ключи в конфигурационную директорию OpenVPN, предварительно создав там папку keys:
mkdir /etc/openvpn/keys
cp pki/ca.crt pki/dh.pem /etc/openvpn/keys
cp pki/private/ovpn-server.key pki/issued/ovpn-server.crt /etc/openvpn/keys
Дальнейшая настройка OpenVPN-сервера ничем не отличается от описанной нами ранее, и вы можете воспользоваться любой нашей инструкцией, смотрите блок Дополнительные материалы внизу статьи.
Создание ключа и сертификата для клиента
Точно также начнем с формирования запроса на сертификат:
./easyrsa gen-req ivanov_ivan nopass
где ivanov_ivan — имя клиента, а nopass предписывает создать закрытый ключ без пароля. Мы рекомендуем давать клиентам осмысленные имена, чтобы потом не пришлось долго гадать, кто именно скрывается под псевдонимом типа client123.
На основании запроса выпустим сертификат:
./easyrsa sign-req client ivanov_ivan
В данном случае используется опция client для указания формирования клиентского сертификата, вам также потребуется явно подтвердить действие и указать пароль от закрытого ключа CA.
Для передачи на клиент вам потребуется скопировать в доступную пользователю директорию закрытый ключ, сертификат клиента и сертификат CA. В нашем случае файлы будут скопированы в домашнюю директорию пользователя andrey.
cp pki/ca.crt pki/private/ivanov_ivan.key pki/issued/ivanov_ivan.crt /home/andrey
Затем изменим их владельца, чтобы файлы можно было скопировать, подключившись к системе с правами пользователя:
chown andrey:andrey ca.crt ivanov_ivan.key ivanov_ivan.crt
Закрытый ключ пользователя также является секретным и следует исключить его передачу по открытым каналам.
Списки отзыва и отзыв сертификатов
Если вы используете OpenVPN для организации связи между офисами или доступа в интернет, то вряд ли у вас возникнет потребность в отзыве сертификата. Другое дело, если вы предоставляете удаленный доступ к корпоративной сети с домашних ПК сотрудников, подрядчикам или аутсорсерам. Здесь может возникнуть масса ситуаций, когда доступ отдельных лиц следует прекратить: сотрудник уволился, истек срок договора с подрядчиком, сменили аутсорсера и т.д. и т.п.
Прежде всего создадим список отозванных сертификатов (CRL):
./easyrsa gen-crl
Затем создадим символьную ссылку на список в директории с ключами OpenVPN:
ln -s /etc/easy-rsa/pki/crl.pem /etc/openvpn/keys/
И внесем в конфигурационный файл сервера OpenVPN следующую строку:
crl-verify keys/crl.pem
После чего сервер OpenVPN потребуется перезапустить.
Теперь отзовем какой-либо сертификат:
./easyrsa revoke horns_and_hooves
Где horns_and_hooves — имя сертификата клиента (СN), после отзыва следует повторно опубликовать список отозванных сертификатов:
./easyrsa gen-crl
Посмотреть список сертификатов можно командой:
cat pki/index.txt
Действующие сертификаты имеют статус V в начале строки, отозванные — R.
Как видим, работа с Easy-RSA 3 не представляет каких-либо сложностей и надеемся, что данная статья будет вам полезна.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
OpenVPN – это набор open source программ, который заслуженно является одним из самых популярных и легких решений для реализации защищенной VPN сети. OpenVPN позволяет объединить в единую сеть сервер и клиентов (даже находящиеся за NAT или файерволами), или объединить сети удаленных офисов. Серверную часть OpenVPN можно развернуть практически на всех доступных операционных системах (пример настройки OpenVPN на Linux). Вы можете установить OpenVPN сервер даже на обычный компьютер с десктопной редакцией Windows 10.
В этой статье, мы покажем, как установить OpenVPN сервер на компьютер с Windows 10, настроить OpenVPN клиент на другом Windows хосте и установить защищенное VPN подключение.
Содержание:
- Установка службы OpenVPN сервера в Windows
- Создаем ключи шифрования и сертификаты для OpenVPN
- Конфигурационный файл OpenVPN сервера в Windows
- Настройка OpenVPN клиента в Windows
Установка службы OpenVPN сервера в Windows
Скачайте MSI установщик OpenVPN для вашей версии Windows с официального сайта (https://openvpn.net/community-downloads/). В нашем случае это OpenVPN-2.5.5-I602-amd64.msi (https://swupdate.openvpn.org/community/releases/OpenVPN-2.5.5-I602-amd64.msi).
Запустите установку.
Если вы планируете, OpenVPN сервер работал в автоматическом режиме, можно не устанавливать OpenVPN GUI. Обязательно установите OpenVPN Services.
Начиная с версии OpenVPN 2.5, поддерживается драйвер WinTun от разработчиков WireGuard. Считается, что этот драйвер работает быстрее чем классический OpenVPN драйвер TAP. Установите драйвер Wintun, откажитесь от установки TAP-Windows6.
Установите OpenSSL утилиту EasyRSA Certificate Management Scripts.
Запустите установку.
По умолчанию OpenVPN устаналивается в каталог C:Program FilesOpenVPN.
После окончания установки появится новый сетевой адаптер типа Wintun Userspace Tunnel. Этот адаптер отключен, если служба OpenVPN не запущена.
Создаем ключи шифрования и сертификаты для OpenVPN
OpenVPN основан на шифровании OpenSSL. Это означает, что для обмена трафиком между клиентом и серверов VPN нужно сгенерировать ключи и сертификаты с использованием RSA3.
Откройте командную строку и перейдите в каталог easy-rsa:
cd C:Program FilesOpenVPNeasy-rsa
Создайте копию файла:
copy vars.example vars
Откройте файл vars с помощью любого текстового редактора. Проверьте пути к рабочим директориям.
Обязательно поправьте переменную EASYRSA_TEMP_DIR следующим образом:
set_var EASYRSA_TEMP_DIR "$EASYRSA_PKI/temp"
Можете заполнить поля для сертификатов (опционально)
set_var EASYRSA_REQ_COUNTRY "RU" set_var EASYRSA_REQ_PROVINCE "MSK" set_var EASYRSA_REQ_CITY "MSK" set_var EASYRSA_REQ_ORG "IT-Company" set_var EASYRSA_REQ_EMAIL " [email protected] " set_var EASYRSA_REQ_OU " IT department "
Срок действия сертификатов задается с помощью:
#set_var EASYRSA_CA_EXPIRE 3650 #set_var EASYRSA_CERT_EXPIRE 825
Сохраните файл и выполните команду:
EasyRSA-Start.bat
Следующие команды выполняются в среде EasyRSA Shell:
Инициализация PKI:
./easyrsa init-pki
Должна появится надпись:
init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: C:/Program Files/OpenVPN/easy-rsa/pki
Теперь нужно сгенерировать корневой CA:
./easyrsa build-ca
Задайте дважды пароль для CA:
CA creation complete and you may now import and sign cert requests.
Данная команда сформировала:
- Корневой сертификат центра сертификации: «C:Program FilesOpenVPNeasy-rsapkica.crt»
- Ключ центра сертификации «C:Program FilesOpenVPNeasy-rsapkiprivateca.key»
Теперь нужно сгенерировать запрос сертификата и ключ для вашего сервера OpenVPN:
./easyrsa gen-req server nopass
Утилита сгенерирует два файла:
req: C:/Program Files/OpenVPN/easy-rsa/pki/reqs/server.req key: C:/Program Files/OpenVPN/easy-rsa/pki/private/server.key
Подпишем запрос на выпуск сертификата сервера с помощью нашего CA:
./easyrsa sign-req server server
Подтвердите правильность данных, набрав yes.
Затем введите пароль CA от корневого CA.
В каталоге issued появится сертификат сервера («C:Program FilesOpenVPNeasy-rsapkiissuedserver.crt»)
Теперь можно создать ключи Диффи-Хеллмана (займет длительное время):
./easyrsa gen-dh
Для дополнительной защиты VPN сервера желательно включить tls-auth. Данная технология позволяет использовать подписи HMAC к handshake-пакетам SSL/TLS, инициируя дополнительную проверку целостности. Пакеты без такой подписи будут отбрасываться VPN сервером. Это защитит вас от сканирования порта VPN сервера, DoS атак, переполнения буфера SSL/TLS.
Сгенерируйте ключ tls-auth:
cd C:Program FilesOpenVPNbin
openvpn --genkey secret ta.key
Должен появиться файл «C:Program FilesOpenVPNbinta.key». Переместите его в каталог C:Program FilesOpenVPNeasy-rsapki
Теперь можно сформировать ключи для клиентов OpenVPN. Для каждого клиента, который будет подключаться к вашему серверу нужно создать собственные ключи.
Есть несколько способов генерации ключей и передачи их клиентам. В следующем примере, мы создадим на сервере ключ клиента и защитим его паролем:
./easyrsa gen-req kbuldogov
./easyrsa sign-req client kbuldogov
Данный ключ («C:Program FilesOpenVPNeasy-rsapkiprivatekbuldogov.key») нужно передать клиенту и сообщить пароль. Клиент может снять защиту паролем для ключа:
openssl rsa -in "C:Program FilesOpenVPNeasy-rsapkiprivatekbuldogov.key"-out "C:Program FilesOpenVPNeasy-rsapkiprivatekbuldogov_use.key"
Если вы хотите сгенерировать ключ, не защищенный паролем, нужно выполнить команду:
./easyrsa gen-req имяклиента nopass
На сервере с OpenVPN вы можете создать неограниченное количество ключей и сертификатов для пользователей. Аналогичным образом сформируйте ключи и сертфикаты для других клиентов.
Вы можете отохвать скомпрометированные сертификаты клиентов:
cd C:Program FilesOpenVPNeasy-rsa
EasyRSA-Start.bat
./easyrsa revoke kbuldogov
Итак, мы сгенерировали набор ключей и сертификатов для OpenVPN сервера. Теперь можно настроить и запустить службу OpenVPN.
Конфигурационный файл OpenVPN сервера в Windows
Скопируйте типовой конфигурационный файл OpenVPN сервера:
copy "C:Program FilesOpenVPNsample-configserver.ovpn" "C:Program FilesOpenVPNconfig-autoserver.ovpn"
Откройте файл server.ovpn в любом текстовом редакторе и внесите свои настройки. Я использую следующий конфиг для OpenVPN:
# Указываем порт, протокол и устройство port 1194 proto udp dev tun # Указываем пути к сертификатам сервера ca "C:\Program Files\OpenVPN\easy-rsa\pki\ca.crt" cert "C:\Program Files\OpenVPN\easy-rsa\pki\issued\server.crt" key "C:\Program Files\OpenVPN\easy-rsa\pki\private\server.key" dh "C:\Program Files\OpenVPN\easy-rsa\pki\dh.pem" # Указываем настройки IP сети, адреса из которой будет будут получать VPN клиенты server 10.24.1.0 255.255.255.0 #если нужно разрешить клиентам подключаться под одним ключом, нужвно включить опцию duplicate-cn (не рекомендуется) #duplicate-cn # TLS защита tls-auth "C:\Program Files\OpenVPN\easy-rsa\pki\ta.key" 0 cipher AES-256-GCM # Другая параметры keepalive 20 60 persist-key persist-tun status "C:\Program Files\OpenVPN\log\status.log" log "C:\Program Files\OpenVPN\log\openvpn.log" verb 3 mute 20 windows-driver wintun
Сохраните файл.
OpenVPN позволяет использовать как TCP, так и UDP для подключения. В этом примере я запустил OpenVPN на 1194 UDP. Рекомендуется использовать протокол UDP, это оптимально как с точки зрения производительности, так и безопасности.
Не забудьте открыть на файерволе порты для указанного вами порта OpenVPN на клиенте и на сервере. Можно открыть порты в Windows Defender с помощью PowerShell.
Правило для сервера:
New-NetFirewallRule -DisplayName "AllowOpenVPN-In" -Direction Inbound -Protocol UDP –LocalPort 1194 -Action Allow
Правило для клиента:
New-NetFirewallRule -DisplayName "AllowOpenVPN-Out" -Direction Outbound -Protocol UDP –LocalPort 1194 -Action Allow
Теперь нужно запустить службу OpenVPN и изменить тип ее запуска на автоматический. Воспользуйтесь таким командами PowerShell, чтобы включить службу:
Set-Service OpenVPNService –startuptype automatic –passthru
Get-Service OpenVPNService| Start-Service
Откройте панель управления, и убедитесь, что виртуальный сетевой адаптер OpenVPN Wintun теперь активен. Если нет, смотрите лог «C:Program FilesOpenVPNlogserver.log»
Если при запуске OpenVPN вы видите в логе ошибку:
Options error: In C:Program FilesOpenVPNconfig-autoserver.ovpn:1: Maximum option line length (256) exceeded, line starts with..
Смените в файле server.ovpn символы переноса строки на Windows CRLF (в notepad++ нужно выбрать Edit -> EOL Conversion -> Windows CR LF). Сохраните файл, перезапустите службу OpevVPNService.
Данный конфиг позволит удаленным клиентам получить доступ только к серверу, но другие компьютеры и сервисы в локальной сети сервера для них недоступны. Чтобы разрешить клиентам OpenVPN получить доступ к внутренней сети нужно:
Включить опцию IPEnableRouter в реестре (включает IP маршрутизацию в Windows, в том числе включает маршрутизацию меду сетями Hyper-V): reg add «HKLMSYSTEMCurrentControlSetServicesTcpipParameters» /v IPEnableRouter /t REG_DWORD /d 1 /f
Добавьте в конфгурационный файл сервера OpenVPN маршруты до внутренней IP сети:
push "route 10.24.1.0 255.255.255.0" push "route 192.168.100.0 255.255.255.0"
Если нужно, назначьте клиенту адреса DNS серверов:
push "dhcp-option DNS 192.168.100.11" push "dhcp-option DNS 192.168.100.12"
Если нужно завернуть все запросы клиента (в том числе Интернет трафик) на ваш OpenVPN сервер, добавьте опцию:
push "redirect-gateway def1"
Настройка OpenVPN клиента в Windows
Создайте на сервере шаблонный конфигурационный файла для клиента VPN (на базе iшаблона client.ovpn) со следующими параметрами (имя файла kbuldovov.ovpn)
client dev tun proto udp remote your_vpn_server_address 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert kbuldogov.crt key kbuldogov.key remote-cert-tls server tls-auth ta.key 1 cipher AES-256-GCM connect-retry-max 25 verb 3
В директиве remote указывается публичный IP адрес или DNS имя вашего сервера OpenVPN.
Скачайте и установите клиент OpenVPN Connect для Windows (https://openvpn.net/downloads/openvpn-connect-v3-windows.msi).
Теперь на компьютер с клиентом OpenVPN нужно с сервера скопировать файлы:
- ca.crt
- kbuldogov.crt
- kbuldogov.key
- dh.pem
- ta.key
- kbuldogov.ovpn
Теперь импортируйте файл с профилем *.ovpn и попробуйте подключиться к вашему VPN серверу.
Если все настроено правильно, появится такая картинка.
Проверьте теперь лог OpenVPN на клиенте «C:Program FilesOpenVPN Connectagent.log»
Mon Dec 27 08:09:30 2021 proxy_auto_config_url Mon Dec 27 08:09:31 2021 TUN SETUP TAP ADAPTERS: guid='{25EE4A55-BE90-45A0-88A1-8FA8FEF24C42}' index=22 name='Local Area Connection' Open TAP device "Local Area Connection" PATH="\.Global{25EE4A55-BE90-45A0-88A1-8FA8FEF24C42}.tap" SUCCEEDED TAP-Windows Driver Version 9.24 ActionDeleteAllRoutesOnInterface iface_index=22 netsh interface ip set interface 22 metric=1 Ok. netsh interface ip set address 22 static 10.24.1.6 255.255.255.252 gateway=10.24.1.5 store=active IPHelper: add route 10.24.1.1/32 22 10.24.1.5 metric=-1
Клиент успешно подключится к OpenVPN серверу и получил IP адрес 10.24.1.6.
Проверьте теперь лог на сервере («C:Program FilesOpenVPNlogopenvpn.log»). Здесь также видно, что клиент с сертификатом kbuldogov успешно подключится к вашему серверу.
2021-12-27 08:09:35 192.168.13.202:55648 [kbuldogov] Peer Connection Initiated with [AF_INET6]::ffff:192.168.13.202:55648 2021-12-27 08:09:35 kbuldogov/192.168.13.202:55648 MULTI_sva: pool returned IPv4=10.24.1.6, IPv6=(Not enabled) 2021-12-27 08:09:35 kbuldogov/192.168.13.202:55648 MULTI: Learn: 10.24.1.6 -> kbuldogov/192.168.13.202:55648 2021-12-27 08:09:35 kbuldogov/192.168.13.202:55648 MULTI: primary virtual IP for kbuldogov/192.168.13.202:55648: 10.24.1.6