OpenVPN-Server на Centos 7
Устанавливаем репозиторий EPEL (если нет)
# yum install epel-release
Устанавливаем NET-Tools (если нет)
# yum install net-tools
Установка OpenVPN-Server и Easy-RSA
# yum install openvpn easy-rsa
Создаем директорию для генерации сертификатов и копируем туда Easy-RSA
# mkdir /etc/openvpn/easy-rsa
# cp -rf /usr/share/easy-rsa/3/* /etc/openvpn/easy-rsa
Переходим в директорию и создаем файл vars
# cd /etc/openvpn/easy-rsa
# vi vars
Записываем в файл vars
set_var EASYRSA "$PWD"
set_var EASYRSA_PKI "$EASYRSA/pki"
set_var EASYRSA_DN "cn_only"
set_var EASYRSA_REQ_COUNTRY "RU"
set_var EASYRSA_REQ_PROVINCE "Moscow"
set_var EASYRSA_REQ_CITY "Moscow"
set_var EASYRSA_REQ_ORG "My Organisation"
set_var EASYRSA_REQ_EMAIL "admin@itdraft.ru"
set_var EASYRSA_REQ_OU "IT department"
set_var EASYRSA_KEY_SIZE 4096
set_var EASYRSA_ALGO rsa
set_var EASYRSA_CA_EXPIRE 7500
set_var EASYRSA_CERT_EXPIRE 3650
set_var EASYRSA_NS_SUPPORT "no"
set_var EASYRSA_NS_COMMENT "CERTIFICATE AUTHORITY"
set_var EASYRSA_EXT_DIR "$EASYRSA/x509-types"
set_var EASYRSA_SSL_CONF "$EASYRSA/openssl-1.0.cnf"
set_var EASYRSA_DIGEST "sha512"
Делаем файл исполняемым
# chmod +x vars
Создание ключа и сертификата для OpenVPN Сервера
Инициализация каталог PKI
# ./easyrsa init-pki
Note: using Easy-RSA configuration from: ./vars
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /etc/openvpn/easy-rsa/pki
Создать ключ CA
# ./easyrsa build-ca
будет запрошен пароль, его будет запрашивать в дальнейшем при создании сертификатов
Создадим ключ сервера (название сервера srv-openvpn)
# ./easyrsa gen-req srv-openvpn nopass
опция nopass — отключение пароля для srv-openvpn
Подпишем ключ srv-openvpn используя наш CA-сертификат
# ./easyrsa sign-req server srv-openvpn
на вопрос: Confirm request details: — ответить: yes
в процессе у нас спросят пароль, который мы задавали CA
Проверим файлы сертификата, что бы убедится, что сертификаты сгенерировались без ошибок
# openssl verify -CAfile pki/ca.crt pki/issued/srv-openvpn.crt
pki/issued/srv-openvpn.crt: OK
Создание ключа клиента
# cd /etc/openvpn/easy-rsa
Сгенерируем ключ клиента client-01
# ./easyrsa gen-req client-01 nopass
Подпишем ключ client-01, используя наш CA сертификат
# ./easyrsa sign-req client client-01
на вопрос: Confirm request details: — ответить: yes
в процессе у нас спросят пароль, который мы задавали CA
Проверим файлы сертификата
# openssl verify -CAfile pki/ca.crt pki/issued/client-01.crt
pki/issued/client-01.crt: OK
Дополнительная настройка OpenVPN сервера
Сгенерируем ключ Диффи-Хеллмана
# ./easyrsa gen-dh
Сгенерируем CRL ключ необходимый для отзыва клиентских сертификатов
# ./easyrsa gen-crl
Для того, что бы отозвать сертификат надо выполнить команду (НА БУДУЩЕЕ)
# ./easyrsa revoke client-02
после каждого отозванного сертификата необходимо обновлять CRL ключ
Копируем сертификаты сервера
# cp pki/ca.crt /etc/openvpn/server/
# cp pki/issued/srv-openvpn.crt /etc/openvpn/server/
# cp pki/private/srv-openvpn.key /etc/openvpn/server/
# cp pki/dh.pem /etc/openvpn/server/
# cp pki/crl.pem /etc/openvpn/server/
Копируем сертификаты клиента
# cp pki/ca.crt /etc/openvpn/client/
# cp pki/issued/client-01.crt /etc/openvpn/client/
# cp pki/private/client-01.key /etc/openvpn/client/
Настройка OpenVPN сервера
Создадим файл конфигурации server.conf
# cd /etc/openvpn
# vi server.conf
Записываем в файл server.conf
# OpenVPN Port, Protocol and the Tun
port 1194
#proto udp
proto tcp
dev tun
# OpenVPN Server Certificate - CA, server key and certificate
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/srv-openvpn.crt
key /etc/openvpn/server/srv-openvpn.key
# DH and CRL key
dh /etc/openvpn/server/dh.pem
crl-verify /etc/openvpn/server/crl.pem
# Network Configuration - Internal network
# Redirect all Connection through OpenVPN Server
server 10.0.10.0 255.255.255.0
push "redirect-gateway def1"
#push "route 82.146.59.16 255.255.255.255"
# Using the DNS from https://dns.watch
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
# Enable multiple client to connect with same Certificate key
duplicate-cn
# TLS Security
cipher AES-256-CBC
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
auth SHA512
auth-nocache
# Other Configuration
keepalive 20 60
persist-key
persist-tun
comp-lzo yes
daemon
user nobody
group nobody
# OpenVPN Log
log-append openvpn.log
verb 3
Настройка Firewalld
Отредактировать файл /etc/sysctl.conf:
Добавить:
net.ipv4.ip_forward = 1
Выполняем команду
# sysctl -p
Настройка
# firewall-cmd --permanent --add-masquerade
# firewall-cmd --zone=public --add-port=1194/tcp --permanent
# firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -p gre -j ACCEPT
# firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -i 10.0.10.0/24 -o eth0 -j MASQUERADE
# firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i 10.0.10.0/24 -o eth0 -j ACCEPT
# firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i eth0 -o 10.0.10.0/24 -m state --state RELATED,ESTABLISHED -j ACCEPT
# firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -p tcp --tcp-flags SYN,RST SYN -s 10.0.10.0/24 -j TCPMSS --clamp-mss-to-pmtu
# firewall-cmd --reload
Запустим OpenVPN и добавим его в автозагрузку
# systemctl start openvpn@server
# systemctl enable openvpn@server
Проверим
# systemctl status openvpn@server
Настройка OpenVPN клиента
Создадим файл конфигурации client-01.ovpn
# cd /etc/openvpn/client
# vi client-01.ovpn
Записываем в файл client-01.ovpn
client
dev tun
proto tcp
remote xx.xx.xx.xx 1194
ca ca.crt
cert client-01.crt
key client-01.key
cipher AES-256-CBC
auth SHA512
auth-nocache
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
resolv-retry infinite
compress lzo
nobind
persist-key
persist-tun
mute-replay-warnings
verb 3
в строке ‘remote xx.xx.xx.xx 1194‘ надо прописать IP-адрес вместо ‘xx.xx.xx.xx‘
Чтобы через соединение работала только определенная подсеть, к примеру локалка, а интернет текущий:
route-nopull
route 10.0.10.0 255.255.255.0
route 192.168.0.0 255.255.255.0
Теперь для надо заархивировать сертификаты (ca.crt, client-01.crt), ключ клиента (client-01.key), файл конфигурации (client-01.ovpn), и передать их на ПК, который будет подключаться к OpenVPN серверу
Для подключения с iPhone, iPad, Mac: Passepartout, OpenVPN Client
Для подключения с андройда лучше использовать: OpenVPN for Android
https://openvpn.net/community-downloads/
Скачать APK OpenVPN for Android v-0.7.15
Скачать OpenVPN for Windows 7, 8
Скачать OpenVPN for Windows 10
Ярлык для автозапуска с подключением:
"C:\Program Files\OpenVPN\bin\openvpn-gui.exe" --connect client-01.ovpn --silent_connection 1
Расположение ярлыка для автозапуска:
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
Ошибка при подключении на Windows
В моем случае ошибка появилась на Windows 7:
OpenVPN Error: All TAP-Windows adapters on this system are currently in use
Решение:
Перейти в папку: C:\Program Files\TAP-Windows
От администратора запустить Uninstall.exe
Пройти все жтапы для удаления драйвера
Скачать TAP-драйвер: tap-windows-9.21.2.exe
Запустить tap-windows-9.21.2.exe от администратора и установить драйвер
В моем случае ошибка не появлялась после данных манипуляций
Клиент на Linux:
поместить файлы ca.crt, client-01.crt, client-01.key, client-01.ovpn в /etc/openvpn и выполнить:
# openvpn --config /etc/openvpn/client-01.ovpn
Ошибка при подключении клиента:
...
Mon Jul 06 18:59:29 2020 open_tun
Mon Jul 06 18:59:29 2020 TAP-WIN32 device [Подключение по локальной сети] opened: \\.\Global\{84AD4B1B-C918-4BC8-A992-8ED12C53F793}.tap
Mon Jul 06 18:59:29 2020 TAP-Windows Driver Version 9.24
Mon Jul 06 18:59:29 2020 Notified TAP-Windows driver to set a DHCP IP/netmask of 10.0.10.6/255.255.255.252 on interface {84AD4B1B-C918-4BC8-A992-8ED12C53F793} [DHCP-serv: 10.0.10.5, lease-time: 31536000]
Mon Jul 06 18:59:29 2020 Successful ARP Flush on interface [30] {84AD4B1B-C918-4BC8-A992-8ED12C53F793}
Mon Jul 06 18:59:29 2020 MANAGEMENT: >STATE:1594051169,ASSIGN_IP,,10.0.10.6,,,,
Mon Jul 06 18:59:34 2020 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
Mon Jul 06 18:59:34 2020 Route: Waiting for TUN/TAP interface to come up...
Mon Jul 06 18:59:39 2020 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
Mon Jul 06 18:59:39 2020 Route: Waiting for TUN/TAP interface to come up...
Mon Jul 06 18:59:40 2020 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
Mon Jul 06 18:59:40 2020 Route: Waiting for TUN/TAP interface to come up...
Mon Jul 06 18:59:42 2020 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
Mon Jul 06 18:59:42 2020 Route: Waiting for TUN/TAP interface to come up...
Mon Jul 06 18:59:43 2020 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
Mon Jul 06 18:59:43 2020 Route: Waiting for TUN/TAP interface to come up...
Mon Jul 06 18:59:44 2020 TEST ROUTES: 0/0 succeeded len=-1 ret=0 a=0 u/d=down
Mon Jul 06 18:59:44 2020 Route: Waiting for TUN/TAP interface to come up...
...
Решение:
Нажимаем WIN+X выбираем Панель управления, в открывшемся окне кликаем Программы и затем Включение и отключение компонентов Windows.
Ищем там Пакет администрирования диспетчера RAS-подключений (CMAK) и убеждаемся, что напротив него стоит галочка. Если не стоит ее нужно поставить.
Если пакет не установлен то он установится после того как вы поставите галочку.
Если пакет установлен закрываем все нажатием ОК.
Нажимаем WIN+R вводим services.msc и жмем Выполнить.
Откроется окно Службы.
Ищем службу Сетевые подключения, делаем двойной клик мышью на ней.
Вам откроется Свойства: Сетевые подключения выставляем Тип запуска: Автоматически. Если служба не запущена(Состояние: Выключена) то запускаем ее нажатием на кнопку Запустить. Если служба уже запущена можно по желанию перезапустить ее (Остановить|Запустить).
Закрываем это окно нажатием ОК.
Поместить сертификаты в файл конфигурации
client
dev tun
proto tcp
remote xx.xx.xx.xx 1194
cipher AES-256-CBC
auth SHA512
auth-nocache
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
resolv-retry infinite
compress lzo
nobind
persist-key
persist-tun
mute-replay-warnings
verb 3
<ca>
-----BEGIN CERTIFICATE-----
XXX CA XXX
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
XXX CLIENT XXX
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
XXX CLIENT PRIVATE XXX
-----END PRIVATE KEY-----
</key>
Если нужно соединение использовать только для одной подсети
К примеру 192.168.0. *:
route-nopull
route 10.0.10.0 255.255.255.0
route 192.168.0.0 255.255.255.0
Только для одного IP (192.168.0.1):
route-nopull
route 10.0.10.0 255.255.255.0
route 192.168.0.1 255.255.255.255
Пример конфигурации с подсетью 192.168.0.*:
client
dev tun
proto tcp
remote 88.88.88.88 1194
route-nopull
route 10.0.10.0 255.255.255.0
route 192.168.0.0 255.255.255.0
cipher AES-256-CBC
auth SHA512
auth-nocache
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256
resolv-retry infinite
compress lzo
nobind
persist-key
persist-tun
mute-replay-warnings
verb 3
<ca>
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
-----END PRIVATE KEY-----
</key>
Спасибо.
Спасибо, ваш сайт очень полезный!