LXF94:OpenVPN

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

(Различия между версиями)
Перейти к: навигация, поиск
(Новая: == OpenVPN за 10 минут == ''Технология VPN во многом напоминает перевозку денег в бронированной инкассаторско...)
м
 
(10 промежуточных версий не показаны.)
Строка 1: Строка 1:
== OpenVPN за 10 минут ==
== OpenVPN за 10 минут ==
 +
''Технология VPN во многом напоминает перевозку денег в бронированной инкассаторской машине по улицам многолюдного города. Но какую модель следует выбрать, чтобы ваши ценности не достались злоумышленникам? Спросите у '''Валентина Яценко'''.''
-
''Технология VPN во многом напоминает перевозку денег в бронированной инкассаторской машине
+
VPN – Virtual Private Network, Виртуальная Частная Сеть – технология, позволяющая соединять между собой локальные сети и отдельные компьютеры, находящиеся на расстоянии тысяч километров друг от друга; подключаться к локальной сети через Интернет, используя шифрованный канал связи, организовывать безопасный туннель для передачи важных данных... Возможности применения VPN безграничны! Вам необходимо соединить офисы в разных концах страны единой сетью, не прокладывая километры кабелей? Вы хотите подключаться к домашней локальной сети из Интернет-кафе? Требуется передать важные данные на большое расстояние без риска утечки информации? Может быть, большинство данных, которые вы передаете через Интернет, составляют тайну, и их необходимо обезопасить? Если вы хотя бы на один вопрос ответили утвердительно, VPN – это именно то, что вам нужно!
-
по улицам многолюдного города. Но какую модель следует выбрать, чтобы ваши ценности не
+
-
достались злоумышленникам? Спросите у '''Валентина Яценко'''.''
+
-
 
+
-
VPN – Virtual Private Network, Виртуальная Частная Сеть – технология, позволяющая соединять между собой локальные сети и отдельные компьютеры, находящиеся на расстоянии тысяч километров друг от друга; подключаться к локальной сети через Интернет, используя шифрованный канал связи, организовывать безопасный туннель для передачи важных данных... Возможности применения VPN безграничны! Вам необходимо соединить офисы в разных концах страны единой сетью, не прокладывая километры кабелей? Вы хотите подключаться к домашней локальной сети из Интернет-кафе? Требуется передать важные данные на большое расстояние без риска утечки информации? Может быть, большинство данных, которые вы передаете через Интернет, составляют тайну, и их необходимо обезопасить? Если вы хотя бы на один вопрос ответили утвердительно, VPN – это именно то, что вам нужно!
+
=== Шаг 1: Устанавливаем ===
=== Шаг 1: Устанавливаем ===
-
Пакеты с ''OpenVPN'' доступны для большинства распространенных дистрибутивов, в том числе для RedHat/Fedora, Mandriva, OpenSUSE, Slackware, Debian и Ubuntu. Если ''OpenVPN'' не включен в ваш любимый дистрибутив, попробуйте поискать пакет на [http://rpmfind.net rpmfind.net] (для систем, использующих RPM) или [http://linuxpackages.net linuxpackages.net] (Slackware и производные) Наконец, программу можно загрузить в исходных текстах с официального сайта ([http://openvpn.net openvpn.net]).
+
Пакеты с OpenVPN доступны для большинства распространенных дистрибутивов, в том числе для RedHat/Fedora, Mandriva, OpenSUSE, Slackware, Debian и Ubuntu. Если OpenVPN не включен в ваш любимый дистрибутив, попробуйте поискать пакет на http://rpmfind.net (для систем, использующих RPM) или http://linuxpackages.net (Slackware и производные) Наконец, программу можно загрузить в исходных текстах с официального сайта (http://openvpn.net).
-
Для установки ''OpenVPN'' также необходимо установить ''OpenSSL'' (openssl.org) и ''liblzo'' (http://www.oberhumer.com/opensource/lzo), которые есть во многих дистрибутивах. Для работы ''OpenVPN'' нужен модуль ядра ''tun''. Он присутствует в большинстве систем, но если команда <font color=darkred>[modrpobe tun]</font> завершается с ошибкой «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'' самостоятельно (командой <font color=darkred>[modrpobe tun]</font>). Если вы планируете предоставлять клиентам доступ в Интернет через ''VPN'', необходимо настроить NAT (Network Address Translation). Скорее всего, это уже сделано за вас разработчиками дистрибутива, но на случай возникновения проблем имейте в виду, что нам потребуется опция <font color=darkred>[CONFIG_IP_NF_TARGET_MASQUERADE]</font> (Networking –> Networking options –> Network packet filtering –> IP tables support –> Full NAT). Для работы с NAT используется утилита ''iptables'' (см. [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: Создаем ключи ===
-
Итак, ''OpenVPN'' установлен. Что дальше? В первую очередь необходимо создать ключи и сертификаты для сервера и клиентов. Скрипты, облегчающие эту задачу, находятся в каталоге '''easy-rsa''' (''см. врезку «Где же easy-rsa?» внизу'').
+
Итак, OpenVPN установлен. Что дальше? В первую очередь необходимо создать ключи и сертификаты для сервера и клиентов. Скрипты, облегчающие эту задачу, находятся в каталоге easy-rsa (см. врезку «Где же easy-rsa?» внизу).
-
В первую очередь, отредактируйте расположенный в нем файл vars. Установите значения переменных:
+
В первую очередь, отредактируйте расположенный в нем файл vars. Установите значения переменных:
-
* '''KEY_COUNTRY''' – равным двухсимвольному коду вашей страны (для России это <font color=darkred>[RU]</font>).
+
*'''KEY_COUNTRY''' – равным двухсимвольному коду вашей страны (для России это RU).
-
* '''KEY_PROVINCE''' – названию вашего региона (например, <font color=darkred>[Moscow region]</font> или <font color=darkred>[MSK]</font>).
+
*'''KEY_PROVINCE''' – названию вашего региона (например, Moscow region или MSK).
-
* '''KEY_CITY''', соответственно – ваш город (скажем, <font color=darkred>[Moscow]</font>).
+
*'''KEY_CITY''', соответственно – ваш город (скажем, Moscow).
-
* '''KEY_ORG''' – организация (<font color=darkred>[OpenVPN Solutions]</font> подойдет).
+
*'''KEY_ORG''' – организация (OpenVPN Solutions подойдет).
-
* '''KEY_EMAIL''' – ваш e-mail адрес (<font color=darkred>[me@my.e-ma.il]</font>).
+
*'''KEY_EMAIL''' – ваш e-mail адрес (me@my.e-ma.il).
Все эти данные необходимы для генерации сертификатов и ключей в соответствии со стандартом, поэтому оставлять какие-то переменные пустыми нельзя.
Все эти данные необходимы для генерации сертификатов и ключей в соответствии со стандартом, поэтому оставлять какие-то переменные пустыми нельзя.
-
Также можно изменить параметр <font color=darkred>[KEY_SIZE]</font>, отвечающий за размер ключей (максимальный размер ключа, поддерживаемый ''OpenVPN'' – 2048 бит).
+
Также можно изменить параметр KEY_SIZE, отвечающий за размер ключей (максимальный размер ключа, поддерживаемый OpenVPN – 2048 бит).
Далее необходимо инициализировать переменные, используемые при создании публичного ключа командой
Далее необходимо инициализировать переменные, используемые при создании публичного ключа командой
-
. ./vars
+
. ./vars
-
 
+
и, на всякий случай, удалить существующие ключи командой
и, на всякий случай, удалить существующие ключи командой
./clean-all
./clean-all
-
После этого следует сгенерировать корневой сертификат (см. [LXF93]):
+
После этого следует сгенерировать корневой сертификат (см.[[LXF93:Электронные подписи|LXF93]]):
./build-ca
./build-ca
-
В процессе выполнения последнего скрипта вам будет задано несколько вопросов. Нужно ввести только Common Name для сертификата (например, RootCA), все остальные параметры уже заданы в качестве переменных окружения скриптом vars.
+
В процессе выполнения последнего скрипта вам будет задано несколько вопросов. Нужно ввести только Common Name для сертификата (например, RootCA), все остальные параметры уже заданы в качестве переменных окружения скриптом vars.
-
После создания корневого сертификата необходимо сгенерировать для сервера секретный ключ. В этом вам поможет скрипт ''build-key-server''. Как и в предыдущем случае, для большинства вопросов
+
После создания корневого сертификата необходимо сгенерировать для сервера секретный ключ. В этом вам поможет скрипт buildkey-server. Как и в предыдущем случае, для большинства вопросов можно оставить ответы по умолчанию. На вопрос о Common Name введите “server”, на два последних вопроса (подписать ли сертификат и – каламбур, но перевод именно такой – сертифицировать ли его) ответьте утвердительно; когда вас спросят о пароле (“A challenge password”) – введите пароль для ключа сервера (запоминать его не нужно). Наберите
-
можно оставить ответы по умолчанию. На вопрос о Common Name введите “server”, на два последних вопроса (подписать ли сертификат и – каламбур, но перевод именно такой – сертифицировать ли
+
-
его) ответьте утвердительно; когда вас спросят о пароле (“A challenge password”) – введите пароль для ключа сервера (запоминать его не нужно). Наберите
+
./build-key-server server
./build-key-server server
-
Далее, создайте ключи для необходимого количества клиентов. Эта процедура аналогична созданию ключа для сервера, за исключением того, что для клиентов ключи создаются скриптом <font color=darkred>[build-key]</font>, а не <font color=darkred>[build-key-server]</font>. У каждого ключа, конечно же, должно быть указано свое значение в поле Common Name:
+
Далее, создайте ключи для необходимого количества клиентов. Эта процедура аналогична созданию ключа для сервера, за исключением того, что для клиентов ключи создаются скриптом build-key, а не buildkey-server. У каждого ключа, конечно же, должно быть указано свое значение в поле Common Name:
./build-key clientname
./build-key clientname
-
Если вы хотите защитить паролем ключи клиентов, воспользуйтесь вместо ''build-key'' скриптом ''build-key-pass''. И наконец, в довершение ко всем сертификатам и ключам необходимо создать файл параметров Диффи [Diffie] и Хеллмэна [Hellman]. Алгоритм Диффи и Хеллмэна позволяет обмениваться секретными ключами по небезопасным каналам. Для их генерации запустите скрипт
+
Если вы хотите защитить паролем ключи клиентов, воспользуйтесь вместо build-key скриптом build-key-pass.
-
''build-dh'' без параметров:
+
 
 +
И наконец, в довершение ко всем сертификатам и ключам необходимо создать файл параметров Диффи [Diffie] и Хеллмэна [Hellman]. Алгоритм Диффи и Хеллмэна позволяет обмениваться секретными ключами по небезопасным каналам. Для их генерации запустите скрипт build-dh без параметров:
./build-dh
./build-dh
-
Этот процесс занимает определенное время, поэтому владельцам слабых компьютеров стоит попить чаю, вместо того чтобы просто сидеть и ждать окончания работы скрипта.
+
Этот процесс занимает определенное время, поэтому владельцам слабых компьютеров стоит попить чаю, вместо того чтобы просто сидеть и ждать окончания работы скрипта.
-
Если вам уже надоело возиться с ключами, сертификатами и прочим – не падайте духом: осталось только скопировать нужные файлы на клиентские компьютеры. Клиентам необходимы следующие
+
Если вам уже надоело возиться с ключами, сертификатами и прочим – не падайте духом: осталось только скопировать нужные файлы на клиентские компьютеры. Клиентам необходимы следующие файлы:
-
файлы:
+
-
* '''ca.crt''' (Root CA certificate) необходим серверу и всем клиентам, он не
+
*'''ca.crt''' (Root CA certificate) необходим серверу и всем клиентам, он не является секретным.
-
является секретным.
+
*'''clientname.crt''' (сертификат клиента clientname) необходим только клиенту clientname, он не является секретным.
-
* '''clientname.crt''' (сертификат клиента <font color=darkred>[clientname]</font>) необходим только клиенту <font color=darkred>[clientname]</font>, он не является секретным.
+
*'''clientname.key''' (ключ клиента clientname) необходим только клиенту clientname, это секретный ключ.
-
* '''clientname.key''' (ключ клиента <font color=darkred>[clientname]</font>) необходим только клиенту clientname, это секретный ключ.
+
-
Эти файлы можно найти в подкаталоге '''keys''' каталога '''easy-rsa'''.
+
Эти файлы можно найти в подкаталоге keys каталога easy-rsa.
-
===Шаг 3: Настраиваем===
+
=== Шаг 3: Настраиваем ===
-
Итак, у нас есть все необходимые для работы ''OpenVPN'' файлы – все, кроме конфигурационных, созданием которых мы и займемся. Начнем с сервера. Для создания новых конфигурационных файлов удобно использовать примеры из поставки ''OpenVPN'', они находятся в подкаталоге '''sample-config-files''' каталога ''OpenVPN'' ('''../sample-config-files''', если вы находитесь в каталоге '''easy-rsa'''). В принципе, можно использовать стандартный конфигурационный файл для сервера, изменив некоторые параметры. Вот список этих параметров (некоторые из них, например, <font color=darkred>[port]</font> и <font color=darkred>[protocol]</font>, изменять не обязательно):
+
Итак, у нас есть необходимые для работы OpenVPN файлы – все, кроме конфигурационных, созданием которых мы и займемся. Начнем с сервера. Для создания новых конфигурационных файлов удобно использовать примеры из поставки OpenVPN, они находятся в подкаталоге sample-config-files каталога OpenVPN (../sample-config-files, если вы находитесь в каталоге easy-rsa). В принципе, можно использовать стандартный конфигурационный файл для сервера, изменив некоторые параметры. Вот список этих параметров (некоторые из них, например, port и protocol, изменять не обязательно):
-
* '''ca''' – полный путь до корневого сертификата, который мы создали скриптом ''build-ca''.
+
*'''ca''' – полный путь до корневого сертификата, который мы создали скриптом build-ca.
-
* '''cert''' – полный путь до сертификата сервера, который мы создали его скриптом ''build-key-server''.
+
*'''cert''' – полный путь до сертификата сервера, который мы создали его скриптом build-key-server.
-
* '''key''' – путь до ключа сервера, созданного все тем же скриптом ''build-key-server''.
+
*'''key''' – путь до ключа сервера, созданного все тем же скриптом build-key-server.
-
* '''dh''' – путь до файла параметров Диффи и Хеллмэна, созданного скриптом ''build-dh''.
+
*'''dh''' – путь до файла параметров Диффи и Хеллмэна, созданного скриптом build-dh.
-
* '''server''' – режим запуска ''OpenVPN''. В строке с режимом запуска для сервера должна быть указана подсеть и маска подсети (пример – <font color=darkred>[server 10.8.0.0 255.255.255.0]</font>). Подсеть, указанная по умолчанию – 10.8.0.0/24. Если в вашей сети она уже используется, задайте другую локальную подсеть.
+
*'''server''' – режим запуска OpenVPN. В строке с режимом запуска для сервера должна быть указана подсеть и маска подсети (пример – server 10.8.0.0 255.255.255.0). Подсеть, указанная по умолчанию – 10.8.0.0/24. Если в вашей сети она уже используется, задайте другую локальную подсеть.
-
* '''port''' – порт, на котором будет запущен сервер. Стандартный порт ''OpenVPN'' – 1194, но вы можете изменить его по своему желанию.
+
*'''port''' – порт, на котором будет запущен сервер. Стандартный порт OpenVPN – 1194, но вы можете изменить его по своему желанию.
-
* '''protocol''' – протокол. По умолчанию ''OpenVPN'' использует экономичный UDP, но вы можете предпочесть надежный TCP.
+
*'''protocol''' – протокол. По умолчанию OpenVPN использует экономичный UDP, но вы можете предпочесть надежный TCP.
Если вы не сторонник конфигураций по умолчанию, отредактируйте файл в соответствии со своими предпочтениями. Если же вы не хотите тратить на это время, то можете использовать мой вариант, составленный специально для этой статьи. Вы найдете его на прилагаемом к журналу диске.
Если вы не сторонник конфигураций по умолчанию, отредактируйте файл в соответствии со своими предпочтениями. Если же вы не хотите тратить на это время, то можете использовать мой вариант, составленный специально для этой статьи. Вы найдете его на прилагаемом к журналу диске.
-
Для создания конфигурационного файла клиента также можно использовать пример, идущий в поставке с ''OpenVPN''. В нем надо изменить пути к необходимым файлам на свои, указать адрес и порт сервера в директиве remote и, кроме того, удостоверится, что выбранные настройки совпадают с настройками сервера (протокол, сжатие и т.п.). Пример конфигурационного файла клиента можно также взять с диска LXF. Тех же, кто хочет предоставлять ''VPN''-клиентам доступ в Интернет, ждет еще один шаг: включение NAT (Network Address Translation, Трансляция сетевых адресов) и настройка маршрутизации. Для начала необходимо написать соответствующее правило ''IPTables'':
+
Для создания конфигурационного файла клиента также можно использовать пример, идущий в поставке с OpenVPN. В нем надо изменить пути к необходимым файлам на свои, указать адрес и порт сервера в директиве remote и, кроме того, удостоверится, что выбранные настройки совпадают с настройками сервера (протокол, сжатие и т.п.). Пример конфигурационного файла клиента можно также взять с диска LXF. Тех же, кто хочет предоставлять VPN-клиентам доступ в Интернет,
 +
ждет еще один шаг: включение NAT и настройка маршрутизации. Для начала необходимо написать соответствующее правило IPTables:
-
iptables -t nat -A POSTROUTING -s маска_подсети -o внешний_интерфейс -j MASQUERADE
+
iptables -t nat -A POSTROUTING -s маска_подсети -o внешний_интерфейс -j MASQUERADE
например:
например:
Строка 94: Строка 89:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o ppp0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o ppp0 -j MASQUERADE
-
Его необходимо сохранить, добавив в файл с правилами iptables или в скрипты загрузки. Затем необходимо включить маршрутизацию, записав в '''/etc/sysctl.conf''' строку <font color=darkred>[“net.ipv4.ip_forward = 1”]</font> и выполнив команду
+
Его необходимо сохранить, добавив в файл с правилами iptables или в скрипты загрузки. Затем необходимо включить маршрутизацию, записав в /etc/sysctl.conf строку “net.ipv4.ip_forward = 1” и выполнив команду
sysctl -w net.ipv4.ip_forward=1
sysctl -w net.ipv4.ip_forward=1
-
===Шаг 4: Проверка связи===
+
=== Шаг 4: Проверка связи ===
-
Если вы дошли до этого места, спешу вас обрадовать – остался всего
+
Если вы дошли до этого места, спешу вас обрадовать – остался всего один, очень простой шаг. Надо запустить OpenVPN на сервере, а потом и на всех клиентах. Для сервера: перейдите в каталог с ключами (keys) и выполните:
-
один, очень простой шаг. Надо запустить ''OpenVPN'' на сервере, а потом
+
-
и на всех клиентах. Для сервера: перейдите в каталог с ключами (keys)
+
-
и выполните:
+
openvpn --config ../sample-config-files/server.conf
openvpn --config ../sample-config-files/server.conf
Строка 112: Строка 104:
Thu Aug 31 12:04:20 2006 Diffie-Hellman initialized with 1024 bit key
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 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 <Skipped>
+
Thu Aug 31 12:04:20 2006 TUN/TAP device tun0 opened
 +
<Пропущено>
Thu Aug 31 12:04:20 2006 Initialization Sequence Completed
Thu Aug 31 12:04:20 2006 Initialization Sequence Completed
Строка 119: Строка 112:
openvpn --config client.conf
openvpn --config client.conf
-
после чего проверьте наличие <font color=darkred>[tun]</font>-интерфейса командой <font color=darkred>[ifconfig]</font>:
+
после чего проверьте наличие tun-интерфейса командой ifconfig:
ifconfig tun0
ifconfig tun0
Строка 128: Строка 121:
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:10
collisions:0 txqueuelen:10
-
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
+
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
-
Обратите внимание на статус (UP): он означает, что интерфейс находится в активном состоянии. Если в вашей системе имеется более одного <font color=darkred>[tun]</font>-интерфейса (это можно проверить командой <font color=darkred>[ifconfig]</font> без параметров), замените <font color=darkred>[tun0]</font> на <font color=darkred>[tun1]</font>, <font color=darkred>[tun2]</font> и т.п.
+
Обратите внимание на статус (UP): он означает, что интерфейс находится в активном состоянии. Если в вашей системе имеется более одного tun-интерфейса (это можно проверить командой ifconfig без параметров), замените tun0 на tun1, tun2 и т.п.
-
Если интерфейс сконфигурирован правильно, проверьте доступность других хостов. Когда путь к файлу соответствий «клиент-IP» (опция <font color=darkred>[ifconfig-pool-persist]</font> в конфигурационном файле сервера) не указан, их адреса назначаются сервером ''OpenVPN'' случайным образом. Наберите:
+
Если интерфейс сконфигурирован правильно, проверьте доступность других хостов. Когда путь к файлу соответствий «клиент-IP» (опция ifconfig-pool-persist в конфигурационном файле сервера) не указан, их адреса назначаются сервером OpenVPN случайным образом. Наберите:
ping 10.8.0.2
ping 10.8.0.2
-
Вместо <font color=darkred>[10.8.0.2]</font> подставьте IP-адрес, выданный командой <font color=darkred>[ifconfig]</font> на другой машине. В случае, если интерфейс сконфигурирован правильно, но ответа не приходит, необходимо выяснить, разрешают ли правила межсетевого экрана ICMP-трафик.
+
Вместо 10.8.0.2 подставьте IP-адрес, выданный командой ifconfig на другой машине. В случае, если интерфейс сконфигурирован правильно, но ответа не приходит, необходимо выяснить, разрешают ли правила межсетевого экрана ICMP-трафик. Приходящие ответы свидетельствуют о том, что VPN-соединение установлено и работает.
-
 
+
-
Приходящие ответы свидетельствуют о том, что ''VPN''-соединение установлено и работает.
+
-
 
+
-
===Примечание 1. Врезки===
+
-
 
+
-
'''Почему OpenVPN?'''
+
-
 
+
-
Существует множество реализаций VPN, самые популярные из них – PPTP, ''FreeS/WAN'' и ''OpenVPN''. Почему же в этой статье мы рассмотрим именно последний вариант? PPTP навевает мысли о Microsoft, ''FreeS/WAN'' давно не обновлялся – на его официальном сайте сказано, что последняя версия датируется 22 апреля 2004 года, более того, дальнейших обновлений ''FreeS/WAN'' не будет, а это, согласитесь, недопустимо для проекта, одной из целей которого является обеспечение безопасности... ''OpenVPN'' же активно развивается и регулярно обновляется, использует стойкие криптографические алгоритмы и предлагает множество способов идентификации, в том числе комбинированных, что немаловажно для безопасности. Кроме того, ''OpenVPN'' работает на большинстве распространенных платформ – Linux, Windows 2000/XP, 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/openvpn''' или в '''/usr/share/doc/packages/openvpn''' – в зависимости от дистрибутива. Его также можно найти в архиве с исходными текстами.
+
-
 
+
-
===Примечание 2. Примеры конфигурационных файлов (с диска)===
+
-
 
+
-
'''server.conf'''
+
-
# Конфигурационный файл сервера OpenVPN (Linux-версия)
+
== Почему OpenVPN? ==
-
# Порт
+
-
port 1194
+
-
# Протокол
+
-
proto udp
+
-
# Использовать tun (tunneling) вместо tap (ethernet bridging)
+
-
dev tun
+
-
# Полные пути к необходимым файлам (измените на свои пути)
+
-
ca /usr/local/etc/openvpn/easy-rsa/keys/ca.crt
+
-
cert /usr/local/etc/openvpn/easy-rsa/keys/server.crt
+
-
key /usr/local/etc/openvpn/easy-rsa/keys/server.key
+
-
# Путь к dh (измените на свой)
+
-
dh dh1024.pem
+
-
# Режим сервера,подсеть 10.8.0.0/24
+
-
server 10.8.0.0 255.255.255.0
+
-
# Файл соответствий клиент - виртуальный IP (по-умолчанию выдаётся динамический IP)
+
-
ifconfig-pool-persist ipp.txt
+
-
# Раскомментируйте если хотите, чтобы клиенты "видели" друг друга
+
-
;client-to-client
+
-
# Отключать после ... секунд без обмена данными (второй параметр)
+
-
keepalive 10 120
+
-
# Включить сжатие
+
-
comp-lzo
+
-
# Максимум клиентов одновременно - раскомментируйте если вам нужно ограничение по числу клиентов
+
-
;max-clients 100
+
-
# Снижение привилегий до указанных (в целях безопасности) (раскомментируйте если необходимо, в этом случае OpenVPN надо запускать с правами root)
+
-
;user nobody
+
-
;group nogroup
+
-
'''client.conf'''
+
Существует множество реализаций 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.
-
# Конфигурационный файл клиента OpenVPN (Linux-версия)
+
== Где искать easy-rsa? ==
-
client
+
-
# Использовать tun (tunneling) вместо tap (ethernet bridging)
+
-
dev tun
+
-
# Протокол
+
-
proto udp
+
-
# Адрес и порт сервера
+
-
remote 192.168.0.1 1194
+
-
# Если не получается установить соответствие между именем и адресом сервера - продолжать попытки
+
-
resolv-retry infinite
+
-
# Для клиента не нужно слушать порты
+
-
nobind
+
-
# Снижение привилегий до указанных (в целях безопасности) (раскомментируйте если необходимо, в этом случае OpenVPN надо запускать с правами root)
+
-
;user nobody
+
-
;group nogroup
+
-
# Сохранять определённые параметры
+
-
persist-key
+
-
persist-tun
+
-
# Полные пути к необходимым файлам (измените на свои пути)
+
-
ca /home/qweo/tmp/article/keys/ca.crt
+
-
cert /home/qweo/tmp/article/keys/clientname.crt
+
-
key /home/qweo/tmp/article/keys/clientname.key
+
-
# Включить сжатие (не включайте сжатие если на сервере оно отключено)
+
-
comp-lzo
+
-
# Уровень журналирования
+
-
verb 3
+
-
--[[Участник:Kipruss|Kipruss]] 00:35, 16 марта 2008 (MSK)
+
Каталог easy-rsa может находиться в /usr/share/doc/openvpn-2.0, /usr/share/doc/openvpn, /usr/share/doc/openvpn/examples или в /usr/share/doc/packages/openvpn – в зависимости от дистрибутива. Его также можно найти в архиве с исходными текстами.

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

Содержание

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 – в зависимости от дистрибутива. Его также можно найти в архиве с исходными текстами.

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