Фев 102018
 

Если мне не изменяет память, начиная с 10-й ветки FreeBSD немного изменилась логика в настройке OpenVpn.

На старой работе был сервер под FreeBSD 8.1 вроде, для этих целей, сейчас же понадобилось поднять на FreeBSD 11.1.

И так, имеем FreeBSD 11.1

FreeBSD ***.kiev.ua 11.1-STABLE FreeBSD 11.1-STABLE #0 r328830: Sat Feb  3 19:26:16 EET 2018     root@***.kiev.ua:/usr/obj/usr/src/sys/AMG  amd64

OpenVpn собираю с такими опциями

 make showconfig
===> The following configuration options are available for openvpn-2.4.4:
     DOCS=on: Build and/or install documentation
     EASYRSA=on: Install security/easy-rsa RSA helper package
     EXAMPLES=on: Build and/or install examples
     LZ4=on: LZ4 compression support
     PKCS11=on: Use security/pkcs11-helper
     SMALL=off: Build a smaller executable with fewer features
     TEST=on: Build and/or run tests
     TUNNELBLICK=off: Tunnelblick XOR scramble patch (READ HELP!)
     X509ALTUSERNAME=on: Enable --x509-username-field (OpenSSL only)
====> SSL protocol support: you have to select exactly one of them
     OPENSSL=on: SSL/TLS support via OpenSSL
     MBEDTLS=off: SSL/TLS via mbedTLS
===> Use 'make config' to modify these settings

После сборки OpenVpn переходим к настройкам.

mkdir /usr/local/etc/openvpn

Далее копируем дефолтный конфиг сервера.

cp /usr/local/share/examples/openvpn/sample-config-files/server.conf  /usr/local/etc/openvpn/server.conf

И каталог с Easy-RSA

cp -r /usr/local/share/easy-rsa /usr/local/etc/openvpn/easy-rsa

Переходим в каталог

/usr/local/etc/openvpn/easy-rsa

и смотрим что у нас там есть.

ls -ll
total 72
-r-xr-xr-x  1 root  wheel  34910 Feb 10 16:30 easyrsa.real
-rw-r--r--  1 root  wheel   4560 Feb 10 16:30 openssl-1.0.cnf
-rw-r--r--  1 root  wheel   4560 Feb 10 16:30 openssl-1.0.cnf.example
-rw-r--r--  1 root  wheel   8126 Feb 10 16:30 vars
-rw-r--r--  1 root  wheel   8126 Feb 10 16:30 vars.example
drwxr-xr-x  2 root  wheel    512 Feb 10 16:30 x509-types

Правим файл Easy-RSA под себя, и приступаем с самому процессу генерации ключей.

set_var EASYRSA_REQ_COUNTRY     "<COUNTRY>"
set_var EASYRSA_REQ_PROVINCE    "<PROVINCE>"
set_var EASYRSA_REQ_CITY        "<CITY>"
set_var EASYRSA_REQ_ORG         "<ORGANIZATION>"
set_var EASYRSA_REQ_EMAIL       "<EMAIL>"
set_var EASYRSA_REQ_OU          "<ORGANIZATIONAL UNIT>"

Теперь генерация ключей проходит только при помощи файла easyrsa.real, ознакомиться с его опциями можно при помощи команды ./easyrsa.real help

./easyrsa.real help

Note: using Easy-RSA configuration from: ./vars

Easy-RSA 3 usage and overview

USAGE: easyrsa [options] COMMAND [command-options]

A list of commands is shown below. To get detailed usage and help for a
command, run:
  ./easyrsa help COMMAND

For a listing of options that can be supplied before the command, use:
  ./easyrsa help options

Here is the list of commands available with a short syntax reminder. Use the
'help' command above to get full usage details.

  init-pki
  build-ca [ cmd-opts ]
  gen-dh
  gen-req <filename_base> [ cmd-opts ]
  sign-req <type> <filename_base>
  build-client-full <filename_base> [ cmd-opts ]
  build-server-full <filename_base> [ cmd-opts ]
  revoke <filename_base>
  gen-crl
  update-db
  show-req <filename_base> [ cmd-opts ]
  show-cert <filename_base> [ cmd-opts ]
  import-req <request_file_path> <short_basename>
  export-p7 <filename_base> [ cmd-opts ]
  export-p12 <filename_base> [ cmd-opts ]
  set-rsa-pass <filename_base> [ cmd-opts ]
  set-ec-pass <filename_base> [ cmd-opts ]

DIRECTORY STATUS (commands would take effect on these locations)
  EASYRSA: /usr/local/etc/openvpn/easy-rsa
      PKI:  /usr/local/etc/openvpn/easy-rsa/pki

Создаем инфраструктуру публичного ключа (Public Key Infrastructure), это команда делается один раз!

./easyrsa.real init-pki

Смотрим что у нас получилось

 ./easyrsa.real init-pki

Note: using Easy-RSA configuration from: ./vars

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /usr/local/etc/openvpn/easy-rsa/pki

Далее создаем сертификаты.

./easyrsa.real build-ca nopass

Обращаю внимание на то, что сертификат создается без пароля (nopass), можно создать и с паролем, для более надежной защиты, но иногда требуется чтобы OpenVpn стартовал автоматом с системой, поэтому мне необходимо без пароля.

Создаем сертификат для сервера

./easyrsa.real build-server-full openvpn-server nopass

После генерируем сертификаты для клиентов.

./easyrsa.real build-client-full client_name nopass

После клиентов генерируем ключ Diffie Hellman

./easyrsa.real gen-dh

Далее копируем ключи и настраиваем сам конфиг OpenVpn сервера.

mkdir /usr/local/etc/openvpn/keys

Приводим конфиг сервера к такому виду.

#порт на котором работает сервер
port 9595
# протокол - советую udp
proto udp
# - используемый тип устройства и номер
dev tun0

#указываем файл CA
ca /usr/local/etc/openvpn/keys/ca.crt

#указываем файл с сертификатом сервера
cert /usr/local/etc/openvpn/keys/openvpn-server.crt

#указываем файл с ключем сервера
key /usr/local/etc/openvpn/keys/openvpn-server.key

#указываем файл Диффи Хельман
dh /usr/local/etc/openvpn/keys/dh.pem

#задаем IP-адрес сервера и маску подсети
# (виртуальной сети) - можно произвольную, (я выбрал такую)
server 172.16.0.0 255.255.255.0

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

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

# добавляем маршрут сервер-клиент
route 172.16.0.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

# логирование (не забудьте создать эту дирректорию /var/log/openvpn/)
status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log
# Уровень информации для отладки
verb 4

Создаем папку для логов

 mkdir /var/log/openvpn

Добавляем в rc.conf

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

Взлетаем.

 /usr/local/etc/rc.d/openvpn start
Starting openvpn.

Проверяем.

 ps fax|grep open
86829  -  S<s      0:00.01 /usr/local/sbin/openvpn --cd /usr/local/etc/openvpn --daemon openvpn --config /usr/local/etc/openvpn/server.conf --writepid /var/
86835  9  S+       0:00.00 grep open

Как видим, сервер запустился, значит мы все сделали правильно.