Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
wiki:openvpn [2016/02/21 19:02] [Включаем ipv4_forwarding] |
wiki:openvpn [2021/09/03 11:00] (текущий) [Создание ключей и сертификатов] |
||
---|---|---|---|
Строка 16: | Строка 16: | ||
* Хотим соединить в одну виртуальную сеть несколько локальных сетей в офисах, географически расположенных в разных местах, посредством Интернета. | * Хотим соединить в одну виртуальную сеть несколько локальных сетей в офисах, географически расположенных в разных местах, посредством Интернета. | ||
* Хотим иметь доступ в рабочую локальную сеть из дома или в поездке | * Хотим иметь доступ в рабочую локальную сеть из дома или в поездке | ||
- | * Имея сервер с белым IP есть желание выходить в сеть с этого IP (например если этот IP за пределами страны где блокируются определенные ресурсы в сети) | + | * Имея сервер с белым IP есть желание выходить в сеть с этого IP (например если этот IP за пределами страны или сети, в которой блокируются определенные ресурсы в Интернете) |
====== Исходные данные ====== | ====== Исходные данные ====== | ||
Строка 41: | Строка 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>apt-get install easy-rsa</code> | ||
<code> | <code> | ||
Строка 74: | Строка 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" | ||
Строка 114: | Строка 102: | ||
Создаем ключ сервера | Создаем ключ сервера | ||
- | <note>FIXME **A challenge password []:** Заполняется произвольным значением, насколько я понял это нужно только для создания ключа и больше нам не потребуется. Кто знает точно поправьте статью.</note> | + | <note>FIXME **A challenge password []:** Если вы решили ввести challenge password, то необходимо убедиться, что сохранили этот пароль в безопасном месте. Если вам понадобится когда-нибудь переустановить этот сертификат, то потребуется ввести этот пароль снова.</note> |
<code> | <code> | ||
Строка 124: | Строка 112: | ||
<note>Можно сразу создать ключи для клиента, перейдя в соответствующую часть статьи. Я вынес в отдельный раздел, т.к. ключи клиента могут генерироваться не один раз, чтобы было понятнее с чего начать в том случае когда нужно добавить клиента</note> | <note>Можно сразу создать ключи для клиента, перейдя в соответствующую часть статьи. Я вынес в отдельный раздел, т.к. ключи клиента могут генерироваться не один раз, чтобы было понятнее с чего начать в том случае когда нужно добавить клиента</note> | ||
- | Создаем ключ Диффи Хельман | + | Создаем ключ Диффи-Хеллмана |
<code>./build-dh</code> | <code>./build-dh</code> | ||
Строка 162: | Строка 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 |
# Указываем сети, в которые нужно идти через туннель (сеть-клиента). | # Указываем сети, в которые нужно идти через туннель (сеть-клиента). | ||
Строка 175: | Строка 163: | ||
tls-timeout 120 | tls-timeout 120 | ||
auth SHA1 | auth SHA1 | ||
- | cipher BF-CBC | + | cipher AES-256-CBC |
# Если нужно, чтобы клиенты видели друг друга раскомментируйте | # Если нужно, чтобы клиенты видели друг друга раскомментируйте | ||
Строка 182: | Строка 170: | ||
keepalive 10 120 | keepalive 10 120 | ||
- | # Сжатие трафика | + | # Сжатие трафика. Для отключения используйте на сервере и клиенте comp-lzo no |
comp-lzo | comp-lzo | ||
Строка 239: | Строка 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> | ||
Строка 264: | Строка 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 | ||
Строка 276: | Строка 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** | ||
Строка 295: | Строка 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 | ||
Строка 307: | Строка 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 | ||
Строка 326: | Строка 378: | ||
===== Настройка выхода в интернет с IP сервера ===== | ===== Настройка выхода в интернет с IP сервера ===== | ||
- | Если ваши цели были - только организовать VPN сеть или соединится с изолированной сетью (например из дома с локальной сетью на работе), то эта часть статьи вам не нужна. Если же вы хотите организовать доступ из VPN сети в интернет с IP адреса сервера, то вам нужно настроить на сервере NAT. | + | <note warning>Если ваши цели были - только организовать VPN сеть или соединится с изолированной сетью (например из дома с локальной сетью на работе), то эта часть статьи вам не нужна.</note> |
+ | |||
+ | ==== Настройки сервера ==== | ||
+ | Если же вы хотите организовать доступ из VPN сети в интернет с IP адреса сервера, то вам нужно настроить на сервере NAT. | ||
Сделать это можно следующей командой (на сервере): | Сделать это можно следующей командой (на сервере): | ||
<code> | <code> | ||
- | sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE | + | iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE |
</code> | </code> | ||
Здесь мы указали, что сеть 10.8.0.0/24 будет выходить наружу через интерфейс eth0. | Здесь мы указали, что сеть 10.8.0.0/24 будет выходить наружу через интерфейс eth0. | ||
Строка 335: | Строка 390: | ||
Для того что бы настройки iptables сохранились после перезагрузки нужно их дополнительно сохранить: | Для того что бы настройки iptables сохранились после перезагрузки нужно их дополнительно сохранить: | ||
<code> | <code> | ||
- | sudo iptables-save | + | 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> | </code> | ||
Строка 343: | Строка 405: | ||
. ./vars | . ./vars | ||
./revoke-full client2 | ./revoke-full client2 | ||
+ | </code> | ||
+ | |||
+ | Если все прошло штатно вы должны увидеть следующий вывод, сообщающий о том, что сертификат отозван: | ||
+ | <code> | ||
+ | error 23 at 0 depth lookup:certificate revoked | ||
</code> | </code> | ||
Строка 382: | Строка 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}} | ||
+ | |||
+ |