Буквально на днях обратились мне с просьбой объединить 2 филиала одной общественной организации с головным офисом. Филиалы находились на порядочном удалении от головного офиса и варианты с радиомостами, протяжкой собственных линий или аренды были отклонены сразу. Все 3 сети имели свой выход в интернет по выделенной линии от одного и того же провайдера, дающего скорость в 2 Mbit/sec, бесплатный внутрисетевой трафик и статический "белый" IP.
По адресации
MAIN OFFICE - LAN 192.168.0.0/24, WAN 213.230.x.x
FILIAL1 - 192.168.1.0/24, WAN 213.230.x.x
FILIAL2 - 192.168.2.0/24, WAN 213.230.x.x
Было решено объединить сети используя OpenVPN. Почему OpenVPN?
1. OpenVPN - кроссплатформенное программное обеспечение, а для меня это очень важно, так как на гейтах филиалах находятся разные операционные системы.
OpenVPN используется на Solaris, OpenBSD, FreeBSD, NetBSD, GNU/Linux, Apple Mac OS X, QNX и Microsoft Windows.
2. Нужно видеть всю сеть за гейтом филиала и обратно, а именно объединить все подсети.
3. Компрессия с помощью библиотеки компрессии LZO, для сжатия потока данных.
4. Шифрование канала, для обеспечения безопасности управляющего канала и потока данных, OpenVPN использует библиотеку OpenSSL.
В офисе в качестве шлюза работала FreeBSD, она же и будет выступать сервером OpenVPN. В филиалах одна сеть имела гейт на FreeBSD, вторая на Win. Также решено было предусмотреть подключение администратора для контроля.
Начнем установку:#cd /usr/ports/security/openvpn
#make install clean
При установке выведется окошко конфигурирования, там ничего отмечать не надо. При этом выкачается портов примерно на 2-3 мегабайта.
Далее:
#cd /usr/local/share/doc/openvpn/easy-rsa/2.0/
#ee vars
И в нем редактируем одну строчку
# Меняем export KEY_DIR="$EASY_RSA/keys" на
export KEY_DIR="$EASY_RSA/keys/server"
Даем на скрипты права на исполняемость r-xr--r--
#chmod 544 *
Создаем директорию куда у нас будут создаваться/храниться ключи и сертификаты.
#mkdir -p keys/server
Далее запускаем shell
#sh
#. ./vars
NOTE: when you run ./clean-all, I will be doing a rm -rf on
/usr/local/share/doc/openvpn/easy-rsa/2.0/keys/server
#./clean-all
На этом предварительную настройку и установку можно считать законченной.
Генерация ключей.Создаем 2 ключа (ca.key и dh1024.pem) и 1 сертификат (server.key) только для сервера OpenVPN и дополнительный ключ (ta.key) для сервера и клиента.
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) [US]:UZ
State or Province Name (full name) [CA]:Navoi
Locality Name (eg, city) [SanFrancisco]:Navoi
Organization Name (eg, company) [Fort-Funston]:server
Organizational Unit Name (eg, section) []:server
Common Name (eg, your name or your server's hostname) [Fort-Funston CA]:server
Name []:server
Email Address [me@myhost.mydomain]:synergix@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) [US]:UZ
State or Province Name (full name) [CA]:Navoi
Locality Name (eg, city) [SanFrancisco]:Navoi
Organization Name (eg, company) [Fort-Funston]:server
Organizational Unit Name (eg, section) []:server
Common Name (eg, your name or your server's hostname) [server]:server
Name []:server
Email Address [me@myhost.mydomain]:synergix@localhost
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:server
Using configuration from /usr/local/share/doc/openvpn/easy-rsa/2.0/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'UZ'
stateOrProvinceName :PRINTABLE:'Navoi'
localityName :PRINTABLE:'Navoi'
organizationName :PRINTABLE:'server'
organizationalUnitName:PRINTABLE:'server'
commonName :PRINTABLE:'server'
name :PRINTABLE:'server'
emailAddress :IA5STRING:'synergix@localhost'
Certificate is to be certified until Sep 6 19:11:59 2020 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
4. Создаем TLS-ключ (который нужен как и серверу, так и клиенту)
#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/2.0/keys/server/
Копируем ключи из /usr/local/etc/openvpn/keys
#cp ca.crt /usr/local/etc/openvpn/keys/
#cp server.crt /usr/local/etc/openvpn/keys/
#cp server.key /usr/local/etc/openvpn/keys/
#cp dh1024.pem /usr/local/etc/openvpn/keys/
#cp ta.key /usr/local/etc/openvpn/keys/