Если мне не изменяет память, начиная с 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
Как видим, сервер запустился, значит мы все сделали правильно.