Система Orphus

вторник, 7 июля 2009 г.

OpenVPN: Мой опыт

Буквально перед отпуском надо было настроить 3 сервера и 1 комп на резервное копирование, которые территориально разнесены. Времени было мало. Вариантов было много... Но я остановился именно на OpenVPN, как не наиболее гибком (его ведь можно и для других целей использовать) и безопасном (трафик ведь шифруется) решении.
Один из серверов на Ubuntu 8.04.3 Server, 2 на винде 2000 и 2003 и комп на винде ХРюшке домашней. Данные надо было бэкапить на сервак с 2003 виндой, поэтому он выступает в роли OpenVPN сервера.

Для начала я поставил на свой ноут (Ubuntu 9.04 Desktop) сам OpenVPN и сгенерировал все необходимые сертификаты, которые потом полетели на комп и серваки.
Ставим OpenVPN в ubnutu:
sudo aptitude install openvpn
Теперь нужно сделать папку, в которую скопируем скрипты (в общем скрипты копировать не обязательно, но зато это удобнее):
mkdir ~/openvpn
cp -vR /usr/share/doc/openvpn/examples/easy-rsa/2.0/* ~/openvpn
cd ~/openvpn
Теперь нам нужно экспортировать необходимые переменные (очень важно находиться в папке, из которой будут запускаться скрипты, у меня это ~/openvpn):
source ./vars
Если в этом файле (./vars) подправить последние 5 строчек, то в дальнейшем в большинстве случаев вам не нужно будет вводить одно и тоже :) Вот эти строчки (дефолтовые):
export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"
Теперь делаем подготовку. Этот скрипт подготавливает минимум необходимого для начала работ по созданию сертификатов, а именно создает папку ./keys, в которой будут создаваться сертификаты, и в ней создает 2 файла index.txt и serial:
./clean-all
Настало время сгенерировать корневой сертификат и Diffie-Hellman, а т.ж. ключ для tls аутентификафии. Запускаем:
./build-ca
./build-dh
openvpn --genkey --secret keys/tls.key
Часть работы сделана. Теперь нужно создать ключи для сервера и клиентов. Создаем ключ для сервера:
./build-key-server root.server.ru
И для клиетов:
./build-key helpdesk.server.ru
./build-key mail.server.ru
./build-key KM.Guest

С ключами и сетификатами закончили. Теперь пора переходить к настройке OpenVPN сервера. Для начала нужно скачать и установить сам OpenVPN. Я его взял на сайте http://openvpn.se/ (мне он больше нравится). Теперь необходимо скопировать по безопасному каналу созданные ключи и сертификаты на сервер в папку C:\Program Files\OpenVPN\config\keys из папки ~/openvpn/keys. Теперь нужно создать файл с конфигом, я его расположил в C:\Program Files\OpenVPN\config\server.ovpn (дефолтовый путь). Создаем этот файл и пишем в него слующее:
#daemon # Эту строчку надо расскомментировать, если сервер будет на пингвине, а т.ж. подправить пути к ключам и сертификатам
mode server
tls-server
ifconfig 10.77.0.1 255.255.255.0
port 1194
proto tcp-server
dev tap
keepalive 10 120
# client-to-client # Это чтобы клиенты могли обмениваться трафиком, но для режима tun
comp-lzo
persist-key
persist-tun # В режиме tap игнорируется, но почему добавил уже не помню
ca "C:\\Program Files\\OpenVPN\\config\\keys\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\config\\keys\\root.server.ru.crt"
key "C:\\Program Files\\OpenVPN\\config\\keys\\root.server.ru.key"
dh "C:\\Program Files\\OpenVPN\\config\\keys\\dh1024.pem"
tls-auth "C:\\Program Files\\OpenVPN\\config\\keys\\tls.key"
client-config-dir "C:\\Program Files\\OpenVPN\\config\\clients" # Тут у нас будут лежать конфиги для клиентов
#push "route 10.77.0.0 255.255.255.0 10.77.0.1" # Мне не нужно видеть внутренню сеть за серверами, поэтому я эту команду не использую
verb 3
log-append "C:\\Program Files\\OpenVPN\\config\\openvpn.log"
status "C:\\Program Files\\OpenVPN\\config\\openvpn.stat"
Теперь нужно создать папку C:\Program Files\OpenVPN\config\clients с конфигами для каждого клиента. Я приведу пример только для одного, т.к. остальные создаются аналогично. Нужно создать файл C:\Program Files\OpenVPN\config\clients\helpdesk.server.ru.ovpn, который записать слудеющее:
# приcваиваем ip-адрес клиенту
ifconfig-push 10.77.0.11 255.255.255.0
# роутинг на сеть сервера (чтобы видеть его локальную сеть)
#push "route 192.168.0.0 255.255.255.0 10.77.0.1"
# роутинг на сеть второго клиента (это чтобы клиенты могли обмениваться трафиком)
#push "route 192.168.2.0 255.255.255.0 10.77.0.12"
Замечу, что если у всех сетей будут одинаковые адреса (например, 3 сети и все 192.168.0.0/24), то компы, на которых стоит OpenVPN, могут жутко глючить с передачей пакетов, а то и вовсе не будут видеть сеть (ни OpenVPN, ни реальную).

Переходим к клиентам. Тут я приведу пример для двух клиентов, на пингвине и винде. В первую очередь скопируем по безопасному каналу ключи и сертификаты на машины-клиенты. На понадобятся файлы tls.key, helpdesk.server.ru.* и ca.crt (они уже лежат на сервере в каталоге C:\Program Files\OpenVPN\config\keys, ты ведь их копировал), их надо скопировать в каталог /etc/openvpn/keys клиента. Теперь в папке /etc/openvpn нужно создать файл с произвольным имененем и расширением (суффиксом) .conf, я обозвал его to_root.server.ru.conf, и заполнить следующим содержанием:
client
pull
tls-client
dev tap
proto tcp
remote root.server.ru 1194 # Правда я указал IP-адрес сервера
resolv-retry infinite
nobind
persist-key
persist-tun
comp-lzo
ns-cert-type server
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/helpdesk.server.ru.crt
key /etc/openvpn/keys/helpdesk.server.ru.key
tls-auth /etc/openvpn/keys/tls.key
log-append /var/log/openvpn.log
status /var/log/openvpn.stat
Теперь можно запустить OpenVPN и проверить работу (потом лучше остановить, зачем он нам постоянно работающий на клиентах?):
sudo /etc/init.d/openvpn start
ping -c 3 10.77.0.1
На винде все аналогично, за исключением путей. Ключи и сертификаты кладем в папку C:\Program Files\OpenVPN\config\keys, а конфиг в C:\Program Files\OpenVPN\config, только расширение я указал .ovpn, т.к. это нужно для виндового порта, т.е. имя файла конфига на виндовом клиенте у меня будет таким - to_root.server.ru.ovpn.
client
pull
tls-client
dev tap
proto tcp
remote root.server.ru 1194 # Правда я указал IP-адрес сервера
resolv-retry infinite
nobind
persist-key
persist-tun
comp-lzo
ns-cert-type server
ca "C:\\Program Files\\OpenVPN\\config\\keys\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\config\\keys\\helpdesk.server.ru.crt"
key "C:\\Program Files\\OpenVPN\\config\\keys\\helpdesk.server.ru.key"
tls-auth "C:\\Program Files\\OpenVPN\\config\\keys\\tls.key"
log-append "C:\\Program Files\\OpenVPN\\config\\openvpn.log"
status "C:\\Program Files\\OpenVPN\\config\\openvpn.stat"
И точно так же проверяем работоспособность:
net start OpenVPNService
ping -n 3 10.77.0.1

На этом настройка OpenVPN закончена :) Ну а раз речь шла о бэкапах, то приведу пару очень простых примеров, по одному для винды и пингвина.
# Копирование бэкапов (Linux)
/etc/init.d/openvpn start >>~/copy_bak.log 2&>1
sleep 3s
smbmount //10.77.0.1/bak ~/smb/ -o rw,iocharset=utf8,codepage=cp866,username='UserName',password='passwd' >>~/copy_bak.log 2&>1
sleep 3s
cp -Rfv /backup/folder ~/smb/ >>~/copy_bak.log 2&>1
sleep 5s
smbumount ~/smb/ >>~/copy_bak.log 2&>1
/etc/init.d/openvpn stop >>~/copy_bak.log 2&>1


# Копирование бэкапов (Windows) (тут пинг выступает в роли паузы)
net start OpenVPNService
ping -n 10 localhost
net use S: \\10.77.0.1\baks "PaSSwd" /user:UserName
ping -n 5 localhost
xcopy C:\path S:\ /e /h /r /y /f
ping -n 5 localhost
net use S: /delete
net stop OpenVPNService


ЗЫЖ-1 Не ручаюсь, что все сделал правильно. Это мой первый опыт. Комменты приветствуются.
ЗЫЖ-2 Выложил раньше времени, т.к. одному человеку сильно нужна была помощь. Жалко мне его стало :)
ЗЫЖ-3 Очень хороший ЧАВО по OpenVPN





Информация с сайта http://angel2s2.blogspot.com/. Если Вы читаете информацию на другом сайте, пожалуйста свяжитесь с автором сайта http://angel2s2.blogspot.com/.

Похожие статьи

8 коммент.:

Olly Cat комментирует... вторник, 7 июля 2009 г., 16:42:00 GMT+3

ИМХО лучше было использовать udp а не tcp. :)

Angel 2S2 комментирует... среда, 8 июля 2009 г., 18:07:00 GMT+3

Я знаю, что он быстрее, но не надежный он...
А у меня резервное копирование идет и мне важно чтобы все было передано без потерь. Но т.к. сервера очень далеко друг от друга (физическо-территориально), то потеря пакетов вполне возможна.
Я просто не стал рисковать...

Анонимный комментирует... среда, 4 августа 2010 г., 14:20:00 GMT+3

Angel 2S2 С вами все получается,спасибО! =)

Angel2S2 комментирует... среда, 4 августа 2010 г., 14:25:00 GMT+3

Не за что :)

Анонимный комментирует... четверг, 5 августа 2010 г., 8:06:00 GMT+3

Кстати, что-то я немного запутался! =)
Вроде все сделал, только когда подключаюсь с клиента через OpenVPN client(взял его с openvpn.net), он спрашивает логин и пароль...
Я ни логина ни пароля не знаю... :)

Angel2S2 комментирует... четверг, 5 августа 2010 г., 14:44:00 GMT+3

Если вы по статье настраивали, то тут авторизация идет по ключам и никаких логинов/паролей не требует.
Клиентами я никогда никакими не пользовался. Просто создавал конфиг и запускал OpenVPN сервис, который просто читает конфиг и подключается к серверу.
Можете попробовать этот GUI - http://openvpn.se/ - может понравится. Его я использовал однажды, для быстрого переключения между серверами, подключения и отключения. Логинов и паролей у меня он не просил.

dontfear комментирует... среда, 14 декабря 2011 г., 22:09:00 GMT+3

А не легче использовать хамачи для этих целей ? для дома - халява, в офис - достаточно дешево.

Roman Shagrov комментирует... четверг, 15 декабря 2011 г., 9:08:00 GMT+3

Честно сказать, не знаю. Пробовал хамачи ооочень давно, когда он еще только беткой был. ОпенВПН выбрал т.к. полностью бесплатно (бюджет был нулевой) и хотелось самому разобраться в нем.

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