LXF94:OpenVPN
Kipruss (обсуждение | вклад) (→Шаг 2: Создаем ключи) |
м |
||
(не показаны 8 промежуточных версий 3 участников) | |||
Строка 1: | Строка 1: | ||
== OpenVPN за 10 минут == | == OpenVPN за 10 минут == | ||
+ | ''Технология VPN во многом напоминает перевозку денег в бронированной инкассаторской машине по улицам многолюдного города. Но какую модель следует выбрать, чтобы ваши ценности не достались злоумышленникам? Спросите у '''Валентина Яценко'''.'' | ||
− | + | VPN – Virtual Private Network, Виртуальная Частная Сеть – технология, позволяющая соединять между собой локальные сети и отдельные компьютеры, находящиеся на расстоянии тысяч километров друг от друга; подключаться к локальной сети через Интернет, используя шифрованный канал связи, организовывать безопасный туннель для передачи важных данных... Возможности применения VPN безграничны! Вам необходимо соединить офисы в разных концах страны единой сетью, не прокладывая километры кабелей? Вы хотите подключаться к домашней локальной сети из Интернет-кафе? Требуется передать важные данные на большое расстояние без риска утечки информации? Может быть, большинство данных, которые вы передаете через Интернет, составляют тайну, и их необходимо обезопасить? Если вы хотя бы на один вопрос ответили утвердительно, VPN – это именно то, что вам нужно! | |
− | + | ||
− | + | ||
− | + | ||
− | VPN – | + | |
=== Шаг 1: Устанавливаем === | === Шаг 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: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 (см. [[LXF87-88:Безопасность|LXF87-88]]), которая, скорее всего, уже установлена в вашей системе. Проверьте это и, в случае необходимости, добавьте ее через менеджер пакетов вашего дистрибутива. |
− | ===Шаг 2: Создаем ключи=== | + | === Шаг 2: Создаем ключи === |
− | Итак, | + | Итак, OpenVPN установлен. Что дальше? В первую очередь необходимо создать ключи и сертификаты для сервера и клиентов. Скрипты, облегчающие эту задачу, находятся в каталоге easy-rsa (см. врезку «Где же easy-rsa?» внизу). |
− | В первую очередь, отредактируйте расположенный в нем файл vars. Установите значения переменных: | + | В первую очередь, отредактируйте расположенный в нем файл vars. Установите значения переменных: |
− | * '''KEY_COUNTRY''' – равным двухсимвольному коду вашей страны (для России это | + | *'''KEY_COUNTRY''' – равным двухсимвольному коду вашей страны (для России это RU). |
− | * '''KEY_PROVINCE''' – названию вашего региона (например, | + | *'''KEY_PROVINCE''' – названию вашего региона (например, Moscow region или MSK). |
− | * '''KEY_CITY''', соответственно – ваш город (скажем, | + | *'''KEY_CITY''', соответственно – ваш город (скажем, Moscow). |
− | * '''KEY_ORG''' – организация ( | + | *'''KEY_ORG''' – организация (OpenVPN Solutions подойдет). |
− | * '''KEY_EMAIL''' – ваш e-mail адрес ( | + | *'''KEY_EMAIL''' – ваш e-mail адрес (me@my.e-ma.il). |
Все эти данные необходимы для генерации сертификатов и ключей в соответствии со стандартом, поэтому оставлять какие-то переменные пустыми нельзя. | Все эти данные необходимы для генерации сертификатов и ключей в соответствии со стандартом, поэтому оставлять какие-то переменные пустыми нельзя. | ||
− | Также можно изменить параметр | + | Также можно изменить параметр 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. |
− | После создания корневого сертификата необходимо сгенерировать для сервера секретный ключ. В этом вам поможет скрипт | + | После создания корневого сертификата необходимо сгенерировать для сервера секретный ключ. В этом вам поможет скрипт buildkey-server. Как и в предыдущем случае, для большинства вопросов можно оставить ответы по умолчанию. На вопрос о Common Name введите “server”, на два последних вопроса (подписать ли сертификат и – каламбур, но перевод именно такой – сертифицировать ли его) ответьте утвердительно; когда вас спросят о пароле (“A challenge password”) – введите пароль для ключа сервера (запоминать его не нужно). Наберите |
− | можно оставить ответы по умолчанию. На вопрос о Common Name введите “server”, на два последних вопроса (подписать ли сертификат и – каламбур, но перевод именно такой – сертифицировать ли | + | |
− | его) ответьте утвердительно; когда вас спросят о пароле (“A challenge password”) – введите пароль для ключа сервера (запоминать его не нужно). Наберите | + | |
./build-key-server server | ./build-key-server server | ||
− | Далее, создайте ключи для необходимого количества клиентов. Эта процедура аналогична созданию ключа для сервера, за исключением того, что для клиентов ключи создаются скриптом | + | Далее, создайте ключи для необходимого количества клиентов. Эта процедура аналогична созданию ключа для сервера, за исключением того, что для клиентов ключи создаются скриптом build-key, а не buildkey-server. У каждого ключа, конечно же, должно быть указано свое значение в поле Common Name: |
./build-key clientname | ./build-key clientname | ||
− | Если вы хотите защитить паролем ключи клиентов, воспользуйтесь вместо | + | Если вы хотите защитить паролем ключи клиентов, воспользуйтесь вместо build-key скриптом build-key-pass. |
− | + | ||
+ | И наконец, в довершение ко всем сертификатам и ключам необходимо создать файл параметров Диффи [Diffie] и Хеллмэна [Hellman]. Алгоритм Диффи и Хеллмэна позволяет обмениваться секретными ключами по небезопасным каналам. Для их генерации запустите скрипт build-dh без параметров: | ||
./build-dh | ./build-dh | ||
− | Этот процесс занимает определенное время, поэтому владельцам слабых компьютеров стоит попить чаю, вместо того чтобы просто сидеть и ждать окончания работы скрипта. | + | Этот процесс занимает определенное время, поэтому владельцам слабых компьютеров стоит попить чаю, вместо того чтобы просто сидеть и ждать окончания работы скрипта. |
− | Если вам уже надоело возиться с ключами, сертификатами и прочим – не падайте духом: осталось только скопировать нужные файлы на клиентские компьютеры. Клиентам необходимы следующие | + | Если вам уже надоело возиться с ключами, сертификатами и прочим – не падайте духом: осталось только скопировать нужные файлы на клиентские компьютеры. Клиентам необходимы следующие файлы: |
− | файлы: | + | |
− | * '''ca.crt''' (Root CA certificate) необходим серверу и всем клиентам, он не | + | *'''ca.crt''' (Root CA certificate) необходим серверу и всем клиентам, он не является секретным. |
− | является секретным. | + | *'''clientname.crt''' (сертификат клиента clientname) необходим только клиенту clientname, он не является секретным. |
− | * '''clientname.crt''' (сертификат клиента | + | *'''clientname.key''' (ключ клиента clientname) необходим только клиенту clientname, это секретный ключ. |
− | * '''clientname.key''' (ключ клиента | + | |
− | Эти файлы можно найти в подкаталоге | + | Эти файлы можно найти в подкаталоге keys каталога easy-rsa. |
− | ===Шаг 3: Настраиваем=== | + | === Шаг 3: Настраиваем === |
− | Итак, у нас есть | + | Итак, у нас есть необходимые для работы OpenVPN файлы – все, кроме конфигурационных, созданием которых мы и займемся. Начнем с сервера. Для создания новых конфигурационных файлов удобно использовать примеры из поставки OpenVPN, они находятся в подкаталоге sample-config-files каталога OpenVPN (../sample-config-files, если вы находитесь в каталоге easy-rsa). В принципе, можно использовать стандартный конфигурационный файл для сервера, изменив некоторые параметры. Вот список этих параметров (некоторые из них, например, port и protocol, изменять не обязательно): |
− | * '''ca''' – полный путь до корневого сертификата, который мы создали скриптом | + | *'''ca''' – полный путь до корневого сертификата, который мы создали скриптом build-ca. |
− | * '''cert''' – полный путь до сертификата сервера, который мы создали его скриптом | + | *'''cert''' – полный путь до сертификата сервера, который мы создали его скриптом build-key-server. |
− | * '''key''' – путь до ключа сервера, созданного все тем же скриптом | + | *'''key''' – путь до ключа сервера, созданного все тем же скриптом build-key-server. |
− | * '''dh''' – путь до файла параметров Диффи и Хеллмэна, созданного скриптом | + | *'''dh''' – путь до файла параметров Диффи и Хеллмэна, созданного скриптом build-dh. |
− | * '''server''' – режим запуска | + | *'''server''' – режим запуска OpenVPN. В строке с режимом запуска для сервера должна быть указана подсеть и маска подсети (пример – server 10.8.0.0 255.255.255.0). Подсеть, указанная по умолчанию – 10.8.0.0/24. Если в вашей сети она уже используется, задайте другую локальную подсеть. |
− | * '''port''' – порт, на котором будет запущен сервер. Стандартный порт | + | *'''port''' – порт, на котором будет запущен сервер. Стандартный порт OpenVPN – 1194, но вы можете изменить его по своему желанию. |
− | * '''protocol''' – протокол. По умолчанию | + | *'''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 маска_подсети -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 или в скрипты загрузки. Затем необходимо включить маршрутизацию, записав в | + | Его необходимо сохранить, добавив в файл с правилами 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) и выполните: |
− | один, очень простой шаг. Надо запустить | + | |
− | и на всех клиентах. Для сервера: перейдите в каталог с ключами (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 < | + | 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 | ||
− | после чего проверьте наличие | + | после чего проверьте наличие 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): он означает, что интерфейс находится в активном состоянии. Если в вашей системе имеется более одного | + | Обратите внимание на статус (UP): он означает, что интерфейс находится в активном состоянии. Если в вашей системе имеется более одного tun-интерфейса (это можно проверить командой ifconfig без параметров), замените tun0 на tun1, tun2 и т.п. |
− | Если интерфейс сконфигурирован правильно, проверьте доступность других хостов. Когда путь к файлу соответствий «клиент-IP» (опция | + | Если интерфейс сконфигурирован правильно, проверьте доступность других хостов. Когда путь к файлу соответствий «клиент-IP» (опция ifconfig-pool-persist в конфигурационном файле сервера) не указан, их адреса назначаются сервером OpenVPN случайным образом. Наберите: |
ping 10.8.0.2 | 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 – в зависимости от дистрибутива. Его также можно найти в архиве с исходными текстами. |
Текущая версия на 03:44, 9 января 2011
|
|
|
Содержание |
[править] 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 – в зависимости от дистрибутива. Его также можно найти в архиве с исходными текстами.