OpenVPN Сравнение версий

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
wiki:openvpn [2016/02/17 13:09]
[Создание ключей и сертификатов] dh2048.pem
wiki:openvpn [2021/09/03 11:00] (текущий)
[Создание ключей и сертификатов]
Строка 16: Строка 16:
   * Хотим соединить в одну виртуальную сеть несколько локальных сетей в офисах,​ географически расположенных в разных местах,​ посредством Интернета.   * Хотим соединить в одну виртуальную сеть несколько локальных сетей в офисах,​ географически расположенных в разных местах,​ посредством Интернета.
   * Хотим иметь доступ в рабочую локальную сеть из дома или в поездке   * Хотим иметь доступ в рабочую локальную сеть из дома или в поездке
 +  * Имея сервер с белым IP есть желание выходить в сеть с этого IP (например если этот IP за пределами страны или сети, в которой блокируются определенные ресурсы в Интернете)
  
 ====== Исходные данные ====== ====== Исходные данные ======
Строка 40: Строка 41:
 ==== Создание ключей и сертификатов ==== ==== Создание ключей и сертификатов ====
 Защита соединения в OpenVPN в данном случае строится на использовании сертификатов и ключей для сервера и для клиентов. Защита соединения в OpenVPN в данном случае строится на использовании сертификатов и ключей для сервера и для клиентов.
-Для их генерации в пакете OpenVPN имеются специальные скрипты,​ расположенные в **/​usr/​share/​doc/​openvpn/​examples/​easy-rsa/​2.0** Перед началом работы скопируем их, чтобы не изменять оригиналы. 
- 
-(для 12.04 LTS) 
 <​code>​ <​code>​
-mkdir /​etc/​openvpn/​easy-rsa +apt-get install ​easy-rsa
-cp -r /​usr/​share/​doc/​openvpn/​examples/​easy-rsa/​2.0 /​etc/​openvpn/​easy-rsa+
 </​code>​ </​code>​
- 
-(для 14.04 LTS) 
-С лета 2013 года easy-rsa не входит в OpenVPN и команда указанная выше не сработает(не найдет easy-rsa), 
-тогда делаем следующее:​ 
-<​code>​sudo apt-get install easy-rsa</​code>​ 
  
 <​code>​ <​code>​
Строка 73: Строка 65:
  
 <​code>​ <​code>​
-# По умолчанию здесь просто openssl, которого нет в директории, ​в результате чего мы получим ошибку,​ если не укажем существующий. Я выбрал последнюю версию. Указывается без расширения .conf. +# Почти в самом низу файла, заполняем информацию о сертификатах по умолчанию (ваши значения).
-export OPENSSL="​openssl"​ +
- +
-# В самом низу файла, заполняем информацию о сертификатах по умолчанию (ваши значения).+
 export KEY_COUNTRY="​RU"​ export KEY_COUNTRY="​RU"​
 export KEY_PROVINCE="​Amur Region"​ export KEY_PROVINCE="​Amur Region"​
Строка 113: Строка 102:
 Создаем ключ сервера Создаем ключ сервера
  
-<​note>​FIXME **A challenge password []:** Заполняется произвольным значением, насколько я понял это нужно только для ​создания ключа и больше нам не потребуется. Кто знает точно ​поправьте статью.</​note>​+<​note>​FIXME **A challenge password []:** Если вы решили ввести challenge passwordто необходимо убедиться, что сохранили этот ​пароль ​в безопасном месте. Если вам понадобится когдаибудь переустановить этот сертификат,​ то потребуется ​ввести этот пароль снова.</​note>​
  
 <​code>​ <​code>​
Строка 123: Строка 112:
 <​note>​Можно сразу создать ключи для клиента,​ перейдя в соответствующую часть статьи. Я вынес в отдельный раздел,​ т.к. ключи клиента могут генерироваться не один раз, чтобы было понятнее с чего начать в том случае когда нужно добавить клиента</​note>​ <​note>​Можно сразу создать ключи для клиента,​ перейдя в соответствующую часть статьи. Я вынес в отдельный раздел,​ т.к. ключи клиента могут генерироваться не один раз, чтобы было понятнее с чего начать в том случае когда нужно добавить клиента</​note>​
  
-Создаем ключ Диффи Хельман+Создаем ключ Диффи-Хеллмана
  
 <​code>​./​build-dh</​code>​ <​code>​./​build-dh</​code>​
Строка 161: Строка 150:
  
 # Указыем,​ где хранятся файлы с настройками IP-адресов клиентов (создадим ниже) # Указыем,​ где хранятся файлы с настройками IP-адресов клиентов (создадим ниже)
-client-config-dir ccd+client-config-dir ​/​etc/​openvpn/​ccd
  
 # Запоминать динамически выданные адреса для VPN-клиентов и при последующих подключениях назначать те же значения. # Запоминать динамически выданные адреса для VPN-клиентов и при последующих подключениях назначать те же значения.
-ifconfig-pool-persist ipp.txt+ifconfig-pool-persist ​/​etc/​openvpn/​ipp.txt
  
 # Указываем сети, в которые нужно идти через туннель (сеть-клиента). # Указываем сети, в которые нужно идти через туннель (сеть-клиента).
Строка 173: Строка 162:
 tls-auth /​etc/​openvpn/​keys/​ta.key 0 tls-auth /​etc/​openvpn/​keys/​ta.key 0
 tls-timeout 120 tls-timeout 120
-auth SHA1 # по-умолчанию. Можно ещё MD5. +auth SHA1 
-cipher ​BF-CBC+cipher ​AES-256-CBC
  
 # Если нужно, чтобы клиенты видели друг друга раскомментируйте # Если нужно, чтобы клиенты видели друг друга раскомментируйте
Строка 181: Строка 170:
 keepalive 10 120 keepalive 10 120
  
-# Сжатие трафика+# Сжатие трафика. Для отключения используйте на сервере и клиенте comp-lzo no
 comp-lzo comp-lzo
  
Строка 238: Строка 227:
  
 # Задаем маршрут для клиента,​ чтобы он видел сеть за OpenVPN-сервером. # Задаем маршрут для клиента,​ чтобы он видел сеть за OpenVPN-сервером.
 +# Если маршрут требуется для всех подключаемых клиентов,​ достаточно эту
 +# строку прописать в конфигурационный файл сервера server.conf ​
 push "route 192.168.1.0 255.255.255.0"​ push "route 192.168.1.0 255.255.255.0"​
 </​code>​ </​code>​
Строка 245: Строка 236:
 В **/​etc/​sysctl.conf** расскомментируем **#​net.ipv4.ip_forward=1** В **/​etc/​sysctl.conf** расскомментируем **#​net.ipv4.ip_forward=1**
 после чего после чего
-<​code>​sudo sysctl -p</​code>​+<​code>​sysctl -p</​code>​
  
-==== Настраиваем NAT на сервере ==== 
-<​code>​sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE 
-sudo iptables-save</​code>​ 
  
-Если у вас внешний интерфейс не eht0 то замените в команде eht0 на имя своего интерфейса. 
 ===== Создание клиента ===== ===== Создание клиента =====
 ==== Создание ключей и сертификатов ==== ==== Создание ключей и сертификатов ====
Строка 267: Строка 254:
  
 Создаем ключ клиента Создаем ключ клиента
-<note important>​Common Name (eg, your name or your server'​s hostname) []: +<note important>​В данном случае название ​ключа - **client**. Каждый ​ключ должен быть со своим именем.</​note>​
-нужно вписать название ​файла ключа, в данном случае **client**</​note>​+
 <​code>​ <​code>​
 ./build-key client ./build-key client
Строка 279: Строка 265:
 В этом случае при запуске соединения нужно будет каждый раз вводить пароль на ключ. В этом случае при запуске соединения нужно будет каждый раз вводить пароль на ключ.
  
-<note important>​Теперь нужно не забыть скопировать ключи (**ca.crt, dh2048.pem, client.crt, client.key, ta.key**) на клиента OpenVPN в **/​etc/​openvpn/​keys/​**</​note>​+<note important>​Теперь нужно не забыть скопировать ключи (**ca.crt, client.crt, client.key, ta.key**) на клиента OpenVPN в **/​etc/​openvpn/​keys/​**</​note>​ 
 + 
 +<note important>​Если планируется на клиенте импортировать файл настроек **.ovpn** вместе с сертификатами и ключами,​ например,​ для Android, важно в конфигурации клиента исключить строку **tls-auth**,​ вместо нее добавить **key-direction 1**. В противном случае будет ошибка вида //tls error: incoming packet authentication failed from [af_inet]//​.  
 +</​note>​
 ==== Создание файла конфигурации клиента ==== ==== Создание файла конфигурации клиента ====
 **/​etc/​openvpn/​client.conf** **/​etc/​openvpn/​client.conf**
Строка 298: Строка 287:
 tls-client tls-client
 tls-auth /​etc/​openvpn/​keys/​ta.key 1 tls-auth /​etc/​openvpn/​keys/​ta.key 1
-auth SHA1 # по-умолчанию. Можно MD5 +auth SHA1 
-cipher ​BF-CBC+cipher ​AES-256-CBC
 remote-cert-tls server remote-cert-tls server
 comp-lzo comp-lzo
Строка 310: Строка 299:
 mute 20 mute 20
 </​code>​ </​code>​
 +
 +==== ИЛИ единый файл конфигурации клиента client.ovpn с сертификатами и ключами для импорта ====
 +
 +<​code>​
 +client
 +dev tun
 +proto udp
 +
 +# Внеший IP, на или за которым находится ваш сервер OpenVPN и порт (на сервере или роутере,​ за которым стоит сервер)
 +remote 111.222.333.444 1194
 +
 +# необходимо для DynDNS
 +resolv-retry infinite
 +
 +tls-client
 +
 +# Строка tls-auth /​etc/​openvpn/​keys/​ta.key 1, как выше говорилось,​ заменяется на 
 +key-direction 1
 +
 +auth SHA1
 +cipher AES-256-CBC
 +remote-cert-tls server
 +comp-lzo
 +persist-key
 +persist-tun
 +
 +verb 3
 +mute 20
 +
 +# Далее идут сертификаты и ключи которые берутся из соответствующих файлов сгенерированных выше
 +
 +# Из ca.crt
 +<ca>
 +-----BEGIN CERTIFICATE-----
 +...
 +-----END CERTIFICATE-----
 +</ca>
 +
 +# Из client.crt
 +<​cert>​
 +-----BEGIN CERTIFICATE-----
 +...
 +-----END CERTIFICATE-----
 +</​cert>​
 +
 +# Из client.key
 +<key>
 +-----BEGIN PRIVATE KEY-----
 +...
 +-----END PRIVATE KEY-----
 +</​key>​
 +
 +# Из ta.key
 +<​tls-auth>​
 +-----BEGIN OpenVPN Static key V1-----
 +...
 +-----END OpenVPN Static key V1-----
 +</​tls-auth>​
 +</​code>​
 +
  
 Можно запускать наш клиент OpenVPN Можно запускать наш клиент OpenVPN
Строка 327: Строка 376:
 ==== Включаем ipv4_forwarding ==== ==== Включаем ipv4_forwarding ====
 Также как в случае с сервером. Также как в случае с сервером.
 +
 +===== Настройка выхода в интернет с IP сервера =====
 +<note warning>​Если ваши цели были - только организовать VPN сеть или соединится с изолированной сетью (например из дома с локальной сетью на работе),​ то эта часть статьи вам не нужна.</​note>​
 +
 +==== Настройки сервера ====
 +Если же вы хотите организовать доступ из VPN сети в интернет с IP адреса сервера,​ то вам нужно настроить на сервере NAT.
 +Сделать это можно следующей командой (на сервере):​
 +<​code>​
 +iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
 +</​code>​
 +Здесь мы указали,​ что сеть 10.8.0.0/24 будет выходить наружу через интерфейс eth0.
 +  ​
 +Для того что бы настройки iptables сохранились после перезагрузки нужно их дополнительно сохранить:​
 +<​code>​
 +iptables-save > /​etc/​iptables.up.rules
 +echo "​pre-up iptables-restore < /​etc/​iptables.up.rules"​ >> /​etc/​network/​interfaces
 +</​code>​
 +
 +==== Настройки клиента ====
 +К конфиге клиента client.conf нужно добавить строчку
 +<​code>​
 +redirect-gateway def1
 +</​code>​
  
 ===== Отзыв сертификата ===== ===== Отзыв сертификата =====
Строка 333: Строка 405:
 . ./vars . ./vars
 ./​revoke-full client2 ./​revoke-full client2
 +</​code>​
 +
 +Если все прошло штатно вы должны увидеть следующий вывод, сообщающий о том, что сертификат отозван:​
 +<​code>​
 +error 23 at 0 depth lookup:​certificate revoked
 </​code>​ </​code>​
  
Строка 348: Строка 425:
 </​code>​ </​code>​
  
 +===== Тест производительности OpenVPN =====
 +Условия теста:
 +  - VPN-сервер на ВМ Virtualbox (1 ядро i5-4670)
 +  - Сеть гигабит (без шифрования последовательная скорость передачи 120 МБ/с). Скорость буду указывать в мегабайтах,​ НЕ в мегабитах!
 +  - Форвардинг на хоста
 +  - Клиент Windows 7, OpenVPN 2.3 64, FX-6300
 +
 +Результаты:​
 +  - Скорость всегда упиралась в ВМ, где процессор бы полностью занят. ЦП клиента был загружен не более 10% - 40% на 1/6 ядер.
 +  - С конфигом выше - 14 МБ/с
 +  - Отключаем сжатие ;comp-lzo - прибавка не более 1 МБ/с - до 15 МБ/с
 +  - Отключаем аутентификацию auth none +2 МБ/с - до 17 МБ/с
 +  - Отключаем шифрование cipher none +2 МБ/с - до 19 МБ/с
 +  - Сжатие comp-lzo сжимает хорошо сжимаемые файлы в 2 раза хуже, чем zlib, зато почти не влияет не загрузку ЦП (в десятки раз быстрее). Проверял на копировании установленного в Windows Libreoffice 5. Сжатие в zip с помощью архиватора 7z дало результат около 35%, сжатие comp-lzo по статистике сетевого интерфейса - около 70%.
 +
 +Максимальный прирост при отключении сжатия,​ шифрования и аутентификации составил около 35%. Не думаю, что это стоит того, чтобы отключать механизмы защиты,​ но ситуации бывают разные.
 +
 +Может кому-то как мне будет интересно влияние опций на производительность и не придется тратить время на проведение замеров,​ хотя я бы с удовольствием ознакомился с результами других людей. Изначально тестил для себя, поэтому точных замеров не проводил,​ потом решил поделиться результатами.
 ====== Источники ====== ====== Источники ======
 [[http://​www.lissyara.su/​articles/​freebsd/​security/​openvpn_via_nat/​]] [[http://​www.lissyara.su/​articles/​freebsd/​security/​openvpn_via_nat/​]]
Строка 354: Строка 449:
  
 [[http://​firstwiki.ru/​index.php/​%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_OpenVPN]] [[http://​firstwiki.ru/​index.php/​%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_OpenVPN]]
 +
 +[[https://​serverfault.com/​questions/​266232/​what-is-a-challenge-password]]
 {{tag>​openvpn vpn}} {{tag>​openvpn vpn}}
 +
 +