+---------------+----------------+------------+ |Подразделение | Подсеть | ОС гейта | +---------------+----------------+------------+ |Офис | 192.168.0.0/24 | FreeBSD | |Филиал №1 | 192.168.1.0/24 | FreeBSD | |Филиал №2 | 192.168.2.0/24 | Windows XP | |Филиал №3 | 192.168.3.0/24 | CentOS | +---------------+----------------+------------+
//> 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 /usr/local/share/doc/openvpn/easy-rsa/> mkdir keys/server
Далее запускаем 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
В моем случае создаем 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/
Копируем ключи их /usr/local/etc/openvpn/keys
/../../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 1194 # протокол - TCP или 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 # указываем внутренний DNS и WINS сервер push "dhcp-option DNS 192.168.0.1" push "dhcp-option WINS 192.168.0.1" # задаем МАРШРУТ который передаём клиенту # и маску подсети для того чтобы он "видел" # сеть за OpenVPN сервером # Офис push "route 192.168.0.0 255.255.255.0" # Филиал №1 push "route 192.168.1.0 255.255.255.0" # Филиал №2 push "route 192.168.2.0 255.255.255.0" # Филиал №3 push "route 192.168.3.0 255.255.255.0" # указываем где хранятся файлы с # настройками IP-адресов клиентов client-config-dir ccd # добавляем маршрут сервер-клиент route 10.10.100.0 255.255.255.252 # Филиал №1 route 192.168.1.0 255.255.255.0 # Филиал №2 route 192.168.2.0 255.255.255.0 # Филиал №3 route 192.168.3.0 255.255.255.0 # делает сервер OpenVPN основным шлюзом #push "redirect-gateway def1" # разрешает видеть клиентам друг друга (по виртуальным IP) #client-to-client # разрешать подключаться с одинаковым сертификатом/ключом #duplicate-cn # включаем TLS аутификацию tls-server # указываем tls-ключ, и указываем 0 для сервера, а 1 для клиента tls-auth keys/ta.key 0 # таймаут до реконнекта tls-timeout 120 auth MD5 # включаем шифрацию пакетов cipher BF-CBC # проверяет активность подключения каждые 10 секунд, # если в течении 120 сек. нет ответа, подключение закрывается 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 # уровень информации для отладки # 0 -- quiet except for fatal errors. # 1 -- mostly quiet, but display non-fatal network errors. # 3 -- medium output, good for normal operation. # 9 -- verbose, good for troubleshooting verb 3 # макс кол-во однотипных записей в лог #mute 20
Создаем директорию /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
Часть 2