Настройка VPN на основе OpenVPN
1. Предисловие..
Для большинства присутсвующих здесь VPN озночает организация шифрованого соеденения до сервера и получение в конечном итоге интернета не со своего ip-адресса.. Чтож, об том как это реализовать и будет описано в этой статье. В частности будет так же расмотренна установка мобильного клиента(т.е. можно записать на флэшку, и подключаться к впн пару кликами)
Что нам нужно: шелл с правами рута, желательно дедик. Рассматривать будем сервер с ОС FreeBSD
2. Устанавливаем и конфигурируем OpenVPN
Эта часть статьи почти полностью написана KaDaBR'ой(vbs скрипты и не большие переделки конкретно под freebsd с меня)
2.1 Устанавливаем OpenVPN на сервер
# wget http://openvpn.net/release/openvpn-2.0.7.tar.gz
# tar xvzf ./openvpn-2.0.7.tar.gz
# cd ./openvpn-2.0.7
# ./configure
# make
# make install
# rehash
2.2 Создаём ключи
после успешного завершения всех операций необходимо создать сертефикаты и ключи
Заходим в папку с исходниками OpenVPN и в ней:
# cd ./easy-rsa
# ee ./vars (в этом файлике внизу изменяете данные для подписи ключей под себя)
Внимание! Если у вас неустановлен баш, то перед следующими операциями нужно набрать в консоли "sh"
# . ./vars (загружаем эти переменные в оболочку)
# ./clean-all (отчищаем от старых сертификатов и ключей папку keys и создаем серийный и индексные файлы для новых ключей)
# ./build-ca (Создаем Certificate Authority для сервера)
# ./build-key-server server(Создаем сертификат X.509 для сервера)
# ./build-key client (Создаем сертификат X.509 для клиента)
Будьте внимательны при заполнени данных сертификатов, поле Common Name обязательно к заполнению, причем для сервера оно должно быть одно, а для клиента другое. Например в поле Common Name при генерации сертификата X.509 для сервера можно написать server, а для клиента соотвественно client
Создаем ключ Диффи Хельман(о нем можно почитать здесь: http://www.rsasecurity.com/rsalabs/node.asp?id=2248)
# ./build-dh
Теперь выходим из sh написав команду "exit"
И в конце создаем ключ для tls-аутификации
# openvpn --genkey --secret keys/ta.key
После всех этих манипуляций в папке keys получается много файлов:
ca.crt - Главный CA сертификат, этот файл нужен и клиенту и серверу
dh1024.pem - ключ Диффи Хельман, этот файл нужен только серверу
server.crt - Сертификат сервера, нужен только серверу
server.key - Ключ сервера, нужен только серверу (СЕКРЕТНЫЙ файл)
client.crt - Сертификат клиента, нужен только клиенту
client.key - Ключ клиента, нужен только клиенту (СЕКРЕТНЫЙ файл)
ta.key - TLS-ключ, нужен и клиенту и серверу
Следовально серверу достаются файлы ca.crt, dh1024.pem, server.crt, server.key, ta.key, а клиентуca.crt, dh1024.pem,client.crt, client.key, ta.key
2.3 Настраиваем сервер
Файл конфигурации можно разместить где угодно, например в /etc/openvpn, так же для удобства скопируем туда все ключи(ca.crt, dh1024.pem, server.crt, server.key, ta.key).
Создаем конфигурационный файл openvpn.conf следующего содержимого:
proto udp #Сервер слушает только udp-порт
local 100.100.100.100 #IP, с которого принимаем подключения
dev tap #используемый тип устройства tap
port 1194 #используемый порт 1194
tls-server #включаем TLS аутификацию
tls-auth ta.key 0 #указываем tls-ключ, и указываем 0 для сервера, а 1 для клиента
ca ca.crt #указываем файл CA
cert server.crt #указываем файл с сертификатом сервера
key server.key #указываем файл с ключем сервера
dh dh1024.pem #указываем файл Диффи Хельман
mode server #включаем режим сервера
ifconfig 192.168.231.5 255.255.255.0 #задаем IP-адрес сервера и маску подсети виртуальной сети
ifconfig-pool 192.168.231.6 192.168.231.20 #задаем диапазон IP-адресов выдаваемых клиентам
push "route-gateway 192.168.231.5" #отправляем клиентам строку, с указанием шлюза
push "dhcp-option DNS 192.168.231.5" #задаём адрес dns-сервера
duplicate-cn #ВАЖНО! разрешаем пользоватся одним и тем же ключем, нескольким клиентам одновременно, иначе прийдется для всех клиентов генерировать отдельные сертификаты.
cipher DES-EDE3-CBC #включаем шифрацию пакетов Triple-DES
user nobody #устанавливаем OpenVPN-демону права пользователя nobody
group nobody
persist-tun #Не закрывать и переоткрывать TUN\TAP устройство, после получения SIGUSR1 или ping-restart
persist-key #Не перечитывать ключи после получения SIGUSR1 или ping-restart
comp-lzo #Включить сжатие траффика
keepalive 10 120 #Проверка жизни клиента каждые 10 секунд, если в течении 120 секунд не пришел ответ, то закрывается соединение
verb 3 #Уровень информации для отладки
Всё, сервер настроен, теперь мы его запускаем: openvpn vpn.conf(или то имя, которое вы дали конфигу)