среда, 28 сентября 2011 г.

Настройка OpenVPN на примере UBUNTU

Понадобилось как то раз сделать распределенную локальную сеть поверх общедоступной (vpn от провайдера конечно было бы лучше но и дороже а руководство поставило жесткие лимиты по деньгам). 

После недолгих споров было решено делать сеть на OpenVPN. Установка из репозитория ничем особым не отличается и делается стандартным для Debian подобных дистрибутивов отбразом.
sudo apt-get install openvpn
 Для работы сети постореной на OpenVPN нужен хотьбы одна машина с статическим IP адрессом. Остальные элементы сети могут быть слюбыми типами адресации, в том числе и за NAT. После установки самое главное ,что нужно сделать и что было сделано это сгенерированы ключи. В примерах в сети народ использовал системное хранилище сертификатов. В нашем случае было решено так не делать и были использованы скрипты входящие в поставку OpenVPN. Итак по шагам что было выполнено :
1) в каталоге /etc/openvpn были созданы каталоги keys и ccd
2)  в каталоге /usr/share/doc/openvpn/examples/easy-rsa/2.0/ было произведено редактирование файла vars (обычный текстовик). В данном файле были изменены следующие секции :  export KEY_DIR=""  в данный параметр было вписано /etc/openvpn/keys  - там у нас будут лежать все сгенерированные ключи. Также заполнен раздел с ключами export KEY_COUNTRY, export KEY_PROVINCE и остальные до конца файла
3) Запускаем на выполнение файл vars. Данный файл всего лишь заполняет переменные окружения и вот тут то и была закопана первая грабля. Генерировать ключи нужно из под root в ubuntu  у root как всем известно вход в систему запрещен. Так как при выполнении из под sudo переменные сессии у root не заполнялись было применено не самое правильное и красивое (и тем более не unix-way решение). был запущен через sudo mc. Таким образом получили root-сессию. в ней была выполнена команда source "./vars" так как просто запуск vars не заполнял переменные (не знаю почему). Проверить что все занеслось туда куда надо можно с помощью команды export без параметров. В выводе должны быть переменные вида KEY_
4) Генерируем ca - сертификаты  ./build-ca
5) Генерируем dh - ./build-dh
6) Генерируем ключи сервера ./build-key-server name  (name имя ключа сервера). Должно создаться 3 файла с именем name файл index.txt и serial. Если при создании пишет про файл index.txt и файлов с именем name 2 то удаляем их и запускаем команду по новой.
7) Генерим ключи пользователей командой ./build-key name  (должны получаться три файла с именем name и файл вида цифры.pem) 
8) в каталоге /etc/openvpn создаем конфигурационный файл нашего VPN сервера, к примеру такой:

# режи работы демона
mode server

# внешний интерфейс
local 10.10.1.2
# порт на котором слушаем
port 1194

proto tcp-server
# виртуальное сетевое устройство (может быть tun или tap)
dev tun

#Пути до ключей
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/aquaserv.crt
key /etc/openvpn/keys/aquaserv.key

dh /etc/openvpn/keys/dh1024.pem

crl-verify /etc/openvpn/keys/crl.pem

#виртуальная сеть - у нас подсетей много поэтому такой диапазон
server 192.168.250.0 255.255.254.0

ifconfig-pool-persist ipp.txt
# установка маршритизации (в том числе и на клиенте)
push "route 192.168.0.0 255.255.128.0"
route 192.168.0.0 255.255.128.0

#включаем шифрование
cipher BF-CBC

#
# директория для клиентов
client-config-dir /etc/openvpn/ccd

# Для того что бы клиенты видели друг друга
client-to-client

# Проверка связи каждые 10 сек. Если в течении 120 сек
# ответа не будет, считается, что канал упал
keepalive 10 120

# Нужна ли компрессия соединения.
comp-lzo

persist-key
persist-tun

# Куда писать статус лог. Тут мы можем посмотреть кто законектился на сервер,
# с каким адресом и его route.
status openvpn-status.log
# Куда писать  лог.
log        /var/log/openvpn/openvpn.log
# Уровень логирования
verb 2
9) в каталоге /etc/openvpn/ccd прописываем файлы вида имя ключа клиента (без расширений) а в файле ставим команду iroute сеть маска к примеру если мы хотим что бы у нас виделась вся сеть клиента pupkin то пишем в файле /etc/openvpn/pupkin iroute 192.168.45.0 255.255.255.0 - т.е. для данного клиента мы выделили 255 адресов в 45 подсети.


10) Делаем конфигурационный файл для клиентов :
proto tcp-client

dev tun

tls-client

remote IP или Имя нашего VPN сервера

resolv-retry infinite
pull
nobind
redirect-gateway

persist-key
persist-tun
verb 3

comp-lzo

ca "C:\\Program Files\\OpenVPN\\key\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\key\\chm.crt"
key "C:\\Program Files\\OpenVPN\\key\\chm.key"
Данный конфигурационный файл приведен для Windows клиента. В *nix клиенте пути до файлов ключей должны быть прописаны в соответствии с
правилами описания ключей. ВАЖНО !!!! для Windows версии двойные левые слеши обязательны.

11) Устанавливаем клиента на клиентские станции. Для Windows в соответствии с правилами установки Windows - приложений для *nix -клиентов соответственно с правилами установки принятыми для вашего дистрибутива (к примеру для Ububutu - apt-get install openvpn)

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


13) На сервере OpenVPN запускаем его как демона. На клиентских станциях можно как демона/службу или запускать в ручном режиме по надобности.

14) После запуска смотрим что говорит route на клиентской машине ну и если ничего не запустилось вдумчиво читаем логи.

Комментариев нет:

Отправить комментарий