Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия Следующая версия Следующая версия справа и слева | ||
wiki:openvpn [2016/02/20 19:48] [Отключение автозапуска OpenVPN] |
wiki:openvpn [2020/12/01 22:18] [ИЛИ единый файл конфигурации клиента client.ovpn с сертификатами и ключами для импорта] |
||
---|---|---|---|
Строка 16: | Строка 16: | ||
* Хотим соединить в одну виртуальную сеть несколько локальных сетей в офисах, географически расположенных в разных местах, посредством Интернета. | * Хотим соединить в одну виртуальную сеть несколько локальных сетей в офисах, географически расположенных в разных местах, посредством Интернета. | ||
* Хотим иметь доступ в рабочую локальную сеть из дома или в поездке | * Хотим иметь доступ в рабочую локальную сеть из дома или в поездке | ||
+ | * Имея сервер с белым IP есть желание выходить в сеть с этого IP (например если этот IP за пределами страны или сети, в которой блокируются определенные ресурсы в Интернете) | ||
====== Исходные данные ====== | ====== Исходные данные ====== | ||
Строка 51: | Строка 52: | ||
С лета 2013 года easy-rsa не входит в OpenVPN и команда указанная выше не сработает(не найдет easy-rsa), | С лета 2013 года easy-rsa не входит в OpenVPN и команда указанная выше не сработает(не найдет easy-rsa), | ||
тогда делаем следующее: | тогда делаем следующее: | ||
- | <code>sudo apt-get install easy-rsa</code> | + | <code>apt-get install easy-rsa</code> |
<code> | <code> | ||
Строка 73: | Строка 74: | ||
<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: | Строка 111: | ||
Создаем ключ сервера | Создаем ключ сервера | ||
- | <note>FIXME **A challenge password []:** Заполняется произвольным значением, насколько я понял это нужно только для создания ключа и больше нам не потребуется. Кто знает точно поправьте статью.</note> | + | <note>FIXME **A challenge password []:** Если вы решили ввести challenge password, то необходимо убедиться, что сохранили этот пароль в безопасном месте. Если вам понадобится когда-нибудь переустановить этот сертификат, то потребуется ввести этот пароль снова.</note> |
<code> | <code> | ||
Строка 123: | Строка 121: | ||
<note>Можно сразу создать ключи для клиента, перейдя в соответствующую часть статьи. Я вынес в отдельный раздел, т.к. ключи клиента могут генерироваться не один раз, чтобы было понятнее с чего начать в том случае когда нужно добавить клиента</note> | <note>Можно сразу создать ключи для клиента, перейдя в соответствующую часть статьи. Я вынес в отдельный раздел, т.к. ключи клиента могут генерироваться не один раз, чтобы было понятнее с чего начать в том случае когда нужно добавить клиента</note> | ||
- | Создаем ключ Диффи Хельман | + | Создаем ключ Диффи-Хеллмана |
<code>./build-dh</code> | <code>./build-dh</code> | ||
Строка 161: | Строка 159: | ||
# Указыем, где хранятся файлы с настройками 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 |
# Указываем сети, в которые нужно идти через туннель (сеть-клиента). | # Указываем сети, в которые нужно идти через туннель (сеть-клиента). | ||
Строка 174: | Строка 172: | ||
tls-timeout 120 | tls-timeout 120 | ||
auth SHA1 | auth SHA1 | ||
- | cipher BF-CBC | + | cipher AES-256-CBC |
# Если нужно, чтобы клиенты видели друг друга раскомментируйте | # Если нужно, чтобы клиенты видели друг друга раскомментируйте | ||
Строка 181: | Строка 179: | ||
keepalive 10 120 | keepalive 10 120 | ||
- | # Сжатие трафика | + | # Сжатие трафика. Для отключения используйте на сервере и клиенте comp-lzo no |
comp-lzo | comp-lzo | ||
Строка 245: | Строка 243: | ||
В **/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> |
Строка 263: | Строка 261: | ||
Создаем ключ клиента | Создаем ключ клиента | ||
- | <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 | ||
Строка 275: | Строка 272: | ||
В этом случае при запуске соединения нужно будет каждый раз вводить пароль на ключ. | В этом случае при запуске соединения нужно будет каждый раз вводить пароль на ключ. | ||
- | <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** | ||
Строка 294: | Строка 294: | ||
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 | ||
Строка 306: | Строка 306: | ||
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 | ||
Строка 323: | Строка 383: | ||
==== Включаем 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> | ||
===== Отзыв сертификата ===== | ===== Отзыв сертификата ===== | ||
Строка 329: | Строка 412: | ||
. ./vars | . ./vars | ||
./revoke-full client2 | ./revoke-full client2 | ||
+ | </code> | ||
+ | |||
+ | Если все прошло штатно вы должны увидеть следующий вывод, сообщающий о том, что сертификат отозван: | ||
+ | <code> | ||
+ | error 23 at 0 depth lookup:certificate revoked | ||
</code> | </code> | ||
Строка 346: | Строка 434: | ||
===== Тест производительности OpenVPN ===== | ===== Тест производительности OpenVPN ===== | ||
Условия теста: | Условия теста: | ||
- | 1. VPN-сервер на ВМ Virtualbox (1 ядро i5-4670) | + | - VPN-сервер на ВМ Virtualbox (1 ядро i5-4670) |
- | 2. Сеть гигабит (без шифрования последовательная скорость передачи 120 МБ/с). Скорость буду указывать в мегабайтах, НЕ в мегабитах! | + | - Сеть гигабит (без шифрования последовательная скорость передачи 120 МБ/с). Скорость буду указывать в мегабайтах, НЕ в мегабитах! |
- | 3. Форвардинг на хоста | + | - Форвардинг на хоста |
- | 4. Клиент Windows 7, OpenVPN 2.3 64, FX-6300 | + | - Клиент Windows 7, OpenVPN 2.3 64, FX-6300 |
Результаты: | Результаты: | ||
- | 1. Скорость всегда упиралась в ВМ, где процессор бы полностью занят. ЦП клиента был загружен не более 10% - 40% на 1/6 ядер. | + | - Скорость всегда упиралась в ВМ, где процессор бы полностью занят. ЦП клиента был загружен не более 10% - 40% на 1/6 ядер. |
- | 2. С конфигом выше - 14 МБ/с | + | - С конфигом выше - 14 МБ/с |
- | 3. Отключаем сжатие ;comp-lzo - прибавка не более 1 МБ/с - до 15 МБ/с | + | - Отключаем сжатие ;comp-lzo - прибавка не более 1 МБ/с - до 15 МБ/с |
- | 4. Отключаем аутентификацию auth none +2 МБ/с - до 17 МБ/с | + | - Отключаем аутентификацию auth none +2 МБ/с - до 17 МБ/с |
- | 5. Отключаем шифрование cipher none +2 МБ/с - до 19 МБ/с | + | - Отключаем шифрование cipher none +2 МБ/с - до 19 МБ/с |
- | 6. Сжатие comp-lzo сжимает хорошо сжимаемые файлы в 2 раза хуже, чем zlib, зато почти не влияет не загрузку ЦП (в десятки раз быстрее). Проверял на копировании установленного в Windows Libreoffice 5. Сжатие в zip с помощью архиватора 7z дало результат около 35%, сжатие comp-lzo по статистике сетевого интерфейса - около 70%. | + | - Сжатие comp-lzo сжимает хорошо сжимаемые файлы в 2 раза хуже, чем zlib, зато почти не влияет не загрузку ЦП (в десятки раз быстрее). Проверял на копировании установленного в Windows Libreoffice 5. Сжатие в zip с помощью архиватора 7z дало результат около 35%, сжатие comp-lzo по статистике сетевого интерфейса - около 70%. |
Максимальный прирост при отключении сжатия, шифрования и аутентификации составил около 35%. Не думаю, что это стоит того, чтобы отключать механизмы защиты, но ситуации бывают разные. | Максимальный прирост при отключении сжатия, шифрования и аутентификации составил около 35%. Не думаю, что это стоит того, чтобы отключать механизмы защиты, но ситуации бывают разные. | ||
+ | |||
Может кому-то как мне будет интересно влияние опций на производительность и не придется тратить время на проведение замеров, хотя я бы с удовольствием ознакомился с результами других людей. Изначально тестил для себя, поэтому точных замеров не проводил, потом решил поделиться результатами. | Может кому-то как мне будет интересно влияние опций на производительность и не придется тратить время на проведение замеров, хотя я бы с удовольствием ознакомился с результами других людей. Изначально тестил для себя, поэтому точных замеров не проводил, потом решил поделиться результатами. | ||
====== Источники ====== | ====== Источники ====== | ||
Строка 367: | Строка 456: | ||
[[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}} | ||
+ | |||
+ |