OpenVPN
Стратегия такова
У нас будет сервер vpn на FreeBSD (принимать запросы)
и клиента я реализовал на WindowsXP (будет делать запрос)
Сначала устанавливаем из портов
cd /usr/ports/security/openvpn
make install clean && rehash
Всё добро и шаблоны конфигурационных файлов упали в каталог
/usr/local/share/doc/openvpn
Собственно туда и перемещаемся.
cd /usr/local/share/doc/openvpn
Там меня интересует каталог
../easy-rsa
В этом каталоге лежат скрипты
для генерация сертификатов (они нам нужны для безопасного
соединения сервера и клиента)
Так как мы настраиваем сначала серверную часть то
нам нужно побеспокоится от том чтобы в ядре было
разрешено псевдо интерфейс tun.и random (он будет
нужен для генерации случайных чисел)
################################################################
# Pseudo devices.
device loop # Network loopback
----------------------------------------------------------------
device random # Entropy device
----------------------------------------------------------------
device ether # Ethernet support
device sl # Kernel SLIP
device ppp # Kernel PPP
----------------------------------------------------------------
device tun # Packet tunnel.
----------------------------------------------------------------
device pty # Pseudo-ttys (telnet etc)
device md # Memory "disks"
device gif # IPv6 and IPv4 tunneling
device faith # IPv6-to-IPv4 relaying (translation)
################################################################
cd /usr/src/sys/i386
cp GENERIC OpenVPN
ee OpenVPN
compile OpenVPN
cd ../compile/OpenVPN
clean depend && make depend
make install clean
reboot
Далее ежели всё прошло успешно и система не порушилась
от неправильного конфигурирования (всякое бывает)
начинаем генерировать сертификаты:
для этого нам нужно отредактировать следущие файлы:
cd /usr/local/share/doc/openvpn/easy-rsa
ee openssl.cnf (я там изменил следующие пункты)
################################################################
#dir = $ENV::KEY_DIR
dir = /usr/local/share/doc/openvpn/easy-rsa/keys/
#предворительно создав недостающие коталоги коммандой
#mkdir -pv /usr/local/share/doc/openvpn/easy-rsa/keys
#default_bits = $ENV::KEY_SIZE
default_bits = 1024
# req_extensions = v3_req # The extensions to add to a certificate request
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
#countryName_default = $ENV::KEY_COUNTRY
countryName_default = RU
countryName_min = 2
countryName_max = 2
stateOrProvinceName = State or Province Name (full name)
#stateOrProvinceName_default = $ENV::KEY_PROVINCE
stateOrProvinceName_default = MyOblast
localityName = Locality Name (eg, city)
#localityName_default = $ENV::KEY_CITY
localityName_default = MyGorod
0.organizationName = Organization Name (eg, company)
#0.organizationName_default = $ENV::KEY_ORG
0.organizationName_default = MyOrganization
# we can do this but it is not needed normally :-)
#1.organizationName = Second Organization Name (eg, company)
#1.organizationName_default = World Wide Web Pty Ltd
organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default = MyUnit
commonName = Common Name (eg, your name or your server\'s hostname)
commonName_max = 64
emailAddress = Email Address
#emailAddress_default = $ENV::KEY_EMAIL
emailAddress_default = admin@myorganization.ru
emailAddress_max = 40
################################################################
Остальное не трогаем а просто сохраняем наш конфиг...
Следующий шаг это скрипты.
Так как мне не удалось экспортировать пути и переменные
то я руками прописал следующие строчки:
KEY_DIR="/usr/local/share/doc/openvpn/easy-rsa/keys"
KEY_CONFIG="/usr/local/share/doc/openvpn/easy-rsa/openssl.cnf"
в скрипты:
build-ca build-dh build-key build-key-server
так же добавляем в скрипт clean-all строку:
d="/usr/local/share/doc/openvpn/easy-rsa/keys"
Сначала запускаем clean-all
он создаёт в директории /usr/local/share/doc/openvpn/easy-rsa/keys
двай файла index.txt (пустой) и serial (в нём две цифры 01)
Эти файлы не трогаем и продолжаем работать.
Запускаем ./build-ca для генерации главного сертификата:
################################################################
Generating a 1024 bit RSA private key
....................++++++
...++++++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [RU]:RU
State or Province Name (full name) [MyOblast]:
Locality Name (eg, city) [MyGorod]:
Organization Name (eg, company) [MyOrganization]:
Organizational Unit Name (eg, section) [MyUnit]:
# ЗДЕСЬ УКАЗЫВАЕМ, ЧТО ЭТОТ СЕРТИФИКАТ на НАШ СЕРВЕР (пишем имя)
---------------------------------------------------------------
Common Name (eg, your name or your server's hostname) []:server
---------------------------------------------------------------
Email Address [admin@myorganization.ru]:
################################################################
Создаем сертификат X.509 для нашего сервера.
################################################################
#./build-key-server server
Country Name (2 letter code) [RU]:RU
State or Province Name (full name) [MyOblast]:
Locality Name (eg, city) [MyGorod]:
Organization Name (eg, company) [MyOrganization]:
Organizational Unit Name (eg, section) [MyUnit]:
# ЗДЕСЬ УКАЗЫВАЕМ, ЧТО ЭТОТ СЕРТИФИКАТ на НАШ СЕРВЕР (пишем имя)
---------------------------------------------------------------
Common Name (eg, your name or your server's hostname) []:server
---------------------------------------------------------------
Email Address [admin@myorganization.ru]:
Дальше вводим пароль и организацию! Опять же пишем наш сервер!
Please enter the following 'extra' attributes
to be sent with your certificate request
# пароль
A challenge password []:123456789
# название организации (как и в создании корневого сертификата)
An optional company name []:server
И говорим YES!
################################################################
Теперь тоже самое но для клиента!!!
################################################################
Запускаем ./build-key client для генерации главного сертификата:
################################################################
Generating a 1024 bit RSA private key
....................++++++
...++++++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [RU]:RU
State or Province Name (full name) [MyOblast]:
Locality Name (eg, city) [MyGorod]:
Organization Name (eg, company) [MyOrganization]:
Organizational Unit Name (eg, section) [MyUnit]:
# ЗДЕСЬ УКАЗЫВАЕМ, ЧТО ЭТОТ СЕРТИФИКАТ на НАШ КЛИЕНТ (пишем имя)
---------------------------------------------------------------
Common Name (eg, your name or your server's hostname) []:client
---------------------------------------------------------------
Email Address [admin@myorganization.ru]:
Дальше вводим пароль! Опять же указываем, что это наш клиент!
Please enter the following 'extra' attributes
to be sent with your certificate request
# пароль
A challenge password []:123456789
# название организации (как и в создании сертификата клиента)
An optional company name []: client
И говорим YES!
################################################################
Дальше нужно сделать ключ Хельман
################################################################
#./build-dh
################################################################
Запустили и набравшись терпения ожидаем завершение процесса.
Осталось создать ключ tls
################################################################
#openvpn --genkey --secret /usr/local/share/doc/openvpn/easy-rsa/keys/ta.key
################################################################
В итоге если полюбоватся на то что у нас получилось, то получится
приблизительно вот это:
#cd /usr/local/share/doc/openvpn/easy-rsa/keys/
#ls -a
00.pem ca.key client.key index.txt.attr serial server.csr
01.pem client.crt dh1024.pem index.txt.attr.old serial.old server.key
ca.crt client.csr index.txt index.txt.old server.crt ta.key
Из всей каши нам нужно следущее:
Для клиента: Для сервера:
------------ ------------
ca.crt ca.crt
dh1024.pem dh1024.pem
client.crt server.crt
client.key server.key
ta.key ta.key
------------ ------------
Разобрались с сертификатами и переходим к конфигурированию openvpn:
Создадим каталоги:
#mkdir -pv /usr/local/etc/openvpn
#mkdir -pv /usr/local/etc/openvpn/keys
#mkdir -pv /usr/local/etc/openvpn/ccd
#mkdir -pv /usr/local/etc/openvpn/log
Копируем сертификаты и ключи для сервера в каталог /usr/local/etc/openvpn/keys
дальше редактируем конфиг openvpn
################################################################
#cd /usr/local/etc/openvpn/
#ee server.conf
################################################################
#порт на котором работает сервер
port 2000
#протокол
proto tcp
#Это то что мы добавил в ядро )))
dev tun0
#Указываем пути на сертификаты для сервера
ca /usr/local/etc/openvpn/keys/ca.crt
cert /usr/local/etc/openvpn/keys/server.crt
key /usr/local/etc/openvpn/keys/server.key
dh /usr/local/etc/openvpn/keys/dh1024.pem
# Виртуальная сеть VPN
server 10.1.1.0 255.255.255.0
# В какую сеть нас будут роутить ))))
push "route 192.168.1.0 255.255.255.0"
# указываем где хранятся файлы с
# настройками IP-адресов клиентов
client-config-dir ccd
# Маршрут сервер-клиент
route 10.1.1.0 255.255.255.252
# TLS! указываем tls-ключ, и указываем 0 для сервера, а 1 для клиента
tls-server
tls-auth /usr/local/etc/openvpn/keys/ta.key 0
tls-timeout 120
#Шифрование
auth MD5
cipher BF-CBC
#Простой
keepalive 10 120
#Компрессия
comp-lzo
#Макс клиентофф )))
max-clients 100
#Для виндовых машин
user nobody
group nobody
# Не перечитывать ключи после получения
# SIGUSR1 или ping-restart
persist-key
# Не закрывать и переоткрывать TUN\TAP
# устройство, после получения
# SIGUSR1 или ping-restart
persist-tun
# Наши логи
status /usr/local/etc/openvpn/log/openvpn-status.log
log /usr/local/etc/openvpn/log/openvpn.log
# Уровень наших логов (3,5,9; 9-не советую!)
verb 3
################################################################
Для этой строки у нас есть каталог с файлом:
----------------------------------------------------------------
# указываем где хранятся файлы с
# настройками IP-адресов клиентов
client-config-dir ccd
----------------------------------------------------------------
Содержимое файла клиентов следущее:
#cd /usr/local/etc/openvpn/ccd
#####################################
#ee client.conf
#####################################
#где 10.1.1.1 - виртуальны шдюз для VPN
#Соответственно новых клиентов будем
#добовлять сюда... по принципу...
#ifconfig-push 10.1.1.6 10.1.1.5
ifconfig-push 10.1.1.2 10.1.1.1
#####################################
Ну и для запуска нам нужно прописать всё это дело в /etc/rc.conf
#################################################################
openvpn_enable="yes"
openvpn_if="tun"
openvpn_configfile="/usr/local/etc/openvpn/server.conf"
openvpn_dir="/usr/local/etc/openvpn"
#################################################################
#reboot
#если есть проблемы смотрим логи
#tail -f /usr/local/etc/openvpn/log/openvpn.log
Так же если стоит фаирвол не забываем открыть порт TCP 2000 )))))
С сервером всё
Переходим к клиенту:
Клиент у нас с WindowsXP... Идём его качать...
Я взял отсюда http://openvpn.se/files/install_packages/
предпоследнюю версию. Новая бета смутила меня размером )))
Устонавливаем... Программа вам вешает свой драйвер Через него
и будет идти связь..После установки просят перезагрузку.
Не отказываем )))
В установленом каталоге C:\PROGRA~1\OpenVPN\sample-config можно найти
типы конфигураций.
Скопируем client.ovpn в C:\PROGRA~1\OpenVPN\config и отредактируем
#################################################################
port 2000
proto tcp
dev tun
remote 222.33.44.55 #(реальный айпи вашего сервера куда коннектимся)
client
resolv-retry infinite
ca C:\PROGRA~1\OpenVPN\keys\ca.crt
cert C:\PROGRA~1\OpenVPN\keys\client.crt
key C:\PROGRA~1\OpenVPN\keys\client.key
#Помните что для клиента - 1
tls-client
tls-auth C:\PROGRA~1\OpenVPN\keys\ta.key 1
auth MD5
cipher BF-CBC
ns-cert-type server
comp-lzo
persist-key
persist-tun
verb 3
#################################################################
Сохраняем и пытаемся коннектится. Вот вроде и всё.
Что не так - смотрим логи! И не забываем про всякие брэндмауэры
и фаирволы которые могу быть причиной нехождения траффика. )))
Чужую сетку я не нашёл как проглядеть. Но занял IP без проблем
приконектился к ним по их внутреннему IP как будто я в их локалке ))))