LXF94:OpenVPN

Материал из Linuxformat.

(Различия между версиями)
Перейти к: навигация, поиск
(Шаг 2: Создаем ключи)
м
 
(4 промежуточные версии не показаны)
Строка 8: Строка 8:
Пакеты с OpenVPN доступны для большинства распространенных дистрибутивов, в том числе для RedHat/Fedora, Mandriva, OpenSUSE, Slackware, Debian и Ubuntu. Если OpenVPN не включен в ваш любимый дистрибутив, попробуйте поискать пакет на http://rpmfind.net (для систем, использующих RPM) или http://linuxpackages.net (Slackware и производные) Наконец, программу можно загрузить в исходных текстах с официального сайта (http://openvpn.net).
Пакеты с OpenVPN доступны для большинства распространенных дистрибутивов, в том числе для RedHat/Fedora, Mandriva, OpenSUSE, Slackware, Debian и Ubuntu. Если OpenVPN не включен в ваш любимый дистрибутив, попробуйте поискать пакет на http://rpmfind.net (для систем, использующих RPM) или http://linuxpackages.net (Slackware и производные) Наконец, программу можно загрузить в исходных текстах с официального сайта (http://openvpn.net).
-
Для установки OpenVPN также необходимо установить OpenSSL (http://openssl.org) и liblzo (http://www.oberhumer.com/opensource/lzo), которые есть во многих дистрибутивах. Для работы OpenVPN нужен модуль ядра tun. Он присутствует в большинстве систем, но если команда modrpobe tun завершается с ошибкой «Can’t locale module tun», вам придется пересобрать ядро – о том, как это сделать, подробно рассказано в LXF89. Необходимо включить опцию CONFIG_TUN (Device Drivers –> Network device support –> Universal TUN/TAP device driver support).
+
Для установки OpenVPN также необходимо установить OpenSSL (http://openssl.org) и liblzo (http://www.oberhumer.com/opensource/lzo), которые есть во многих дистрибутивах. Для работы OpenVPN нужен модуль ядра tun. Он присутствует в большинстве систем, но если команда modrpobe tun завершается с ошибкой «Can’t locale module tun», вам придется пересобрать ядро – о том, как это сделать, подробно рассказано в [[LXF89:Hardcore Linux|LXF89]]. Необходимо включить опцию CONFIG_TUN (Device Drivers –> Network device support –> Universal TUN/TAP device driver support).
-
Если вы собираетесь использовать OpenVPN постоянно, пропишите модуль tun в /etc/modules для автоматической инициализации при загрузке либо включите его непосредственно в ядро. В противном случае перед запуском OpenVPN вам нужно будет загружать модуль tun самостоятельно (командой modprobe tun). Если вы планируете предоставлять клиентам доступ в Интернет через VPN, необходимо настроить NAT (Network Address Translation). Скорее всего, это уже сделано за вас разработчиками дистрибутива, но на случай возникновения проблем имейте в виду, что нам потребуется опция CONFIG_IP_NF_TARGET_MASQUERADE (Networking –> Networking options –> Network packet filtering –> IP tables support –> Full NAT). Для работы с NAT используется утилита iptables (см. [[LXF:87/88|LXF87/88]]), которая, скорее всего, уже установлена в вашей системе. Проверьте это и, в случае необходимости, добавьте ее через менеджер пакетов вашего дистрибутива.
+
Если вы собираетесь использовать OpenVPN постоянно, пропишите модуль tun в /etc/modules для автоматической инициализации при загрузке либо включите его непосредственно в ядро. В противном случае перед запуском OpenVPN вам нужно будет загружать модуль tun самостоятельно (командой modprobe tun). Если вы планируете предоставлять клиентам доступ в Интернет через VPN, необходимо настроить NAT (Network Address Translation - Трансляция сетевых адресов) ). Скорее всего, это уже сделано за вас разработчиками дистрибутива, но на случай возникновения проблем имейте в виду, что нам потребуется опция CONFIG_IP_NF_TARGET_MASQUERADE (Networking –> Networking options –> Network packet filtering –> IP tables support –> Full NAT). Для работы с NAT используется утилита iptables (см. [[LXF87-88:Безопасность|LXF87-88]]), которая, скорее всего, уже установлена в вашей системе. Проверьте это и, в случае необходимости, добавьте ее через менеджер пакетов вашего дистрибутива.
=== Шаг 2: Создаем ключи ===
=== Шаг 2: Создаем ключи ===
Строка 36: Строка 36:
./clean-all
./clean-all
-
После этого следует сгенерировать корневой сертификат (см.[[LXF93|LXF93]]):
+
После этого следует сгенерировать корневой сертификат (см.[[LXF93:Электронные подписи|LXF93]]):
./build-ca
./build-ca
Строка 68: Строка 68:
=== Шаг 3: Настраиваем ===
=== Шаг 3: Настраиваем ===
-
Итак, у нас есть все необходимые для работы OpenVPN файлы – все, кроме конфигурационных, созданием которых мы и займемся. Начнем с сервера. Для создания новых конфигурационных файлов удобно использовать примеры из поставки OpenVPN, они находятся в подкаталоге sample-config-files каталога OpenVPN (../sample-config-files, если вы находитесь в каталоге easy-rsa). В принципе, можно использовать стандартный конфигурационный файл для сервера, изменив некоторые параметры. Вот список этих параметров (некоторые из них, например, port и protocol, изменять не обязательно):
+
Итак, у нас есть необходимые для работы OpenVPN файлы – все, кроме конфигурационных, созданием которых мы и займемся. Начнем с сервера. Для создания новых конфигурационных файлов удобно использовать примеры из поставки OpenVPN, они находятся в подкаталоге sample-config-files каталога OpenVPN (../sample-config-files, если вы находитесь в каталоге easy-rsa). В принципе, можно использовать стандартный конфигурационный файл для сервера, изменив некоторые параметры. Вот список этих параметров (некоторые из них, например, port и protocol, изменять не обязательно):
*'''ca''' – полный путь до корневого сертификата, который мы создали скриптом build-ca.
*'''ca''' – полный путь до корневого сертификата, который мы создали скриптом build-ca.
Строка 81: Строка 81:
Для создания конфигурационного файла клиента также можно использовать пример, идущий в поставке с OpenVPN. В нем надо изменить пути к необходимым файлам на свои, указать адрес и порт сервера в директиве remote и, кроме того, удостоверится, что выбранные настройки совпадают с настройками сервера (протокол, сжатие и т.п.). Пример конфигурационного файла клиента можно также взять с диска LXF. Тех же, кто хочет предоставлять VPN-клиентам доступ в Интернет,
Для создания конфигурационного файла клиента также можно использовать пример, идущий в поставке с OpenVPN. В нем надо изменить пути к необходимым файлам на свои, указать адрес и порт сервера в директиве remote и, кроме того, удостоверится, что выбранные настройки совпадают с настройками сервера (протокол, сжатие и т.п.). Пример конфигурационного файла клиента можно также взять с диска LXF. Тех же, кто хочет предоставлять VPN-клиентам доступ в Интернет,
-
ждет еще один шаг: включение NAT (Network Address Translation, Трансляция сетевых адресов) и настройка маршрутизации. Для начала необходимо написать соответствующее правило IPTables:
+
ждет еще один шаг: включение NAT и настройка маршрутизации. Для начала необходимо написать соответствующее правило IPTables:
-
iptables -t nat -A POSTROUTING -s маска_подсети -o внешний_
+
iptables -t nat -A POSTROUTING -s маска_подсети -o внешний_интерфейс -j MASQUERADE
-
интерфейс -j MASQUERADE
+
например:
например:
Строка 106: Строка 105:
Thu Aug 31 12:04:20 2006 TLS-Auth MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ]
Thu Aug 31 12:04:20 2006 TLS-Auth MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ]
Thu Aug 31 12:04:20 2006 TUN/TAP device tun0 opened
Thu Aug 31 12:04:20 2006 TUN/TAP device tun0 opened
-
<Skipped>
+
<Пропущено>
Thu Aug 31 12:04:20 2006 Initialization Sequence Completed
Thu Aug 31 12:04:20 2006 Initialization Sequence Completed
Строка 134: Строка 133:
== Почему OpenVPN? ==
== Почему OpenVPN? ==
-
Существует множество реализаций VPN, самые популярные из них – PPTP, FreeS/WAN и OpenVPN. Почему же в этой статье мы рассмотрим именно последний вариант? PPTP навевает мысли о Microsoft, FreeS/WAN давно не обновлялся – на его официальном сайте сказано, что последняя версия датируется 22 апреля 2004 года, более того, дальнейших обновлений FreeS/WAN не будет, а это, согласитесь, недопустимо для проекта, одной из целей которого является обеспечение
+
Существует множество реализаций VPN, самые популярные из них – PPTP, FreeS/WAN (протокол IPSec) и OpenVPN. Почему же в этой статье мы рассмотрим именно последний вариант? PPTP навевает мысли о Microsoft, FreeS/WAN давно не обновлялся – на его официальном сайте сказано, что последняя версия датируется 22 апреля 2004 года, более того, дальнейших обновлений FreeS/WAN не будет, а это, согласитесь, недопустимо для проекта, одной из целей которого является обеспечение
-
безопасности... OpenVPN же активно развивается и регулярно обновляется, использует стойкие криптографические алгоритмы и предлагает множество способов идентификации, в том числе комбинированных, что немаловажно для безопасности. Кроме того, OpenVPN работает на большинстве распространенных платформ – Linux, Windows 2000/XP, OpenBSD, FreeBSD, NetBSD, Mac OS X, Solaris, благодаря чему его можно использовать в гетерогенных сетях. Все это, безусловно,
+
безопасности... OpenVPN же активно развивается и регулярно обновляется, использует стойкие криптографические алгоритмы и предлагает множество способов идентификации, в том числе комбинированных, что немаловажно для безопасности. Кроме того, OpenVPN работает на большинстве распространенных платформ – GNU/Linux, Windows NT начиная с 2000, OpenBSD, FreeBSD, NetBSD, Mac OS X, Solaris, благодаря чему его можно использовать в гетерогенных сетях. Все это, безусловно,
делает OpenVPN лучшим выбором для организации VPN.
делает OpenVPN лучшим выбором для организации VPN.

Текущая версия

Содержание

OpenVPN за 10 минут

Технология VPN во многом напоминает перевозку денег в бронированной инкассаторской машине по улицам многолюдного города. Но какую модель следует выбрать, чтобы ваши ценности не достались злоумышленникам? Спросите у Валентина Яценко.

VPN – Virtual Private Network, Виртуальная Частная Сеть – технология, позволяющая соединять между собой локальные сети и отдельные компьютеры, находящиеся на расстоянии тысяч километров друг от друга; подключаться к локальной сети через Интернет, используя шифрованный канал связи, организовывать безопасный туннель для передачи важных данных... Возможности применения VPN безграничны! Вам необходимо соединить офисы в разных концах страны единой сетью, не прокладывая километры кабелей? Вы хотите подключаться к домашней локальной сети из Интернет-кафе? Требуется передать важные данные на большое расстояние без риска утечки информации? Может быть, большинство данных, которые вы передаете через Интернет, составляют тайну, и их необходимо обезопасить? Если вы хотя бы на один вопрос ответили утвердительно, VPN – это именно то, что вам нужно!

Шаг 1: Устанавливаем

Пакеты с OpenVPN доступны для большинства распространенных дистрибутивов, в том числе для RedHat/Fedora, Mandriva, OpenSUSE, Slackware, Debian и Ubuntu. Если OpenVPN не включен в ваш любимый дистрибутив, попробуйте поискать пакет на http://rpmfind.net (для систем, использующих RPM) или http://linuxpackages.net (Slackware и производные) Наконец, программу можно загрузить в исходных текстах с официального сайта (http://openvpn.net).

Для установки OpenVPN также необходимо установить OpenSSL (http://openssl.org) и liblzo (http://www.oberhumer.com/opensource/lzo), которые есть во многих дистрибутивах. Для работы OpenVPN нужен модуль ядра tun. Он присутствует в большинстве систем, но если команда modrpobe tun завершается с ошибкой «Can’t locale module tun», вам придется пересобрать ядро – о том, как это сделать, подробно рассказано в LXF89. Необходимо включить опцию CONFIG_TUN (Device Drivers –> Network device support –> Universal TUN/TAP device driver support).

Если вы собираетесь использовать OpenVPN постоянно, пропишите модуль tun в /etc/modules для автоматической инициализации при загрузке либо включите его непосредственно в ядро. В противном случае перед запуском OpenVPN вам нужно будет загружать модуль tun самостоятельно (командой modprobe tun). Если вы планируете предоставлять клиентам доступ в Интернет через VPN, необходимо настроить NAT (Network Address Translation - Трансляция сетевых адресов) ). Скорее всего, это уже сделано за вас разработчиками дистрибутива, но на случай возникновения проблем имейте в виду, что нам потребуется опция CONFIG_IP_NF_TARGET_MASQUERADE (Networking –> Networking options –> Network packet filtering –> IP tables support –> Full NAT). Для работы с NAT используется утилита iptables (см. LXF87-88), которая, скорее всего, уже установлена в вашей системе. Проверьте это и, в случае необходимости, добавьте ее через менеджер пакетов вашего дистрибутива.

Шаг 2: Создаем ключи

Итак, OpenVPN установлен. Что дальше? В первую очередь необходимо создать ключи и сертификаты для сервера и клиентов. Скрипты, облегчающие эту задачу, находятся в каталоге easy-rsa (см. врезку «Где же easy-rsa?» внизу).

В первую очередь, отредактируйте расположенный в нем файл vars. Установите значения переменных:

  • KEY_COUNTRY – равным двухсимвольному коду вашей страны (для России это RU).
  • KEY_PROVINCE – названию вашего региона (например, Moscow region или MSK).
  • KEY_CITY, соответственно – ваш город (скажем, Moscow).
  • KEY_ORG – организация (OpenVPN Solutions подойдет).
  • KEY_EMAIL – ваш e-mail адрес (me@my.e-ma.il).

Все эти данные необходимы для генерации сертификатов и ключей в соответствии со стандартом, поэтому оставлять какие-то переменные пустыми нельзя.

Также можно изменить параметр KEY_SIZE, отвечающий за размер ключей (максимальный размер ключа, поддерживаемый OpenVPN – 2048 бит).

Далее необходимо инициализировать переменные, используемые при создании публичного ключа командой

. ./vars

и, на всякий случай, удалить существующие ключи командой

./clean-all

После этого следует сгенерировать корневой сертификат (см.LXF93):

./build-ca

В процессе выполнения последнего скрипта вам будет задано несколько вопросов. Нужно ввести только Common Name для сертификата (например, RootCA), все остальные параметры уже заданы в качестве переменных окружения скриптом vars.

После создания корневого сертификата необходимо сгенерировать для сервера секретный ключ. В этом вам поможет скрипт buildkey-server. Как и в предыдущем случае, для большинства вопросов можно оставить ответы по умолчанию. На вопрос о Common Name введите “server”, на два последних вопроса (подписать ли сертификат и – каламбур, но перевод именно такой – сертифицировать ли его) ответьте утвердительно; когда вас спросят о пароле (“A challenge password”) – введите пароль для ключа сервера (запоминать его не нужно). Наберите

./build-key-server server

Далее, создайте ключи для необходимого количества клиентов. Эта процедура аналогична созданию ключа для сервера, за исключением того, что для клиентов ключи создаются скриптом build-key, а не buildkey-server. У каждого ключа, конечно же, должно быть указано свое значение в поле Common Name:

./build-key clientname

Если вы хотите защитить паролем ключи клиентов, воспользуйтесь вместо build-key скриптом build-key-pass.

И наконец, в довершение ко всем сертификатам и ключам необходимо создать файл параметров Диффи [Diffie] и Хеллмэна [Hellman]. Алгоритм Диффи и Хеллмэна позволяет обмениваться секретными ключами по небезопасным каналам. Для их генерации запустите скрипт build-dh без параметров:

./build-dh

Этот процесс занимает определенное время, поэтому владельцам слабых компьютеров стоит попить чаю, вместо того чтобы просто сидеть и ждать окончания работы скрипта.

Если вам уже надоело возиться с ключами, сертификатами и прочим – не падайте духом: осталось только скопировать нужные файлы на клиентские компьютеры. Клиентам необходимы следующие файлы:

  • ca.crt (Root CA certificate) необходим серверу и всем клиентам, он не является секретным.
  • clientname.crt (сертификат клиента clientname) необходим только клиенту clientname, он не является секретным.
  • clientname.key (ключ клиента clientname) необходим только клиенту clientname, это секретный ключ.

Эти файлы можно найти в подкаталоге keys каталога easy-rsa.

Шаг 3: Настраиваем

Итак, у нас есть необходимые для работы OpenVPN файлы – все, кроме конфигурационных, созданием которых мы и займемся. Начнем с сервера. Для создания новых конфигурационных файлов удобно использовать примеры из поставки OpenVPN, они находятся в подкаталоге sample-config-files каталога OpenVPN (../sample-config-files, если вы находитесь в каталоге easy-rsa). В принципе, можно использовать стандартный конфигурационный файл для сервера, изменив некоторые параметры. Вот список этих параметров (некоторые из них, например, port и protocol, изменять не обязательно):

  • ca – полный путь до корневого сертификата, который мы создали скриптом build-ca.
  • cert – полный путь до сертификата сервера, который мы создали его скриптом build-key-server.
  • key – путь до ключа сервера, созданного все тем же скриптом build-key-server.
  • dh – путь до файла параметров Диффи и Хеллмэна, созданного скриптом build-dh.
  • server – режим запуска OpenVPN. В строке с режимом запуска для сервера должна быть указана подсеть и маска подсети (пример – server 10.8.0.0 255.255.255.0). Подсеть, указанная по умолчанию – 10.8.0.0/24. Если в вашей сети она уже используется, задайте другую локальную подсеть.
  • port – порт, на котором будет запущен сервер. Стандартный порт OpenVPN – 1194, но вы можете изменить его по своему желанию.
  • protocol – протокол. По умолчанию OpenVPN использует экономичный UDP, но вы можете предпочесть надежный TCP.

Если вы не сторонник конфигураций по умолчанию, отредактируйте файл в соответствии со своими предпочтениями. Если же вы не хотите тратить на это время, то можете использовать мой вариант, составленный специально для этой статьи. Вы найдете его на прилагаемом к журналу диске.

Для создания конфигурационного файла клиента также можно использовать пример, идущий в поставке с OpenVPN. В нем надо изменить пути к необходимым файлам на свои, указать адрес и порт сервера в директиве remote и, кроме того, удостоверится, что выбранные настройки совпадают с настройками сервера (протокол, сжатие и т.п.). Пример конфигурационного файла клиента можно также взять с диска LXF. Тех же, кто хочет предоставлять VPN-клиентам доступ в Интернет, ждет еще один шаг: включение NAT и настройка маршрутизации. Для начала необходимо написать соответствующее правило IPTables:

iptables -t nat -A POSTROUTING -s маска_подсети -o внешний_интерфейс -j MASQUERADE

например:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o ppp0 -j MASQUERADE

Его необходимо сохранить, добавив в файл с правилами iptables или в скрипты загрузки. Затем необходимо включить маршрутизацию, записав в /etc/sysctl.conf строку “net.ipv4.ip_forward = 1” и выполнив команду

sysctl -w net.ipv4.ip_forward=1

Шаг 4: Проверка связи

Если вы дошли до этого места, спешу вас обрадовать – остался всего один, очень простой шаг. Надо запустить OpenVPN на сервере, а потом и на всех клиентах. Для сервера: перейдите в каталог с ключами (keys) и выполните:

openvpn --config ../sample-config-files/server.conf

После чего вы должны увидеть подобные строки:

Thu Aug 31 12:04:20 2006 OpenVPN 2.0.7 i486-pc-linux-gnu [SSL] [LZO] [EPOLL] built on Jul 22 2006
Thu Aug 31 12:04:20 2006 Diffie-Hellman initialized with 1024 bit key
Thu Aug 31 12:04:20 2006 TLS-Auth MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ]
Thu Aug 31 12:04:20 2006 TUN/TAP device tun0 opened
<Пропущено>
Thu Aug 31 12:04:20 2006 Initialization Sequence Completed

На клиенте (клиентах) выполните команду

openvpn --config client.conf

после чего проверьте наличие tun-интерфейса командой ifconfig:

ifconfig tun0
tun0 Link encap:UNSPEC HWaddr 00:00:00:00:00:00
inet addr:85.140.161.153 P-t-P:10.8.0.2 Mask:255.255.255.0
UP POINTOPOINT RUNNING MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:10
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

Обратите внимание на статус (UP): он означает, что интерфейс находится в активном состоянии. Если в вашей системе имеется более одного tun-интерфейса (это можно проверить командой ifconfig без параметров), замените tun0 на tun1, tun2 и т.п.

Если интерфейс сконфигурирован правильно, проверьте доступность других хостов. Когда путь к файлу соответствий «клиент-IP» (опция ifconfig-pool-persist в конфигурационном файле сервера) не указан, их адреса назначаются сервером OpenVPN случайным образом. Наберите:

ping 10.8.0.2

Вместо 10.8.0.2 подставьте IP-адрес, выданный командой ifconfig на другой машине. В случае, если интерфейс сконфигурирован правильно, но ответа не приходит, необходимо выяснить, разрешают ли правила межсетевого экрана ICMP-трафик. Приходящие ответы свидетельствуют о том, что VPN-соединение установлено и работает.

Почему OpenVPN?

Существует множество реализаций VPN, самые популярные из них – PPTP, FreeS/WAN (протокол IPSec) и OpenVPN. Почему же в этой статье мы рассмотрим именно последний вариант? PPTP навевает мысли о Microsoft, FreeS/WAN давно не обновлялся – на его официальном сайте сказано, что последняя версия датируется 22 апреля 2004 года, более того, дальнейших обновлений FreeS/WAN не будет, а это, согласитесь, недопустимо для проекта, одной из целей которого является обеспечение безопасности... OpenVPN же активно развивается и регулярно обновляется, использует стойкие криптографические алгоритмы и предлагает множество способов идентификации, в том числе комбинированных, что немаловажно для безопасности. Кроме того, OpenVPN работает на большинстве распространенных платформ – GNU/Linux, Windows NT начиная с 2000, OpenBSD, FreeBSD, NetBSD, Mac OS X, Solaris, благодаря чему его можно использовать в гетерогенных сетях. Все это, безусловно, делает OpenVPN лучшим выбором для организации VPN.

Где искать easy-rsa?

Каталог easy-rsa может находиться в /usr/share/doc/openvpn-2.0, /usr/share/doc/openvpn, /usr/share/doc/openvpn/examples или в /usr/share/doc/packages/openvpn – в зависимости от дистрибутива. Его также можно найти в архиве с исходными текстами.

Личные инструменты
  • Купить электронную версию
  • Подписаться на бумажную версию