Для начала я поставил на свой ноут (Ubuntu 9.04 Desktop) сам OpenVPN и сгенерировал все необходимые сертификаты, которые потом полетели на комп и серваки.
Ставим OpenVPN в ubnutu:
sudo aptitude install openvpnТеперь нужно сделать папку, в которую скопируем скрипты (в общем скрипты копировать не обязательно, но зато это удобнее):
mkdir ~/openvpnТеперь нам нужно экспортировать необходимые переменные (очень важно находиться в папке, из которой будут запускаться скрипты, у меня это ~/openvpn):
cp -vR /usr/share/doc/openvpn/examples/easy-rsa/2.0/* ~/openvpn
cd ~/openvpn
source ./varsЕсли в этом файле (./vars) подправить последние 5 строчек, то в дальнейшем в большинстве случаев вам не нужно будет вводить одно и тоже :) Вот эти строчки (дефолтовые):
export KEY_COUNTRY="US"Теперь делаем подготовку. Этот скрипт подготавливает минимум необходимого для начала работ по созданию сертификатов, а именно создает папку ./keys, в которой будут создаваться сертификаты, и в ней создает 2 файла index.txt и serial:
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"
./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 # Эту строчку надо расскомментировать, если сервер будет на пингвине, а т.ж. подправить пути к ключам и сертификатамТеперь нужно создать папку C:\Program Files\OpenVPN\config\clients с конфигами для каждого клиента. Я приведу пример только для одного, т.к. остальные создаются аналогично. Нужно создать файл C:\Program Files\OpenVPN\config\clients\helpdesk.server.ru.ovpn, который записать слудеющее:
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ваиваем ip-адрес клиентуЗамечу, что если у всех сетей будут одинаковые адреса (например, 3 сети и все 192.168.0.0/24), то компы, на которых стоит OpenVPN, могут жутко глючить с передачей пакетов, а то и вовсе не будут видеть сеть (ни OpenVPN, ни реальную).
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"
Переходим к клиентам. Тут я приведу пример для двух клиентов, на пингвине и винде. В первую очередь скопируем по безопасному каналу ключи и сертификаты на машины-клиенты. На понадобятся файлы 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Теперь можно запустить OpenVPN и проверить работу (потом лучше остановить, зачем он нам постоянно работающий на клиентах?):
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
sudo /etc/init.d/openvpn startНа винде все аналогично, за исключением путей. Ключи и сертификаты кладем в папку C:\Program Files\OpenVPN\config\keys, а конфиг в C:\Program Files\OpenVPN\config, только расширение я указал .ovpn, т.к. это нужно для виндового порта, т.е. имя файла конфига на виндовом клиенте у меня будет таким - to_root.server.ru.ovpn.
ping -c 3 10.77.0.1
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/.