Відмінності між версіями «OpenVPN»

Матеріал з Wiki Welard
Перейти до навігації Перейти до пошуку
 
(Не показані 19 проміжних версій 3 користувачів)
Рядок 1: Рядок 1:
−
[http://openmaniak.com/ru/openvpn_tutorial.php Установка OPENVPN]  
+
* [http://openmaniak.com/ru/openvpn_tutorial.php Установка OPENVPN]
 +
* [https://www.golinuxcloud.com/renew-ssl-tls-server-certificate-openssl/ Renew SSL/TLS certificate OpenSSL [Step-by-Step]]
 +
* [https://www.dmosk.ru/miniinstruktions.php?mini=openvpn-easyrsa3 Генерирование сертификатов для OpenVPN с помощью Easy-RSA 3]
  
−
<br>
+
== Налаштування OpenVPN  ==
−
 
 
−
== Настройка OpenVPN  ==
 
  
 
  yum install openvpn
 
  yum install openvpn
 
  cd /etc/openvpn/
 
  cd /etc/openvpn/
−
mkdir certs
+
очищуєемо або ініціалізуємо каталог з ключами /etc/openvpn/easy-rsa/pki
−
cd certs
+
./easyrsa init-pki 
−
cp /usr/share/doc/openvpn/easy-rsa/2.0/* /etc/openvpn/certs/
 
  
−
Дописуємо свох дані в кіці файлу vars  
+
створюємо /etc/openvpn/easy-rsa/vars
−
 
+
<pre>
−
. ../vars
+
export KEY_COUNTRY="UA"
−
./clean-all
+
export KEY_PROVINCE="VO"
−
 
+
export KEY_CITY="Luts'k"
−
Будуємо сертифікат
+
export KEY_ORG="Sweet Company"
−
 
+
export KEY_EMAIL="[email protected]"
−
./build-ca
+
export EASYRSA_CERT_EXPIRE=3650 # 10 років, можна поставити й більше
 +
</pre>
  
−
Будуємо ключ для сервера
+
source vars # щоб не вводити вручну дані, що вище
  
−
  ./build-key-server server_name
+
  ./easyrsa build-ca # створюємо ca.key та ca.crt
 +
./easyrsa build-ca # Будуємо сертифікат
 +
./easyrsa gen-dh # Формуємо ключ Діффі-Хеллмана
 +
'''Будуємо ключ для сервера'''
 +
./easyrsa gen-req <server-name> nopass  # створюємо запит на сертифікат
 +
./easyrsa sign-req server <server-name> # генеруємо сертифікат
 +
* після введення команди підтверджуємо правильність даних, ввівши '''yes''' і вводимо пароль, який вказували при створенні кореневого сертифіката.
 +
* '''nopass''' можна упустити, якщо хочемо підвищити безпеку за допомогою пароля на сертифікат.
 +
openvpn --genkey --secret pki/ta.key # створюємо ta.key
  
 
Будуємо ключ для клієнтів (на кожного клієнта по одному)  
 
Будуємо ключ для клієнтів (на кожного клієнта по одному)  
−
 
+
  ./easyrsa gen-req <client> nopass
−
  ./build-key client1
+
якщо ключ був згенерований з паролем то з допомогою  openssl  можна зняти парольну фразу
−
 
+
  openssl rsa -in [original.key] -out [new.key]
−
  ./build-dh
+
'''Налаштування сервера''' /etc/openvpn/server.conf  
−
 
+
<pre>
−
Налаштування /etc/openvpn/server.conf  
+
local  <ip.ip.ip.ip>
−
<pre>port 1194
+
port <port> # 1194
−
proto udp
+
user openvpn
 +
group openvpn
 +
proto udp # mikrotik не уміє udp тому для нього і клієнт і сервер в tcp
 
dev tun
 
dev tun
−
ca /etc/openvpn/certs/keys/ca.crt
+
tls-auth /etc/openvpn/easy-rsa/pki/ta.key 0 # тут 0 - це key-direction, у клієнта і сервера key-direction мають відрізнятися
−
cert /etc/openvpn/certs/keys/CentOS.crt
+
opt-verify
−
key /etc/openvpn/certs/keys/CentOS.key  # This file should be kept secret
+
cipher AES-256-GCM # це останній ціфер до якого буде підніматися на сервері і клієнті бажано виставити однакові підтримується з 2.5
−
 
 
−
dh /etc/openvpn/certs/keys/dh1024.pem
 
−
 
 
−
server 172.16.51.0 255.255.255.0
 
−
 
 
−
ifconfig-pool-persist ipp.txt
 
−
;push "route 192.168.10.0 255.255.255.0"
 
−
;push "route 192.168.20.0 255.255.255.0"
 
−
 
 
 
keepalive 10 120
 
keepalive 10 120
−
 
+
tun-mtu 1500
−
comp-lzo
+
fragment 1300
−
;max-clients 100
+
mssfix
−
 
 
−
;user nobody
 
−
;group nobody
 
−
 
 
 
persist-key
 
persist-key
 
persist-tun
 
persist-tun
−
 
+
#push "redirect-gateway def1"  # якщо треба завернути увесь трафік в тунель
−
status openvpn-status.log
+
topology net30
−
 
+
route 192.168.10.0 255.255.255.0
−
;log        openvpn.log
+
ifconfig-pool-persist ipp.txt
−
;log-append  openvpn.log
+
log /var/log/openvpn.log
−
 
+
status /var/log/openvpn-status.log
−
verb 3
+
verb 4
−
 
+
server 192.168.0.0 255.255.255.0 # ip клієнтів будть 192.168.0.1- 192.168.0.254
 +
push "route 192.168.10.0 255.255.255.0"
 +
push "dhcp-option DNS 192.168.10.1"
 +
push "dhcp-option DNS 8.8.8.8"
 +
push "dhcp-option DOMAIN example.com"
 +
push "block-outside-dns" блокує на клієнті dns, використовується лише той, що відправили попередніми стрічками.
 
</pre>
 
</pre>
  
−
Налаштування клієнта
+
'''Налаштування клієнта''' config/client.ovpn
 
<pre>
 
<pre>
 
client
 
client
 
dev tun
 
dev tun
 
proto udp
 
proto udp
−
#proto tcp-client
+
remote <ip.ip.ip.ip> <port> # 1194
−
#Change my.publicdomain.com to your public domain or IP address
 
−
remote 192.168.0.200 1194
 
−
resolv-retry infinite
 
 
nobind
 
nobind
−
persist-key
+
cipher AES-256-GCM # це останній ціфер до якого буде підніматися на сервері і клієнті бажано виставити однакові підтримується з 2.5
−
persist-tun
+
tun-mtu 1500
−
 
+
fragment 1300
−
ca ca2.crt
+
mssfix
−
cert user.crt
+
auth-nocache
−
key user.key
+
ca ca.crt # або вставка текстом <ca></ca>
−
ns-cert-type server
+
cert user.crt # або вставка текстом <cert></cert>
−
 
+
key user.key # або вставка текстом <key></key>
−
#DNS Options here, CHANGE THESE !!
+
tls-auth ta.key 1 # або вставка текстом <tls-auth></tls-auth> key-direction 1  у клієнта і сервера key-direction мають відрізнятися
−
#push "dhcp-option DNS 123.123.123.123"
+
remote-cert-tls server
−
#push "dhcp-option DNS 123.123.123.124"
+
route-method ipapi
−
comp-lzo
+
route-delay 2
−
tun-mtu      1500
+
verb 4
−
mssfix        1450
+
mute 20
−
verb 3
+
#log /var/log/openvpn.log
 +
#status /var/log/openvpn-status.log
 
</pre>
 
</pre>
  
Рядок 97: Рядок 97:
 
  cp keys/crl.pem /etc/openvpn/
 
  cp keys/crl.pem /etc/openvpn/
  
−
== Проблема openvpn в операционной системе Vista ==
+
якщо треба зв'язати наприклад філіали, то у конфіг серверу треба добавити стрічки
 +
client-config-dir /etc/openvpn/ccd
 +
client-to-client  #для того щоб клієнти бачили один одного
  
−
1. Для того чтобы клиент openvpn заработал в windows vista необходимо добавить в конфиг файл клиентской части следующие строки:
+
і у каталозі /etc/openvpn/ccd створити файл з іменем клієнта і контентом
−
  route-method exe
+
  iroute 192.168.121.0 255.255.255.0 # роут в мережу клієнта, тобто тут мається на увазі що мережа клієнта 192.168.121.0/24
−
route-delay 2
 
  
−
2. Затем нужно создать bat файл следующего содержания:
+
'''Корисний скрипт для створення конфігів клієнтів'''
−
  "C:\Program Files\OpenVPN\bin\openvpn.exe" "полный_путь_до_конфига"
+
<pre>
−
Для запуска VPN правой кнопкой мыши жмем на полученном bat файле и выбираем "Запустить как администратор"
+
#!/bin/bash
 +
 
 +
if [ -n "$1" ]; then
 +
    user=$1
 +
    password=<secret-prefix>-$1
 +
    if [ ! -d "/home/clients/$user" ]; then
 +
        cd /etc/openvpn/easy-rsa
 +
        # Generate certificates for Client <user>
 +
        ./easyrsa gen-req $user nopass
 +
        # Sign client user certificate will ask (will ask for password for CA)
 +
        echo yes | ./easyrsa sign client $user
 +
        mkdir /home/clients/$user
 +
    fi
 +
    cp /etc/openvpn/template.ovpn /home/clients/$user/$user.ovpn
 +
    sed -i -e "/<ca>/r /etc/openvpn/easy-rsa/pki/ca.crt" /home/clients/$user/$user.ovpn
 +
    sed -i -e "/<key>/r /etc/openvpn/easy-rsa/pki/private/$user.key" /home/clients/$user/$user.ovpn
 +
    sed -i -e "/<\/cert>/e cat /etc/openvpn/easy-rsa/pki/issued/$user.crt| sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'" /home/clients/$user/$
 +
    sed -i -e "/<\/tls-auth>/e grep '^[^#;]' /etc/openvpn/easy-rsa/pki/ta.key" /home/clients/$user/$user.ovpn
 +
    rar a -ep1 /home/clients/ovpn-$user.rar /home/clients/$user/$user.ovpn -p$password
 +
    echo "password for archive $password"
 +
else
 +
    echo "client <user>  - creates openvpn config for client <user>"
 +
fi
 +
</pre>

Поточна версія на 19:18, 21 січня 2023

Налаштування OpenVPN

yum install openvpn
cd /etc/openvpn/

очищуєемо або ініціалізуємо каталог з ключами /etc/openvpn/easy-rsa/pki

./easyrsa init-pki  

створюємо /etc/openvpn/easy-rsa/vars

export KEY_COUNTRY="UA"
export KEY_PROVINCE="VO"
export KEY_CITY="Luts'k"
export KEY_ORG="Sweet Company"
export KEY_EMAIL="[email protected]"
export EASYRSA_CERT_EXPIRE=3650 # 10 років, можна поставити й більше
source vars # щоб не вводити вручну дані, що вище 
./easyrsa build-ca # створюємо ca.key та ca.crt
./easyrsa build-ca # Будуємо сертифікат 
./easyrsa gen-dh # Формуємо ключ Діффі-Хеллмана

Будуємо ключ для сервера

./easyrsa gen-req <server-name> nopass  # створюємо запит на сертифікат
./easyrsa sign-req server <server-name> # генеруємо сертифікат
  • після введення команди підтверджуємо правильність даних, ввівши yes і вводимо пароль, який вказували при створенні кореневого сертифіката.
  • nopass можна упустити, якщо хочемо підвищити безпеку за допомогою пароля на сертифікат.
openvpn --genkey --secret pki/ta.key # створюємо ta.key

Будуємо ключ для клієнтів (на кожного клієнта по одному)

./easyrsa gen-req <client> nopass

якщо ключ був згенерований з паролем то з допомогою openssl можна зняти парольну фразу

openssl rsa -in [original.key] -out [new.key]

Налаштування сервера /etc/openvpn/server.conf

local  <ip.ip.ip.ip>
port <port> # 1194
user openvpn
group openvpn
proto udp # mikrotik не уміє udp тому для нього і клієнт і сервер в tcp
dev tun
tls-auth /etc/openvpn/easy-rsa/pki/ta.key 0 # тут 0 - це key-direction, у клієнта і сервера key-direction мають відрізнятися
opt-verify
cipher AES-256-GCM # це останній ціфер до якого буде підніматися на сервері і клієнті бажано виставити однакові підтримується з 2.5
keepalive 10 120
tun-mtu 1500
fragment 1300
mssfix
persist-key
persist-tun
#push "redirect-gateway def1"  # якщо треба завернути увесь трафік в тунель
topology net30
route 192.168.10.0 255.255.255.0
ifconfig-pool-persist ipp.txt
log /var/log/openvpn.log
status /var/log/openvpn-status.log
verb 4 
server 192.168.0.0 255.255.255.0 # ip клієнтів будть 192.168.0.1- 192.168.0.254
push "route 192.168.10.0 255.255.255.0"
push "dhcp-option DNS 192.168.10.1"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DOMAIN example.com"
push "block-outside-dns" блокує на клієнті dns, використовується лише той, що відправили попередніми стрічками.

Налаштування клієнта config/client.ovpn

client
dev tun
proto udp
remote <ip.ip.ip.ip> <port> # 1194
nobind
cipher AES-256-GCM # це останній ціфер до якого буде підніматися на сервері і клієнті бажано виставити однакові підтримується з 2.5
tun-mtu 1500
fragment 1300
mssfix
auth-nocache
ca ca.crt # або вставка текстом <ca></ca>
cert user.crt # або вставка текстом <cert></cert>
key user.key # або вставка текстом <key></key>
tls-auth ta.key 1 # або вставка текстом <tls-auth></tls-auth> key-direction 1  у клієнта і сервера key-direction мають відрізнятися
remote-cert-tls server
route-method ipapi
route-delay 2
verb 4
mute 20
#log /var/log/openvpn.log
#status /var/log/openvpn-status.log

Заборонити клієнту доступ до сервера

revoke-full <ім'я клієнта>
cp keys/crl.pem /etc/openvpn/

якщо треба зв'язати наприклад філіали, то у конфіг серверу треба добавити стрічки

client-config-dir /etc/openvpn/ccd
client-to-client  #для того щоб клієнти бачили один одного

і у каталозі /etc/openvpn/ccd створити файл з іменем клієнта і контентом

iroute 192.168.121.0 255.255.255.0 # роут в мережу клієнта, тобто тут мається на увазі що мережа клієнта 192.168.121.0/24

Корисний скрипт для створення конфігів клієнтів

#!/bin/bash

if [ -n "$1" ]; then
    user=$1
    password=<secret-prefix>-$1
    if [ ! -d "/home/clients/$user" ]; then
        cd /etc/openvpn/easy-rsa
        # Generate certificates for Client <user>
        ./easyrsa gen-req $user nopass
        # Sign client user certificate will ask (will ask for password for CA)
        echo yes | ./easyrsa sign client $user
        mkdir /home/clients/$user
    fi
    cp /etc/openvpn/template.ovpn  /home/clients/$user/$user.ovpn
    sed -i -e "/<ca>/r /etc/openvpn/easy-rsa/pki/ca.crt" /home/clients/$user/$user.ovpn
    sed -i -e "/<key>/r /etc/openvpn/easy-rsa/pki/private/$user.key" /home/clients/$user/$user.ovpn
    sed -i -e "/<\/cert>/e cat /etc/openvpn/easy-rsa/pki/issued/$user.crt| sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'" /home/clients/$user/$
    sed -i -e "/<\/tls-auth>/e grep '^[^#;]' /etc/openvpn/easy-rsa/pki/ta.key" /home/clients/$user/$user.ovpn
    rar a -ep1 /home/clients/ovpn-$user.rar /home/clients/$user/$user.ovpn -p$password
    echo "password for archive $password"
else
    echo "client <user>  - creates openvpn config for client <user>"
fi