Настрока сервера OpenVPN
Для начала установим сам OpenVPN из портов:
$ cd /usr/ports/security/openvpn
$ make install clean
Во время установки нас спросят включить PW_SAVE? Данная опция включает возможность чтения текущих паролей из файла. Хотите включайте - хотите нет. В принципе это не самый критичный параметр :). Я эту опцию включил, но только на всякий пожарный для возможности получения большего количесва информации при необходимости отладки.
После установки протестируем криптосистему:
$ openvpn –genkey –secret key
этим мы создаём тестовый ключ
$ openvpn –test-crypto –secret key
а этой командой мы производим тестирование. Если в итоге мы увидим OpenVPN crypto self-test mode SUCCEEDED, то вё в порядке и можно дигаться дальше.
Создадим директорию, где будем хранить настройки:
$ mkdir -p /usr/local/etc/openvpn
Скопируем туда пакет управления ключами RSA.
$ cp -r /usr/local/share/doc/openvpn/easy-rsa /usr/local/etc/openvpn
Теперь присупим непосредственно к созданию сертификатов. Для этого нам необхлимо отредактировать файл vars. Я приведу частично переведённую версию этого файла.
$ edit /usr/local/etc/openvpn/easy-rsa/vars
#easy-rsa настройки
#Эта переменная указывает на верхний каталог easy-rsa
export D=`pwd`
#Эта переменная указывает где лежит openssl.conf используемый вместе с easy-rsaexport
KEY_CONFIG=$D/openssl.cnf
#Отредактируйте данную переменную, она указываем на директорию где будут храниться ключи
#ВНИМАНИЕ: команда clean-all выполняет в этой директории rm -rf , так что будьте внимательны при
#указании директории
export KEY_DIR=$D/keys
#Можно увеличть это значение до 2048, если вы параноик. Это замедлит обмен TLS на столько-же на
#сколько и единовременную генерацию DH. Переенная устанавливает длинну ключа.
export KEY_SIZE=1024
#Ниже приведены значения по умолчанию для полей, кторые будут помещены в сертификат Нельзя оставлять эти поля
#пустыми.
export KEY_COUNTRY=RU
#Страна
export KEY_PROVINCE=NA
#Штат, провинция,область
export KEY_CITY=MOSCOW
#Город
export KEY_ORG=”OpenVPN-TEST”
#Организация
export KEY_EMAIL=”my@mail.adress”
#E-mail администратора
Теперь создадим ключи
$ . ./vars (для этой команды ваша оболочка должна быть sh или родственная ей)
Создадим папку $KEY_DIR
$ mkdir -p $KEY_DIR
$ ./clean-all
После создания сертификатов и ключей следует зпомнить что файлы с расширением .key должны быть строго конфиденциальни и их никогда не надо переносить за пределы сервера. А файлы .crt и .csr можно передавать и по e-mail’у.
Ну и соответсвенно создание ключей и сертификатов:
$ ./build-ca
этой командой мы создадим наши CA сертификат/ключ, ответы на задаваемые вопросы мы уже внесли в файле vars. Из всех вопросов нам обязательно надо будет вводить только Common Name, т.е. имя сервера или клиента, в зависимости от создаваемого ключа.
$ ./build-dh
этой командой мы создадим Диффи Хельман параметры
$ ./buld-key-server server
этой командой мы создаём сертификат и публичный ключ для сервера. Когда спросит Common Name вводим server. Есть ущё 2 вопроса на которые надо ответить положительно: “Sign the certificate? [y/n]” подписать саертификат? и “1 out of 1 certificate requests certified, commit? [y/n]” Подтвердить подпись 1 из 1 сертификатов?
$ ./build-key client1
$ ./build-key client2
этой командой мы создадим сертификат и ключ client1 и client2 для клиентского соединения в директории $KEY_DIR. Опять-же таки не забываем писать Common Name и не забыть ответить положительно на 2 тех-же вопроста что и в предыдущей команде.
Ниже приведена таблица созданных файлов:
Имя файла Кто использует Назначение Secret
ca.crt сервер + все клиенты Главный сертификат НЕТ
ca.key подпись ключа Главный CA ключ ДА
dh{n}.pem только сервер Diffie Hellman parameters НЕТ
server.crt только сервер Сертификат сервера НЕТ
server.key только сервер Ключ сервера ДА
client1.crt только client1 Client1 сертефикат НЕТ
client1.key только client1 Client1 Ключ ДА
client2.crt только client2 Client2 Сертефикат НЕТ
client2.key только client2 Client2 ключ ДА
Теперь приступим к созданию файлов настроек для сервера и клиентов, лучше всего для этого использовать примеры файлов настроек. Они распологаются в /usr/local/share/doc/openvpn/sample-config-files. Поскольку мы делаем сервер, то нам интересен файл server.conf, его мы и будем редактировать.
Итак, опишу файл server.conf:
#Какой IP будет слушать сервер OpenVPN (необязательно)
;local 1.2.3.4
#какой TCP/UDP порт будет слушать сервер. Если вы хотите использовать несколько отдельных серверов OpenVPN, необходимо
#будет указать разные порты.
port 1194
#Какой протокол будет использовать сервер TCP или UDP
proto udp
#”dev tun” создаст маршрутизируемый IP туннель
#”dev tap” создаст Ethernet(bridge) туннель
#Используте dev tap0 если вам требуется bridging, при этом у вас уже должен быть создан виртуальный интерфейс tap0 в режиме
#моста с вашей сетевой картой. В большинесве случаев VPN не будет функционировать если вы не отключите файрвол на
#tun/tap интерфейсе
dev tun
#главный SSL/TLS сертификат (ca), сертификат (cert), частный ключ (key). каждый клиент и сервер должны иметь свои
#собственные пары сертификат и ключ. Сервер и все его клиенты должны иметь один (ca). Скрипты простой генерации пар
#сертификат/ключ лежат в директории easy-rsa
ca /путь/до/ca.crt
cert /путь/до/server.crt
key /путь/до/server.key
#Diffie Hellman параметры
dh dh1024.pem
#Настройка режима сервера и поддержки подсети VPN, откуда будет бряться адрес клиента Себе сервер возьмёт адрес
#192.0.5.1, оставшийся диапазон будет использоваться для клиентов. Закомментируйте эту линию если будет использоваться
#режим моста
server 192.0.5.0 255.255.255.0
#Данный файл содержит записи ассоциаций клиент - виртуальный IP адрес. Если сервер OpenVPN упадёт или перезапустится,
#пересоеденившиеся vpn клиенты получат тот-же IP адрес что и был до этого.
ifconfig-pool-persist ipp.txt
#Настройка режима сервера для сетевого моста. Сначала вы должны настроить режим моста в операционной системе, между
#TAP устройством и ващей сетевой картой. Послу этого выдолжны вручную настроить IP и сетевую маску на интерфейсе моста.
#После этого необходимно настроить диапазон ip адресов для клиентов(start=10.8.0.50 end=10.8.0.100). Оставьте эту строку
#закоментированной если вам не нужен режим моста.
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100
#Даём клиенту необходимые маршруты к подсетям, которые лежат за сервером. Помните что этим подсетям так-же необходимо
#знать маршрут к подсети vpn клиента.
push “route 192.0.4.0 255.255.255.0″
push “route 10.34.21.0 255.255.255.248″
#Для присвоения особого ip адреса определённому клиенту или если у клиента есть своя особенная подсеть к которой он
#должен так-же иметь доступ используйте поддерикторию “ccd” для файлов настроек специфичных для клиента. Пример:
#Допустим у клиента есть сертификат с регулярным именем (Common name) “ivan” и небольшой локальной подсетью, например
#192.168.40.128 255.255.255.248. Сначала нужно раскоментировать строки
;client-config-dir /путь/к/ccd
;route 192.168.40.128 255.255.255.248
#теперь создадим файл ccd/ivan с такой вот строчкой:
# iroute 192.168.40.128 255.255.255.248
#Это позвалит локальой сети ivan’а получить доступ к VPN. Этот пример будет работать только в режиме маршрутизации а не
#моста, т.е. при использовании директив “dev tun” и “server”
#Пример: Допустим вы хотите дать пользователю ivan статичный ip арес 10.9.0.1 Тогда сначала раскоменитируем строки
;client-config-dir ccd
;route 10.9.0.0 255.255.255.252
#Теперь нужно добавить следующую строку в ccd/ivan
# ifconfig-push 10.9.0.1 10.9.0.2
#Допустим вы хотите что-бы у вас были разные правила файрвола для разчных групп пользователей. Есть 2 способа:
#1. Запустить несколько демонов OpenVPN, по одному на каждую группу, и файрволлы для TUN/TAP интерфейсов на каждую #группу/демона соответсвенно.
#2. (Продвинутый) Создать скрипт для динамического изменения правил файрвола для разных групп клиентов (смотри man для #более детальной информации о learn-script) и разкоментировать строку:
;learn-address ./script
#Если включена, данная директива будет настраивать шлюз по умолчаннию для всех клиентов, что-бы весь их трафик, такой
#как просмотр WEB страниц, запросы DNS и т.д. шли через vpn соединение.(Серверу openVPN может потребоваться NAT на
#TUN/TAP интерфейсах, для обеспечния доступа к internet). Предупреждение: могут возникнуть проблеммы с сетью клиента,
#если пакеты его dhcp сервера будут направлены через тунель. Подсказка: будьте уверены что клиентский локальный DHCP
#сервер доступен не только через маршрут по умолчанию(0.0.0.0/0.0.0.0)
;push “redirect-gateway”
#Клиенту могут быть переданы определённые специфичные для windows настройки сети, такие как адреса DNS и WINS
#серверов
;push “dhcp-option DNS 10.8.0.1″
;push “dhcp-option WINS 10.9.0.1″
#Раскоментируйте данную строчку, что-бы позволить различным клиентам “видеть” друг друга. По умолчанию клиенты видят
#только сервер. Для того что-бы жёстко заставить клиентов видеть только сервер вам так-же возможно придётся настроить
#файрфол на TUN/TAP интерфесах.
;clinet-to-client
#Что-бы разрешить клиентам соединяться с сервером при одинаковых файлах сертификатов/ключей или common names,
#разкоментируйте строку. Это рекомендуется только при тестировании.
;duplicate-cn
#Директива keepalive позволяет похожим на пинг сообщениям посылаться и приниматься через тунель, с целью выявления
#разрыва соединения. Пинговать каждые 10 секунд, и считать что соединение разорвано если нет пинга в течении 120 секунд.
keepalive 10 120
#Для большей безопастности, которую обеспечивает SSL/TLS, создайте “HMAC Firewall” что-бы блокировать DoS и флуд по
#UPD протоколу. Создаётся командой: openvpn –genkey –secret ta.key
#Сервер и все клиенты должны иметь копию этого ключа. Второй параметр долже быить 0 на сервере и 1 на клиенте.
;tls-auth ta.key 0
#Выбирите медод криптографического шифрования. Так-же эта настройка должна содержаться в конфиге клиента
;cipher BF-CBC # Blowfish (По умолчанию)
;cipher AES-128-CBC # AES
;cipher DES-EDE3-CBC # Тройной DES
#Включить сжатие на vpn соединении. Если включено здесь, то должно быть включено и в клиентском конфиге.
comp-lzo
#Максимально допустимое число одновременных соеденений.
;max-clients 10
#Правильное решение - снизить права демона OpenVPN, после инициализацииuser nobodyи group nogroup. Наличие данной
#опции позволит избежать нежелательного доступа к важным данным во вемя перезагрузки, до понижения привилегий
persist-keypersist-tun
#Файл статуса, в который пишутся текущие соединения, обновляется и переписывается каждую минуту
status openvpn-status.log
#по умолчанию сообщения лога передаются syslog’у. Используйте log или log-append для изменения этого. “log” перезаписывать
#лог файл после каждого запуска, а “log-append” просто добавлять в конец лога. Используйте только один из вариантов и
#никогда оба одновременно
;log openvpn.log
;log-append openvpn.log
#Выбирите уровень детализации лога
#0 только фатальные ошибки
#4 в основном и имеет смысл использовать
#5-6 могут помочь при отладке сервера
#9 экстремальная детализация
verb 3
#”Тихое” повторение. Не больше 20 одной категории будет записано в лог
;mute 20
Ну вот и закончили описание файла server.conf, файл client.conf по сути является зеркалом server.conf, ну за исключением некоторых специфичных функций.
Вот пример клиентского конфига:
$ cat client.conf
client # показываем что это именно клиентский конфиг
proto udp # тут должно стоять
dev tun # то-же что и в серверном конфиге
remote xxx.xxx.xxx.xxx 1194 # ip адрес и порт(1194) сервера
nobind # не выделять определённый локальный порт для организации канала
persist-key
persist-tun
ca /путь/к/ca.crt # прописываем пути
cert /путь/к/client.crt # к локальным копиям
key /путь/к/client.key # ключей и сетификатов
cipher BF-CBC # тут должно стоять то-же что и в серверном конфиге
comp-lzo # тут должно стоять то-же что и в серверном конфиге
verb 3
Теперь пихаем всё что наваяли в /usr/local/etc/openvpn. Там можно это красиво рассортировать по папочкам, при этом не забыв отразить всё в конфигах
Первый пробный запуск.
Для запуска сервера используем команду:
$ openvpn /usr/local/etc/openvpn/server.conf
Если увидим что-то типа:
Sun Feb 6 20:46:38 2005 OpenVPN 2.0_rc12 FreeBSD 6.1 Stable [SSL] [LZO] [EPOLL] built on Feb 5 2005
Sun Feb 6 20:46:38 2005 Diffie-Hellman initialized with 1024 bit key
Sun Feb 6 20:46:38 2005 TLS-Auth MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ]
Sun Feb 6 20:46:38 2005 TUN/TAP device tun1 opened
Sun Feb 6 20:46:38 2005 /sbin/ifconfig tun1 10.8.0.1 pointopoint 10.8.0.2 mtu 1500
Sun Feb 6 20:46:38 2005 /sbin/route add -net 10.8.0.0 netmask 255.255.255.0 gw 10.8.0.2
Sun Feb 6 20:46:38 2005 Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:23 ET:0 EL:0 AF:3/1 ]
Sun Feb 6 20:46:38 2005 UDPv4 link local (bound): [undef]:1194
Sun Feb 6 20:46:38 2005 UDPv4 link remote: [undef]
Sun Feb 6 20:46:38 2005 MULTI: multi_init called, r=256 v=256
Sun Feb 6 20:46:38 2005 IFCONFIG POOL: base=10.8.0.4 size=62
Sun Feb 6 20:46:38 2005 IFCONFIG POOL LIST
Sun Feb 6 20:46:38 2005 Initialization Sequence Completed
то значит всё в порядке.
и пробуем соединиться!
Если всё пошло нормально, то можно добавить в автозапуск, для этого в /etc/rc.conf добаляем следующие строки:
openvpn_enable=”YES” # Включаем автозагрузку
openvpn_if=”tun” # выбираем какой драйвер загружать
#
#openvpn_flags=”" # флаги командной строки openvpn
openvpn_configfile=”/usr/locale/etc/openvpn/server.conf” # Файл конфига, тут он для сервера
openvpn_dir=”/usr/local/etc/openvpn” # Корневая директория для openvpn
И посмотрите файл /usr/local/etc/rc.d/openvpn.sh
Я специально не описал даже примерные настройки файвола, поскольку считаю это дело достаточно интимным, у каждого есть свои любимые настройки. Большинство проблем при конфигурировании легко решается заглядываниями в примеры /usr/share/doc/openvpn, они являются практически исчерпывающими.
Поздравляем Всех с 2009 Новым Годом!!! и советуем посетить салон по наращиванию ресниц в Санкт-Петербурге!
вопрос.
мозг сломал, может поможете.
у меня ovpn стоит и работает в принципе по аналогии с описанным выше уже давно. встал вопрос о том, чтобы закрывать tun 0 по завершению сеанса client -> server.
в моем конфиге присутствует keepalive 10 120
и tls-timeout 120
а также в rc.conf разрешено
openvpn_enable=”YES”
openvpn_if=”tun”
openvpn_configfile=”/usr/locale/etc/openvpn/server.conf”
openvpn_dir=”/usr/local/etc/openvpn”
вот…….
клиент успешно открывает сессию, открывается тунель (наблюдаем в ifconfig его наличие) перескакивает с нашего freebsd в виндовую сеть. отдуши там “гадит - работает” и отключается. Но…. тунель не закрывается
в чем проблема? подскажите пожалуйста
Хорошая статья. Действительно было интересно почитать. Не часто такое и встречается та.Наверное стоит подписаться на ваше RSS
Действительно интересно. Побольше бы таких статей.
Очень интересная статья. Скажите, а могу ли я ее повесить на один из своих сайтов? Соотвественно с гиперсылкой на вас.
Сайт бесплатных шаблонов для баннера популярных размеров. Это отличный инструмент для привлечения посетителей с поисковиков и заработка на показах рекламы. Для вставки рекламы на все страницы достаточно изменить всего несколько файлов. Скрипт можно установить даже бесплатном хостинге.
В этот сборник включены шаблоны самого популярного размера: 468х60. Все шаблоны для баннеров созданы специально для этого сборника. Ни один шаблон мы не скачивали с интернета, всё создавали своими руками.
я уже это всё где-то видел
Вот это реал…уважуха…Респект!
Я думаю, что Вы не правы. Предлагаю это обсудить. Пишите мне в PM, пообщаемся.
Подскажите, кого я могу спросить?
Да, я вас понимаю. В этом что-то есть и мысль отличная, поддерживаю.
Bravo, this brilliant phrase is necessary just by the way
Absolutely with you it agree. Idea excellent, I support.
What does it plan?
Not logically
We can find out it?
Новинки - это всегда круто!!! С Днем независимости России!
Отличные статейки ТС, радует что постоянное обновления идет. С наступающем Днем России!!!
а у меня проблема(( Поставил openvpn, все навтроил.
ПРОПИСАЛ внутренней сетевухе
ifconfig_em1_alias0=”inet 172.17.17.1 netmask 255.240.0.0″
чтобы видеть компы внутри сети у которых IP из 172.16.16.0/16, добавил маршруты в эту сеть.
НО, как только включаю этот виртуальный адрес, начиает подвисать внутренняя сеть. не знаю что делать(
Читая лишь ваш блог, я действительно расслабляюсь и получаю наслаждение
Нравится мне, когда люди могут доходчиво и на доступном языке донести свои мысли до читателей. Спасибо огромное. Я получил истинное удовольствие, читая Вас.
Блог хороший наполнен хорошим контекстом . Если есть желание могу помочь разкрутить Ваш блог.
Было бы интересно узнать поподробнее может у вас есть ещё что не выложили тут буду ждать обновлений.
Пишите ещё об этом, я думаю это интересно не только мне
Не могу со всем согласится, но в целом правильно сказано.
Я тоже копал в этом направлении, и кое какие наработки есть.
Что я могу сказать, над вышесказанным стоит хорошенько поразмыслить.
Автор молодец, проделал немаленькую работу, так держать.
А что остается делать, ведь многие этого просто не понимают.
Не могу со всем согласится, но в целом правильно сказано.Рекомендуем Вам сайт Craq.ru