Простая настройка OpenVPN с фиксированными адресами клиентов
В этой заметке подробно описана процедура настройки OpenVPN (virtual private network — виртуальная частная сеть), в рамках модели сервер-клиент и способ фиксации адресов клиентов в виртуальной сети, на базе сертификатной аутентификации. Эта технология позволяет быстро и экономично поднимать виртуальные локальные сети на базе существующих физических или интернета.
Стоит заметить, что компания OpenVPN предлагает использовать свой продукт OpenVPN Access Server (пакет openvpn-as) — сервер с возможностью настройки и контроля доступа через web-интерфейс, но, к сожалению, количество клиентов для него ограничено лицензией, поэтому опишем процедуру настройки пакета openvpn.
Прежде всего определимся с адресным диапазоном.
 Необходим один внешний фиксированный IP адрес для VPN-сервера (в том случае если VPN будет работать через интернет), условно обозначим его 9.9.9.9
 Диапазон внутренних адресов виртуальной сети мы предлагаем использовать такой: 192.168.10.2 — 192.168.10.99
Часть I — настройка сервера
Установим пакет из репозиториев, в Debian/Ubuntu это:
sudo apt-get install openvpn
После установки перейдем в папку со скриптами генерации ключей (в различных дистрибутивах путь может различаться):
cd /usr/share/doc/openvpn/examples/easy-rsa/2.0
Отредактируем файл переменных:
sudo nano vars
В файле vars измените следующие значения:
export KEY_DIR="/etc/openvpn/keys" # путь к папке где будут лежать ключи
 export KEY_COUNTRY="RU" # это и следующие значения изменяйте по-собственному усмотрению
 export KEY_PROVINCE="MS"
 export KEY_CITY="Moscow"
 export KEY_ORG="СompanyName"
 export KEY_EMAIL="some@address.ru"
Следующие команды рекомендуем выполнять под root’ом, дабы не возникло проблем с правами:
su
 mkdir /etc/openvpn/keys
 mkdir /etc/openvpn/ccd
 source ./vars
 ./clean-all
 ./build-dh
 ./pkitool --initca
 ./pkitool --server server
 ./pkitool client
 openvpn --genkey --secret ta.key
 mv ./ta.key /etc/openvpn/keys
Эти команды создают необходимые папки и генерируют сертификаты для сервера и клиентов с данными введенными в файл vars.
 Создадим файл настроек:
nano /etc/openvpn/openvpn.conf
В него добавьте следующий текст:
mode server # указывает программе работать в режиме сервера
 tls-server # активирует работу Transport Layer Security (криптографический протокол) сервера
 proto tcp-server # выбираем протокол TCP (если необходим UDP, тогда: proto udp)
 dev tap # используемый тип интерфейса - L2 туннель (для L3-туннеля: dev tun)
 port 1200 # указываем порт, по которому будет работать OpenVPN
 daemon # программа будет работать в режиме демона, если нет в этом необходимости - просто раскомментируйте строку
 tls-auth /etc/openvpn/keys/ta.key 0 # активирует дополнительный уровень аутентификации
 ca /etc/openvpn/keys/ca.crt # путь к корневому сертификату
 cert /etc/openvpn/keys/server.crt # путь к сертификату сервера
 key /etc/openvpn/keys/server.key # ключ сервера
 dh /etc/openvpn/keys/dh1024.pem # файл алгоритма Diffie-Hellman
 client-config-dir /etc/openvpn/ccd # путь к каталогу индивидуальных клиентских конфигураций
 ifconfig 192.168.10.1 255.255.255.0 # устанавливает виртуальный адрес сервера
 ifconfig-pool 192.168.10.2 192.168.10.99 # устанавливает диапазон виртуальных адресов для клиентов
 push "route 192.168.10.0 255.255.255.0 192.168.10.1" # эта команда будет выполняться на клиентских компьютерах, во время инициализации OpenVPN, она будет активировать роутинг так, чтобы клиенты автоматически использовали openvpn-сервер как шлюз для этой подсети
 duplicate-cn # включает возможность использования одного ключа несколькими клиентами
 verb 3 # указывает уровень отладки
 cipher DES-EDE3-CBC # шифрование по алгоритму DES-EDE3-CBC
 persist-key # будет загружать ключи в режиме persist, то есть их перезагрузка не потребуется в случае разрыва соединения
 log-append /var/log/openvpn.log # путь к файлу лога
 persist-tun # активирует работу tun/tap устройств в режиме persist
 comp-lzo # активирует использование сжатия
Всё, если процедура прошла без ошибок, то сервер готов. Перезапустите его командой:
sudo /etc/init.d/openvpn restart
Часть II — настройка клиента
Прежде всего установим пакет и создадим папку для хранения ключей:
sudo apt-get install openvpn
 sudo mkdir /etc/openvpn/keys
С сервера надо взять 4 файла:
ca.crt
 client.crt
 client.key
 ta.key
и скопировать их в папку /etc/openvpn/keys клиента.
Создаем файл-настроек клиента:
sudo nano /etc/openvpn/client.conf
Добавляем в него следующий текст:
tls-client # указывает программе работать в режиме клиента
 proto tcp-client # активирует протокол TCP
 remote 9.9.9.9 # внешний адрес сервера
 dev tap # используемый тип интерфейса - L2 туннель
 port 1200 # номер openvpn-порта сервера
 cd /etc/openvpn # указывает на директорию по-умолчанию
 pull # указывает принимать команды от сервера
 tls-auth /etc/openvpn/keys/ta.key 1 # активирует дополнительный уровень аутентификации
 ca /etc/openvpn/keys/ca.crt # путь к корневому сертификату сервера
 cert /etc/openvpn/keys/client.crt # путь к сертификату клиента
 key /etc/openvpn/keys/client.key # путь к ключу клиента
 cipher DES-EDE3-CBC # шифрование по алгоритму DES-EDE3-CBC
 log-append /var/log/openvpn.log # путь к файлу лога
 comp-lzo # активирует использование сжатия
Клиент готов, можно запускать:
sudo /etc/init.d/openvpn restart
После успешного запуска должен появиться виртуальный сетевой интерфейс с адресом в пределах выделенного на сервере диапазона.
Также, вероятно, вам потребуется настроить корректным образом роутинг на вашей клиентской машине. К примеру в linux для добавления маршрута к другой подсети доступной на сервере обычно это делается так:
sudo route add -net 192.168.5.0 netmask 255.255.255.0 gw 192.168.10.1 tap0
Также необходимые подсети вы можете добавить в конфигурационный файл сервера /etc/openvpn/openvpn.conf, добавив строки подобно этой:
push "route 192.168.5.0 255.255.255.0 192.168.10.1"
Это даст возможность не поднимать каждую подсеть вручную.
Часть III — настройка фиксированных адресов
Если есть необходимость в том, чтобы клиентские адреса не выдавались автоматически в пределах диапазона, а были всегда строго фиксированы, то достаточно выполнить следующие инструкции…
Информация о фиксированных адресах в нашем случае будет храниться на сервере, а назначаться они будут в соответствии с ключами (то есть каждый клиент с фиксированным адресом должен будет иметь свой уникальный ключ, ну а те клиенты, кому подходят динамические адреса — могут использовать общий клиентский ключ). Для этого на сервере генерируем два дополнительных ключа:
cd /usr/share/doc/openvpn/examples/easy-rsa/2.0
 source ./vars
 ./pkitool client1
 ./pkitool client2
Создаем файл для client1:
sudo nano /etc/openvpn/ccd/client1
В него добавляем строку:
ifconfig-push 192.168.10.51 255.255.255.0
Аналогичным образом сделаем и для client2:
sudo nano /etc/openvpn/ccd/client2
Где добавим строку:
ifconfig-push 192.168.10.52 255.255.255.0
Такая настройка сделает адрес client1 — 192.168.10.51, а client2 — 192.168.10.52.
 К этому стоит добавить, что эти файлы в папке ccd (параметр — client-config-dir) являются отдельными конфигурационными файлами клиентов, можете добавить в них какие-либо параметры по-своему усмотрению.
Настройка клиента для использования фиксированного адреса производится аналогично тому, как описано выше, единственное отличие в шагах, это то, что вместо client.crt и client.key вам надо скопировать и указать в файле конфигурации client1.crt и client1.key или client2.crt и client2.key соответственно.
06 Ноябрь 2012 г.
метки: