Openvpn+FreeBSD навеяно вечными траблами
Добавлено: 2007-11-11 19:04:11
Навеяно помощью вот тут http://forum.lissyara.su/viewtopic.php?f=8&t=5708
Чтож, об том как это реализовать и будет описано в этой статье. В частности будет так же расмотренна установка Опенвп-сервера и Виндовз-клиентов для доступа к локальной сети за опенвпн сервером
1.Устанавливаем и конфигурируем OpenVPN
как принято во ХОРОШЕЙ ОС - ставим всё из портов
#cd /usr/ports/security/openvpn
#make
#make install
Всё необходимое поставлено, переходим к конфигурированию
Необходимо создать сертефикаты и ключи
Заходим в папку с исходниками OpenVPN и в ней:
# cd /usr/local/share/doc/openvpn/easy-rsa/
#ee ./vars (в этом файлике внизу изменяете данные для подписи ключей под себя)
Лично я оставил все параметры дефолтовыми, кроме директории куда складывать сгенерированное "добро" - изменил в этом файле строку
export KEY_DIR=$D/keys
на
export KEY_DIR=$D/keys/server
соответственно создав такую же дирректорию
/usr/local/share/doc/openvpn/easy-rsa/keys/server
Собственно создаём "ДОБРО" - сертификаты и ключи
#cd /usr/local/share/doc/openvpn/easy-rsa/
/Внимание! Если у вас по умолчанию не баш , то перед следующими операциями нужно набрать в консоли "sh", для "100-%-ного" результата всё же наверняка сделайте это/
#sh
#. ./vars (загружаем переменные в оболочку)
#./clean-all (отчищаем от старых сертификатов и ключей папку keys/server и создаем серийный и индексные файлы для новых ключей)
#./build-ca (Создаем Certificate Authority для сервера)
При создании сертификата вводим необходимую инф-цию (настоятельно рекомендую делать как тут, а потом уже разбиратся что к чему - большинство проблемм связанно именно с именами при конфигурировании имено на первом этапе)
Привожу листинг с консоли
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) [UA]:UA - Страна
State or Province Name (full name) [Chernigov]:Kiev - Провинция
Locality Name (eg, city) [Chernigov]:Kiev - Город
Organization Name (eg, company) [40-setka]:server - Название компании(!)
Organizational Unit Name (eg, section) []:server - -Отделение компании
Common Name (eg, your name or your server's hostname) []:server - ВОТ ТУТ ВНИМАТЕЛЬНО - ЭТО ИМЯ МАЩИНЫ ДЛЯ КОТОРОЙ ГЕНЕРИРУЕМ СЕРТИФИКАТ (имя не в полном смысле -имя как идентификатор)
Email Address [root@localhost]: - Почт адрес
При попытке создать сертификат - была ругня на отсутствующие файлы index.txt и serial в /usr/local/share/doc/openvpn/easy-rsa/keys/server - создаём файлы (с содержимым)
#echo "00">/usr/local/share/doc/openvpn/easy-rsa/keys/server/serial
#echo "">/usr/local/share/doc/openvpn/easy-rsa/keys/server/index.txt
#./build-key-server server(Создаем сертификат X.509 для сервера)
Всё так-же заполняем(точно так же) + cтроки в котрых указываем пароль и имя организации (!)
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:123456789 - пароль
An optional company name []:server - название организации (как и в создании корневого сертификата)
./build-key client
Создаём ключ для клиента
Generating a 1024 bit RSA private key
.........++++++
.......++++++
writing new private key to 'client.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) [UA]:UA
State or Province Name (full name) [Chernigov]:Kiev
Locality Name (eg, city) [Chernigov]:Kiev
Organization Name (eg, company) [40-setka]:server
Organizational Unit Name (eg, section) []:server
Common Name (eg, your name or your server's hostname) []:client
Email Address [root@localhost]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:123456789
An optional company name []:client
Будьте внимательны при заполнени данных сертификатов, поле 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Настраиваем сервер
создаём директорию /usr/local/etc/openvpn и /usr/local/etc/openvpn/keys
rак же для удобства скопируем туда все ключи(ca.crt, dh1024.pem, server.crt, server.key, ta.key).
Создаем конфигурационный файл openvpn.conf следующего содержимого:
port 2000 #порт на котором работает сервер
proto udp # протокол - советую udp
dev tun0 # - используемый тип устройства и номер
ca /usr/local/etc/openvpn/keys/ca.crt #указываем файл CA
cert /usr/local/etc/openvpn/keys/server.crt #указываем файл с сертификатом сервера
key /usr/local/etc/openvpn/keys/server.key #указываем файл с ключем сервера
dh /usr/local/etc/openvpn/keys/dh1024.pem #указываем файл Диффи Хельман
server 10.10.200.0 255.255.255.0 #задаем IP-адрес сервера и маску подсети виртуальной сети
push "route 192.168.1.0 255.255.255.0" #задаем МАРШРУТ который передаём клиентту и маску подсети для того чтобы он "видел" сеть за опенвпн сервером (сеть 192.168.1.0/24)
client-config-dir ccd #указываем где хранятся файлы с настройками IPадресов клиентов
route 10.10.200.0 255.255.255.252 #добавляем маршрут сервер-клиент
tls-server #включаем TLS аутификацию
tls-auth keys/ta.key 0 #указываем tls-ключ, и указываем 0 для сервера, а 1 для клиента
tls-timeout 120 #таймаут до реконекта
auth MD5 #
cipher BF-CBC #включаем шифрацию пакетов
keepalive 10 120
comp-lzo #сжатие трафика
max-clients 100 #максимум клиентов
user nobody
group nobody
persist-key #Не перечитывать ключи после получения SIGUSR1 или ping-restart
persist-tun #Не закрывать и переоткрывать TUN\TAP устройство, после получения SIGUSR1 или ping-restart
status /var/log/openvpn/openvpn-status.log #логгирование (не забудьте создать эту дирректорию /var/log/openvpn/)
log /var/log/openvpn/openvpn.log
verb 3 #Уровень информации для отладки
В дирректории /usr/local/etc/openvpn/ccd создаем файл следующего содержания
#echo "ifconfig-push 10.10.200.2 10.10.200.1">/usr/local/etc/openvpn/ccd/client.conf
сервер готов
для автостарта при загрузке -внесём в /etc/rc.conf
openvpn_enable="YES" # YES or NO
openvpn_if="tun" # driver(s) to load, set to "tun", "tap" or "tun tap"
openvpn_configfile="/usr/local/etc/openvpn/server.conf" # --config file
openvpn_dir="/usr/local/etc/openvpn" # --cd directory
3 Настраиваем клиент под Windows
качаем клиента для виндозы отсюда http://openvpn.se/files/install_packages/ или из другого места
Создадим конфигурационный файл openvpn.ovpn в папке config (Например C:\Program Files\OpenVPN\config). И скопируем туда же все необходимые ключи для работы (ca.crt, dh1024.pem, client.crt, client.key, ta.key).
Содержимое файла openvpn.ovpn
dev tun
proto udp
remote #(реальный айпи вашего сервера)
port 2000 #(порт к которому устанавливать соединение
client
resolv-retry infinite
ca ca.crt
cert client.crt
key client.key
tls-client
tls-auth ta.key 1
auth MD5
cipher BF-CBC
ns-cert-type server
comp-lzo
persist-key
persist-tun
verb 3
вот и всё - конфиг взят с рабочего сервера + положен человеку у которого всё работет http://forum.lissyara.su/viewtopic.php? ... &sk=t&sd=a
НЬЮАНС!
В /usr/local/etc/openvpn/ccd при создании файла с настройками для клиента помните:
ifconfig-push 10.10.200.2 10.10.200.1
этой сторокой организовуем езернет-тун с сеткой 10.10.200.0, 2-мя тачками с айпишнегами 10.10.200.2 и 10.10.200.1 и бродкастом 10.10.200.3
соответственно при создании 2-го, 3-го и т.д. клиента - строка должна принимать вид
ifconfig-push 10.10.200.6 10.10.200.5
ifconfig-push 10.10.200.10 10.10.200.9
и т.д
Если допустил ошибки - просите Лиса подправлять
Чтож, об том как это реализовать и будет описано в этой статье. В частности будет так же расмотренна установка Опенвп-сервера и Виндовз-клиентов для доступа к локальной сети за опенвпн сервером
1.Устанавливаем и конфигурируем OpenVPN
как принято во ХОРОШЕЙ ОС - ставим всё из портов
#cd /usr/ports/security/openvpn
#make
#make install
Всё необходимое поставлено, переходим к конфигурированию
Необходимо создать сертефикаты и ключи
Заходим в папку с исходниками OpenVPN и в ней:
# cd /usr/local/share/doc/openvpn/easy-rsa/
#ee ./vars (в этом файлике внизу изменяете данные для подписи ключей под себя)
Лично я оставил все параметры дефолтовыми, кроме директории куда складывать сгенерированное "добро" - изменил в этом файле строку
export KEY_DIR=$D/keys
на
export KEY_DIR=$D/keys/server
соответственно создав такую же дирректорию
/usr/local/share/doc/openvpn/easy-rsa/keys/server
Собственно создаём "ДОБРО" - сертификаты и ключи
#cd /usr/local/share/doc/openvpn/easy-rsa/
/Внимание! Если у вас по умолчанию не баш , то перед следующими операциями нужно набрать в консоли "sh", для "100-%-ного" результата всё же наверняка сделайте это/
#sh
#. ./vars (загружаем переменные в оболочку)
#./clean-all (отчищаем от старых сертификатов и ключей папку keys/server и создаем серийный и индексные файлы для новых ключей)
#./build-ca (Создаем Certificate Authority для сервера)
При создании сертификата вводим необходимую инф-цию (настоятельно рекомендую делать как тут, а потом уже разбиратся что к чему - большинство проблемм связанно именно с именами при конфигурировании имено на первом этапе)
Привожу листинг с консоли
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) [UA]:UA - Страна
State or Province Name (full name) [Chernigov]:Kiev - Провинция
Locality Name (eg, city) [Chernigov]:Kiev - Город
Organization Name (eg, company) [40-setka]:server - Название компании(!)
Organizational Unit Name (eg, section) []:server - -Отделение компании
Common Name (eg, your name or your server's hostname) []:server - ВОТ ТУТ ВНИМАТЕЛЬНО - ЭТО ИМЯ МАЩИНЫ ДЛЯ КОТОРОЙ ГЕНЕРИРУЕМ СЕРТИФИКАТ (имя не в полном смысле -имя как идентификатор)
Email Address [root@localhost]: - Почт адрес
При попытке создать сертификат - была ругня на отсутствующие файлы index.txt и serial в /usr/local/share/doc/openvpn/easy-rsa/keys/server - создаём файлы (с содержимым)
#echo "00">/usr/local/share/doc/openvpn/easy-rsa/keys/server/serial
#echo "">/usr/local/share/doc/openvpn/easy-rsa/keys/server/index.txt
#./build-key-server server(Создаем сертификат X.509 для сервера)
Всё так-же заполняем(точно так же) + cтроки в котрых указываем пароль и имя организации (!)
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:123456789 - пароль
An optional company name []:server - название организации (как и в создании корневого сертификата)
./build-key client
Создаём ключ для клиента
Generating a 1024 bit RSA private key
.........++++++
.......++++++
writing new private key to 'client.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) [UA]:UA
State or Province Name (full name) [Chernigov]:Kiev
Locality Name (eg, city) [Chernigov]:Kiev
Organization Name (eg, company) [40-setka]:server
Organizational Unit Name (eg, section) []:server
Common Name (eg, your name or your server's hostname) []:client
Email Address [root@localhost]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:123456789
An optional company name []:client
Будьте внимательны при заполнени данных сертификатов, поле 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Настраиваем сервер
создаём директорию /usr/local/etc/openvpn и /usr/local/etc/openvpn/keys
rак же для удобства скопируем туда все ключи(ca.crt, dh1024.pem, server.crt, server.key, ta.key).
Создаем конфигурационный файл openvpn.conf следующего содержимого:
port 2000 #порт на котором работает сервер
proto udp # протокол - советую udp
dev tun0 # - используемый тип устройства и номер
ca /usr/local/etc/openvpn/keys/ca.crt #указываем файл CA
cert /usr/local/etc/openvpn/keys/server.crt #указываем файл с сертификатом сервера
key /usr/local/etc/openvpn/keys/server.key #указываем файл с ключем сервера
dh /usr/local/etc/openvpn/keys/dh1024.pem #указываем файл Диффи Хельман
server 10.10.200.0 255.255.255.0 #задаем IP-адрес сервера и маску подсети виртуальной сети
push "route 192.168.1.0 255.255.255.0" #задаем МАРШРУТ который передаём клиентту и маску подсети для того чтобы он "видел" сеть за опенвпн сервером (сеть 192.168.1.0/24)
client-config-dir ccd #указываем где хранятся файлы с настройками IPадресов клиентов
route 10.10.200.0 255.255.255.252 #добавляем маршрут сервер-клиент
tls-server #включаем TLS аутификацию
tls-auth keys/ta.key 0 #указываем tls-ключ, и указываем 0 для сервера, а 1 для клиента
tls-timeout 120 #таймаут до реконекта
auth MD5 #
cipher BF-CBC #включаем шифрацию пакетов
keepalive 10 120
comp-lzo #сжатие трафика
max-clients 100 #максимум клиентов
user nobody
group nobody
persist-key #Не перечитывать ключи после получения SIGUSR1 или ping-restart
persist-tun #Не закрывать и переоткрывать TUN\TAP устройство, после получения SIGUSR1 или ping-restart
status /var/log/openvpn/openvpn-status.log #логгирование (не забудьте создать эту дирректорию /var/log/openvpn/)
log /var/log/openvpn/openvpn.log
verb 3 #Уровень информации для отладки
В дирректории /usr/local/etc/openvpn/ccd создаем файл следующего содержания
#echo "ifconfig-push 10.10.200.2 10.10.200.1">/usr/local/etc/openvpn/ccd/client.conf
сервер готов
для автостарта при загрузке -внесём в /etc/rc.conf
openvpn_enable="YES" # YES or NO
openvpn_if="tun" # driver(s) to load, set to "tun", "tap" or "tun tap"
openvpn_configfile="/usr/local/etc/openvpn/server.conf" # --config file
openvpn_dir="/usr/local/etc/openvpn" # --cd directory
3 Настраиваем клиент под Windows
качаем клиента для виндозы отсюда http://openvpn.se/files/install_packages/ или из другого места
Создадим конфигурационный файл openvpn.ovpn в папке config (Например C:\Program Files\OpenVPN\config). И скопируем туда же все необходимые ключи для работы (ca.crt, dh1024.pem, client.crt, client.key, ta.key).
Содержимое файла openvpn.ovpn
dev tun
proto udp
remote #(реальный айпи вашего сервера)
port 2000 #(порт к которому устанавливать соединение
client
resolv-retry infinite
ca ca.crt
cert client.crt
key client.key
tls-client
tls-auth ta.key 1
auth MD5
cipher BF-CBC
ns-cert-type server
comp-lzo
persist-key
persist-tun
verb 3
вот и всё - конфиг взят с рабочего сервера + положен человеку у которого всё работет http://forum.lissyara.su/viewtopic.php? ... &sk=t&sd=a
НЬЮАНС!
В /usr/local/etc/openvpn/ccd при создании файла с настройками для клиента помните:
ifconfig-push 10.10.200.2 10.10.200.1
этой сторокой организовуем езернет-тун с сеткой 10.10.200.0, 2-мя тачками с айпишнегами 10.10.200.2 и 10.10.200.1 и бродкастом 10.10.200.3
соответственно при создании 2-го, 3-го и т.д. клиента - строка должна принимать вид
ifconfig-push 10.10.200.6 10.10.200.5
ifconfig-push 10.10.200.10 10.10.200.9
и т.д
Если допустил ошибки - просите Лиса подправлять