Объявление

Хотите приглашение на сайт? Пишите: niikto@samovarchik.info


 

Есть: несколько филиалов компании все компьютеры которых в сети 192.168.13.0/24 работают под WindowsXP SP3
Задача: организовать связь между филиалами
Замечание: При использовании OpenVPN есть два варианта реализации: с использованием tun или tap интерфейсов (tun = L3-туннель, tap = L2-туннель).
Мы выбрали tun по двум причинам:
1. Тестирование показало нестабильную работу моста из tap интерфейса (TAP Win32 Adapter v9) и интерфейса смотрящего в локальную сеть (проверялось с сетевыми картами RTL8139 и Realtek PCIe GBE Family Controller) в WindowsXP sp3: через различные промежутки времени "отваливался" внутренний интерфейс шлюза.
2. При использовании tap сегменты соединяются как будто они соединены обычным кабелем через свитчи (во всех сегментах одинаковые маски подсети). В нашем случае во время внедрения такая конфигурация была возможна, но при увеличении числа активных сетевых устройств пришлось бы переводить все сетевые устройства на маску 255.255.0.0.

По этим причинам и был выбран вариант с использованием tun, но предварительно в сегментах сети провели подготовительные работы по изменению номера подсети (192.168.14.0/24).

Первоначальная установка состоит из трех основных этапов:

Установка OpenVPN

Windows:

Качаем инсталлятор http://openvpn.se/download.html
Устанавливаем в D:\OpenVPN\
Созданный адаптер переименовываем в openvpn


Если используется конфигурация на tap-адаптерах, то создаем сетевой мост на компьютерах.
Выделяем адаптер смотрящий в локальную сеть lan_xxx и OpenVPN. ПКМ - Подключения типа мост
Ждем некоторое время пока создастся мост.
В настройках tcp/ip моста указываем параметры адаптера локальной сети (как правило IP и маску)

Иногда появляется сообщение что нужно выбирать адаптеры без общего доступа.
Тогда снимаем общий доступ с wan подключения и пробуем опять сделать мост.

При возврате wan подключению общего доступа могут также появляться ошибки.
Тогда нужно в параметрах tcp/ip подключения wan выставить автоматическое получение ip адреса. И после разрешения общего доступа проверить и при необходимости исправить TCP/IP конфигурацию моста и wan подключения.
Созданный мост переименовываем в OpenVPN Bridge

Конфигурируем TrafficInspector
Конфигуратор - Настройка служб TI - Далее - Далее - Далее - Внутренние интерфейсы выбираем OpenVPN Bridge - Далее - Далее - Внешний интерфейс WAN - Далее - Далее - Далее - Готово




Linux:

ставим пакеты openvpn и openvpn-blacklist, и openssl для генерации сертификатов если еще не установлено
Настройка ротации логов open vpn для webmin:
Log File Rotation -  Add a new log file to rotate

Log file paths - путь к лог файлам
Rotation schedule Default (weekly) - периодичность, на свое усмотрение
Maximum size before rotating     Default (Never)   bytes - если нужно можно указать максимальный размер лога
Number of old logs to keep     Default (4)   - количество хранимых копий
Compress old log files?     Да - сжатие архивных логов
Delay compression till next cycle?     Да - сжимать предпоследнюю копию, последнюю не сжимать.
Truncate log file in place?     Да  - очистить текущий лог файл.
Rotate even if log file is empty?     Нет - пустой лог файл можно не сжимать
Ignore log file if missing?     Да  - пропустить если нет лога

Re-create log file after rotation?     No, don't re-create - не нужно файл пересоздавать, мы его не удаляем
Store old rotated logs in     Directory    Default (Same directory as log file) - оставлять архивный лог где и был
Extension for rotated filenames     По умолчанию - добавляются цифры к архивной копии

Email log file before deleting? - настройки отсылки лога по e-mail оставим все по умолчанию

Commands to run before rotation    - пусто
Commands to run after rotation   

invoke-rc.d rsyslog reload > /dev/null

Only run scripts once for all files?     Да 




Генерация ключей

Windows:

Генерируем ключи и корневые сертификаты
Копия папки easy-rsa есть в \USER\Bessonov_Evgeniy\net\
http://www.kryukov.biz/wiki/Openvpn
Все операции выполняются на сервере. ключ и сертификат необходимо генерировать для каждого клиента отдельно.


Идем в C:\Program Files\OpenVPN\easy-rsa\
Запускаем init-config.bat
Правим vars.bat

@echo off
set HOME=%ProgramFiles%\OpenVPN\easy-rsa
set KEY_CONFIG=%ProgramFiles%\OpenVPN\easy-rsa\openssl.cnf
set KEY_DIR=keys
set KEY_SIZE=1024
set KEY_COUNTRY=RU
set KEY_PROVINCE=RU
set KEY_CITY=OMSK
set KEY_ORG=rr
set KEY_EMAIL=admin@ru55.ru

В командных файлах в этой папке необходимо проверить правильность указания пути к openssl.exe (по умолчанию указано только имя файла поэтому в каждой строке где есть указание на запуск openssl перед командой добавляем ..\bin\ иначе командный файл не найдет исполняемый файл и выдаст ошибку.

Далее открываем консоль и запускаем по очереди:
vars.bat        установит переменные окружения для этого сеанса консоли
clean-all.bat  советуют запускать для очистки лишней информации (на всякий случай запустим)
build-ca.bat   создает корневой сертификат и ключ

Замечание: При использовании файла openssl.cnf который включен в дистрибутив будут появляться ошибки типа:
WARNING: can't open config file: c:\openssl/ssl/openssl.cnf
error on line 150 of D:\OpenVPN\easy-rsa\openssl.cnf
568:error:0E065068:configuration file routines:STR_COPY:variable has no value:.\crypto\conf\conf_def.c:618:line 150

В таком случае можно за комментировать строки в которых найдены ошибки (в данном случае это строка 150)


build-key-server.bat server - создает ключ и сертификат сервера (вместо server указываем dns-имя нашего сервера)
Внимательно смотрим на диалоговые вопросы. Некоторые ответы уже определены в переменных и можно просто жать Enter. На запрос commonName вписываем имя сервера.


build-key.bat client - создает ключ и сертифика клиента (вместо client указываем dns-имя клиентского компьютера. запускать для каждого клиента)
Внимательно смотрим на диалоговые вопросы. Некоторые ответы уже определены в переменных и можно просто жать Enter. На запрос commonName вписываем имя клиента.

build-dh.bat - создает Diffie Hellman параметры.

Назначение файлов:
Файл              Машина                       Назначение                                   Доступ
ca.crt             Сервер и клиенты     Сертификат корневого СА               Публичный
ca.key            Только на сервере     Необходим для подписи других       Секретный
                                                        сертификатов                                                 
dh1024.pem    Только на сервере     Diffie Hellman параметры                 Публичный
server.crt        Только на сервере     Сертификат сервера                        Публичный
server.key       Только на сервере     Ключ сервера                                 Секретный
client.crt         Только на клиенте     Сертификат клиента                        Публичный
client.key        Только на клиенте     Ключ клиента                                  Секретный


Linux (debian-6.0.2):

Источник: http://www.netlly.ru/index.php?option=c … &Itemid=28
    Ставим OpenVPN и OpenSSL

aptitude install openvpn openssl

    Копируем скрипты генерации сертификатов и ключей

cp -R /usr/share/doc/openvpn/examples/easy-rsa /etc/openvpn/

    Правим параметры

vi /etc/openvpn/easy-rsa/vars
export KEY_COUNTRY=RU
export KEY_PROVINCE=RU
export KEY_CITY=Omsk
export KEY_ORG=ru55
export KEY_EMAIL= adm@ru55.ru

    Инициализируем PKI (Public Key Infrastructure)

cd /etc/openvpn/easy-rsa/
./vars 
./clean-all 

    Генерируем Certificate Authority (CA) сертификат и ключ

./build-ca

Большинство параметров подхватятся из файла vars. Только параметр Common Name надо указать явно

Common Name (eg, your name or your server's hostname) [ ]: ru55

    Генерируем параметры Диффи - Хеллмана

./build-dh

    Генерируем сертификат и секретный ключ сервера

./build-key-server server

Все параметры принимаем по умолчанию. На запрос Common Name вводим server

Common Name (eg, your name or your server's hostname) [ ]:server

На вопросы Sign the certificate? и 1 out of 1 certificate requests certified, commit? отвечаем положительно

Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y

    Генерируем сертификат и секретный ключ клиента

./build-key client

Все параметры принимаем по умолчанию. На запрос Common Name вводим client

Common Name (eg, your name or your server's hostname) [ ]:client

На вопросы Sign the certificate? и 1 out of 1 certificate requests certified, commit? отвечаем положительно

Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y

вместо client указать номер подсети для которой готовится клиент.

./build-key 13


Создание файлов конфигурации (tun)

Windows

Сервер winxp
server.ovpn

dev tun
tls-server
server 10.8.0.0 255.255.255.0
ifconfig 10.8.0.1 255.255.255.0
tun-mtu 1480

client-config-dir ccd

#routes
route 10.8.0.0 255.255.255.0 #IP Range of VPN
route 192.168.14.0 255.255.255.0 #10.8.0.2 #IP Range of Debian
route 192.168.15.0 255.255.255.0 #10.8.0.5 #IP Range of Router

push "route 192.168.13.0 255.255.255.0" #Say to clients that RI160 has 192.168.13.0/24 LAN

#keys

ca "C:\\Program Files\\OpenVPN\\config\\keys\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\config\\keys\\ri160.crt"
key "C:\\Program Files\\OpenVPN\\config\\keys\\ri160.key"
dh "C:\\Program Files\\OpenVPN\\config\\keys\\dh1024.pem"

client-to-client

ifconfig-pool-persist ipp.txt #в этот файл пишутся IP адреса клиентов

port 1194
proto udp

#user nobody #указание пользователя от имени которого будет работать сервис, только для Linux
#group nobody #указание группы от имени которой будет работать сервис, только для Linux

comp-lzo
persist-tun
persist-key
verb 3

#log-append /opt/var/log/openvpn/openvpn.log #только для Linux
#status /opt/var/log/openvpn/status.log  #только для Linux

keepalive 10 60 #период рестарта неактивной сессии

Файлы из директории ccd:
debian:

push "route 192.168.15.0 255.255.255.0" #IP Range of router (для выполнения на клиенте, в данном случае debian)
iroute 192.168.14.0 255.255.255.0


router:

push "route 192.168.14.0 255.255.255.0" #IP Range of debian (для выполнения на клиенте, в данном случае router)
iroute 192.168.15.0 255.255.255.0




При добавлении клиента дописываем его сеть в группу #routes файла server.ovpn (файла конфигурации сервера, в linux может называться по другому) и добавляем в клиентские конфиги в папке ccd



Linux:

Сервер Linux

Конфигурируем OpenVPN - сервер.
Базовый конфиг такой же как и для сервера под windows. нужно  только исправить пути к ключам

запуск/остановка openvpn-сервера /etc/init.d/openvpn start/stop

Правила для Iptables
$iptables -A INPUT -p ALL -i tun0 -j ACCEPT

$iptables -A FORWARD -i tun0 -j ACCEPT
$iptables -A FORWARD -o tun0 -j ACCEPT

$iptables -A OUTPUT -i tun0 -j ACCEPT
$iptables -A OUTPUT -o tun0 -j ACCEPT

Клиент Linux

Файл конфигурации openvpn.conf:

client
dev tun
proto udp
remote 92.126.212.219
tun-mtu 1480
persist-key
persist-tun
ca "/opt/etc/openvpn/keys/ca.crt"
cert "/opt/etc/openvpn/keys/router.crt"
key "/opt/etc/openvpn/keys/router.key"
ns-cert-type server
comp-lzo
verb 3
log-append /opt/var/log/openvpn/openvpn.log
status /opt/var/log/openvpn/status.log
keepalive 10 60

Создание файлов конфигурации (tap)

Windows

На сервере в папке C:\Program Files\OpenVPN\config\ создаем файл server.ovpn следующего содержания:

ca "C:\\Program Files\\OpenVPN\\config\\keys\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\config\\keys\\server.crt"
key "C:\\Program Files\\OpenVPN\\config\\keys\\server.key"
dh "C:\\Program Files\\OpenVPN\\config\\keys\\dh1024.pem"
dev tap
server-bridge 192.168.1.254 255.255.255.0 192.168.1.190 192.168.1.199
comp-lzo

На клиентах в папке C:\Program Files\OpenVPN\config\ создаем файл client.ovpn следующего содержания:

ca "C:\\Program Files\\OpenVPN\\config\\keys\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\config\\keys\\client.crt"
key "C:\\Program Files\\OpenVPN\\config\\keys\\client.key"
dev tap
client
remote 92.126.212.219 1194
ifconfig 192.168.1.190 255.255.255.0 # явное указание IP-адреса, назначаемого интерфейсу
comp-lzo

Запускаем клиента для проверки соединения
Сначала на сервере запускаем OpenVPN GUI, щелкаем ПКМ по значку в трее - Connect
Ждем пока соединение установится и компьютеры станут зелеными.
Затем тоже самое на клиенте. После успешного подключения компьютеры в трее на клиенте станут зелеными и в статусе появится сообщение об успешном подключении и присвоении IP адреса 192.168.1.190


Копируем ключи и сертификаты
Файлы ca.crt, dh1024.pem, server.crt, server.key кладем на сервере в папку C:\Program Files\OpenVPN\config\keys\
Файлы ca.crt, client.crt, client.key кладем на клиенте в папку C:\Program Files\OpenVPN\config\keys\



Настраиваем запуск в качестве службы (для windows, в linux за это отвечает параметр в скрипте запуска, по умолчанию всегда запускается как служба)
Настройка на клиенте и на сервере будет почти одинакова.
В списке служб находим OpenVPN Service открываем свойства и в строке Параметры запуска прописываем:
--config server.ovpn для сервера
--config client.ovpn для клиента

Меняем тип запуска службы на Автоматически. Применяем сделанные изменения и запускаем службу.

Использованные источники:

http://www.kryukov.biz/wiki/Openvpn - довольно подробно расписано про установку генерацию ключей и настройку как TUN так и TAP. Linux сервер, клиент, Windows клиент (rus)
http://www.permlug.org/node/3736 - именно та конфигурация которая нужна нам, но на Lunux плюс затронуты вопросы прохождения dns и dhcp пакетов (rus).
http://www.pavelec.net/adam/openvpn/bridge/ - наглядно показано создание моста. Конфиг на TAP интерфейсах, Windows XP (eng)
http://tuxnotes.ru/articles.php?a_id=26 - русский man по openvpn
http://forum.ixbt.com/topic.cgi?id=14:40906 - первая страница обсуждения, затронуты основные моменты. Отсюда взяты конфиги за основу (4. Расширенная конфигурация туннеля L2 (Ethernet-туннель, aka "bridged"))
http://forum.pfsense.org/index.php/topi … l#msg92100 - тоже для прозрачной адресации (eng)
http://www.anfes.ru/e107_plugins/conten … ?content.6 - ovpn под Windows (rus)

Редактировался Evgen (27.03.2012, 12:45:21)

http://forum.ixbt.com/post.cgi?id=print:14:40906&page=9
Подскажите, плз, как сделать чтобы сервер ОВПН после каждого рестарта службы, не чистил бы свой лог

888. SPV82, 28.03.2008 20:44
Alton
HKEY_LOCAL_MACHINE\SOFTWARE\OpenVPN
log_append=1

Запускать OpenVPN как постоянный сервис (включить автозапуск сервиса OpenVPNservice). Кроме того, сервисом можно управлять и из OpenVPN-GUI, для этого надо в реестре устновить:
[HKEY_LOCAL_MACHINE\SOFTWARE\OpenVPN-GUI]
"allow_service"="1"

Перенес в статью

Настройка openvpn для использования tun адаптеров:

+Сервер winxp

dev tun
tls-server
server 10.8.0.0 255.255.255.0
ifconfig 10.8.0.1 255.255.255.0

client-config-dir ccd


#routes
route 10.8.0.0 255.255.255.0 #IP Range of VPN
route 192.168.14.0 255.255.255.0 #10.8.0.2 #IP Range of Debian
route 192.168.15.0 255.255.255.0 #10.8.0.5 #IP Range of Router


push "route 192.168.13.0 255.255.255.0" #Say to clients that RI160 has 192.168.13.0/24 LAN

#keys

ca "C:\\Program Files\\OpenVPN\\config\\keys\\ca.crt"
cert "C:\\Program Files\\OpenVPN\\config\\keys\\ri160.crt"
key "C:\\Program Files\\OpenVPN\\config\\keys\\ri160.key"
dh "C:\\Program Files\\OpenVPN\\config\\keys\\dh1024.pem"


client-to-client

ifconfig-pool-persist ipp.txt #в принцепе не обязательно, но может быть полезна для определения какой IP адрес получают клиенты

port 1194
proto udp

#user nobody #указание пользователя от имени которого будет работать сервис, только для Linux
#group nobody #указание группы от имени которой будет работать сервис, только для Linux

comp-lzo
persist-tun
persist-key
verb 3

#log-append /opt/var/log/openvpn/openvpn.log #только для Linux
#status /opt/var/log/openvpn/status.log  #только для Linux

keepalive 10 60 #период рестарта неактивной сессии


Файлы из директории ccd:
debian:

push "route 192.168.15.0 255.255.255.0" #IP Range of router (для выполнения на клиенте, в данном случае debian)
iroute 192.168.14.0 255.255.255.0


router:

push "route 192.168.14.0 255.255.255.0" #IP Range of debian (для выполнения на клиенте, в данном случае router)
iroute 192.168.15.0 255.255.255.0




При добавлении клиента дописываем его сеть в группу #routes файла server.ovpn (файла конфигурации сервера, в linux может называться по другому) и добавляем в клиентские конфиги в папке ccd









+Сервер Linux

+Клиент winxp

+Клиент Linux

Файл конфигурации openvpn.conf:

client
dev tun
proto udp
remote 92.126.212.219
persist-key
persist-tun
ca "/opt/etc/openvpn/keys/ca.crt"
cert "/opt/etc/openvpn/keys/router.crt"
key "/opt/etc/openvpn/keys/router.key"
ns-cert-type server
comp-lzo
verb 3
log-append /opt/var/log/openvpn/openvpn.log
status /opt/var/log/openvpn/status.log
keepalive 10 60

Редактировался Evgen (02.10.2011, 02:34:11)

После изучения еще нескольких руководств по туннелям пришел к выводу что обязательно нужно указывать значения mtu для vpn тунеля. Значение mtu будет индивидуально для каждого провайдера.
Добавил в конфиги для tun
tun-mtu 1480

Редактировался Evgen (27.03.2012, 12:47:16)

Выяснил что при использовании более чем двух каналов интернета в режиме балансировки нагрузки возникает проблема с маршрутизацией udp пакетов. Поэтому при внедрении такой конфигурации нужно использовать tcp протокол.

 

Дизайн сайта отсутствует
оформление: Группа «САМОВАРчик»

[ Сгенерировано за 0.019 сек, 8 запросов выполнено - Использовано памяти: 1.98 MiB (Пик: 2.05 MiB) ]