Документация по ОС FreeBSD Суббота, 20.04.2024, 07:27
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Apache [58]
DNS [25]
FTP [27]
Mail [74]
Samba [24]
Squid [46]
SSH [23]
VPN [35]
РРР [20]
Net [173]

Главная » Статьи » Сеть » VPN

Установка OpenVPN [2009]
На днях появилась задача объединить 3 офиса через интернет по средствам OpenVPN в одну сеть. Что бы люди могли ходить по сети друг к другу, так же была одна база 1С для всех пользователей, подключаться через подключение к удаленному рабочему столу к удаленным компам филиалов. В общем много чего можно из этого выжать. Да и естественно должно быть шифрование и сжатие трафика стандартными средствами OpenVPN.

Устанавливаем OpenVPN

//> cd /usr/ports/security/openvpn
/usr/ports/security/openvpn/> make config

+--------------------------------------------------------------------+
| Options for openvpn 2.0.6_9 |
| +----------------------------------------------------------------+ |
| | [ ] PW_SAVE Interactive passwords may be read from a file | |
| | | |
| | | |
| | | |
| | | |
+-+------v(+)------------------------------------------------------+-+
| [ OK ] Cancel |
+--------------------------------------------------------------------+

/usr/ports/security/openvpn/> make install clean

Далее переходим в каталог easy-rsa
//> cd /usr/local/share/doc/openvpn/easy-rsa/

/usr/local/share/doc/openvpn/easy-rsa/> ee vars

В нем меняем 1 строку
# Меняем export KEY_DIR=$D/keys/ на
export KEY_DIR=$D/keys/server

/usr/local/share/doc/openvpn/easy-rsa/> chmod +x *
/usr/local/share/doc/openvpn/easy-rsa/> mkdir keys

Далее запускаем shell
/usr/local/share/doc/openvpn/easy-rsa/> sh

#. ./vars
NOTE: when you run ./clean-all, I will be doing a rm -rf on 
/usr/local/share/doc/openvpn/easy-rsa/keys/server
#./clean-all


Создаем ключи для нашего сервера OpenVPN

В моем случае создаем 2 ключа и 1 сертификат для самого сервера OpenVPN, (создаем их один раз и навсегда)

1.Создаем 1-ый ключ Certificate Authority
# ./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) [KG]:RU
State or Province Name (full name) [NA]:Rostov-on-Don
Locality Name (eg, city) [BISHKEK]:Zernograd
Organization Name (eg, company) [OpenVPN-TEST]:server
Organizational Unit Name (eg, section) []:server
Common Name (eg, your name or your server's hostname) []:server
Email Address [me@myhost.mydomain]:root@localhost

2.Создаем сертификат X.509
# ./build-key-server server
Generating a 1024 bit RSA private key
........++++++
.......................++++++
writing new private key to 'server.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) [KG]:RU
State or Province Name (full name) [NA]:Rostov-on-Don
Locality Name (eg, city) [BISHKEK]:Zernograd
Organization Name (eg, company) [OpenVPN-TEST]:server
Organizational Unit Name (eg, section) []:server
Common Name (eg, your name or your server's hostname) []:server
Email Address [me@myhost.mydomain]:root@localhost

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:Password
An optional company name []:server
Using configuration from /usr/local/share/doc/openvpn/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'RU'
stateOrProvinceName :PRINTABLE:'Rostov-on-Don'
localityName :PRINTABLE:'Zernograd'
organizationName :PRINTABLE:'server'
organizationalUnitName:PRINTABLE:'server'
commonName :PRINTABLE:'server'
emailAddress :IA5STRING:'root@localhost'
Certificate is to be certified until Jan 17 18:06:10 2019 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

3.Генерируем 1024 битный ключ Диффи Хельмана
# ./build-dh
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
.............................+.+.................+.........................
.......+...................................................................
..+.......+...................................+............................
................................................+.....+....................
............+..........+...................................................
...........................................................................
.......................+...........+........+.....................++*++*++*

Выходим из shell
# exit

Создаем ключ для tls-аутентификации (который нужен как и серверу, так и клиенту)
/usr/local/share/doc/openvpn/easy-rsa/> openvpn --genkey 
 --secret keys/server/ta.key

Создаем директории для нашего OpenVPN сервера где будут храниться конфиг, ключи, сертификаты и настройки клиентов
//> mkdir /usr/local/etc/openvpn
//> mkdir /usr/local/etc/openvpn/keys
//> mkdir /usr/local/etc/openvpn/ccd

Копируем ключи и сертификаты для сервера OpenVPN
Переходим в директорию
//> cd /usr/local/share/doc/openvpn/easy-rsa/keys/server/

и копируем оттуда ключи
/../../easy-rsa/keys/server/> cp ca.crt /usr/local/etc/openvpn/keys/
/../../easy-rsa/keys/server/> cp server.crt /usr/local/etc/openvpn/keys/
/../../easy-rsa/keys/server/> cp server.key /usr/local/etc/openvpn/keys/
/../../easy-rsa/keys/server/> cp dh1024.pem /usr/local/etc/openvpn/keys/
/../../easy-rsa/keys/server/> cp ta.key /usr/local/etc/openvpn/keys/

Создаем конфиг нашего OpenVPN сервера с таким примерно содержанием
//> ee /usr/local/etc/openvpn/server.conf

# порт на котором работает сервер
port 2000

# протокол - советую udp
proto udp

# используемый тип устройства и номер
dev tun0

# указываем файл CA
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

# задаем IP-адрес сервера и маску подсети (виртуальной сети)
server 10.10.100.0 255.255.255.0

# задаем МАРШРУТ который передаём клиенту
# и маску подсети для того чтобы он "видел"
# сеть за OpenVPN сервером (сеть 192.168.55.0/24)
push "route 192.168.0.0 255.255.255.0"
# Указываем ваш внутренний DNS и WINS сервер
push "dhcp-option DNS 192.168.0.1"
push "dhcp-option WINS 192.168.0.1"

# Делает сервер основным шлюзом
#push "redirect-gateway def1"

# указываем где хранятся файлы с
# настройками IP-адресов клиентов
client-config-dir ccd

# добавляем маршрут сервер-клиент
route 10.10.100.0 255.255.255.252
route 192.168.1.0 255.255.255.0

# включаем TLS аутификацию
tls-server

# указываем tls-ключ, и указываем 0 для сервера, а 1 для клиента
tls-auth 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 /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log

# Уровень информации для отладки
verb 3

Создаем директорию /var/log/openvpn/ и 2 файла где будут храниться логи
//> mkdir /var/log/openvpn/
//> touch /var/log/openvpn/openvpn-status.log
//> touch /var/log/openvpn/openvpn.log

Добавляем OpenVPN в автозагрузку системы
//> ee /etc/rc.conf

openvpn_enable="YES"
openvpn_if="tun"
openvpn_configfile="/usr/local/etc/openvpn/server.conf"
openvpn_dir="/usr/local/etc/openvpn"

И запускаем OpenVPN сервер
//> /usr/local/etc/rc.d/openvpn start
Starting openvpn.
//>

Проверим в процесcах
//> ps axw | grep openvpn

2983 ?? Ss 0:00.00 /usr/local/sbin/openvpn --cd /usr/local/etc/openvpn --daemon openvpn --config /usr/local/etc/openvpn/server.conf


Создаем PKCS12 для клиента

Переходим в директорию и создаем файл для 1 пользователя filial.p12
pkcs12 имя файла в формате PKCS #12, содержащего сертификат CA, ключ и сертификат клиента. Такой файл и команда заменяют сразу 3 соответствующих файла и команды - .ca, .cert, .key
//> cd /usr/local/share/doc/openvpn/easy-rsa/
/usr/local/share/doc/openvpn/easy-rsa/> sh

#. ./vars
NOTE: when you run ./clean-all, I will be doing a rm -rf on 
/usr/local/share/doc/openvpn/easy-rsa/keys/server
#

# ./build-key-pkcs12 filial
Generating a 1024 bit RSA private key
..................................++++++
.....++++++
writing new private key to 'filial.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) [KG]:RU
State or Province Name (full name) [NA]:Rostov-on-Don
Locality Name (eg, city) [BISHKEK]:Zernograd
Organization Name (eg, company) [OpenVPN-TEST]:server
Organizational Unit Name (eg, section) []:server
Common Name (eg, your name or your server's hostname) []:filial
Email Address [me@myhost.mydomain]:filial@localhost

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:filial
Using configuration from /usr/local/share/doc/openvpn/easy-rsa/openssl.cnf
DEBUG[load_index]: unique_subject = "yes"
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'RU'
stateOrProvinceName :PRINTABLE:'Rostov-on-Don'
localityName :PRINTABLE:'Zernograd'
organizationName :PRINTABLE:'server'
organizationalUnitName:PRINTABLE:'server'
commonName :PRINTABLE:'filial'
emailAddress :IA5STRING:'filial@localhost'
Certificate is to be certified until Jan 17 19:46:38 2019 GMT (3650 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Enter Export Password:
Verifying - Enter Export Password:

# exit

Вот мы и создали 3 в 1-ом =) /usr/local/share/doc/openvpn/easy-rsa/keys/server/filial.p12

В директории /usr/local/etc/openvpn/ccd создаем файла с настройками для filial
//> ee /usr/local/etc/openvpn/ccd/filial

ifconfig-push 10.10.100.2 10.10.100.1
iroute 192.168.1.0 255.255.255.0

Перезапустим OpenVPN Сервер
//> /usr/local/etc/rc.d/openvpn restart
Stopping openvpn.
Starting openvpn.
//>


Установка и настройка клиента

//> cd /usr/ports/security/openvpn
/usr/ports/security/openvpn/> make config

+--------------------------------------------------------------------+
| Options for openvpn 2.0.6_9 |
| +----------------------------------------------------------------+ |
| | [ ] PW_SAVE Interactive passwords may be read from a file | |
| | | |
| | | |
| | | |
| | | |
+-+------v(+)------------------------------------------------------+-+
| [ OK ] Cancel |
+--------------------------------------------------------------------+

/usr/ports/security/openvpn/> make install clean

//> mkdir /usr/local/etc/openvpn
//> mkdir /usr/local/etc/openvpn/keys

Создаем конфиг клиента
//> ee /usr/local/etc/openvpn/filial.conf

# используемый тип устройстойства
dev tun

# Протокол
proto udp

# Удаленный IP адрес сервера OpenVPN
remote 86.ххx.ххx.xхх

# порт сервера, к которому мы будет подключаться
port 2000

# IP адрес прокси сервера и порт
#http-proxy 77.хх.хх.хх 3128
# Повтор подключение при обрыве связи
#http-proxy-retry

client
resolv-retry infinite

# Указываем путь у файлу PKCS12
pkcs12 keys/filial.p12

tls-client

# Указываем путь tls-ключу
tls-auth keys/ta.key 1
auth MD5

# включаем шифрацию пакетов
cipher BF-CBC

ns-cert-type server

# Сжатие трафика
comp-lzo

# Не перечитывать ключи после получения
persist-key

# Не закрывать и переоткрывать TUN\TAP устройства
persist-tun

# Указываем путь к логам OpenVPN
status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log

# Уровень информации для отладки
verb 3

Создаем директорию /var/log/openvpn/ и 2 файла где будут храниться логи
//> mkdir /var/log/openvpn/
//> touch /var/log/openvpn/openvpn-status.log
//> touch /var/log/openvpn/openvpn.log

Теперь нам нужны ключи с самого сервера
/usr/local/share/doc/openvpn/easy-rsa/keys/server/filial.p12
/usr/local/share/doc/openvpn/easy-rsa/keys/server/ta.key

копируем их на компьютер клиента в директорию /usr/local/etc/openvpn/keys

Добавляем OpenVPN в автозагрузку системы
//> ee /etc/rc.conf

openvpn_enable="YES"
openvpn_if="tun"
openvpn_configfile="/usr/local/etc/openvpn/filial.conf"
openvpn_dir="/usr/local/etc/openvpn"

И запускаем OpenVPN на филиале
//> /usr/local/etc/rc.d/openvpn start
Starting openvpn.
//>

Проверим в процессах
//> ps axw | grep openvpn

2983 ?? Ss 0:00.00 /usr/local/sbin/openvpn --cd /usr/local/etc/openvpn --daemon openvpn --config /usr/local/etc/openvpn/filial.conf

То же самое делаем для третей нашей сетки, только filial меняем на filial2.
Обратите внимание, что все соединение будут идти через один интерфейс tun0 на сервере.


Список интерфейсных пар:
[ 1, 2] [ 5, 6] [ 9, 10] [ 13, 14] [ 17, 18]
[ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38]
[ 41, 42] [ 45, 46] [ 49, 50] [ 53, 54] [ 57, 58]
[ 61, 62] [ 65, 66] [ 69, 70] [ 73, 74] [ 77, 78]
[ 81, 82] [ 85, 86] [ 89, 90] [ 93, 94] [ 97, 98]
[101,102] [105,106] [109,110] [113,114] [117,118]
[121,122] [125,126] [129,130] [133,134] [137,138]
[141,142] [145,146] [149,150] [153,154] [157,158]
[161,162] [165,166] [169,170] [173,174] [177,178]
[181,182] [185,186] [189,190] [193,194] [197,198]
[201,202] [205,206] [209,210] [213,214] [217,218]
[221,222] [225,226] [229,230] [233,234] [237,238]
[241,242] [245,246] [249,250] [253,254]

Документация:
http://forum.ixbt.com/topic.cgi?id=14:40906
http://www.lissyara.su/?id=1549
http://www.lissyara.su/?id=1685

P.S. Выражаю огромное спасибо Cancer за помощь при написании статьи.



Источник: http://www.lissyara.su/?id=1826
Категория: VPN | Добавил: oleg (23.03.2009) | Автор: VGZ
Просмотров: 1566 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024